blob: e906d56fd88d3a42a32492d45edd9be5a024f83f [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#
Karl Schimpf8fcefc32014-09-15 12:56:50 -07005# make LLVM_SRC_PATH=<path> LLVM_BIN_PATH=<path> \
6# LIBCXX_INSTALL_PATH=<path> CLANG_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
16# LLVM_BIN_PATH is the directory where binaries are placed by the LLVM build
17# process. It should contain the tools like opt, llc and clang. The default
18# reflects a debug build with autotools (configure & make).
19LLVM_BIN_PATH ?= $(shell readlink -e \
Jan Voung4c127ba2014-09-19 13:11:36 -070020 ../../out/llvm_x86_64_linux_work/Release+Asserts/bin)
Derek Schuffbc643132014-05-22 16:39:25 -070021
Karl Schimpf8fcefc32014-09-15 12:56:50 -070022# LIBCXX_INSTALL_PATH is the directory where libc++ is located. It should
23# contain header files and corresponding libraries
24LIBCXX_INSTALL_PATH ?= $(shell readlink -e \
Jan Voung4c127ba2014-09-19 13:11:36 -070025 ../../../toolchain/linux_x86/pnacl_newlib)
Karl Schimpf8fcefc32014-09-15 12:56:50 -070026
27# CLANG_PATH is the location of the clang compiler to use.
28CLANG_PATH ?= $(shell readlink -e \
29 ../../../../third_party/llvm-build/Release+Asserts/bin)
30
Jan Voung4c127ba2014-09-19 13:11:36 -070031HOST_ARCH ?= x86_64
Jan Voung839c4ce2014-07-28 15:19:43 -070032ifeq ($(HOST_ARCH),x86_64)
Karl Schimpf8fcefc32014-09-15 12:56:50 -070033 HOST_FLAGS = -m64 -stdlib=libc++
Jan Voung839c4ce2014-07-28 15:19:43 -070034else
35 ifeq ($(HOST_ARCH),x86)
Karl Schimpf8fcefc32014-09-15 12:56:50 -070036 HOST_FLAGS = -m32 -stdlib=libc++
Jan Voung839c4ce2014-07-28 15:19:43 -070037 endif
38endif
39
Jim Stichnothfddef242014-09-26 18:53:41 -070040ifdef DEBUG
41 OBJDIR = build/Debug
42 OPTLEVEL = -O0
43else
44 OBJDIR = build/Release
Jim Stichnotha49e9d92014-12-07 14:25:34 -080045 OPTLEVEL = -O2 -ffunction-sections -fdata-sections
Jim Stichnothfddef242014-09-26 18:53:41 -070046endif
47
Karl Schimpfb262c5e2014-10-27 14:41:57 -070048# The list of CXX defines that are dependent on build parameters.
49CXX_DEFINES =
Jim Stichnothfa4efea2015-01-27 05:06:03 -080050CXX_EXTRA =
51LD_EXTRA =
Karl Schimpfb262c5e2014-10-27 14:41:57 -070052
53ifdef MINIMAL
Jim Stichnothe3c02c22014-12-05 14:16:07 -080054 NOASSERT = 1
Karl Schimpfb262c5e2014-10-27 14:41:57 -070055 OBJDIR := $(OBJDIR)+Min
Karl Schimpfb6c96af2014-11-17 10:58:39 -080056 CXX_DEFINES += -DALLOW_DUMP=0 -DALLOW_LLVM_CL=0 -DALLOW_LLVM_IR=0 \
57 -DALLOW_LLVM_IR_AS_INPUT=0 -DALLOW_DISABLE_IR_GEN=0
Karl Schimpfb262c5e2014-10-27 14:41:57 -070058else
Karl Schimpfb6c96af2014-11-17 10:58:39 -080059 CXX_DEFINES += -DALLOW_DUMP=1 -DALLOW_LLVM_CL=1 -DALLOW_LLVM_IR=1 \
60 -DALLOW_LLVM_IR_AS_INPUT=1 -DALLOW_DISABLE_IR_GEN=1
Karl Schimpfb262c5e2014-10-27 14:41:57 -070061endif
62
Jim Stichnoth9c234e22014-10-01 09:28:21 -070063ifdef NOASSERT
64 ASSERTIONS = -DNDEBUG
65else
66 ASSERTIONS =
67 OBJDIR := $(OBJDIR)+Asserts
68endif
69
Jim Stichnothfa4efea2015-01-27 05:06:03 -080070ifdef TSAN
71 OBJDIR := $(OBJDIR)+TSan
72 CXX_EXTRA += -fsanitize=thread
73 LD_EXTRA += -fsanitize=thread
74endif
75
Derek Schuffbc643132014-05-22 16:39:25 -070076$(info -----------------------------------------------)
77$(info Using LLVM_SRC_PATH = $(LLVM_SRC_PATH))
78$(info Using LLVM_BIN_PATH = $(LLVM_BIN_PATH))
Karl Schimpf8fcefc32014-09-15 12:56:50 -070079$(info Using LIBCXX_INSTALL_PATH = $(LIBCXX_INSTALL_PATH))
80$(info Using CLANG_PATH = $(CLANG_PATH))
Jan Voung839c4ce2014-07-28 15:19:43 -070081$(info Using HOST_ARCH = $(HOST_ARCH))
Derek Schuffbc643132014-05-22 16:39:25 -070082$(info -----------------------------------------------)
83
84LLVM_CXXFLAGS := `$(LLVM_BIN_PATH)/llvm-config --cxxflags`
Jim Stichnoth14c3f412014-08-27 11:02:50 -070085LLVM_LDFLAGS := `$(LLVM_BIN_PATH)/llvm-config --libs` \
Jim Stichnoth33246422014-11-24 14:36:23 -080086 `$(LLVM_BIN_PATH)/llvm-config --ldflags` \
87 `$(LLVM_BIN_PATH)/llvm-config --system-libs`
Derek Schuffbc643132014-05-22 16:39:25 -070088
89# It's recommended that CXX matches the compiler you used to build LLVM itself.
Jim Stichnoth5e06f9f2014-09-17 08:41:21 -070090CCACHE := `command -v ccache`
91CXX := CCACHE_CPP2=yes $(CCACHE) $(CLANG_PATH)/clang++
Jan Voung839c4ce2014-07-28 15:19:43 -070092
Jim Stichnoth8e8042c2014-09-25 17:51:47 -070093CXXFLAGS := $(LLVM_CXXFLAGS) -std=c++11 -Wall -Wextra -Werror -fno-rtti \
Karl Schimpfb262c5e2014-10-27 14:41:57 -070094 -fno-exceptions $(OPTLEVEL) $(ASSERTIONS) $(CXX_DEFINES) -g \
Jim Stichnoth26f94332015-01-28 08:37:22 -080095 $(HOST_FLAGS) -pedantic -Wno-error=unused-parameter \
Jim Stichnothfa4efea2015-01-27 05:06:03 -080096 -I$(LIBCXX_INSTALL_PATH)/include/c++/v1 $(CXX_EXTRA)
97LDFLAGS := $(HOST_FLAGS) -L$(LIBCXX_INSTALL_PATH)/lib -Wl,--gc-sections \
98 $(LD_EXTRA)
Derek Schuffbc643132014-05-22 16:39:25 -070099
Karl Schimpfab06df32014-10-29 14:58:25 -0700100SRCS = \
Jan Voung8acded02014-09-22 18:02:25 -0700101 assembler.cpp \
102 assembler_ia32.cpp \
Derek Schuffbc643132014-05-22 16:39:25 -0700103 IceCfg.cpp \
104 IceCfgNode.cpp \
Jan Voung08c3bcd2014-12-01 17:55:16 -0800105 IceELFObjectWriter.cpp \
106 IceELFSection.cpp \
Jan Voungec270732015-01-12 17:00:22 -0800107 IceFixups.cpp \
Derek Schuffbc643132014-05-22 16:39:25 -0700108 IceGlobalContext.cpp \
Karl Schimpfe3f64d02014-10-07 10:38:22 -0700109 IceGlobalInits.cpp \
Derek Schuffbc643132014-05-22 16:39:25 -0700110 IceInst.cpp \
111 IceInstX8632.cpp \
Jan Voung3bd9f1a2014-06-18 10:50:57 -0700112 IceIntrinsics.cpp \
Jim Stichnothd97c7df2014-06-04 11:57:08 -0700113 IceLiveness.cpp \
Derek Schuffbc643132014-05-22 16:39:25 -0700114 IceOperand.cpp \
Jim Stichnothd97c7df2014-06-04 11:57:08 -0700115 IceRegAlloc.cpp \
Jim Stichnothc4554d72014-09-30 16:49:38 -0700116 IceRNG.cpp \
Derek Schuffbc643132014-05-22 16:39:25 -0700117 IceTargetLowering.cpp \
118 IceTargetLoweringX8632.cpp \
Jim Stichnothc4554d72014-09-30 16:49:38 -0700119 IceTimerTree.cpp \
Karl Schimpf8d7abae2014-07-07 14:50:30 -0700120 IceTranslator.cpp \
Derek Schuffbc643132014-05-22 16:39:25 -0700121 IceTypes.cpp \
Karl Schimpf8d7abae2014-07-07 14:50:30 -0700122 llvm2ice.cpp \
123 PNaClTranslator.cpp
Derek Schuffbc643132014-05-22 16:39:25 -0700124
Karl Schimpfab06df32014-10-29 14:58:25 -0700125ifndef MINIMAL
Karl Schimpf4019f082014-12-15 13:45:00 -0800126 SRCS += IceConverter.cpp \
127 IceTypeConverter.cpp
Karl Schimpfab06df32014-10-29 14:58:25 -0700128endif
129
Jim Stichnothfddef242014-09-26 18:53:41 -0700130OBJS=$(patsubst %.cpp, $(OBJDIR)/%.o, $(SRCS))
Derek Schuffbc643132014-05-22 16:39:25 -0700131
Jan Voung08c3bcd2014-12-01 17:55:16 -0800132UNITTEST_SRCS = \
Karl Schimpf2e7daef2015-01-09 13:04:13 -0800133 BitcodeMunge.cpp \
134 IceELFSectionTest.cpp \
135 IceParseInstsTest.cpp
Jan Voung08c3bcd2014-12-01 17:55:16 -0800136
137UNITTEST_OBJS = $(patsubst %.cpp, $(OBJDIR)/unittest/%.o, $(UNITTEST_SRCS))
138UNITTEST_LIB_OBJS = $(filter-out $(OBJDIR)/llvm2ice.o,$(OBJS))
139
Derek Schuffbc643132014-05-22 16:39:25 -0700140# Keep all the first target so it's the default.
Jim Stichnothfddef242014-09-26 18:53:41 -0700141all: $(OBJDIR)/llvm2ice make_symlink
Derek Schuffbc643132014-05-22 16:39:25 -0700142
Karl Schimpf6af63362014-10-29 14:55:00 -0700143# Creates symbolic link so that testing is easier. Also runs
144# llvm2ice to verify that the defines flags have valid values,
145# as well as describe the corresponding build attributes.
146make_symlink: $(OBJDIR)/llvm2ice
147 rm -rf llvm2ice
Jim Stichnothfddef242014-09-26 18:53:41 -0700148 ln -s $(OBJDIR)/llvm2ice
Karl Schimpf6af63362014-10-29 14:55:00 -0700149 @echo "Build Attributes:"
150 @$(OBJDIR)/llvm2ice --build-atts
Derek Schuffbc643132014-05-22 16:39:25 -0700151
Jim Stichnothfddef242014-09-26 18:53:41 -0700152.PHONY: all make_symlink
153
Karl Schimpfb262c5e2014-10-27 14:41:57 -0700154# TODO(kschimpf): Fix python scripts to directly get build attributes
155# rather than generating $(OBJDIR)/llvm2ice.build_atts.
Jim Stichnothfddef242014-09-26 18:53:41 -0700156$(OBJDIR)/llvm2ice: $(OBJS)
Jim Stichnoth33246422014-11-24 14:36:23 -0800157 $(CXX) $(LDFLAGS) -o $@ $^ $(LLVM_LDFLAGS) \
Karl Schimpf8fcefc32014-09-15 12:56:50 -0700158 -Wl,-rpath=$(abspath $(LIBCXX_INSTALL_PATH)/lib)
Derek Schuffbc643132014-05-22 16:39:25 -0700159
Jim Stichnothdd842db2015-01-27 12:53:53 -0800160# TODO(stichnot): Be more precise than "*.h" here and elsewhere.
Jim Stichnothfddef242014-09-26 18:53:41 -0700161$(OBJS): $(OBJDIR)/%.o: src/%.cpp src/*.h src/*.def
Derek Schuffbc643132014-05-22 16:39:25 -0700162 $(CXX) -c $(CXXFLAGS) $< -o $@
163
Jan Voung08c3bcd2014-12-01 17:55:16 -0800164$(OBJDIR)/run_unittests: $(UNITTEST_OBJS) $(UNITTEST_LIB_OBJS)
165 $(CXX) $(LDFLAGS) -o $@ $^ $(LLVM_LDFLAGS) -lgtest -lgtest_main -ldl \
166 -Wl,-rpath=$(abspath $(LIBCXX_INSTALL_PATH)/lib)
167
168$(UNITTEST_OBJS): $(OBJDIR)/unittest/%.o: unittest/%.cpp
169 $(CXX) -c $(CXXFLAGS) \
170 -Isrc/ \
171 -I$(LLVM_SRC_PATH)/utils/unittest/googletest/include \
172 -DGTEST_HAS_RTTI=0 -DGTEST_USE_OWN_TR1_TUPLE \
173 $< -o $@
174
Jim Stichnothfddef242014-09-26 18:53:41 -0700175$(OBJS): | $(OBJDIR)
Derek Schuffbc643132014-05-22 16:39:25 -0700176
Jan Voung08c3bcd2014-12-01 17:55:16 -0800177$(UNITTEST_OBJS): | $(OBJDIR)/unittest
178
Jim Stichnothfddef242014-09-26 18:53:41 -0700179$(OBJDIR):
Derek Schuffbc643132014-05-22 16:39:25 -0700180 @mkdir -p $@
181
Jan Voung08c3bcd2014-12-01 17:55:16 -0800182$(OBJDIR)/unittest: $(OBJDIR)
183 @mkdir -p $@
184
Jim Stichnothc4554d72014-09-30 16:49:38 -0700185check-lit: llvm2ice make_symlink
Derek Schuffbc643132014-05-22 16:39:25 -0700186 LLVM_BIN_PATH=$(LLVM_BIN_PATH) \
187 $(LLVM_SRC_PATH)/utils/lit/lit.py -sv tests_lit
Jim Stichnothac9c9432014-08-26 14:07:13 -0700188
Jan Voung08c3bcd2014-12-01 17:55:16 -0800189check-unit: $(OBJDIR)/run_unittests
190 $(OBJDIR)/run_unittests
191
Karl Schimpfab06df32014-10-29 14:58:25 -0700192ifdef MINIMAL
Jan Voung08c3bcd2014-12-01 17:55:16 -0800193check: check-lit check-unit
Karl Schimpfab06df32014-10-29 14:58:25 -0700194 @echo "Crosstests ignored, minimal build"
195else
Jan Voung08c3bcd2014-12-01 17:55:16 -0800196check: check-lit check-unit
Jim Stichnoth16178a12014-09-02 14:11:57 -0700197 (cd crosstest; ./runtests.sh)
Karl Schimpfab06df32014-10-29 14:58:25 -0700198endif
Derek Schuffbc643132014-05-22 16:39:25 -0700199
Jim Stichnothdd842db2015-01-27 12:53:53 -0800200FORMAT_BLACKLIST =
201# Add one of the following lines for each source file to ignore.
202FORMAT_BLACKLIST += ! -name IceParseInstsTest.cpp
Derek Schuffbc643132014-05-22 16:39:25 -0700203format:
Jim Stichnothdd842db2015-01-27 12:53:53 -0800204 $(LLVM_BIN_PATH)/clang-format -style=LLVM -i \
205 `find . -regex '.*\.\(c\|h\|cpp\)' $(FORMAT_BLACKLIST)`
Jim Stichnoth240e0f82014-07-09 16:53:40 -0700206
Jim Stichnoth240e0f82014-07-09 16:53:40 -0700207format-diff:
Jim Stichnoth206833c2014-08-07 10:58:05 -0700208 git diff -U0 `git merge-base HEAD master` | \
Jim Stichnothdd842db2015-01-27 12:53:53 -0800209 PATH=$(LLVM_BIN_PATH):$(PATH) \
210 $(LLVM_SRC_PATH)/../clang/tools/clang-format/clang-format-diff.py \
211 -p1 -style=LLVM -i
Derek Schuffbc643132014-05-22 16:39:25 -0700212
213clean:
Karl Schimpf6af63362014-10-29 14:55:00 -0700214 rm -rf llvm2ice *.o $(OBJDIR)
Karl Schimpfb262c5e2014-10-27 14:41:57 -0700215
216clean-all: clean
217 rm -rf build/