Skip to content

Commit 98e9183

Browse files
author
Vitaly Chipounov
committed
Makefile: fix builds with Address Sanitizer
Signed-off-by: Vitaly Chipounov <[email protected]>
1 parent 0b29fe4 commit 98e9183

File tree

3 files changed

+107
-172
lines changed

3 files changed

+107
-172
lines changed

Makefile

+93-100
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,11 @@ endif
2626
LLVM_VERSION=3.2
2727
LLVM_SRC=llvm-$(LLVM_VERSION).src.tar.gz
2828
LLVM_SRC_DIR=llvm-$(LLVM_VERSION).src
29+
LLVM_NATIVE_SRC_DIR=llvm-$(LLVM_VERSION).src.native
2930
CLANG_SRC=clang-$(LLVM_VERSION).src.tar.gz
3031
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
3134

3235
clean:
3336
rm -Rf tools qemu-release qemu-debug klee stp llvm
@@ -49,83 +52,57 @@ $(CLANG_SRC):
4952
$(LLVM_SRC):
5053
wget http://llvm.org/releases/$(LLVM_VERSION)/$(LLVM_SRC)
5154

55+
$(COMPILER_RT_SRC):
56+
wget http://llvm.org/releases/$(LLVM_VERSION)/$(COMPILER_RT_SRC)
57+
5258
stamps/llvm-unpack: $(LLVM_SRC)
5359
tar -zxf $(LLVM_SRC)
60+
cp -r $(LLVM_SRC_DIR) $(LLVM_NATIVE_SRC_DIR)
5461
mkdir -p stamps && touch $@
5562

5663
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
7766
mkdir -p stamps && touch $@
7867

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
8171
mkdir -p stamps && touch $@
8272

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
9976

10077
########
10178
# LLVM #
10279
########
10380

10481

10582
#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
10784
mkdir -p llvm-native
10885
echo $(S2EBUILD) $(S2ESRC)
109-
cd llvm-native && $(S2EBUILD)/$(LLVM_SRC_DIR)/configure \
86+
cd llvm-native && $(S2EBUILD)/$(LLVM_NATIVE_SRC_DIR)/configure \
11087
--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...
11389
mkdir -p stamps && touch $@
11490

11591
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)
11793
mkdir -p stamps && touch $@
11894

11995

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.
12198
stamps/llvm-configure: stamps/llvm-make-release-native
12299
mkdir -p llvm
123100
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)
129106
mkdir -p stamps && touch $@
130107

131108
stamps/llvm-make-debug: stamps/llvm-configure
@@ -136,23 +113,6 @@ stamps/llvm-make-release: stamps/llvm-configure
136113
cd llvm && make ENABLE_OPTIMIZED=1 REQUIRES_RTTI=1 -j$(JOBS)
137114
mkdir -p stamps && touch $@
138115

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-
156116

157117
#######
158118
# STP #
@@ -176,15 +136,16 @@ stp/include/stp/c_interface.h: stamps/stp-configure
176136

177137
stp/lib/libstp.a: stamps/stp-make
178138

139+
179140
#ASAN-enabled STP
141+
#XXX: need to fix the STP build to actually use ASAN...
180142

181143
stamps/stp-copy-asan:
182144
cp -Rup $(S2ESRC)/stp stp-asan
183145
mkdir -p stamps && touch $@
184146

185147
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
188149
mkdir -p stamps && touch $@
189150

190151
stamps/stp-make-asan: stamps/stp-configure-asan ALWAYS
@@ -199,17 +160,17 @@ stamps/stp-make-asan: stamps/stp-configure-asan ALWAYS
199160

200161
stamps/klee-configure: stamps/llvm-configure \
201162
stp/include/stp/c_interface.h \
202-
stp/lib/libstp.a
163+
stp/lib/libstp.a
203164
mkdir -p klee
204165
cd klee && $(S2ESRC)/klee/configure \
205166
--prefix=$(S2EBUILD)/opt \
206167
--with-llvmsrc=$(S2EBUILD)/$(LLVM_SRC_DIR) \
207168
--with-llvmobj=$(S2EBUILD)/llvm \
208169
--with-stp=$(S2EBUILD)/stp \
209170
--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)
213174
mkdir -p stamps && touch $@
214175

215176
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/
220181
cd klee && make ENABLE_OPTIMIZED=1 -j$(JOBS)
221182
mkdir -p stamps && touch $@
222183

184+
223185
#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
227187
mkdir -p klee-asan
228188
cd klee-asan && $(S2ESRC)/klee/configure \
229189
--prefix=$(S2EBUILD)/opt \
230190
--with-llvmsrc=$(S2EBUILD)/$(LLVM_SRC_DIR) \
231-
--with-llvmobj=$(S2EBUILD)/llvm-instr-asan \
191+
--with-llvmobj=$(S2EBUILD)/llvm \
232192
--with-stp=$(S2EBUILD)/stp-asan \
233193
--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"
237199
mkdir -p stamps && touch $@
238200

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)
241203
mkdir -p stamps && touch $@
242204

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 $@
243208

244209

245210
########
@@ -254,38 +219,40 @@ stamps/qemu-configure-debug: stamps/klee-configure klee/Debug/bin/klee-config
254219
mkdir -p qemu-debug
255220
cd qemu-debug && $(S2ESRC)/qemu/configure \
256221
--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) \
259225
--with-stp=$(S2EBUILD)/stp \
260226
--with-klee=$(S2EBUILD)/klee/Debug+Asserts \
261227
--target-list=i386-s2e-softmmu,i386-softmmu \
262228
--enable-llvm \
263229
--enable-s2e \
264-
--enable-debug --compile-all-with-clang \
265-
$(EXTRA_QEMU_FLAGS)
230+
--enable-debug \
231+
$(EXTRA_QEMU_FLAGS)
266232

267233
mkdir -p stamps && touch $@
268234

269235
stamps/qemu-configure-release: stamps/klee-configure klee/Release/bin/klee-config
270236
mkdir -p qemu-release
271237
cd qemu-release && $(S2ESRC)/qemu/configure \
272238
--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) \
275242
--with-stp=$(S2EBUILD)/stp \
276243
--with-klee=$(S2EBUILD)/klee/Release+Asserts \
277244
--target-list=i386-s2e-softmmu,i386-softmmu \
278245
--enable-llvm \
279-
--enable-s2e --compile-all-with-clang \
280-
$(EXTRA_QEMU_FLAGS)
246+
--enable-s2e\
247+
$(EXTRA_QEMU_FLAGS)
281248

282249
mkdir -p stamps && touch $@
283250

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
285252
cd qemu-debug && make -j$(JOBS)
286253
mkdir -p stamps && touch $@
287254

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
289256
cd qemu-release && make -j$(JOBS)
290257
mkdir -p stamps && touch $@
291258

@@ -294,18 +261,37 @@ stamps/qemu-configure-release-asan: stamps/klee-make-release-asan
294261
mkdir -p qemu-release-asan
295262
cd qemu-release-asan && $(S2ESRC)/qemu/configure \
296263
--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) \
299267
--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 \
301285
--target-list=i386-s2e-softmmu,i386-softmmu \
302-
--asancc=$(ASAN_CC) \
303-
--asancxx=$(ASAN_CXX) \
304286
--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)
306292
mkdir -p stamps && touch $@
307293

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
309295
cd qemu-release-asan && make -j$(JOBS)
310296
mkdir -p stamps && touch $@
311297

@@ -322,8 +308,8 @@ stamps/tools-configure: stamps/llvm-configure
322308
--with-llvmobj=$(S2EBUILD)/llvm \
323309
--with-s2esrc=$(S2ESRC)/qemu \
324310
--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)
327313
mkdir -p stamps && touch $@
328314

329315
stamps/tools-make-release: stamps/tools-configure ALWAYS
@@ -334,3 +320,10 @@ stamps/tools-make-debug: stamps/tools-configure ALWAYS
334320
cd tools && make ENABLE_OPTIMIZED=0 REQUIRES_RTTI=1 -j$(JOBS)
335321
mkdir -p stamps && touch $@
336322

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

Comments
 (0)