26
26
LLVM_VERSION =3.2
27
27
LLVM_SRC =llvm-$(LLVM_VERSION ) .src.tar.gz
28
28
LLVM_SRC_DIR =llvm-$(LLVM_VERSION ) .src
29
+ LLVM_NATIVE_SRC_DIR =llvm-$(LLVM_VERSION ) .src.native
29
30
CLANG_SRC =clang-$(LLVM_VERSION ) .src.tar.gz
30
31
CLANG_SRC_DIR =clang-$(LLVM_VERSION ) .src
32
+ COMPILER_RT_SRC =compiler-rt-$(LLVM_VERSION ) .src.tar.gz
33
+ COMPILER_RT_SRC_DIR =compiler-rt-$(LLVM_VERSION ) .src
31
34
32
35
clean :
33
36
rm -Rf tools qemu-release qemu-debug klee stp llvm
@@ -49,83 +52,57 @@ $(CLANG_SRC):
49
52
$(LLVM_SRC ) :
50
53
wget http://llvm.org/releases/$(LLVM_VERSION ) /$(LLVM_SRC )
51
54
55
+ $(COMPILER_RT_SRC ) :
56
+ wget http://llvm.org/releases/$(LLVM_VERSION ) /$(COMPILER_RT_SRC )
57
+
52
58
stamps/llvm-unpack : $(LLVM_SRC )
53
59
tar -zxf $(LLVM_SRC )
60
+ cp -r $(LLVM_SRC_DIR ) $(LLVM_NATIVE_SRC_DIR )
54
61
mkdir -p stamps && touch $@
55
62
56
63
stamps/clang-unpack : $(CLANG_SRC ) stamps/llvm-unpack
57
- tar -zxf $(CLANG_SRC ) ; \
58
- mv $(CLANG_SRC_DIR ) $(LLVM_SRC_DIR ) /tools/clang; \
59
- mkdir -p stamps && touch $@
60
-
61
-
62
- # The following fetches and builds Address Sanitizer
63
- stamps/llvm-trunk-download :
64
- svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm-asan
65
- mkdir -p stamps && touch $@
66
-
67
- stamps/llvm-trunk-revision : stamps/llvm-trunk-download
68
- cd llvm-asan && svn info | grep Revision: | awk ' {print $$2}' > ../$@
69
-
70
-
71
- stamps/clang-trunk : stamps/llvm-trunk-revision
72
- (cd llvm-asan/tools && svn co -r ` cat ../../stamps/llvm-trunk-revision` http://llvm.org/svn/llvm-project/cfe/trunk clang)
73
- mkdir -p stamps && touch $@
74
-
75
- stamps/compilerrt-trunk : stamps/clang-trunk
76
- (cd llvm-asan/projects && svn co -r ` cat ../../stamps/llvm-trunk-revision` http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt)
64
+ tar -zxf $(CLANG_SRC )
65
+ mv $(CLANG_SRC_DIR ) $(LLVM_NATIVE_SRC_DIR ) /tools/clang
77
66
mkdir -p stamps && touch $@
78
67
79
- stamps/llvm-trunk-build : stamps/compilerrt-trunk
80
- (mkdir -p llvm-asan/build && cd llvm-asan/build && ../configure --enable-targets=x86 --enable-optimized && make -j$( JOBS) )
68
+ stamps/compiler-rt-unpack : $(COMPILER_RT_SRC ) stamps/llvm-unpack
69
+ tar -zxf $(COMPILER_RT_SRC )
70
+ mv $(COMPILER_RT_SRC_DIR ) $(LLVM_NATIVE_SRC_DIR ) /projects/compiler-rt
81
71
mkdir -p stamps && touch $@
82
72
83
- stamps/asan-get-thirdparty : stamps/llvm-trunk-build
84
- cd llvm-asan/projects/compiler-rt/lib/asan && make -f Makefile.old get_third_party
85
- mkdir -p stamps && touch $@
86
-
87
- stamps/asan-makeinstall : stamps/asan-get-thirdparty
88
- cd llvm-asan/projects/compiler-rt/lib/asan && make -f Makefile.old -j$(JOBS )
89
- cd llvm-asan/projects/compiler-rt/lib/asan && make -f Makefile.old install -j$(JOBS )
90
- cp llvm-asan/projects/compiler-rt/lib/asan_clang_linux/lib/clang/linux/x86_64/libclang_rt.asan.a llvm-asan/projects/compiler-rt/lib/asan_clang_linux/lib/libasan64.a
91
- mkdir -p stamps && touch $@
92
-
93
- ASAN_DIR =$(S2EBUILD ) /llvm-asan/projects/compiler-rt/lib/asan_clang_linux
94
- ASAN_CC =$(ASAN_DIR ) /bin/clang
95
- ASAN_CXX =$(ASAN_DIR ) /bin/clang++
96
-
97
- CLANG_CC =$(S2EBUILD ) /llvm-native/Release+Asserts/bin/clang
98
- CLANG_CXX =$(S2EBUILD ) /llvm-native/Release+Asserts/bin/clang++
73
+ CLANG_CC =$(S2EBUILD ) /llvm-native/Release/bin/clang
74
+ CLANG_CXX =$(S2EBUILD ) /llvm-native/Release/bin/clang++
75
+ CLANG_LIB =$(S2EBUILD ) /llvm-native/Release/lib
99
76
100
77
# #######
101
78
# LLVM #
102
79
# #######
103
80
104
81
105
82
# First build it with the system's compiler
106
- stamps/llvm-configure-native : stamps/clang-unpack stamps/llvm-unpack
83
+ stamps/llvm-configure-native : stamps/clang-unpack stamps/llvm-unpack stamps/compiler-rt-unpack
107
84
mkdir -p llvm-native
108
85
echo $(S2EBUILD ) $(S2ESRC )
109
- cd llvm-native && $(S2EBUILD ) /$(LLVM_SRC_DIR ) /configure \
86
+ cd llvm-native && $(S2EBUILD ) /$(LLVM_NATIVE_SRC_DIR ) /configure \
110
87
--prefix=$(S2EBUILD ) /opt \
111
- --enable-targets=x86 --enable-jit \
112
- --enable-optimized
88
+ --enable-jit --enable-optimized --disable-assertions # compiler-rt won't build if we specify explicit targets...
113
89
mkdir -p stamps && touch $@
114
90
115
91
stamps/llvm-make-release-native : stamps/llvm-configure-native
116
- cd llvm-native && make ENABLE_OPTIMIZED=1 REQUIRES_RTTI=1 -j$(JOBS )
92
+ cd llvm-native && make ENABLE_OPTIMIZED=1 -j$(JOBS )
117
93
mkdir -p stamps && touch $@
118
94
119
95
120
- # Then, build it with the clang compiler.
96
+ # Then, build LLVM with the clang compiler.
97
+ # Note that we build LLVM without clang and compiler-rt, because S2E does not need them.
121
98
stamps/llvm-configure : stamps/llvm-make-release-native
122
99
mkdir -p llvm
123
100
cd llvm && $(S2EBUILD ) /$(LLVM_SRC_DIR ) /configure \
124
- --prefix=$(S2EBUILD ) /opt \
125
- --enable-targets=x86 --enable-jit \
126
- --enable-optimized --enable-assertions \
127
- CC=$(S2EBUILD ) /llvm-native/Release+Asserts/bin/clang \
128
- CXX=$(S2EBUILD ) /llvm-native/Release+Asserts/bin/clang++
101
+ --prefix=$(S2EBUILD ) /opt \
102
+ --target=x86_64 --enable-targets=x86 --enable-jit \
103
+ --enable-optimized \
104
+ CC=$(CLANG_CC ) \
105
+ CXX=$(CLANG_CXX )
129
106
mkdir -p stamps && touch $@
130
107
131
108
stamps/llvm-make-debug : stamps/llvm-configure
@@ -136,23 +113,6 @@ stamps/llvm-make-release: stamps/llvm-configure
136
113
cd llvm && make ENABLE_OPTIMIZED=1 REQUIRES_RTTI=1 -j$(JOBS )
137
114
mkdir -p stamps && touch $@
138
115
139
- # This is for building it with ASAN
140
- stamps/llvm-configure-asan : stamps/asan-makeinstall
141
- mkdir -p llvm-instr-asan
142
- cd llvm-instr-asan && $(S2EBUILD ) /$(LLVM_SRC_DIR ) /configure \
143
- --prefix=$(S2EBUILD ) /opt \
144
- --target=x86_64 --enable-targets=x86 --enable-jit \
145
- --enable-optimized --enable-assertions\
146
- CC=$(ASAN_CC ) \
147
- CXX=$(ASAN_CXX ) CXXFLAGS=" -O1 -faddress-sanitizer" LDFLAGS=" -faddress-sanitizer"
148
- mkdir -p stamps && touch $@
149
-
150
- stamps/llvm-make-release-asan : stamps/llvm-configure-asan
151
- -(cd llvm-instr-asan && make ENABLE_OPTIMIZED=1 REQUIRES_RTTI=1 CXXFLAGS=" -O1 -faddress-sanitizer" -j$( JOBS) )
152
- mkdir -p stamps && touch $@
153
-
154
-
155
-
156
116
157
117
# ######
158
118
# STP #
@@ -176,15 +136,16 @@ stp/include/stp/c_interface.h: stamps/stp-configure
176
136
177
137
stp/lib/libstp.a : stamps/stp-make
178
138
139
+
179
140
# ASAN-enabled STP
141
+ # XXX: need to fix the STP build to actually use ASAN...
180
142
181
143
stamps/stp-copy-asan :
182
144
cp -Rup $(S2ESRC ) /stp stp-asan
183
145
mkdir -p stamps && touch $@
184
146
185
147
stamps/stp-configure-asan : stamps/stp-copy-asan
186
- cd stp-asan && bash scripts/configure --with-prefix=$(S2EBUILD ) /stp-asan --with-g++=$(ASAN_CXX ) --with-gcc=$(ASAN_CC ) --with-address-sanitizer
187
- cd stp-asan && cp src/c_interface/c_interface.h include/stp
148
+ cd stp-asan && bash scripts/configure --with-prefix=$(S2EBUILD ) /stp-asan --with-fpic --with-g++=$(CLANG_CXX ) --with-gcc=$(CLANG_CC ) --with-address-sanitizer
188
149
mkdir -p stamps && touch $@
189
150
190
151
stamps/stp-make-asan : stamps/stp-configure-asan ALWAYS
@@ -199,17 +160,17 @@ stamps/stp-make-asan: stamps/stp-configure-asan ALWAYS
199
160
200
161
stamps/klee-configure : stamps/llvm-configure \
201
162
stp/include/stp/c_interface.h \
202
- stp/lib/libstp.a
163
+ stp/lib/libstp.a
203
164
mkdir -p klee
204
165
cd klee && $(S2ESRC)/klee/configure \
205
166
--prefix=$(S2EBUILD)/opt \
206
167
--with-llvmsrc=$(S2EBUILD)/$(LLVM_SRC_DIR) \
207
168
--with-llvmobj=$(S2EBUILD)/llvm \
208
169
--with-stp=$(S2EBUILD)/stp \
209
170
--target=x86_64 \
210
- --enable-exceptions --enable-assertions \
211
- CC =$(S2EBUILD ) /llvm-native/Release+Asserts/bin/clang \
212
- CXX=$(S2EBUILD ) /llvm-native/Release+Asserts/bin/clang++
171
+ --enable-exceptions \
172
+ CC=$(CLANG_CC) \
173
+ CXX=$(CLANG_CXX)
213
174
mkdir -p stamps && touch $@
214
175
215
176
stamps/klee-make-debug : stamps/klee-configure stamps/llvm-make-debug stamps/stp-make ALWAYS
@@ -220,26 +181,30 @@ stamps/klee-make-release: stamps/klee-configure stamps/llvm-make-release stamps/
220
181
cd klee && make ENABLE_OPTIMIZED=1 -j$(JOBS )
221
182
mkdir -p stamps && touch $@
222
183
184
+
223
185
# ASAN-enabled KLEE
224
- stamps/klee-configure-asan : stamps/llvm-make-release-asan stamps/stp-make-asan \
225
- stp/include/stp/c_interface.h \
226
- stp/lib/libstp.a
186
+ stamps/klee-configure-asan : stamps/llvm-make-release stamps/stp-make-asan
227
187
mkdir -p klee-asan
228
188
cd klee-asan && $(S2ESRC ) /klee/configure \
229
189
--prefix=$(S2EBUILD ) /opt \
230
190
--with-llvmsrc=$(S2EBUILD ) /$(LLVM_SRC_DIR ) \
231
- --with-llvmobj=$(S2EBUILD)/llvm-instr-asan \
191
+ --with-llvmobj=$(S2EBUILD ) /llvm \
232
192
--with-stp=$(S2EBUILD ) /stp-asan \
233
193
--target=x86_64 \
234
- --enable-exceptions --enable-assertions \
235
- CC =$(ASAN_CC ) \
236
- CXX=$(ASAN_CXX ) CXXFLAGS="-O1 -faddress-sanitizer" LDFLAGS="-faddress-sanitizer"
194
+ --enable-exceptions \
195
+ CC=$(CLANG_CC ) \
196
+ CXX=$(CLANG_CXX ) \
197
+ CXXFLAGS=" -O0 -g -fsanitize=address" \
198
+ LDFLAGS=" -g -fsanitize=address"
237
199
mkdir -p stamps && touch $@
238
200
239
- stamps/klee-make-release-asan : stamps/klee-configure-asan stamps/stp-make ALWAYS
240
- cd klee-asan && make ENABLE_OPTIMIZED=1 CXXFLAGS=" -O1 -faddress-sanitizer " LDFLAGS=" -faddress-sanitizer " -j$(JOBS )
201
+ stamps/klee-make-release-asan : stamps/klee-configure-asan stamps/stp-make-asan
202
+ cd klee-asan && make ENABLE_OPTIMIZED=1 CXXFLAGS=" -O0 -g -fsanitize=address " LDFLAGS=" -g -fsanitize=address " -j$(JOBS )
241
203
mkdir -p stamps && touch $@
242
204
205
+ stamps/klee-make-debug-asan : stamps/llvm-make-debug stamps/klee-configure-asan stamps/stp-make-asan
206
+ cd klee-asan && make ENABLE_OPTIMIZED=0 CXXFLAGS=" -g -fsanitize=address" LDFLAGS=" -g -fsanitize=address" -j$(JOBS )
207
+ mkdir -p stamps && touch $@
243
208
244
209
245
210
# #######
@@ -254,38 +219,40 @@ stamps/qemu-configure-debug: stamps/klee-configure klee/Debug/bin/klee-config
254
219
mkdir -p qemu-debug
255
220
cd qemu-debug && $(S2ESRC ) /qemu/configure \
256
221
--prefix=$(S2EBUILD ) /opt \
257
- --with-llvm=$(S2EBUILD ) /llvm/Debug+Asserts \
258
- --with-clang=$(S2EBUILD ) /llvm-native/Release+Asserts/bin/clang \
222
+ --with-llvm=$(S2EBUILD ) /llvm/Debug+Asserts \
223
+ --cc=$(CLANG_CC ) \
224
+ --cxx=$(CLANG_CXX ) \
259
225
--with-stp=$(S2EBUILD ) /stp \
260
226
--with-klee=$(S2EBUILD ) /klee/Debug+Asserts \
261
227
--target-list=i386-s2e-softmmu,i386-softmmu \
262
228
--enable-llvm \
263
229
--enable-s2e \
264
- --enable-debug --compile-all-with-clang \
265
- $(EXTRA_QEMU_FLAGS)
230
+ --enable-debug \
231
+ $(EXTRA_QEMU_FLAGS )
266
232
267
233
mkdir -p stamps && touch $@
268
234
269
235
stamps/qemu-configure-release : stamps/klee-configure klee/Release/bin/klee-config
270
236
mkdir -p qemu-release
271
237
cd qemu-release && $(S2ESRC ) /qemu/configure \
272
238
--prefix=$(S2EBUILD ) /opt \
273
- --with-llvm=$(S2EBUILD ) /llvm/Release+Asserts \
274
- --with-clang=$(S2EBUILD ) /llvm-native/Release+Asserts/bin/clang \
239
+ --with-llvm=$(S2EBUILD ) /llvm/Release+Asserts \
240
+ --cc=$(CLANG_CC ) \
241
+ --cxx=$(CLANG_CXX ) \
275
242
--with-stp=$(S2EBUILD ) /stp \
276
243
--with-klee=$(S2EBUILD ) /klee/Release+Asserts \
277
244
--target-list=i386-s2e-softmmu,i386-softmmu \
278
245
--enable-llvm \
279
- --enable-s2e --compile-all-with-clang \
280
- $(EXTRA_QEMU_FLAGS)
246
+ --enable-s2e\
247
+ $(EXTRA_QEMU_FLAGS )
281
248
282
249
mkdir -p stamps && touch $@
283
250
284
- stamps/qemu-make-debug : stamps/qemu-configure-debug stamps/klee-make-debug ALWAYS
251
+ stamps/qemu-make-debug : stamps/qemu-configure-debug stamps/klee-make-debug
285
252
cd qemu-debug && make -j$(JOBS )
286
253
mkdir -p stamps && touch $@
287
254
288
- stamps/qemu-make-release : stamps/qemu-configure-release stamps/klee-make-release ALWAYS
255
+ stamps/qemu-make-release : stamps/qemu-configure-release stamps/klee-make-release
289
256
cd qemu-release && make -j$(JOBS )
290
257
mkdir -p stamps && touch $@
291
258
@@ -294,18 +261,37 @@ stamps/qemu-configure-release-asan: stamps/klee-make-release-asan
294
261
mkdir -p qemu-release-asan
295
262
cd qemu-release-asan && $(S2ESRC ) /qemu/configure \
296
263
--prefix=$(S2EBUILD ) /opt \
297
- --with-llvm=$(S2EBUILD ) /llvm-instr-asan/Release+Asserts \
298
- --with-clang=$(S2EBUILD ) /llvm-native/Release+Asserts/bin/clang \
264
+ --with-llvm=$(S2EBUILD ) /llvm/Release+Asserts \
265
+ --cc=$(CLANG_CC ) \
266
+ --cxx=$(CLANG_CXX ) \
299
267
--with-stp=$(S2EBUILD ) /stp-asan \
300
- --with-klee=$(S2EBUILD ) /klee/Release+Asserts \
268
+ --with-klee=$(S2EBUILD ) /klee-asan/Release+Asserts \
269
+ --target-list=i386-s2e-softmmu,i386-softmmu \
270
+ --enable-llvm \
271
+ --enable-s2e --enable-address-sanitizer \
272
+ $(EXTRA_QEMU_FLAGS )
273
+
274
+ mkdir -p stamps && touch $@
275
+
276
+ stamps/qemu-configure-debug-asan : stamps/klee-make-debug-asan
277
+ mkdir -p qemu-debug-asan
278
+ cd qemu-debug-asan && $(S2ESRC ) /qemu/configure \
279
+ --prefix=$(S2EBUILD ) /opt \
280
+ --with-llvm=$(S2EBUILD ) /llvm/Release+Asserts \
281
+ --cc=$(CLANG_CC ) \
282
+ --cxx=$(CLANG_CXX ) \
283
+ --with-stp=$(S2EBUILD ) /stp-asan \
284
+ --with-klee=$(S2EBUILD ) /klee-asan/Debug+Asserts \
301
285
--target-list=i386-s2e-softmmu,i386-softmmu \
302
- --asancc=$(ASAN_CC ) \
303
- --asancxx=$(ASAN_CXX ) \
304
286
--enable-llvm \
305
- --enable-s2e --enable-address-sanitizer --compile-all-with-clang
287
+ --enable-s2e --enable-address-sanitizer --enable-debug
288
+ mkdir -p stamps && touch $@
289
+
290
+ stamps/qemu-make-debug-asan : stamps/qemu-configure-debug-asan stamps/klee-make-debug-asan
291
+ cd qemu-debug-asan && make -j$(JOBS )
306
292
mkdir -p stamps && touch $@
307
293
308
- stamps/qemu-make-release-asan : stamps/qemu-configure-release-asan stamps/klee-make-release-asan ALWAYS
294
+ stamps/qemu-make-release-asan : stamps/qemu-configure-release-asan stamps/klee-make-release-asan
309
295
cd qemu-release-asan && make -j$(JOBS )
310
296
mkdir -p stamps && touch $@
311
297
@@ -322,8 +308,8 @@ stamps/tools-configure: stamps/llvm-configure
322
308
--with-llvmobj=$(S2EBUILD ) /llvm \
323
309
--with-s2esrc=$(S2ESRC ) /qemu \
324
310
--target=x86_64 --enable-assertions \
325
- CC=$(S2EBUILD ) /llvm-native/Release+Asserts/bin/clang \
326
- CXX=$(S2EBUILD ) /llvm-native/Release+Asserts/bin/clang++
311
+ CC=$(CLANG_CC ) \
312
+ CXX=$(CLANG_CXX )
327
313
mkdir -p stamps && touch $@
328
314
329
315
stamps/tools-make-release : stamps/tools-configure ALWAYS
@@ -334,3 +320,10 @@ stamps/tools-make-debug: stamps/tools-configure ALWAYS
334
320
cd tools && make ENABLE_OPTIMIZED=0 REQUIRES_RTTI=1 -j$(JOBS )
335
321
mkdir -p stamps && touch $@
336
322
323
+
324
+ # ###########
325
+ # Guest tools
326
+ # ###########
327
+ stamps/guest-tools : ALWAYS
328
+ mkdir -p guest-tools && cd $(S2ESRC ) /guest && make clean && make install BUILD_DIR=$(S2EBUILD ) /guest-tools
329
+ mkdir -p stamps && touch $@
0 commit comments