OLD | NEW |
1 # The following variables will likely need to be modified, depending on where | 1 # The following variables will likely need to be modified, depending on where |
2 # and how you built LLVM & Clang. They can be overridden in a command-line | 2 # and how you built LLVM & Clang. They can be overridden in a command-line |
3 # invocation of make, like: | 3 # invocation of make, like: |
4 # | 4 # |
5 # make LLVM_SRC_PATH=<path> LIBCXX_INSTALL_PATH=<path> CLANG_PATH=<path> \ | 5 # make LLVM_SRC_PATH=<path> LIBCXX_INSTALL_PATH=<path> CLANG_PATH=<path> \ |
6 # PNACL_BIN_PATH=<path> ... | 6 # PNACL_BIN_PATH=<path> ... |
7 # | 7 # |
8 | 8 |
9 # LLVM_SRC_PATH is the path to the root of the checked out source code. This | 9 # LLVM_SRC_PATH is the path to the root of the checked out source code. This |
10 # directory should contain the configure script, the include/ and lib/ | 10 # directory should contain the configure script, the include/ and lib/ |
11 # directories of LLVM, Clang in tools/clang/, etc. | 11 # directories of LLVM, Clang in tools/clang/, etc. |
12 # Alternatively, if you're building vs. a binary download of LLVM, then | 12 # Alternatively, if you're building vs. a binary download of LLVM, then |
13 # LLVM_SRC_PATH can point to the main untarred directory. | 13 # LLVM_SRC_PATH can point to the main untarred directory. |
14 LLVM_SRC_PATH ?= ../llvm | 14 LLVM_SRC_PATH ?= ../llvm |
15 | 15 |
16 # The x86-32-specific sandboxed translator directory. | 16 # The x86-32-specific sandboxed translator directory. |
17 # It holds sandboxed versions of libraries and binaries. | 17 # It holds sandboxed versions of libraries and binaries. |
18 SB_LLVM_PATH ?= $(shell readlink -e \ | 18 SB_LLVM_PATH ?= $(shell readlink -e \ |
19 » ../../out/sandboxed_translators_work/translator-i686/llvm-sb/Release) | 19 ../../out/sandboxed_translators_work/translator-i686/llvm-sb/Release) |
20 | 20 |
21 # NACL_ROOT is the root of the native client repository. | 21 # NACL_ROOT is the root of the native client repository. |
22 NACL_ROOT ?= $(shell python -c "import sys; sys.path.insert(0, 'pydir'); \ | 22 NACL_ROOT ?= $(shell python -c "import sys; sys.path.insert(0, 'pydir'); \ |
23 » import utils; print utils.FindBaseNaCl()") | 23 import utils; print utils.FindBaseNaCl()") |
24 | 24 |
25 # TOOLCHAIN_ROOT is the location of NaCl/PNaCl toolchains and other | 25 # TOOLCHAIN_ROOT is the location of NaCl/PNaCl toolchains and other |
26 # tools like qemu. | 26 # tools like qemu. |
27 TOOLCHAIN_ROOT ?= $(shell readlink -e $(NACL_ROOT)/toolchain/linux_x86) | 27 TOOLCHAIN_ROOT ?= $(shell readlink -e $(NACL_ROOT)/toolchain/linux_x86) |
28 | 28 |
29 # PNACL_TOOLCHAIN_ROOT is the location of the PNaCl toolchain. | 29 # PNACL_TOOLCHAIN_ROOT is the location of the PNaCl toolchain. |
30 # This is used as the default root for finding binutils, libcxx, etc. | 30 # This is used as the default root for finding binutils, libcxx, etc. |
31 PNACL_TOOLCHAIN_ROOT ?= $(shell readlink -e $(TOOLCHAIN_ROOT)/pnacl_newlib_raw) | 31 PNACL_TOOLCHAIN_ROOT ?= $(shell readlink -e $(TOOLCHAIN_ROOT)/pnacl_newlib_raw) |
32 | 32 |
33 # The location of PNaCl tools (e.g., binutils objdump, pnacl-clang++, etc.). | 33 # The location of PNaCl tools (e.g., binutils objdump, pnacl-clang++, etc.). |
34 PNACL_BIN_PATH ?= $(shell readlink -e $(PNACL_TOOLCHAIN_ROOT)/bin) | 34 PNACL_BIN_PATH ?= $(shell readlink -e $(PNACL_TOOLCHAIN_ROOT)/bin) |
35 | 35 |
36 # Hack to auto-detect autoconf versus cmake build of LLVM. If the LLVM tools | 36 # Hack to auto-detect autoconf versus cmake build of LLVM. If the LLVM tools |
37 # were dynamically linked with something like libLLVM-3.7svn.so, it is an | 37 # were dynamically linked with something like libLLVM-3.7svn.so, it is an |
38 # autoconf build, otherwise it is a cmake build. AUTOCONF is set to 0 for | 38 # autoconf build, otherwise it is a cmake build. AUTOCONF is set to 0 for |
39 # cmake, nonzero for autoconf. | 39 # cmake, nonzero for autoconf. |
40 AUTOCONF ?= $(shell ldd $(PNACL_BIN_PATH)/opt | grep -c libLLVM-) | 40 AUTOCONF ?= $(shell ldd $(PNACL_BIN_PATH)/opt | grep -c libLLVM-) |
41 | 41 |
42 # CLANG_PATH is the location of the clang compiler to use for building | 42 # CLANG_PATH is the location of the clang compiler to use for building |
43 # the host binaries. | 43 # the host binaries. |
44 CLANG_PATH ?= $(shell readlink -e \ | 44 CLANG_PATH ?= $(shell readlink -e \ |
45 » $(NACL_ROOT)/../third_party/llvm-build/Release+Asserts/bin) | 45 $(NACL_ROOT)/../third_party/llvm-build/Release+Asserts/bin) |
46 | 46 |
47 # LIBCXX_INSTALL_PATH is the directory where libc++ is located. It should | 47 # LIBCXX_INSTALL_PATH is the directory where libc++ is located. It should |
48 # contain header files and corresponding libraries. This is used for | 48 # contain header files and corresponding libraries. This is used for |
49 # building the host binaries in conjuction with clang. | 49 # building the host binaries in conjuction with clang. |
50 LIBCXX_INSTALL_PATH ?= $(PNACL_TOOLCHAIN_ROOT) | 50 LIBCXX_INSTALL_PATH ?= $(PNACL_TOOLCHAIN_ROOT) |
51 STDLIB_FLAGS := -stdlib=libc++ -I$(LIBCXX_INSTALL_PATH)/include/c++/v1 | 51 STDLIB_FLAGS := -stdlib=libc++ -I$(LIBCXX_INSTALL_PATH)/include/c++/v1 |
52 | 52 |
53 HOST_ARCH ?= x86_64 | 53 HOST_ARCH ?= x86_64 |
54 ifeq ($(HOST_ARCH),x86_64) | 54 ifeq ($(HOST_ARCH),x86_64) |
55 HOST_FLAGS = -m64 | 55 HOST_FLAGS = -m64 |
(...skipping 15 matching lines...) Expand all Loading... |
71 | 71 |
72 # The list of CXX defines that are dependent on build parameters. | 72 # The list of CXX defines that are dependent on build parameters. |
73 BASE_CXX_DEFINES = | 73 BASE_CXX_DEFINES = |
74 CXX_EXTRA = | 74 CXX_EXTRA = |
75 LD_EXTRA = | 75 LD_EXTRA = |
76 | 76 |
77 ifdef MINIMAL | 77 ifdef MINIMAL |
78 NOASSERT = 1 | 78 NOASSERT = 1 |
79 OBJDIR := $(OBJDIR)+Min | 79 OBJDIR := $(OBJDIR)+Min |
80 BASE_CXX_DEFINES += -DALLOW_DUMP=0 -DALLOW_LLVM_CL=0 -DALLOW_LLVM_IR=0 \ | 80 BASE_CXX_DEFINES += -DALLOW_DUMP=0 -DALLOW_LLVM_CL=0 -DALLOW_LLVM_IR=0 \ |
81 » -DALLOW_LLVM_IR_AS_INPUT=0 -DALLOW_DISABLE_IR_GEN=0 \ | 81 -DALLOW_LLVM_IR_AS_INPUT=0 -DALLOW_DISABLE_IR_GEN=0 \ |
82 -DALLOW_MINIMAL_BUILD=1 | 82 -DALLOW_MINIMAL_BUILD=1 |
83 else | 83 else |
84 BASE_CXX_DEFINES += -DALLOW_DUMP=1 -DALLOW_LLVM_CL=1 -DALLOW_LLVM_IR=1 \ | 84 BASE_CXX_DEFINES += -DALLOW_DUMP=1 -DALLOW_LLVM_CL=1 -DALLOW_LLVM_IR=1 \ |
85 » -DALLOW_LLVM_IR_AS_INPUT=1 -DALLOW_DISABLE_IR_GEN=1 \ | 85 -DALLOW_LLVM_IR_AS_INPUT=1 -DALLOW_DISABLE_IR_GEN=1 \ |
86 -DALLOW_MINIMAL_BUILD=0 | 86 -DALLOW_MINIMAL_BUILD=0 |
87 endif | 87 endif |
88 | 88 |
89 SB_CXX_DEFINES := $(BASE_CXX_DEFINES) -DPNACL_BROWSER_TRANSLATOR=1 | 89 SB_CXX_DEFINES := $(BASE_CXX_DEFINES) -DPNACL_BROWSER_TRANSLATOR=1 |
90 CXX_DEFINES := $(BASE_CXX_DEFINES) -DPNACL_BROWSER_TRANSLATOR=0 | 90 CXX_DEFINES := $(BASE_CXX_DEFINES) -DPNACL_BROWSER_TRANSLATOR=0 |
91 | 91 |
92 ifdef NOASSERT | 92 ifdef NOASSERT |
93 ASSERTIONS = -DNDEBUG | 93 ASSERTIONS = -DNDEBUG |
94 else | 94 else |
95 ASSERTIONS = | 95 ASSERTIONS = |
96 OBJDIR := $(OBJDIR)+Asserts | 96 OBJDIR := $(OBJDIR)+Asserts |
97 endif | 97 endif |
98 | 98 |
99 ifdef UBSAN | 99 ifdef UBSAN |
100 OBJDIR := $(OBJDIR)+UBSan | 100 OBJDIR := $(OBJDIR)+UBSan |
101 CXX_EXTRA += -fsanitize=undefined -fno-sanitize=vptr -fno-sanitize=nonnull-att
ribute | 101 CXX_EXTRA += -fsanitize=undefined -fno-sanitize=vptr \ |
| 102 -fno-sanitize=nonnull-attribute |
102 LD_EXTRA += -fsanitize=undefined | 103 LD_EXTRA += -fsanitize=undefined |
103 endif | 104 endif |
104 | 105 |
105 ifdef UBSAN_TRAP | 106 ifdef UBSAN_TRAP |
106 OBJDIR := $(OBJDIR)+UBSan_Trap | 107 OBJDIR := $(OBJDIR)+UBSan_Trap |
107 CXX_EXTRA += -fsanitize=undefined-trap -fsanitize-undefined-trap-on-error -fno
-sanitize=vptr -fno-sanitize=nonnull-attribute | 108 CXX_EXTRA += -fsanitize=undefined-trap -fsanitize-undefined-trap-on-error \ |
| 109 -fno-sanitize=vptr -fno-sanitize=nonnull-attribute |
108 LD_EXTRA += -fsanitize=undefined-trap | 110 LD_EXTRA += -fsanitize=undefined-trap |
109 endif | 111 endif |
110 | 112 |
111 ifdef TSAN | 113 ifdef TSAN |
112 OBJDIR := $(OBJDIR)+TSan | 114 OBJDIR := $(OBJDIR)+TSan |
113 CXX_EXTRA += -fsanitize=thread | 115 CXX_EXTRA += -fsanitize=thread |
114 LD_EXTRA += -fsanitize=thread | 116 LD_EXTRA += -fsanitize=thread |
115 endif | 117 endif |
116 | 118 |
117 ifdef ASAN | 119 ifdef ASAN |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 | 177 |
176 CCACHE := `command -v ccache` | 178 CCACHE := `command -v ccache` |
177 CXX := CCACHE_CPP2=yes $(CCACHE) $(CLANG_PATH)/clang++ | 179 CXX := CCACHE_CPP2=yes $(CCACHE) $(CLANG_PATH)/clang++ |
178 SB_CXX := CCACHE_CPP2=yes $(CCACHE) $(PNACL_BIN_PATH)/pnacl-clang++ | 180 SB_CXX := CCACHE_CPP2=yes $(CCACHE) $(PNACL_BIN_PATH)/pnacl-clang++ |
179 SB_TRANSLATE := $(PNACL_BIN_PATH)/pnacl-translate | 181 SB_TRANSLATE := $(PNACL_BIN_PATH)/pnacl-translate |
180 | 182 |
181 # Extra warnings that LLVM's build system adds in addition to -Wall. | 183 # Extra warnings that LLVM's build system adds in addition to -Wall. |
182 LLVM_EXTRA_WARNINGS := -Wcovered-switch-default | 184 LLVM_EXTRA_WARNINGS := -Wcovered-switch-default |
183 | 185 |
184 BASE_CXXFLAGS := -std=gnu++11 -Wall -Wextra -Werror -fno-rtti \ | 186 BASE_CXXFLAGS := -std=gnu++11 -Wall -Wextra -Werror -fno-rtti \ |
185 » -fno-exceptions $(OPTLEVEL) $(ASSERTIONS) -g -pedantic \ | 187 -fno-exceptions $(OPTLEVEL) $(ASSERTIONS) -g -pedantic \ |
186 » $(LLVM_EXTRA_WARNINGS) $(CXX_EXTRA) | 188 $(LLVM_EXTRA_WARNINGS) $(CXX_EXTRA) |
187 | 189 |
188 CXXFLAGS := $(LLVM_CXXFLAGS) $(BASE_CXXFLAGS) $(CXX_DEFINES) $(HOST_FLAGS) \ | 190 CXXFLAGS := $(LLVM_CXXFLAGS) $(BASE_CXXFLAGS) $(CXX_DEFINES) $(HOST_FLAGS) \ |
189 » $(STDLIB_FLAGS) | 191 $(STDLIB_FLAGS) |
190 SB_CXXFLAGS := $(SB_LLVM_CXXFLAGS) $(BASE_CXXFLAGS) $(SB_CXX_DEFINES) | 192 SB_CXXFLAGS := $(SB_LLVM_CXXFLAGS) $(BASE_CXXFLAGS) $(SB_CXX_DEFINES) |
191 | 193 |
192 LDFLAGS := $(HOST_FLAGS) -L$(LIBCXX_INSTALL_PATH)/lib -Wl,--gc-sections \ | 194 LDFLAGS := $(HOST_FLAGS) -L$(LIBCXX_INSTALL_PATH)/lib -Wl,--gc-sections \ |
193 » $(LD_EXTRA) $(STDLIB_FLAGS) | 195 $(LD_EXTRA) $(STDLIB_FLAGS) |
194 # Not specifying -Wl,--gc-sections but instead doing bitcode linking GC w/ LTO. | 196 # Not specifying -Wl,--gc-sections but instead doing bitcode linking GC w/ LTO. |
195 SB_LDFLAGS := $(LINKOPTLEVEL) $(LD_EXTRA) | 197 SB_LDFLAGS := $(LINKOPTLEVEL) $(LD_EXTRA) |
196 | 198 |
197 SRCS = \ | 199 SRCS = \ |
198 » IceAssembler.cpp \ | 200 IceAssembler.cpp \ |
199 » IceAssemblerARM32.cpp \ | 201 IceAssemblerARM32.cpp \ |
200 » IceBrowserCompileServer.cpp \ | 202 IceBrowserCompileServer.cpp \ |
201 » IceCfg.cpp \ | 203 IceCfg.cpp \ |
202 » IceCfgNode.cpp \ | 204 IceCfgNode.cpp \ |
203 » IceClFlags.cpp \ | 205 IceClFlags.cpp \ |
204 » IceCompiler.cpp \ | 206 IceCompiler.cpp \ |
205 » IceCompileServer.cpp \ | 207 IceCompileServer.cpp \ |
206 » IceELFObjectWriter.cpp \ | 208 IceELFObjectWriter.cpp \ |
207 » IceELFSection.cpp \ | 209 IceELFSection.cpp \ |
208 » IceFixups.cpp \ | 210 IceFixups.cpp \ |
209 » IceGlobalContext.cpp \ | 211 IceGlobalContext.cpp \ |
210 » IceGlobalInits.cpp \ | 212 IceGlobalInits.cpp \ |
211 » IceInst.cpp \ | 213 IceInst.cpp \ |
212 » IceInstARM32.cpp \ | 214 IceInstARM32.cpp \ |
213 » IceInstMIPS32.cpp \ | 215 IceInstMIPS32.cpp \ |
214 » IceInstX8632.cpp \ | 216 IceInstX8632.cpp \ |
215 » IceInstX8664.cpp \ | 217 IceInstX8664.cpp \ |
216 » IceIntrinsics.cpp \ | 218 IceIntrinsics.cpp \ |
217 » IceLiveness.cpp \ | 219 IceLiveness.cpp \ |
218 » IceLoopAnalyzer.cpp \ | 220 IceLoopAnalyzer.cpp \ |
219 » IceOperand.cpp \ | 221 IceOperand.cpp \ |
220 » IceRegAlloc.cpp \ | 222 IceRegAlloc.cpp \ |
221 » IceRNG.cpp \ | 223 IceRNG.cpp \ |
222 » IceSwitchLowering.cpp \ | 224 IceSwitchLowering.cpp \ |
223 » IceTargetLowering.cpp \ | 225 IceTargetLowering.cpp \ |
224 » IceTargetLoweringARM32.cpp \ | 226 IceTargetLoweringARM32.cpp \ |
225 » IceTargetLoweringMIPS32.cpp \ | 227 IceTargetLoweringMIPS32.cpp \ |
226 » IceTargetLoweringX8632.cpp \ | 228 IceTargetLoweringX8632.cpp \ |
227 » IceTargetLoweringX8664.cpp \ | 229 IceTargetLoweringX8664.cpp \ |
228 » IceThreading.cpp \ | 230 IceThreading.cpp \ |
229 » IceTimerTree.cpp \ | 231 IceTimerTree.cpp \ |
230 » IceTranslator.cpp \ | 232 IceTranslator.cpp \ |
231 » IceTypes.cpp \ | 233 IceTypes.cpp \ |
232 » main.cpp \ | 234 main.cpp \ |
233 » PNaClTranslator.cpp | 235 PNaClTranslator.cpp |
234 | 236 |
235 ifndef MINIMAL | 237 ifndef MINIMAL |
236 SRCS += IceConverter.cpp \ | 238 SRCS += \ |
237 » IceTypeConverter.cpp | 239 IceConverter.cpp \ |
| 240 IceTypeConverter.cpp |
238 endif | 241 endif |
239 | 242 |
240 OBJS=$(patsubst %.cpp, $(OBJDIR)/%.o, $(SRCS)) | 243 OBJS=$(patsubst %.cpp, $(OBJDIR)/%.o, $(SRCS)) |
241 SB_OBJS=$(patsubst %.cpp, $(SB_OBJDIR)/%.o, $(SRCS)) | 244 SB_OBJS=$(patsubst %.cpp, $(SB_OBJDIR)/%.o, $(SRCS)) |
242 | 245 |
243 UNITTEST_SRCS = \ | 246 UNITTEST_SRCS = \ |
244 » BitcodeMunge.cpp \ | 247 BitcodeMunge.cpp \ |
245 » IceELFSectionTest.cpp \ | 248 IceELFSectionTest.cpp \ |
246 » IceParseInstsTest.cpp | 249 IceParseInstsTest.cpp |
247 | 250 |
248 # The X86 assembler tests take too long to compile. Given how infrequently the | 251 # The X86 assembler tests take too long to compile. Given how infrequently the |
249 # assembler will change, we disable them. | 252 # assembler will change, we disable them. |
250 ifdef CHECK_X86_ASM | 253 ifdef CHECK_X86_ASM |
251 ifndef DEBUG | 254 ifndef DEBUG |
252 $(error Run check-unit with DEBUG=1 lest your machine perish) | 255 $(error Run check-unit with DEBUG=1 lest your machine perish) |
253 endif | 256 endif |
254 UNITTEST_SRCS += AssemblerX8632/LowLevel.cpp \ | 257 UNITTEST_SRCS += AssemblerX8632/LowLevel.cpp \ |
255 AssemblerX8632/DataMov.cpp \ | 258 AssemblerX8632/DataMov.cpp \ |
256 AssemblerX8632/Locked.cpp \ | 259 AssemblerX8632/Locked.cpp \ |
257 AssemblerX8632/GPRArith.cpp \ | 260 AssemblerX8632/GPRArith.cpp \ |
258 AssemblerX8632/XmmArith.cpp \ | 261 AssemblerX8632/XmmArith.cpp \ |
259 AssemblerX8632/ControlFlow.cpp \ | 262 AssemblerX8632/ControlFlow.cpp \ |
260 AssemblerX8632/Other.cpp \ | 263 AssemblerX8632/Other.cpp \ |
261 AssemblerX8632/X87.cpp \ | 264 AssemblerX8632/X87.cpp \ |
262 AssemblerX8664/LowLevel.cpp \ | 265 AssemblerX8664/LowLevel.cpp \ |
263 AssemblerX8664/DataMov.cpp \ | 266 AssemblerX8664/DataMov.cpp \ |
264 AssemblerX8664/Locked.cpp \ | 267 AssemblerX8664/Locked.cpp \ |
265 AssemblerX8664/GPRArith.cpp \ | 268 AssemblerX8664/GPRArith.cpp \ |
266 AssemblerX8664/XmmArith.cpp \ | 269 AssemblerX8664/XmmArith.cpp \ |
267 AssemblerX8664/ControlFlow.cpp \ | 270 AssemblerX8664/ControlFlow.cpp \ |
268 AssemblerX8664/Other.cpp | 271 AssemblerX8664/Other.cpp |
269 endif | 272 endif |
270 | 273 |
271 UNITTEST_OBJS = $(patsubst %.cpp, $(OBJDIR)/unittest/%.o, $(UNITTEST_SRCS)) | 274 UNITTEST_OBJS = $(patsubst %.cpp, $(OBJDIR)/unittest/%.o, $(UNITTEST_SRCS)) |
272 UNITTEST_LIB_OBJS = $(filter-out $(OBJDIR)/main.o,$(OBJS)) | 275 UNITTEST_LIB_OBJS = $(filter-out $(OBJDIR)/main.o,$(OBJS)) |
273 | 276 |
274 # Keep all the first target so it's the default. | 277 # Keep all the first target so it's the default. |
275 all: $(OBJDIR)/pnacl-sz make_symlink runtime | 278 all: $(OBJDIR)/pnacl-sz make_symlink runtime |
276 | 279 |
277 ifdef TSAN | 280 ifdef TSAN |
278 sb: | 281 sb: |
(...skipping 12 matching lines...) Expand all Loading... |
291 make_symlink: $(OBJDIR)/pnacl-sz | 294 make_symlink: $(OBJDIR)/pnacl-sz |
292 rm -rf pnacl-sz | 295 rm -rf pnacl-sz |
293 ln -s $(OBJDIR)/pnacl-sz | 296 ln -s $(OBJDIR)/pnacl-sz |
294 @echo "Build Attributes:" | 297 @echo "Build Attributes:" |
295 @$(SHOW_BUILD_ATTS) | 298 @$(SHOW_BUILD_ATTS) |
296 | 299 |
297 .PHONY: all make_symlink runtime bloat sb docs | 300 .PHONY: all make_symlink runtime bloat sb docs |
298 | 301 |
299 $(OBJDIR)/pnacl-sz: $(OBJS) | 302 $(OBJDIR)/pnacl-sz: $(OBJS) |
300 $(CXX) $(LDFLAGS) -o $@ $^ $(LLVM_LDFLAGS) \ | 303 $(CXX) $(LDFLAGS) -o $@ $^ $(LLVM_LDFLAGS) \ |
301 -Wl,-rpath=$(abspath $(LIBCXX_INSTALL_PATH)/lib) | 304 -Wl,-rpath=$(abspath $(LIBCXX_INSTALL_PATH)/lib) |
302 | 305 |
303 $(SB_OBJDIR)/pnacl-sz.x86-32.nexe: $(SB_OBJS) | 306 $(SB_OBJDIR)/pnacl-sz.x86-32.nexe: $(SB_OBJS) |
304 $(eval PNACL_SZ_BASE := $(patsubst %.nexe, %, $@)) | 307 $(eval PNACL_SZ_BASE := $(patsubst %.nexe, %, $@)) |
305 $(SB_CXX) $(SB_LDFLAGS) -o $(PNACL_SZ_BASE).nonfinal.pexe $^ \ | 308 $(SB_CXX) $(SB_LDFLAGS) -o $(PNACL_SZ_BASE).nonfinal.pexe $^ \ |
306 » » $(SB_LLVM_LDFLAGS) | 309 $(SB_LLVM_LDFLAGS) |
307 $(SB_TRANSLATE) -arch x86-32 $(PNACL_SZ_BASE).nonfinal.pexe -o $@ \ | 310 $(SB_TRANSLATE) -arch x86-32 $(PNACL_SZ_BASE).nonfinal.pexe -o $@ \ |
308 » » --allow-llvm-bitcode-input | 311 --allow-llvm-bitcode-input |
309 | 312 |
310 # TODO(stichnot): Be more precise than "*.h" here and elsewhere. | 313 # TODO(stichnot): Be more precise than "*.h" here and elsewhere. |
311 $(OBJS): $(OBJDIR)/%.o: src/%.cpp src/*.h src/*.def | 314 $(OBJS): $(OBJDIR)/%.o: src/%.cpp src/*.h src/*.def |
312 $(CXX) -c $(CXXFLAGS) $< -o $@ | 315 $(CXX) -c $(CXXFLAGS) $< -o $@ |
313 | 316 |
314 $(SB_OBJS): $(SB_OBJDIR)/%.o: src/%.cpp src/*.h src/*.def | 317 $(SB_OBJS): $(SB_OBJDIR)/%.o: src/%.cpp src/*.h src/*.def |
315 $(SB_CXX) -c $(SB_CXXFLAGS) $< -o $@ | 318 $(SB_CXX) -c $(SB_CXXFLAGS) $< -o $@ |
316 | 319 |
317 $(OBJDIR)/run_unittests: $(UNITTEST_OBJS) $(UNITTEST_LIB_OBJS) | 320 $(OBJDIR)/run_unittests: $(UNITTEST_OBJS) $(UNITTEST_LIB_OBJS) |
318 $(CXX) $(GTEST_LIB_PATH) $(LDFLAGS) -o $@ $^ $(LLVM_LDFLAGS) \ | 321 $(CXX) $(GTEST_LIB_PATH) $(LDFLAGS) -o $@ $^ $(LLVM_LDFLAGS) \ |
319 -lgtest -lgtest_main -ldl \ | 322 -lgtest -lgtest_main -ldl \ |
320 -Wl,-rpath=$(abspath $(LIBCXX_INSTALL_PATH)/lib) | 323 -Wl,-rpath=$(abspath $(LIBCXX_INSTALL_PATH)/lib) |
321 | 324 |
322 $(UNITTEST_OBJS): $(OBJDIR)/unittest/%.o: unittest/%.cpp \ | 325 $(UNITTEST_OBJS): $(OBJDIR)/unittest/%.o: unittest/%.cpp unittest/*.h \ |
323 » » unittest/*.h src/*.h src/*.def | 326 src/*.h src/*.def |
324 $(CXX) -c $(CXXFLAGS) \ | 327 $(CXX) -c $(CXXFLAGS) \ |
325 » » -Isrc/ \ | 328 -Isrc/ \ |
326 -Iunittest/ \ | 329 -Iunittest/ \ |
327 » » -I$(LLVM_SRC_PATH)/utils/unittest/googletest/include \ | 330 -I$(LLVM_SRC_PATH)/utils/unittest/googletest/include \ |
328 » » -I$(LLVM_SRC_PATH) \ | 331 -I$(LLVM_SRC_PATH) \ |
329 » » -DGTEST_HAS_RTTI=0 -DGTEST_USE_OWN_TR1_TUPLE \ | 332 -DGTEST_HAS_RTTI=0 -DGTEST_USE_OWN_TR1_TUPLE \ |
330 » » $< -o $@ | 333 $< -o $@ |
331 | 334 |
332 $(OBJS): | $(OBJDIR) | 335 $(OBJS): | $(OBJDIR) |
333 $(SB_OBJS): | $(SB_OBJDIR) | 336 $(SB_OBJS): | $(SB_OBJDIR) |
334 | 337 |
335 $(UNITTEST_OBJS): | $(OBJDIR)/unittest $(OBJDIR)/unittest/AssemblerX8632 $(OBJDI
R)/unittest/AssemblerX8664 | 338 $(UNITTEST_OBJS): | $(OBJDIR)/unittest $(OBJDIR)/unittest/AssemblerX8632 \ |
| 339 $(OBJDIR)/unittest/AssemblerX8664 |
336 | 340 |
337 $(OBJDIR): | 341 $(OBJDIR): |
338 @mkdir -p $@ | 342 @mkdir -p $@ |
339 $(SB_OBJDIR): | 343 $(SB_OBJDIR): |
340 @mkdir -p $@ | 344 @mkdir -p $@ |
341 | 345 |
342 $(OBJDIR)/unittest: $(OBJDIR) | 346 $(OBJDIR)/unittest: $(OBJDIR) |
343 @mkdir -p $@ | 347 @mkdir -p $@ |
344 | 348 |
345 $(OBJDIR)/unittest/AssemblerX8632: $(OBJDIR)/unittest | 349 $(OBJDIR)/unittest/AssemblerX8632: $(OBJDIR)/unittest |
346 @mkdir -p $@ | 350 @mkdir -p $@ |
347 $(OBJDIR)/unittest/AssemblerX8664: $(OBJDIR)/unittest | 351 $(OBJDIR)/unittest/AssemblerX8664: $(OBJDIR)/unittest |
348 @mkdir -p $@ | 352 @mkdir -p $@ |
349 | 353 |
350 RT_SRC := runtime/szrt.c runtime/szrt_ll.ll runtime/szrt_profiler.c | 354 RT_SRC := runtime/szrt.c runtime/szrt_ll.ll runtime/szrt_profiler.c |
351 RT_OBJ := build/runtime/szrt_native_x8632.o build/runtime/szrt_sb_x8632.o \ | 355 RT_OBJ := build/runtime/szrt_native_x8632.o build/runtime/szrt_sb_x8632.o \ |
352 » build/runtime/szrt_native_x8664.o build/runtime/szrt_sb_x8664.o \ | 356 build/runtime/szrt_native_x8664.o build/runtime/szrt_sb_x8664.o \ |
353 » build/runtime/szrt_native_arm32.o build/runtime/szrt_sb_arm32.o | 357 build/runtime/szrt_native_arm32.o build/runtime/szrt_sb_arm32.o |
354 | 358 |
355 runtime: $(RT_OBJ) | 359 runtime: $(RT_OBJ) |
356 | 360 |
357 # Use runtime.is.built so that build-runtime.py is invoked only once | 361 # Use runtime.is.built so that build-runtime.py is invoked only once |
358 # even in a parallel build. | 362 # even in a parallel build. |
359 .INTERMEDIATE: runtime.is.built | 363 .INTERMEDIATE: runtime.is.built |
360 $(RT_OBJ): runtime.is.built | 364 $(RT_OBJ): runtime.is.built |
361 runtime.is.built: $(RT_SRC) pydir/build-runtime.py | 365 runtime.is.built: $(RT_SRC) pydir/build-runtime.py |
362 @echo ================ Building Subzero runtime ================ | 366 @echo ================ Building Subzero runtime ================ |
363 ./pydir/build-runtime.py -v --pnacl-root $(PNACL_TOOLCHAIN_ROOT) | 367 ./pydir/build-runtime.py -v --pnacl-root $(PNACL_TOOLCHAIN_ROOT) |
364 | 368 |
365 check-lit: $(OBJDIR)/pnacl-sz make_symlink | 369 check-lit: $(OBJDIR)/pnacl-sz make_symlink |
366 PNACL_BIN_PATH=$(PNACL_BIN_PATH) \ | 370 PNACL_BIN_PATH=$(PNACL_BIN_PATH) \ |
367 $(LLVM_SRC_PATH)/utils/lit/lit.py -sv tests_lit | 371 $(LLVM_SRC_PATH)/utils/lit/lit.py -sv tests_lit |
368 | 372 |
369 ifdef MINIMAL | 373 ifdef MINIMAL |
370 check-xtest: $(OBJDIR)/pnacl-sz make_symlink runtime | 374 check-xtest: $(OBJDIR)/pnacl-sz make_symlink runtime |
371 @echo "Crosstests disabled, minimal build" | 375 @echo "Crosstests disabled, minimal build" |
372 else | 376 else |
373 check-xtest: $(OBJDIR)/pnacl-sz make_symlink runtime | 377 check-xtest: $(OBJDIR)/pnacl-sz make_symlink runtime |
374 # Do all native/sse2 tests, but only test_vector_ops for native/sse4.1. | 378 # Do all native/sse2 tests, but only test_vector_ops for native/sse4.1. |
375 # For (slow) sandboxed tests, limit to Om1/sse4.1. | 379 # For (slow) sandboxed tests, limit to Om1/sse4.1. |
376 # TODO(jpp): implement x8664 sandbox, then enable xtests. | 380 # TODO(jpp): implement x8664 sandbox, then enable xtests. |
377 # TODO(jpp): reenable the x86-64 tests. | 381 # TODO(jpp): reenable the x86-64 tests. |
378 ./pydir/crosstest_generator.py -v --lit \ | 382 ./pydir/crosstest_generator.py -v --lit \ |
379 » --toolchain-root $(TOOLCHAIN_ROOT) \ | 383 --toolchain-root $(TOOLCHAIN_ROOT) \ |
380 » -i x8632,native,sse2 \ | 384 -i x8632,native,sse2 \ |
381 » -i x8632,native,sse4.1,test_vector_ops \ | 385 -i x8632,native,sse4.1,test_vector_ops \ |
382 » -i x8632,sandbox,sse4.1,Om1 \ | 386 -i x8632,sandbox,sse4.1,Om1 \ |
383 » -e x8664,native,sse2 \ | 387 -e x8664,native,sse2 \ |
384 » -e x8664,native,sse4.1,test_vector_ops \ | 388 -e x8664,native,sse4.1,test_vector_ops \ |
385 » -e x8664,native,sse2,test_global \ | 389 -e x8664,native,sse2,test_global \ |
386 » -i arm32,native,neon \ | 390 -i arm32,native,neon \ |
387 » -e arm32,native,neon,test_vector_ops \ | 391 -e arm32,native,neon,test_vector_ops \ |
388 » -e arm32,native,neon,test_select | 392 -e arm32,native,neon,test_select |
389 PNACL_BIN_PATH=$(PNACL_BIN_PATH) \ | 393 PNACL_BIN_PATH=$(PNACL_BIN_PATH) \ |
390 $(LLVM_SRC_PATH)/utils/lit/lit.py -sv crosstest/Output | 394 $(LLVM_SRC_PATH)/utils/lit/lit.py -sv crosstest/Output |
391 endif | 395 endif |
392 | 396 |
393 check-unit: $(OBJDIR)/run_unittests | 397 check-unit: $(OBJDIR)/run_unittests |
394 $(OBJDIR)/run_unittests | 398 $(OBJDIR)/run_unittests |
395 | 399 |
| 400 ALLSPEC := 177.mesa 179.art 183.equake 188.ammp 164.gzip 175.vpr 176.gcc \ |
| 401 181.mcf 186.crafty 197.parser 253.perlbmk 254.gap 255.vortex \ |
| 402 256.bzip2 300.twolf 252.eon |
| 403 .PHONY: $(ALLSPEC) |
| 404 |
| 405 TARGET := x8632 |
| 406 ifeq ($(TARGET),x8632) |
| 407 TARGETFLAG=x8632 |
| 408 SETUP=SetupGccX8632Opt |
| 409 SPEC := -O2 --filetype=obj |
| 410 endif |
| 411 ifeq ($(TARGET),arm32) |
| 412 TARGETFLAG=arm32 |
| 413 SETUP=SetupGccArmOpt |
| 414 SPEC := -O2 --filetype=asm |
| 415 endif |
| 416 |
| 417 %.spec2k: % |
| 418 ./pydir/szbuild_spec2k.py -v --force --target=$(TARGETFLAG) $(SPEC) $< |
| 419 ( cd ../../../tests/spec2k; \ |
| 420 ./run_all.sh RunTimedBenchmarks $(SETUP) train $< ) |
| 421 |
| 422 check-spec: $(OBJDIR)/pnacl-sz make_symlink $(ALLSPEC:=.spec2k) |
| 423 |
396 check: check-lit check-unit check-xtest | 424 check: check-lit check-unit check-xtest |
397 | 425 |
398 FORMAT_BLACKLIST = | 426 FORMAT_BLACKLIST = |
399 # Add one of the following lines for each source file to ignore. | 427 # Add one of the following lines for each source file to ignore. |
400 FORMAT_BLACKLIST += ! -name IceParseInstsTest.cpp | 428 FORMAT_BLACKLIST += ! -name IceParseInstsTest.cpp |
401 FORMAT_BLACKLIST += ! -name IceParseTypesTest.cpp | 429 FORMAT_BLACKLIST += ! -name IceParseTypesTest.cpp |
402 FORMAT_BLACKLIST += ! -name assembler_arm.h | 430 FORMAT_BLACKLIST += ! -name assembler_arm.h |
403 FORMAT_BLACKLIST += ! -name assembler_arm.cc | 431 FORMAT_BLACKLIST += ! -name assembler_arm.cc |
404 format: | 432 format: |
405 $(CLANG_FORMAT_PATH)/clang-format -style=LLVM -i \ | 433 $(CLANG_FORMAT_PATH)/clang-format -style=LLVM -i \ |
406 » `find . -regex '.*\.\(c\|h\|cpp\)' $(FORMAT_BLACKLIST)` | 434 `find . -regex '.*\.\(c\|h\|cpp\)' $(FORMAT_BLACKLIST)` |
407 | 435 |
408 format-diff: | 436 format-diff: |
409 git diff -U0 `git merge-base HEAD master` | \ | 437 git diff -U0 `git merge-base HEAD master` | \ |
410 » PATH=$(PNACL_BIN_PATH):$(PATH) \ | 438 PATH=$(PNACL_BIN_PATH):$(PATH) \ |
411 » $(LLVM_SRC_PATH)/../clang/tools/clang-format/clang-format-diff.py \ | 439 $(LLVM_SRC_PATH)/../clang/tools/clang-format/clang-format-diff.py \ |
412 » -p1 -style=LLVM -i | 440 -p1 -style=LLVM -i |
413 | 441 |
414 bloat: make_symlink | 442 bloat: make_symlink |
415 nm -C -S -l pnacl-sz | \ | 443 nm -C -S -l pnacl-sz | \ |
416 » bloat/bloat.py --nm-output=/dev/stdin syms > build/pnacl-sz.bloat.json | 444 bloat/bloat.py --nm-output=/dev/stdin syms > build/pnacl-sz.bloat.json |
417 @echo See Subzero size breakdown in bloat/pnacl-sz.bloat.html | 445 @echo See Subzero size breakdown in bloat/pnacl-sz.bloat.html |
418 | 446 |
419 docs: | 447 docs: |
420 doxygen Doxyfile | 448 doxygen Doxyfile |
421 @echo See file://`pwd`/docs/html/index.html | 449 @echo See file://`pwd`/docs/html/index.html |
422 | 450 |
423 clean: | 451 clean: |
424 rm -rf pnacl-sz *.o $(OBJDIR) $(SB_OBJDIR) build/pnacl-sz.bloat.json | 452 rm -rf pnacl-sz *.o $(OBJDIR) $(SB_OBJDIR) build/pnacl-sz.bloat.json |
425 | 453 |
426 clean-all: clean | 454 clean-all: clean |
427 rm -rf build/ docs/ | 455 rm -rf build/ docs/ |
OLD | NEW |