blob: 602616df4c3c17a39d22c9ddcc9cb8e1fb3ccb61 [file] [log] [blame]
Derek Schuffbc643132014-05-22 16:39:25 -07001# 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
3# invocation of make, like:
4#
Jim Stichnoth0a9e1262015-04-21 09:59:21 -07005# make LLVM_SRC_PATH=<path> LIBCXX_INSTALL_PATH=<path> CLANG_PATH=<path> \
Jan Voung44c3a802015-03-27 16:29:08 -07006# PNACL_BIN_PATH=<path> ...
Derek Schuffbc643132014-05-22 16:39:25 -07007#
8
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/
11# directories of LLVM, Clang in tools/clang/, etc.
12# Alternatively, if you're building vs. a binary download of LLVM, then
13# LLVM_SRC_PATH can point to the main untarred directory.
14LLVM_SRC_PATH ?= ../llvm
15
Jan Voung44c3a802015-03-27 16:29:08 -070016# The x86-32-specific sandboxed translator directory.
17# It holds sandboxed versions of libraries and binaries.
18SB_LLVM_PATH ?= $(shell readlink -e \
Jim Stichnoth2e7de232015-11-02 08:25:57 -080019 ../../out/sandboxed_translators_work/translator-i686/llvm-sb/Release)
Jan Voung44c3a802015-03-27 16:29:08 -070020
21# NACL_ROOT is the root of the native client repository.
22NACL_ROOT ?= $(shell python -c "import sys; sys.path.insert(0, 'pydir'); \
Jim Stichnoth2e7de232015-11-02 08:25:57 -080023 import utils; print utils.FindBaseNaCl()")
Jan Voung44c3a802015-03-27 16:29:08 -070024
Jan Voung8e32fed2015-06-17 10:16:23 -070025# TOOLCHAIN_ROOT is the location of NaCl/PNaCl toolchains and other
26# tools like qemu.
27TOOLCHAIN_ROOT ?= $(shell readlink -e $(NACL_ROOT)/toolchain/linux_x86)
28
Jan Voung68a06332015-03-05 14:33:38 -080029# PNACL_TOOLCHAIN_ROOT is the location of the PNaCl toolchain.
30# This is used as the default root for finding binutils, libcxx, etc.
Jan Voung8e32fed2015-06-17 10:16:23 -070031PNACL_TOOLCHAIN_ROOT ?= $(shell readlink -e $(TOOLCHAIN_ROOT)/pnacl_newlib_raw)
Jan Voung44c3a802015-03-27 16:29:08 -070032
33# The location of PNaCl tools (e.g., binutils objdump, pnacl-clang++, etc.).
34PNACL_BIN_PATH ?= $(shell readlink -e $(PNACL_TOOLCHAIN_ROOT)/bin)
Karl Schimpf8fcefc32014-09-15 12:56:50 -070035
Reed Kotler2c3c82e2016-01-21 20:33:08 -080036# Allow tests to be overridden, e.g.:
37# make -f Makefile.standalone check-lit \
38# CHECK_LIT_TESTS="tests_lit/llvm2ice_tests/{alloc,arith}.ll"
39# make -f Makefile.standalone check-xtest \
40# CHECK_XTEST_TESTS=crosstest/Output/simple_loop_x8632_native_O2_sse2.xtest
41CHECK_LIT_TESTS ?= tests_lit
42CHECK_XTEST_TESTS ?= crosstest/Output
43
Jim Stichnoth0a9e1262015-04-21 09:59:21 -070044# Hack to auto-detect autoconf versus cmake build of LLVM. If the LLVM tools
Jim Stichnothe5b58fb2015-06-01 15:17:20 -070045# were dynamically linked with something like libLLVM-3.7svn.so, it is an
Jim Stichnoth0a9e1262015-04-21 09:59:21 -070046# autoconf build, otherwise it is a cmake build. AUTOCONF is set to 0 for
47# cmake, nonzero for autoconf.
48AUTOCONF ?= $(shell ldd $(PNACL_BIN_PATH)/opt | grep -c libLLVM-)
49
Jan Voung68a06332015-03-05 14:33:38 -080050# CLANG_PATH is the location of the clang compiler to use for building
51# the host binaries.
Karl Schimpf8fcefc32014-09-15 12:56:50 -070052CLANG_PATH ?= $(shell readlink -e \
Jim Stichnoth2e7de232015-11-02 08:25:57 -080053 $(NACL_ROOT)/../third_party/llvm-build/Release+Asserts/bin)
Karl Schimpf8fcefc32014-09-15 12:56:50 -070054
Jan Voung68a06332015-03-05 14:33:38 -080055# LIBCXX_INSTALL_PATH is the directory where libc++ is located. It should
56# contain header files and corresponding libraries. This is used for
57# building the host binaries in conjuction with clang.
58LIBCXX_INSTALL_PATH ?= $(PNACL_TOOLCHAIN_ROOT)
Karl Schimpf9d928542015-04-16 15:08:05 -070059STDLIB_FLAGS := -stdlib=libc++ -I$(LIBCXX_INSTALL_PATH)/include/c++/v1
Jan Voung68a06332015-03-05 14:33:38 -080060
Jan Voung4c127ba2014-09-19 13:11:36 -070061HOST_ARCH ?= x86_64
Jan Voung839c4ce2014-07-28 15:19:43 -070062ifeq ($(HOST_ARCH),x86_64)
Jim Stichnoth6c6adf12015-04-07 14:22:25 -070063 HOST_FLAGS = -m64
Jan Voung839c4ce2014-07-28 15:19:43 -070064else
65 ifeq ($(HOST_ARCH),x86)
Jim Stichnoth6c6adf12015-04-07 14:22:25 -070066 HOST_FLAGS = -m32
Jan Voung839c4ce2014-07-28 15:19:43 -070067 endif
68endif
69
Jim Stichnothfddef242014-09-26 18:53:41 -070070ifdef DEBUG
71 OBJDIR = build/Debug
72 OPTLEVEL = -O0
Jan Voung44c3a802015-03-27 16:29:08 -070073 LINKOPTLEVEL = -O0
Jim Stichnothfddef242014-09-26 18:53:41 -070074else
75 OBJDIR = build/Release
Jim Stichnotha49e9d92014-12-07 14:25:34 -080076 OPTLEVEL = -O2 -ffunction-sections -fdata-sections
Jan Voung44c3a802015-03-27 16:29:08 -070077 LINKOPTLEVEL = -O2
Jim Stichnothfddef242014-09-26 18:53:41 -070078endif
79
Karl Schimpfb262c5e2014-10-27 14:41:57 -070080# The list of CXX defines that are dependent on build parameters.
Jan Voung44c3a802015-03-27 16:29:08 -070081BASE_CXX_DEFINES =
Jim Stichnothfa4efea2015-01-27 05:06:03 -080082CXX_EXTRA =
83LD_EXTRA =
Karl Schimpfb262c5e2014-10-27 14:41:57 -070084
85ifdef MINIMAL
Jim Stichnothe3c02c22014-12-05 14:16:07 -080086 NOASSERT = 1
Jim Stichnothb88d8c82016-03-11 15:33:00 -080087 NODUMP = 1
Karl Schimpfb262c5e2014-10-27 14:41:57 -070088 OBJDIR := $(OBJDIR)+Min
Jim Stichnothb88d8c82016-03-11 15:33:00 -080089 BASE_CXX_DEFINES += -DALLOW_LLVM_CL=0 -DALLOW_LLVM_IR=0 \
90 -DALLOW_LLVM_IR_AS_INPUT=0 -DALLOW_TIMERS=0 -DALLOW_MINIMAL_BUILD=1
Karl Schimpfb262c5e2014-10-27 14:41:57 -070091else
Jim Stichnothb88d8c82016-03-11 15:33:00 -080092 BASE_CXX_DEFINES += -DALLOW_LLVM_CL=1 -DALLOW_LLVM_IR=1 \
93 -DALLOW_LLVM_IR_AS_INPUT=1 -DALLOW_TIMERS=1 -DALLOW_MINIMAL_BUILD=0
94endif
95
96ifdef NODUMP
97 OBJDIR := $(OBJDIR)+NoDump
98 BASE_CXX_DEFINES += -DALLOW_DUMP=0
99else
100 BASE_CXX_DEFINES += -DALLOW_DUMP=1
Karl Schimpfb262c5e2014-10-27 14:41:57 -0700101endif
102
Jim Stichnoth999a22f2016-03-12 10:22:53 -0800103# Restrict to a single supported target. Current options:
104# SZTARGET=ARM32
105# SZTARGET=MIPS32
106# SZTARGET=X8632
107# SZTARGET=X8664
108ifdef SZTARGET
109 OBJDIR := $(OBJDIR)+T_$(SZTARGET)
110 BASE_CXX_DEFINES += -DSZTARGET=$(SZTARGET)
111endif
112
Jim Stichnothf5fdd232016-05-09 12:24:36 -0700113BASE_CXX_DEFINES += -DPNACL_LLVM
Jim Stichnoth6b0ee2a2016-08-17 16:20:21 -0700114SZ_COMMIT_COUNT := $(shell git rev-list --count HEAD)
115SZ_GIT_HASH := $(shell git rev-parse HEAD)
116BASE_CXX_DEFINES += -DSUBZERO_REVISION=$(SZ_COMMIT_COUNT)_$(SZ_GIT_HASH)
Jim Stichnothf5fdd232016-05-09 12:24:36 -0700117
Jan Voung44c3a802015-03-27 16:29:08 -0700118CXX_DEFINES := $(BASE_CXX_DEFINES) -DPNACL_BROWSER_TRANSLATOR=0
119
Jim Stichnoth9c234e22014-10-01 09:28:21 -0700120ifdef NOASSERT
121 ASSERTIONS = -DNDEBUG
122else
123 ASSERTIONS =
124 OBJDIR := $(OBJDIR)+Asserts
125endif
126
Andrew Scull6ef79492015-09-09 15:50:42 -0700127ifdef UBSAN
128 OBJDIR := $(OBJDIR)+UBSan
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800129 CXX_EXTRA += -fsanitize=undefined -fno-sanitize=vptr \
130 -fno-sanitize=nonnull-attribute
Andrew Scull6ef79492015-09-09 15:50:42 -0700131 LD_EXTRA += -fsanitize=undefined
132endif
133
134ifdef UBSAN_TRAP
135 OBJDIR := $(OBJDIR)+UBSan_Trap
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800136 CXX_EXTRA += -fsanitize=undefined-trap -fsanitize-undefined-trap-on-error \
137 -fno-sanitize=vptr -fno-sanitize=nonnull-attribute
Andrew Scull6ef79492015-09-09 15:50:42 -0700138 LD_EXTRA += -fsanitize=undefined-trap
139endif
140
Jim Stichnothfa4efea2015-01-27 05:06:03 -0800141ifdef TSAN
142 OBJDIR := $(OBJDIR)+TSan
143 CXX_EXTRA += -fsanitize=thread
144 LD_EXTRA += -fsanitize=thread
145endif
146
Andrew Scull86df4e92015-07-30 13:54:44 -0700147ifdef ASAN
148 OBJDIR := $(OBJDIR)+ASan
149 CXX_EXTRA += -fsanitize=address
150 LD_EXTRA += -fsanitize=address
151endif
152
Andrew Scull6ef79492015-09-09 15:50:42 -0700153ifdef MSAN
Andrew Scull00741a02015-09-16 19:04:09 -0700154 # TODO(ascull): this has an as yet undiagnosed uninitialized memory access
Andrew Scull6ef79492015-09-09 15:50:42 -0700155 OBJDIR := $(OBJDIR)+MSan
156 CXX_EXTRA += -fsanitize=memory
157 LD_EXTRA += -fsanitize=memory
158endif
159
David Sehrb19d39c2016-01-13 14:17:37 -0800160ifdef FORCEASM
161 FORCEASM_FLAG = --filetype=asm
162 # With --filetype=asm and --sandbox, the llvm-mc assembler emits the lock and
163 # 16-bit prefixes in the "wrong" order, causing the validator to reject the
164 # resulting nexe. So we just disable those tests for now.
165 FORCEASM_XTEST_EXCLUDES = -e x8632,sandbox,test_sync_atomic
166 FORCEASM_LIT_PARAM = --param=FORCEASM
John Porto27fddcc2016-02-02 15:06:09 -0800167 # x86 sandboxing lit tests are disabled because filetype=asm does not
168 # handle bundle_lock pad-to-end correctly.
John Porto56958cb2016-01-14 09:18:18 -0800169 # TODO(jpp): fix this.
170 FORCEASM_LIT_TEST_EXCLUDES = --filter='^(?!.*/x86/sandboxing.ll).*'
David Sehrb19d39c2016-01-13 14:17:37 -0800171else
172 FORCEASM_FLAG =
173 FORCEASM_XTEST_EXCLUDES =
174 FORCEASM_LIT_PARAM =
John Porto56958cb2016-01-14 09:18:18 -0800175 FORCEASM_LIT_TEST_EXCLUDES =
David Sehrb19d39c2016-01-13 14:17:37 -0800176endif
177
David Sehr4c16ac02016-03-17 13:51:42 -0700178ifdef LINUX_MALLOC_PROFILE
179 OBJDIR := $(OBJDIR)+MalProf
180 CXX_EXTRA += -DALLOW_LINUX_MALLOC_PROFILE=1
181 LD_EXTRA += -Wl,--export-dynamic
182endif
183
Jan Voung44c3a802015-03-27 16:29:08 -0700184SB_OBJDIR := $(OBJDIR)+Sandboxed
Jim Stichnothc4ed5492016-02-29 09:16:00 -0800185SBB_OBJDIR := $(OBJDIR)+SandboxedBrowser
Jan Voung44c3a802015-03-27 16:29:08 -0700186
Eric Holk16f80612016-04-04 17:07:42 -0700187V8_DIR = $(NACL_ROOT)/../v8
188V8_CXXFLAGS := -I$(V8_DIR)
189
Derek Schuffbc643132014-05-22 16:39:25 -0700190$(info -----------------------------------------------)
191$(info Using LLVM_SRC_PATH = $(LLVM_SRC_PATH))
Jan Voung44c3a802015-03-27 16:29:08 -0700192$(info Using SB_LLVM_PATH = $(SB_LLVM_PATH))
193$(info Using NACL_ROOT = $(NACL_ROOT))
Jan Voung8e32fed2015-06-17 10:16:23 -0700194$(info Using TOOLCHAIN_ROOT = $(TOOLCHAIN_ROOT))
Jan Voung68a06332015-03-05 14:33:38 -0800195$(info Using PNACL_TOOLCHAIN_ROOT = $(PNACL_TOOLCHAIN_ROOT))
Jan Voung44c3a802015-03-27 16:29:08 -0700196$(info Using PNACL_BIN_PATH = $(PNACL_BIN_PATH))
Karl Schimpf8fcefc32014-09-15 12:56:50 -0700197$(info Using CLANG_PATH = $(CLANG_PATH))
Jan Voung68a06332015-03-05 14:33:38 -0800198$(info Using LIBCXX_INSTALL_PATH = $(LIBCXX_INSTALL_PATH))
Jan Voung839c4ce2014-07-28 15:19:43 -0700199$(info Using HOST_ARCH = $(HOST_ARCH))
Derek Schuffbc643132014-05-22 16:39:25 -0700200$(info -----------------------------------------------)
201
Jim Stichnoth0a9e1262015-04-21 09:59:21 -0700202LLVM_CXXFLAGS := `$(PNACL_BIN_PATH)/llvm-config --cxxflags`
Jan Voung44c3a802015-03-27 16:29:08 -0700203SB_LLVM_CXXFLAGS := $(LLVM_CXXFLAGS)
204
205# Listing specific libraries that are needed for pnacl-sz
206# and the unittests, since we build "tools-only" for the
207# sandboxed_translators (which doesn't include every library
208# listed by llvm-config).
Jim Stichnoth0a9e1262015-04-21 09:59:21 -0700209
210LLVM_LIBS_LIST := -lLLVMIRReader -lLLVMBitReader -lLLVMNaClBitTestUtils \
211 -lLLVMNaClBitReader -lLLVMNaClBitAnalysis -lLLVMNaClBitWriter \
212 -lLLVMAsmParser -lLLVMNaClAnalysis -lLLVMCore -lLLVMSupport
213
214ifeq ($(AUTOCONF), 0)
215 # LLVM cmake build
Karl Schimpf28f3f732015-06-24 09:32:40 -0700216 LLVM_LIBS := $(LLVM_LIBS_LIST)
Jim Stichnoth0a9e1262015-04-21 09:59:21 -0700217 # For the cmake build, the gtest libs end up in the same place as the LLVM
218 # libs, so no "-L..." arg is needed.
219 GTEST_LIB_PATH ?=
220 CLANG_FORMAT_PATH ?= $(PNACL_BIN_PATH)
221else
222 # LLVM autoconf build
Jim Stichnothe5b58fb2015-06-01 15:17:20 -0700223 LLVM_LIBS := -lLLVM-3.7svn
Jim Stichnoth0a9e1262015-04-21 09:59:21 -0700224 GTEST_LIB_PATH ?= -L../../out/llvm_x86_64_linux_work/Release+Asserts/lib
Srdjan Obucina2d152e32016-06-22 09:04:07 -0700225 ifneq ($(wildcard \
226 ../../out/llvm_x86_64_linux_work/Release+Asserts/bin/clang-format),)
227 CLANG_FORMAT_PATH ?= ../../out/llvm_x86_64_linux_work/Release+Asserts/bin
228 else
229 CLANG_FORMAT_PATH ?= \
230 ../../out/llvm_x86_64_linux_debug_work/Debug+Asserts/bin
231 endif
Jim Stichnoth0a9e1262015-04-21 09:59:21 -0700232endif
233
Jan Voung44c3a802015-03-27 16:29:08 -0700234LLVM_LDFLAGS := $(LLVM_LIBS) \
Jim Stichnoth0a9e1262015-04-21 09:59:21 -0700235 `$(PNACL_BIN_PATH)/llvm-config --ldflags` \
236 `$(PNACL_BIN_PATH)/llvm-config --system-libs`
Jim Stichnoth7a20a402016-02-24 21:32:53 -0800237SB_LLVM_LDFLAGS := -Wl,--start-group $(LLVM_LIBS_LIST) -Wl,--end-group \
Jan Voung44c3a802015-03-27 16:29:08 -0700238 -L$(SB_LLVM_PATH)/lib
Derek Schuffbc643132014-05-22 16:39:25 -0700239
Jim Stichnoth5e06f9f2014-09-17 08:41:21 -0700240CCACHE := `command -v ccache`
241CXX := CCACHE_CPP2=yes $(CCACHE) $(CLANG_PATH)/clang++
Jan Voung44c3a802015-03-27 16:29:08 -0700242SB_CXX := CCACHE_CPP2=yes $(CCACHE) $(PNACL_BIN_PATH)/pnacl-clang++
243SB_TRANSLATE := $(PNACL_BIN_PATH)/pnacl-translate
Jim Stichnoth7a20a402016-02-24 21:32:53 -0800244SB_FINALIZE := $(PNACL_BIN_PATH)/pnacl-finalize --no-strip-syms
Jan Voung839c4ce2014-07-28 15:19:43 -0700245
Jan Voungc2648c22015-07-30 21:29:14 -0700246# Extra warnings that LLVM's build system adds in addition to -Wall.
247LLVM_EXTRA_WARNINGS := -Wcovered-switch-default
248
Jim Stichnothcaeaa272016-01-10 12:53:44 -0800249# Use g++ to compile, to check for errors/warnings that clang++ might have
250# missed. It's unlikely to link, unless LLVM was also built with g++, so the
251# compile_only target should be used. Note: This ifdef section is deliberately
252# placed here instead of with the other ifdef sections, so that its redefinition
253# of CXX/STDLIB_FLAGS/LLVM_EXTRA_WARNINGS follows their normal definitions.
254ifdef GPLUSPLUS
255 CXX := CCACHE_CPP2=yes $(CCACHE) g++
256 STDLIB_FLAGS :=
Jim Stichnothb0051df2016-01-13 11:39:15 -0800257 LLVM_EXTRA_WARNINGS := \
258 -Wcast-qual \
259 -Wno-comment \
260 -Wno-long-long \
261 -Wno-maybe-uninitialized \
262 -Wno-missing-field-initializers \
263 -Wno-unused-parameter \
264 -Wwrite-strings
Jim Stichnothcaeaa272016-01-10 12:53:44 -0800265 OBJDIR := $(OBJDIR)+Gplusplus
266endif
267
Eric Holk16f80612016-04-04 17:07:42 -0700268BASE_CXXFLAGS := -std=gnu++11 -Wall -Wextra -fno-rtti \
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800269 -fno-exceptions $(OPTLEVEL) $(ASSERTIONS) -g -pedantic \
Eric Holk67c7c412016-04-15 13:05:37 -0700270 $(LLVM_EXTRA_WARNINGS) $(CXX_EXTRA) -MP -MD -Werror
Jan Voung44c3a802015-03-27 16:29:08 -0700271
Eric Holk16f80612016-04-04 17:07:42 -0700272ifdef WASM
Eric Holk16f80612016-04-04 17:07:42 -0700273 BASE_CXXFLAGS := $(BASE_CXXFLAGS) $(V8_CXXFLAGS) -DALLOW_WASM=1
274 OBJDIR := $(OBJDIR)+Wasm
275else
Eric Holk67c7c412016-04-15 13:05:37 -0700276 BASE_CXXFLAGS := $(BASE_CXXFLAGS) -DALLOW_WASM=0
Eric Holk16f80612016-04-04 17:07:42 -0700277endif
278
Jim Stichnoth7146e992016-05-02 12:06:22 -0700279# TODO(stichnot,jpp): Restructure static fields in template classes to avoid
280# needing -Wno-undefined-var-template .
Jan Voung44c3a802015-03-27 16:29:08 -0700281CXXFLAGS := $(LLVM_CXXFLAGS) $(BASE_CXXFLAGS) $(CXX_DEFINES) $(HOST_FLAGS) \
Jim Stichnoth7146e992016-05-02 12:06:22 -0700282 $(STDLIB_FLAGS) -Wno-undefined-var-template
Jim Stichnothc4ed5492016-02-29 09:16:00 -0800283SB_CXXFLAGS := $(SB_LLVM_CXXFLAGS) $(BASE_CXXFLAGS) $(BASE_CXX_DEFINES) \
284 -Wno-unknown-pragmas -I$(NACL_ROOT) -I$(NACL_ROOT)/..
Jan Voung44c3a802015-03-27 16:29:08 -0700285
Jim Stichnothfa4efea2015-01-27 05:06:03 -0800286LDFLAGS := $(HOST_FLAGS) -L$(LIBCXX_INSTALL_PATH)/lib -Wl,--gc-sections \
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800287 $(LD_EXTRA) $(STDLIB_FLAGS)
Jan Voung44c3a802015-03-27 16:29:08 -0700288# Not specifying -Wl,--gc-sections but instead doing bitcode linking GC w/ LTO.
289SB_LDFLAGS := $(LINKOPTLEVEL) $(LD_EXTRA)
Derek Schuffbc643132014-05-22 16:39:25 -0700290
Jim Stichnothc59288b2015-11-09 11:38:40 -0800291# List the target-specific source files first, which generally take longer to
292# compile, in the hope of improving parallel build time.
Karl Schimpfab06df32014-10-29 14:58:25 -0700293SRCS = \
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800294 IceAssemblerARM32.cpp \
Jaydeep Patil135f5db2016-08-29 05:14:05 -0700295 IceAssemblerMIPS32.cpp \
Jim Stichnothc59288b2015-11-09 11:38:40 -0800296 IceInstARM32.cpp \
297 IceInstMIPS32.cpp \
298 IceInstX8632.cpp \
299 IceInstX8664.cpp \
300 IceTargetLowering.cpp \
301 IceTargetLoweringARM32.cpp \
302 IceTargetLoweringMIPS32.cpp \
David Sehr6b80cf12016-01-21 23:16:58 -0800303 IceTargetLoweringX86.cpp \
Jim Stichnothc59288b2015-11-09 11:38:40 -0800304 IceTargetLoweringX8632.cpp \
305 IceTargetLoweringX8664.cpp \
306 IceAssembler.cpp \
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800307 IceBrowserCompileServer.cpp \
308 IceCfg.cpp \
309 IceCfgNode.cpp \
310 IceClFlags.cpp \
311 IceCompiler.cpp \
312 IceCompileServer.cpp \
313 IceELFObjectWriter.cpp \
314 IceELFSection.cpp \
315 IceFixups.cpp \
316 IceGlobalContext.cpp \
317 IceGlobalInits.cpp \
318 IceInst.cpp \
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800319 IceIntrinsics.cpp \
320 IceLiveness.cpp \
321 IceLoopAnalyzer.cpp \
Jim Stichnoth98ba0062016-03-07 09:26:22 -0800322 IceMangling.cpp \
John Portoe82b5602016-02-24 15:58:55 -0800323 IceMemory.cpp \
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800324 IceOperand.cpp \
Jim Stichnothdd6dcfa2016-04-18 12:52:09 -0700325 IceRangeSpec.cpp \
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800326 IceRegAlloc.cpp \
Jim Stichnoth54cf1a22016-08-08 14:15:00 -0700327 IceRevision.cpp \
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800328 IceRNG.cpp \
329 IceSwitchLowering.cpp \
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800330 IceThreading.cpp \
331 IceTimerTree.cpp \
332 IceTranslator.cpp \
333 IceTypes.cpp \
Jim Stichnothb9a84722016-08-01 13:18:36 -0700334 IceVariableSplitting.cpp \
David Sehr4c16ac02016-03-17 13:51:42 -0700335 LinuxMallocProfiling.cpp \
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800336 main.cpp \
337 PNaClTranslator.cpp
Derek Schuffbc643132014-05-22 16:39:25 -0700338
Karl Schimpfab06df32014-10-29 14:58:25 -0700339ifndef MINIMAL
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800340 SRCS += \
Thomas Lively7f0ab862016-06-14 14:06:17 -0700341 IceASanInstrumentation.cpp \
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800342 IceConverter.cpp \
Thomas Lively7f0ab862016-06-14 14:06:17 -0700343 IceInstrumentation.cpp \
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800344 IceTypeConverter.cpp
Karl Schimpfab06df32014-10-29 14:58:25 -0700345endif
346
Eric Holk16f80612016-04-04 17:07:42 -0700347ifdef WASM
348 SRCS += \
349 WasmTranslator.cpp
350endif
351
Jim Stichnothfddef242014-09-26 18:53:41 -0700352OBJS=$(patsubst %.cpp, $(OBJDIR)/%.o, $(SRCS))
Jan Voung44c3a802015-03-27 16:29:08 -0700353SB_OBJS=$(patsubst %.cpp, $(SB_OBJDIR)/%.o, $(SRCS))
Jim Stichnothc4ed5492016-02-29 09:16:00 -0800354SBB_OBJS=$(patsubst %.cpp, $(SBB_OBJDIR)/%.o, $(SRCS))
Derek Schuffbc643132014-05-22 16:39:25 -0700355
Jan Voung08c3bcd2014-12-01 17:55:16 -0800356UNITTEST_SRCS = \
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800357 BitcodeMunge.cpp \
358 IceELFSectionTest.cpp \
359 IceParseInstsTest.cpp
John Porto59f2d922015-07-31 13:45:48 -0700360
361# The X86 assembler tests take too long to compile. Given how infrequently the
362# assembler will change, we disable them.
363ifdef CHECK_X86_ASM
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800364 ifndef DEBUG
365 $(error Run check-unit with DEBUG=1 lest your machine perish)
366 endif
John Porto59f2d922015-07-31 13:45:48 -0700367 UNITTEST_SRCS += AssemblerX8632/LowLevel.cpp \
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800368 AssemblerX8632/DataMov.cpp \
369 AssemblerX8632/Locked.cpp \
370 AssemblerX8632/GPRArith.cpp \
371 AssemblerX8632/XmmArith.cpp \
372 AssemblerX8632/ControlFlow.cpp \
373 AssemblerX8632/Other.cpp \
374 AssemblerX8632/X87.cpp \
375 AssemblerX8664/LowLevel.cpp \
376 AssemblerX8664/DataMov.cpp \
377 AssemblerX8664/Locked.cpp \
378 AssemblerX8664/GPRArith.cpp \
379 AssemblerX8664/XmmArith.cpp \
380 AssemblerX8664/ControlFlow.cpp \
381 AssemblerX8664/Other.cpp
John Porto59f2d922015-07-31 13:45:48 -0700382endif
Jan Voung08c3bcd2014-12-01 17:55:16 -0800383
384UNITTEST_OBJS = $(patsubst %.cpp, $(OBJDIR)/unittest/%.o, $(UNITTEST_SRCS))
Jim Stichnothfa0cfa52015-02-26 09:42:36 -0800385UNITTEST_LIB_OBJS = $(filter-out $(OBJDIR)/main.o,$(OBJS))
Jan Voung08c3bcd2014-12-01 17:55:16 -0800386
Jim Stichnothc4ed5492016-02-29 09:16:00 -0800387NEXES = $(SB_OBJDIR)/pnacl-sz.x8632.nexe \
388 $(SB_OBJDIR)/pnacl-sz.x8664.nexe \
389 $(SBB_OBJDIR)/pnacl_public_x86_32_pnacl_sz_nexe \
390 $(SBB_OBJDIR)/pnacl_public_x86_64_pnacl_sz_nexe
Jim Stichnothe13d1eb2016-03-21 12:49:33 -0700391NEXES_LITE = $(SB_OBJDIR)/pnacl-sz.x8664.nexe
Jim Stichnothc4ed5492016-02-29 09:16:00 -0800392
Derek Schuffbc643132014-05-22 16:39:25 -0700393# Keep all the first target so it's the default.
Jim Stichnothfa0cfa52015-02-26 09:42:36 -0800394all: $(OBJDIR)/pnacl-sz make_symlink runtime
Derek Schuffbc643132014-05-22 16:39:25 -0700395
Jan Voung44c3a802015-03-27 16:29:08 -0700396ifdef TSAN
Jim Stichnothe13d1eb2016-03-21 12:49:33 -0700397sb sb-lite:
Jan Voung44c3a802015-03-27 16:29:08 -0700398 @echo "Skipping pnacl-sz.*.nexe: TSAN isn't supported under NaCl."
399else
Jim Stichnoth96fac392016-03-11 14:58:23 -0800400sb: $(NEXES) sb_make_symlink exists-sbtc
Jim Stichnothe13d1eb2016-03-21 12:49:33 -0700401sb-lite: $(NEXES_LITE) exists-sbtc
Jan Voung44c3a802015-03-27 16:29:08 -0700402endif
403
Karl Schimpf6f9ba112015-06-22 13:20:23 -0700404# SHOW_BUILD_ATTS is an executable that is run to show what build
405# attributes were used to build pnacl-sz.
Karl Schimpfcb6e95a2015-07-23 09:10:03 -0700406SHOW_BUILD_ATTS = $(OBJDIR)/pnacl-sz --build-atts
Karl Schimpf6f9ba112015-06-22 13:20:23 -0700407
Karl Schimpf6af63362014-10-29 14:55:00 -0700408# Creates symbolic link so that testing is easier. Also runs
Jim Stichnothfa0cfa52015-02-26 09:42:36 -0800409# pnacl-sz to verify that the defines flags have valid values,
Karl Schimpf6af63362014-10-29 14:55:00 -0700410# as well as describe the corresponding build attributes.
Jim Stichnothfa0cfa52015-02-26 09:42:36 -0800411make_symlink: $(OBJDIR)/pnacl-sz
412 rm -rf pnacl-sz
413 ln -s $(OBJDIR)/pnacl-sz
Karl Schimpf6af63362014-10-29 14:55:00 -0700414 @echo "Build Attributes:"
Karl Schimpf6f9ba112015-06-22 13:20:23 -0700415 @$(SHOW_BUILD_ATTS)
Derek Schuffbc643132014-05-22 16:39:25 -0700416
Jim Stichnothc4ed5492016-02-29 09:16:00 -0800417sb_make_symlink: $(NEXES)
418 $(foreach nexe,$(NEXES),rm -rf $(notdir $(nexe)); ln -s $(nexe);)
419
420%.pexe : %.nonfinal.pexe
421 $(SB_FINALIZE) -o $@ $<
Jim Stichnoth7a20a402016-02-24 21:32:53 -0800422
Reed Kotler2c3c82e2016-01-21 20:33:08 -0800423.PHONY: all compile_only make_symlink runtime bloat sb docs help \
Jim Stichnoth96fac392016-03-11 14:58:23 -0800424 help-check-lit help-check-xtest exists-nonsfi-x8632 \
425 exists-nonsfi-arm32 exists-sbtc exists-spec
Jim Stichnoth23bee882015-11-17 06:14:05 -0800426
427compile_only: $(OBJS)
Jim Stichnothfddef242014-09-26 18:53:41 -0700428
Eric Holk16f80612016-04-04 17:07:42 -0700429V8_LIBDIR=$(V8_DIR)/out/native/lib.target
430
431ifdef WASM
432 V8_LIBS := \
433 $(V8_LIBDIR)/libv8.so \
434 $(V8_LIBDIR)/libicuuc.so \
435 $(V8_LIBDIR)/libicui18n.so
436endif
437
Jim Stichnothfa0cfa52015-02-26 09:42:36 -0800438$(OBJDIR)/pnacl-sz: $(OBJS)
Jim Stichnoth33246422014-11-24 14:36:23 -0800439 $(CXX) $(LDFLAGS) -o $@ $^ $(LLVM_LDFLAGS) \
Eric Holk16f80612016-04-04 17:07:42 -0700440 -Wl,-rpath=$(abspath $(LIBCXX_INSTALL_PATH)/lib) $(V8_LIBS)
Derek Schuffbc643132014-05-22 16:39:25 -0700441
Jim Stichnoth7a20a402016-02-24 21:32:53 -0800442$(SB_OBJDIR)/pnacl-sz.nonfinal.pexe: $(SB_OBJS)
443 $(SB_CXX) $(SB_LDFLAGS) -o $@ $^ $(SB_LLVM_LDFLAGS)
444
Jim Stichnothc4ed5492016-02-29 09:16:00 -0800445$(SBB_OBJDIR)/pnacl-sz.nonfinal.pexe: $(SBB_OBJS)
446 $(SB_CXX) $(SB_LDFLAGS) -o $@ $^ $(SB_LLVM_LDFLAGS) \
447 --pnacl-disable-abi-check
Jim Stichnoth7a20a402016-02-24 21:32:53 -0800448
449$(SB_OBJDIR)/pnacl-sz.x8632.nexe: $(SB_OBJDIR)/pnacl-sz.pexe
450 $(SB_TRANSLATE) -arch x86-32 $^ -o $@
451
452$(SB_OBJDIR)/pnacl-sz.x8664.nexe: $(SB_OBJDIR)/pnacl-sz.pexe
453 $(SB_TRANSLATE) -arch x86-64 $^ -o $@
Jan Voung44c3a802015-03-27 16:29:08 -0700454
Jim Stichnothc4ed5492016-02-29 09:16:00 -0800455$(SBB_OBJDIR)/pnacl_public_x86_32_pnacl_sz_nexe: $(SBB_OBJDIR)/pnacl-sz.pexe
456 $(SB_TRANSLATE) -arch x86-32 $^ -o $@
457
458$(SBB_OBJDIR)/pnacl_public_x86_64_pnacl_sz_nexe: $(SBB_OBJDIR)/pnacl-sz.pexe
459 $(SB_TRANSLATE) -arch x86-64 $^ -o $@
460
John Porto2187c842015-12-16 07:48:25 -0800461src/IceRegistersARM32.def: pydir/gen_arm32_reg_tables.py
462 python $< > $@
463
John Porto70e3f1c2016-03-16 04:20:49 -0700464-include $(foreach dep,$(SRCS:.cpp=.d),$(OBJDIR)/$(dep))
465$(OBJS): $(OBJDIR)/%.o: src/%.cpp
Derek Schuffbc643132014-05-22 16:39:25 -0700466 $(CXX) -c $(CXXFLAGS) $< -o $@
467
John Porto70e3f1c2016-03-16 04:20:49 -0700468-include $(foreach dep,$(SRCS:.cpp=.d),$(SB_OBJDIR)/$(dep))
469$(SB_OBJS): $(SB_OBJDIR)/%.o: src/%.cpp
Jim Stichnothc4ed5492016-02-29 09:16:00 -0800470 $(SB_CXX) -c $(SB_CXXFLAGS) -DPNACL_BROWSER_TRANSLATOR=0 $< -o $@
471
John Porto70e3f1c2016-03-16 04:20:49 -0700472-include $(foreach dep,$(SRCS:.cpp=.d),$(SBB_OBJDIR)/$(dep))
473$(SBB_OBJS): $(SBB_OBJDIR)/%.o: src/%.cpp
Jim Stichnothc4ed5492016-02-29 09:16:00 -0800474 $(SB_CXX) -c $(SB_CXXFLAGS) -DPNACL_BROWSER_TRANSLATOR=1 $< -o $@
Jan Voung44c3a802015-03-27 16:29:08 -0700475
Jan Voung08c3bcd2014-12-01 17:55:16 -0800476$(OBJDIR)/run_unittests: $(UNITTEST_OBJS) $(UNITTEST_LIB_OBJS)
Jim Stichnothe7e9b022015-04-21 15:05:22 -0700477 $(CXX) $(GTEST_LIB_PATH) $(LDFLAGS) -o $@ $^ $(LLVM_LDFLAGS) \
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800478 -lgtest -lgtest_main -ldl \
479 -Wl,-rpath=$(abspath $(LIBCXX_INSTALL_PATH)/lib)
Jan Voung08c3bcd2014-12-01 17:55:16 -0800480
John Porto70e3f1c2016-03-16 04:20:49 -0700481-include $(foreach dep,$(UNITTEST_SRCS:.cpp=.d),$(OBJDIR)/unittest/$(dep))
482$(UNITTEST_OBJS): $(OBJDIR)/unittest/%.o: unittest/%.cpp
Jan Voung08c3bcd2014-12-01 17:55:16 -0800483 $(CXX) -c $(CXXFLAGS) \
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800484 -Isrc/ \
485 -Iunittest/ \
486 -I$(LLVM_SRC_PATH)/utils/unittest/googletest/include \
487 -I$(LLVM_SRC_PATH) \
488 -DGTEST_HAS_RTTI=0 -DGTEST_USE_OWN_TR1_TUPLE \
Jim Stichnoth5526c172016-03-08 22:46:19 -0800489 -Wno-expansion-to-defined \
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800490 $< -o $@
Jan Voung08c3bcd2014-12-01 17:55:16 -0800491
Jim Stichnothfddef242014-09-26 18:53:41 -0700492$(OBJS): | $(OBJDIR)
Jan Voung44c3a802015-03-27 16:29:08 -0700493$(SB_OBJS): | $(SB_OBJDIR)
Jim Stichnothc4ed5492016-02-29 09:16:00 -0800494$(SBB_OBJS): | $(SBB_OBJDIR)
Derek Schuffbc643132014-05-22 16:39:25 -0700495
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800496$(UNITTEST_OBJS): | $(OBJDIR)/unittest $(OBJDIR)/unittest/AssemblerX8632 \
497 $(OBJDIR)/unittest/AssemblerX8664
Jan Voung08c3bcd2014-12-01 17:55:16 -0800498
Jim Stichnothfddef242014-09-26 18:53:41 -0700499$(OBJDIR):
Derek Schuffbc643132014-05-22 16:39:25 -0700500 @mkdir -p $@
Jan Voung44c3a802015-03-27 16:29:08 -0700501$(SB_OBJDIR):
502 @mkdir -p $@
Jim Stichnothc4ed5492016-02-29 09:16:00 -0800503$(SBB_OBJDIR):
504 @mkdir -p $@
Derek Schuffbc643132014-05-22 16:39:25 -0700505
Jan Voung08c3bcd2014-12-01 17:55:16 -0800506$(OBJDIR)/unittest: $(OBJDIR)
507 @mkdir -p $@
508
John Porto2fea26c2015-07-28 16:28:07 -0700509$(OBJDIR)/unittest/AssemblerX8632: $(OBJDIR)/unittest
510 @mkdir -p $@
511$(OBJDIR)/unittest/AssemblerX8664: $(OBJDIR)/unittest
512 @mkdir -p $@
513
Jim Stichnoth8ff4b282016-01-04 15:39:06 -0800514RT_SRC := runtime/szrt.c runtime/szrt_ll.ll runtime/szrt_profiler.c \
515 runtime/szrt_asm_x8632.s runtime/szrt_asm_x8664.s \
Thomas Lively4e81fe02016-06-15 10:00:21 -0700516 runtime/szrt_asm_arm32.s runtime/szrt_asan.c
Jan Voung050deaa2015-06-12 15:12:05 -0700517RT_OBJ := build/runtime/szrt_native_x8632.o build/runtime/szrt_sb_x8632.o \
Jim Stichnoth8ff4b282016-01-04 15:39:06 -0800518 build/runtime/szrt_nonsfi_x8632.o \
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800519 build/runtime/szrt_native_x8664.o build/runtime/szrt_sb_x8664.o \
Jim Stichnoth8ff4b282016-01-04 15:39:06 -0800520 build/runtime/szrt_nonsfi_x8664.o \
521 build/runtime/szrt_native_arm32.o build/runtime/szrt_sb_arm32.o \
Thomas Lively4e81fe02016-06-15 10:00:21 -0700522 build/runtime/szrt_nonsfi_arm32.o \
523 build/runtime/szrt_asan_x8632.o build/runtime/szrt_asan_x8664.o \
524 build/runtime/szrt_asan_arm32.o
Jim Stichnoth9738a9e2015-02-23 16:39:06 -0800525
Srdjan Obucina623f8ce2016-09-26 20:03:20 -0700526EXCLUDED_RT :=
527ifdef MIPS
528RT_SRC += runtime/szrt_asm_mips32.s
529RT_OBJ += build/runtime/szrt_native_mips32.o build/runtime/szrt_sb_mips32.o
530else
531EXCLUDED_RT += --exclude-target=mips32
532endif
533
Jim Stichnoth9738a9e2015-02-23 16:39:06 -0800534runtime: $(RT_OBJ)
535
536# Use runtime.is.built so that build-runtime.py is invoked only once
537# even in a parallel build.
538.INTERMEDIATE: runtime.is.built
539$(RT_OBJ): runtime.is.built
John Portof8b4cc82015-06-09 18:06:19 -0700540runtime.is.built: $(RT_SRC) pydir/build-runtime.py
Jim Stichnoth9738a9e2015-02-23 16:39:06 -0800541 @echo ================ Building Subzero runtime ================
Srdjan Obucina623f8ce2016-09-26 20:03:20 -0700542 ./pydir/build-runtime.py -v --pnacl-root $(PNACL_TOOLCHAIN_ROOT) \
543 $(EXCLUDED_RT)
Jim Stichnoth9738a9e2015-02-23 16:39:06 -0800544
Thomas Lively3f97afb2016-07-07 14:56:21 -0700545check-lit: $(OBJDIR)/pnacl-sz make_symlink runtime
Jim Stichnoth0a9e1262015-04-21 09:59:21 -0700546 PNACL_BIN_PATH=$(PNACL_BIN_PATH) \
Reed Kotler2c3c82e2016-01-21 20:33:08 -0800547 $(LLVM_SRC_PATH)/utils/lit/lit.py -sv $(CHECK_LIT_TESTS) \
John Porto56958cb2016-01-14 09:18:18 -0800548 $(FORCEASM_LIT_TEST_EXCLUDES) $(FORCEASM_LIT_PARAM)
Jim Stichnothac9c9432014-08-26 14:07:13 -0700549
Karl Schimpfab06df32014-10-29 14:58:25 -0700550ifdef MINIMAL
Jim Stichnothe13d1eb2016-03-21 12:49:33 -0700551check-xtest check-xtest-lite: $(OBJDIR)/pnacl-sz make_symlink runtime
Jim Stichnothc9258222015-03-13 11:59:49 -0700552 @echo "Crosstests disabled, minimal build"
Karl Schimpfab06df32014-10-29 14:58:25 -0700553else
Jim Stichnothcc8bc162016-09-02 06:29:48 -0700554ifdef MIPS
555check-xtest check-xtest-lite: $(OBJDIR)/pnacl-sz make_symlink runtime \
556 crosstest/test_arith_ll.ll
557 # Do all x8664/native/sse2 tests as a smoke test.
558 # Add in mips32 tests as they come online.
559 ./pydir/crosstest_generator.py -v --lit \
560 --toolchain-root $(TOOLCHAIN_ROOT) \
561 $(FORCEASM_FLAG) \
562 $(FORCEASM_XTEST_EXCLUDES) \
563 -i x8664,native,sse2 \
Srdjan Obucina623f8ce2016-09-26 20:03:20 -0700564 -i mips32,native,Om1,simple_loop \
565 -i mips32,native,Om1,test_strengthreduce
Jim Stichnothcc8bc162016-09-02 06:29:48 -0700566 PNACL_BIN_PATH=$(PNACL_BIN_PATH) \
567 $(LLVM_SRC_PATH)/utils/lit/lit.py -sv $(CHECK_XTEST_TESTS)
568else
Jim Stichnoth96fac392016-03-11 14:58:23 -0800569check-xtest: $(OBJDIR)/pnacl-sz make_symlink runtime \
Jim Stichnoth7dbe8022016-05-31 12:21:51 -0700570 exists-nonsfi-x8632 exists-nonsfi-arm32 crosstest/test_arith_ll.ll
Jim Stichnothdc7c5972015-03-10 11:17:15 -0700571 # Do all native/sse2 tests, but only test_vector_ops for native/sse4.1.
572 # For (slow) sandboxed tests, limit to Om1/sse4.1.
John Porto94e97f62016-02-18 08:02:10 -0800573 # run.py (used to run the sandboxed xtests) does not support
574 # specifying -cpu cortex-a15 to qemu, hence we disable the
575 # hwdiv-arm tests.
Jim Stichnothdc7c5972015-03-10 11:17:15 -0700576 ./pydir/crosstest_generator.py -v --lit \
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800577 --toolchain-root $(TOOLCHAIN_ROOT) \
David Sehrb19d39c2016-01-13 14:17:37 -0800578 $(FORCEASM_FLAG) \
579 $(FORCEASM_XTEST_EXCLUDES) \
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800580 -i x8632,native,sse2 \
581 -i x8632,native,sse4.1,test_vector_ops \
582 -i x8632,sandbox,sse4.1,Om1 \
Jim Stichnoth57a8aab2016-01-06 09:34:36 -0800583 -i x8632,nonsfi,sse2,O2 \
John Porto008f4ce2015-12-24 13:22:18 -0800584 -i x8664,native,sse2 \
585 -i x8664,native,sse4.1,test_vector_ops \
John Porto56958cb2016-01-14 09:18:18 -0800586 -i x8664,sandbox,sse4.1,Om1 \
John Porto94e97f62016-02-18 08:02:10 -0800587 -i arm32 \
John Portoe82b5602016-02-24 15:58:55 -0800588 -e arm32,sandbox,hwdiv-arm
Jim Stichnoth0a9e1262015-04-21 09:59:21 -0700589 PNACL_BIN_PATH=$(PNACL_BIN_PATH) \
Reed Kotler2c3c82e2016-01-21 20:33:08 -0800590 $(LLVM_SRC_PATH)/utils/lit/lit.py -sv $(CHECK_XTEST_TESTS)
Jim Stichnothe13d1eb2016-03-21 12:49:33 -0700591check-xtest-lite: $(OBJDIR)/pnacl-sz make_symlink runtime \
Jim Stichnoth7dbe8022016-05-31 12:21:51 -0700592 exists-nonsfi-x8632 exists-nonsfi-arm32 crosstest/test_arith_ll.ll
Jim Stichnothe13d1eb2016-03-21 12:49:33 -0700593 # Do all native/sse2/neon tests, which are relatively fast.
594 # Limit to test_global+mem_intrin for sandbox+nonsfi because sandbox and
595 # nonsfi builds are slow, and test_global and mem_intrin are the most
596 # common sources of problems.
597 ./pydir/crosstest_generator.py -v --lit \
598 --toolchain-root $(TOOLCHAIN_ROOT) \
599 $(FORCEASM_FLAG) \
600 $(FORCEASM_XTEST_EXCLUDES) \
601 -i x8632,native,sse2,O2 \
602 -i x8664,native,sse2,O2 \
603 -i arm32,native,neon,O2 \
604 -i x8632,sse2,O2,test_global \
605 -i x8632,sse2,O2,mem_intrin \
606 -i x8664,sse2,O2,test_global \
607 -i x8664,sse2,O2,mem_intrin \
608 -i arm32,neon,O2,test_global \
609 -i arm32,neon,O2,mem_intrin \
610 -e x8664,nonsfi
611 PNACL_BIN_PATH=$(PNACL_BIN_PATH) \
612 $(LLVM_SRC_PATH)/utils/lit/lit.py -sv $(CHECK_XTEST_TESTS)
Jim Stichnoth7dbe8022016-05-31 12:21:51 -0700613crosstest/test_arith_ll.ll: pydir/gen_test_arith_ll.py
614 python $< > $@
Karl Schimpfab06df32014-10-29 14:58:25 -0700615endif
Jim Stichnothcc8bc162016-09-02 06:29:48 -0700616endif
Derek Schuffbc643132014-05-22 16:39:25 -0700617
Jim Stichnothc9258222015-03-13 11:59:49 -0700618check-unit: $(OBJDIR)/run_unittests
619 $(OBJDIR)/run_unittests
620
Jim Stichnothc59288b2015-11-09 11:38:40 -0800621# List the spec2k components in roughly reverse order of runtime, to help with
622# parallel execution speed.
623ALLSPEC := 253.perlbmk 177.mesa 188.ammp 256.bzip2 164.gzip 179.art 183.equake \
624 175.vpr 176.gcc 181.mcf 186.crafty 197.parser 254.gap 255.vortex \
625 300.twolf 252.eon
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800626.PHONY: $(ALLSPEC)
627
628TARGET := x8632
629ifeq ($(TARGET),x8632)
630 TARGETFLAG=x8632
631 SETUP=SetupGccX8632Opt
Jim Stichnothc8f56a32016-03-07 09:54:15 -0800632 SPEC := --filetype=obj
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800633endif
John Porto3c275ce2015-12-22 08:14:00 -0800634ifeq ($(TARGET),x8664)
635 TARGETFLAG=x8664
636 SETUP=SetupGccX8664Opt
Jim Stichnothc8f56a32016-03-07 09:54:15 -0800637 SPEC := --filetype=obj
John Porto3c275ce2015-12-22 08:14:00 -0800638endif
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800639ifeq ($(TARGET),arm32)
640 TARGETFLAG=arm32
641 SETUP=SetupGccArmOpt
Jim Stichnothc8f56a32016-03-07 09:54:15 -0800642 SPEC := --filetype=obj
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800643endif
Srdjan Obucina623f8ce2016-09-26 20:03:20 -0700644ifeq ($(TARGET),mips32)
645 # native_client/tests/spec2k/{Makefile.common,run_all.sh} do not currently
646 # have MIPS configs, so those would need to be added for proper Subzero
647 # testing.
648 TARGETFLAG=mips32
649 SETUP=SetupGccMipsOpt
650 SPEC := --filetype=asm
651endif
Jim Stichnothc8f56a32016-03-07 09:54:15 -0800652SPECFLAGS := -O2
Jim Stichnoth45f77002016-04-01 18:26:16 -0700653SPECRUN := --run
Jim Stichnothc59288b2015-11-09 11:38:40 -0800654%.spec2k: % $(OBJDIR)/pnacl-sz make_symlink runtime
Jim Stichnothbc3bd502016-01-20 15:01:39 -0800655 ./pydir/szbuild_spec2k.py -v \
Jim Stichnoth45f77002016-04-01 18:26:16 -0700656 $(SPECFLAGS) --target=$(TARGETFLAG) $(SPEC) $< $(SPECRUN)
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800657
Jim Stichnothcc8bc162016-09-02 06:29:48 -0700658ifdef MIPS
659# Don't test spec2k on mips32, at least not yet.
660check-spec:
661else
Jim Stichnoth96fac392016-03-11 14:58:23 -0800662check-spec: exists-spec $(ALLSPEC:=.spec2k)
Jim Stichnothcc8bc162016-09-02 06:29:48 -0700663endif
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800664
Jim Stichnothc9258222015-03-13 11:59:49 -0700665check: check-lit check-unit check-xtest
666
Jim Stichnoth96fac392016-03-11 14:58:23 -0800667NONSFI_LOADER_X8632 = \
668 $(NACL_ROOT)/scons-out/opt-linux-x86-32/obj/src/nonsfi/loader/nonsfi_loader
669NONSFI_LOADER_ARM32 = \
670 $(NACL_ROOT)/scons-out/opt-linux-arm/obj/src/nonsfi/loader/nonsfi_loader
671SBTC_LIBFILE = $(SB_LLVM_PATH)/lib/libLLVMSupport.a
672SPEC_SAMPLE_PEXE = $(NACL_ROOT)/tests/spec2k/176.gcc/gcc.opt.stripped.pexe
673
674exists-nonsfi-x8632:
675 @if [ ! -f $(NONSFI_LOADER_X8632) ] ; then \
676 echo "Missing file $(NONSFI_LOADER_X8632)"; \
Jim Stichnoth7146e992016-05-02 12:06:22 -0700677 echo "Consider running './scons nonsfi_loader'" \
Jim Stichnoth96fac392016-03-11 14:58:23 -0800678 "in the native_client directory."; \
679 exit 1 ; \
680 fi
681
682exists-nonsfi-arm32:
683 @if [ ! -f $(NONSFI_LOADER_ARM32) ] ; then \
684 echo "Missing file $(NONSFI_LOADER_ARM32)"; \
Jim Stichnoth7146e992016-05-02 12:06:22 -0700685 echo "Consider running './scons platform=arm nonsfi_loader'" \
Jim Stichnoth96fac392016-03-11 14:58:23 -0800686 "in the native_client directory."; \
687 exit 1 ; \
688 fi
689
690exists-sbtc:
691 @if [ ! -f $(SBTC_LIBFILE) ] ; then \
692 echo "Missing file $(SBTC_LIBFILE)"; \
693 echo "Consider running 'toolchain_build_pnacl.py --build-sbtc'."; \
694 exit 1 ; \
695 fi
696
697exists-spec:
698 @if [ ! -f $(SPEC_SAMPLE_PEXE) ] ; then \
699 echo "Missing file $(SPEC_SAMPLE_PEXE)"; \
700 echo "Consider running" \
Jim Stichnoth7146e992016-05-02 12:06:22 -0700701 "'./run_all.sh BuildBenchmarks 0 SetupPnaclX8632Opt'" \
Jim Stichnoth96fac392016-03-11 14:58:23 -0800702 "in the native_client/tests/spec2k directory."; \
703 exit 1 ; \
704 fi
705
Jim Stichnothcc8bc162016-09-02 06:29:48 -0700706ifdef MIPS
707check-presubmit presubmit: exists-sbtc
708# Make sure clang-format gets run.
709 +make -f Makefile.standalone format
710# Verify MINIMAL build, plus proper usage of REQUIRES in lit tests.
711 +make -f Makefile.standalone \
712 MINIMAL=1 check
713# Check that there are no g++ build errors or warnings.
714 +make -f Makefile.standalone \
715 GPLUSPLUS=1 compile_only
716# Run lit tests, cross tests, and unit tests.
717 +make -f Makefile.standalone \
718 check
719# Check a sandboxed translator build.
720 +make -f Makefile.standalone \
721 DEBUG=1 sb
722# Provide validation of user awesomeness!
723 echo Success
724else
Jim Stichnoth96fac392016-03-11 14:58:23 -0800725check-presubmit presubmit: exists-nonsfi-x8632 exists-nonsfi-arm32 \
726 exists-sbtc exists-spec
Jim Stichnoth23bee882015-11-17 06:14:05 -0800727# Make sure clang-format gets run.
Jim Stichnoth6c4ad842015-11-16 12:47:57 -0800728 +make -f Makefile.standalone format
Jim Stichnoth23bee882015-11-17 06:14:05 -0800729# Verify MINIMAL build, plus proper usage of REQUIRES in lit tests.
Jim Stichnoth6c4ad842015-11-16 12:47:57 -0800730 +make -f Makefile.standalone \
Jim Stichnothc4ed5492016-02-29 09:16:00 -0800731 MINIMAL=1 check
Jim Stichnothfc22f772015-11-22 06:06:34 -0800732# Check that there are no g++ build errors or warnings.
733 +make -f Makefile.standalone \
734 GPLUSPLUS=1 compile_only
Jim Stichnoth23bee882015-11-17 06:14:05 -0800735# Check the x86 assembler unit tests.
Jim Stichnoth6c4ad842015-11-16 12:47:57 -0800736 +make -f Makefile.standalone \
Jim Stichnothc4ed5492016-02-29 09:16:00 -0800737 DEBUG=1 CHECK_X86_ASM=1 check-unit sb
David Sehrb19d39c2016-01-13 14:17:37 -0800738# Run lit tests, cross tests, unit tests, and spec2k/x86-32.
Jim Stichnoth6c4ad842015-11-16 12:47:57 -0800739 +make -f Makefile.standalone \
Jim Stichnoth98ba0062016-03-07 09:26:22 -0800740 check check-spec
John Porto4ab4fbe2016-01-20 13:44:30 -0800741# Run spec2k/x86-64.
742 +make -f Makefile.standalone \
743 TARGET=x8664 check-spec
Jim Stichnoth45f77002016-04-01 18:26:16 -0700744# Run spec2k/x86-64 with sandboxing.
745 +make -f Makefile.standalone \
746 SPECFLAGS='-O2 --sandbox' TARGET=x8664 check-spec
Jim Stichnoth23bee882015-11-17 06:14:05 -0800747# Build spec2k under -Om1/x86-32, to check for liveness errors.
Jim Stichnoth6c4ad842015-11-16 12:47:57 -0800748 +make -f Makefile.standalone \
Jim Stichnoth45f77002016-04-01 18:26:16 -0700749 SPECFLAGS='-Om1' SPECRUN= check-spec
John Porto4ab4fbe2016-01-20 13:44:30 -0800750# Build spec2k under -Om1/x86-64, to check for liveness errors.
751 +make -f Makefile.standalone \
Jim Stichnoth45f77002016-04-01 18:26:16 -0700752 SPECFLAGS='-Om1' TARGET=x8664 SPECRUN= check-spec
Jim Stichnoth23bee882015-11-17 06:14:05 -0800753# Run spec2k for x86-32 without advanced phi lowering.
Jim Stichnoth6c4ad842015-11-16 12:47:57 -0800754 +make -f Makefile.standalone \
Jim Stichnothc8f56a32016-03-07 09:54:15 -0800755 SPECFLAGS='-O2 --sz=--phi-edge-split=0' check-spec
John Porto4ab4fbe2016-01-20 13:44:30 -0800756# Run spec2k for x86-64 without advanced phi lowering.
757 +make -f Makefile.standalone \
Jim Stichnothc8f56a32016-03-07 09:54:15 -0800758 SPECFLAGS='-O2 --sz=--phi-edge-split=0' TARGET=x8664 check-spec
David Sehrb19d39c2016-01-13 14:17:37 -0800759# Run cross tests and lit tests to validate filetype=asm output.
760 +make -f Makefile.standalone \
761 FORCEASM=1 check-xtest check-lit
Jim Stichnoth23bee882015-11-17 06:14:05 -0800762# Build spec2k for arm32.
Jim Stichnoth6c4ad842015-11-16 12:47:57 -0800763 +make -f Makefile.standalone \
Jim Stichnoth45f77002016-04-01 18:26:16 -0700764 TARGET=arm32 SPECRUN= check-spec
Jim Stichnoth23bee882015-11-17 06:14:05 -0800765# Build spec2k under -Om1/arm32.
Jim Stichnoth6c4ad842015-11-16 12:47:57 -0800766 +make -f Makefile.standalone \
Jim Stichnoth45f77002016-04-01 18:26:16 -0700767 TARGET=arm32 SPECFLAGS='-Om1' SPECRUN= check-spec
John Portob8196652016-01-19 06:19:14 -0800768# Run a few spec2k tests for arm32 using qemu. Keep the list sorted in
769# roughly reverse order of runtime.
Jim Stichnoth6c4ad842015-11-16 12:47:57 -0800770 +make -f Makefile.standalone \
John Portob8196652016-01-19 06:19:14 -0800771 TARGET=arm32 ALLSPEC='252.eon 254.gap 176.gcc 181.mcf' check-spec
Jim Stichnoth23bee882015-11-17 06:14:05 -0800772# Provide validation of user awesomeness!
Jim Stichnoth6c4ad842015-11-16 12:47:57 -0800773 echo Success
Jim Stichnothcc8bc162016-09-02 06:29:48 -0700774endif
Jim Stichnoth6c4ad842015-11-16 12:47:57 -0800775
Jim Stichnothe13d1eb2016-03-21 12:49:33 -0700776presubmit-lite: exists-nonsfi-x8632 exists-nonsfi-arm32 \
777 exists-sbtc exists-spec
778# Make sure clang-format gets run.
779 +make -f Makefile.standalone format
780# Verify MINIMAL build, plus proper usage of REQUIRES in lit tests.
781 +make -f Makefile.standalone \
Jim Stichnothabe7dd52016-03-21 14:53:03 -0700782 MINIMAL=1 check sb-lite
Jim Stichnothe13d1eb2016-03-21 12:49:33 -0700783# Check that there are no g++ build errors or warnings.
784 +make -f Makefile.standalone \
785 GPLUSPLUS=1 compile_only
786# Run lit tests, cross tests, unit tests, and spec2k/x86-32.
787 +make -f Makefile.standalone \
788 check-lit check-unit check-spec
789 +make -f Makefile.standalone \
790 check-xtest-lite
791# Run spec2k/x86-64.
792 +make -f Makefile.standalone \
793 TARGET=x8664 check-spec
794# Build spec2k under -Om1/x86-32, to check for liveness errors.
795 +make -f Makefile.standalone \
Jim Stichnoth45f77002016-04-01 18:26:16 -0700796 SPECFLAGS='-Om1' SPECRUN= check-spec
Jim Stichnothe13d1eb2016-03-21 12:49:33 -0700797# Build spec2k under -Om1/x86-64, to check for liveness errors.
798 +make -f Makefile.standalone \
Jim Stichnoth45f77002016-04-01 18:26:16 -0700799 SPECFLAGS='-Om1' TARGET=x8664 SPECRUN= check-spec
Jim Stichnothe13d1eb2016-03-21 12:49:33 -0700800# Run cross tests and lit tests to validate filetype=asm output.
801 +make -f Makefile.standalone \
802 FORCEASM=1 check-lit
803 +make -f Makefile.standalone \
804 FORCEASM=1 check-xtest-lite
805# Build spec2k under -Om1/arm32.
806 +make -f Makefile.standalone \
Jim Stichnoth45f77002016-04-01 18:26:16 -0700807 TARGET=arm32 SPECFLAGS='-Om1' SPECRUN= check-spec
Jim Stichnothe13d1eb2016-03-21 12:49:33 -0700808# Run a few spec2k tests for arm32 using qemu. Keep the list sorted in
809# roughly reverse order of runtime.
810 +make -f Makefile.standalone \
811 TARGET=arm32 ALLSPEC='254.gap 176.gcc 181.mcf' check-spec
812# Provide validation of user awesomeness!
813 echo Success
814
Jim Stichnothdd842db2015-01-27 12:53:53 -0800815FORMAT_BLACKLIST =
816# Add one of the following lines for each source file to ignore.
817FORMAT_BLACKLIST += ! -name IceParseInstsTest.cpp
Karl Schimpf74cd8832015-06-23 11:05:01 -0700818FORMAT_BLACKLIST += ! -name IceParseTypesTest.cpp
Karl Schimpf3e53dc92015-10-07 13:24:01 -0700819FORMAT_BLACKLIST += ! -name assembler_arm.h
820FORMAT_BLACKLIST += ! -name assembler_arm.cc
Eric Holk16f80612016-04-04 17:07:42 -0700821FORMAT_BLACKLIST += ! -path "./wasm-install/*"
Jim Stichnotha5b16ab2016-05-10 11:20:41 -0700822FORMAT_BLACKLIST += ! -path "./pnacl-llvm/*"
Derek Schuffbc643132014-05-22 16:39:25 -0700823format:
Jim Stichnoth0a9e1262015-04-21 09:59:21 -0700824 $(CLANG_FORMAT_PATH)/clang-format -style=LLVM -i \
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800825 `find . -regex '.*\.\(c\|h\|cpp\)' $(FORMAT_BLACKLIST)`
Jim Stichnoth240e0f82014-07-09 16:53:40 -0700826
Jim Stichnoth240e0f82014-07-09 16:53:40 -0700827format-diff:
Jim Stichnoth206833c2014-08-07 10:58:05 -0700828 git diff -U0 `git merge-base HEAD master` | \
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800829 PATH=$(PNACL_BIN_PATH):$(PATH) \
830 $(LLVM_SRC_PATH)/../clang/tools/clang-format/clang-format-diff.py \
831 -p1 -style=LLVM -i
Derek Schuffbc643132014-05-22 16:39:25 -0700832
Jim Stichnoth307e3262015-02-12 16:10:37 -0800833bloat: make_symlink
Jim Stichnothfa0cfa52015-02-26 09:42:36 -0800834 nm -C -S -l pnacl-sz | \
Jim Stichnoth2e7de232015-11-02 08:25:57 -0800835 bloat/bloat.py --nm-output=/dev/stdin syms > build/pnacl-sz.bloat.json
Jim Stichnothfa0cfa52015-02-26 09:42:36 -0800836 @echo See Subzero size breakdown in bloat/pnacl-sz.bloat.html
Jim Stichnoth307e3262015-02-12 16:10:37 -0800837
Jim Stichnothc4ed5492016-02-29 09:16:00 -0800838bloat-sb: sb_make_symlink
839 $(foreach nexe,$(NEXES),nm -C -S -l $(nexe) | bloat/bloat.py \
840 --nm-output=/dev/stdin syms > build/$(notdir $(nexe)).bloat.json;)
841 @echo "See Subzero size breakdown in:"
842 @$(foreach nexe,$(NEXES),echo " bloat/$(notdir $(nexe)).bloat.html";)
843
Andrew Sculla509e1d2015-06-29 11:07:08 -0700844docs:
Reed Kotler4cba1cb2016-01-07 08:45:13 -0800845 make -C docs -f Makefile.standalone
Andrew Sculla509e1d2015-06-29 11:07:08 -0700846
Reed Kotler2c3c82e2016-01-21 20:33:08 -0800847help:
848 @cat Makefile.standalone-help/help.txt
849
850help-check-lit:
851 @cat Makefile.standalone-help/check-lit.txt
852
853help-check-xtest:
854 @cat Makefile.standalone-help/check-xtest.txt
855
Derek Schuffbc643132014-05-22 16:39:25 -0700856clean:
Jim Stichnothc4ed5492016-02-29 09:16:00 -0800857 rm -rf pnacl-sz *.o $(foreach nexe,$(NEXES),$(notdir $(nexe))) \
858 $(OBJDIR) $(SB_OBJDIR) $(SBB_OBJDIR) build/*.bloat.json
Karl Schimpfb262c5e2014-10-27 14:41:57 -0700859
860clean-all: clean
Jim Stichnoth96fac392016-03-11 14:58:23 -0800861 rm -rf build/ crosstest/Output/