Add Makefiles to support building along with LLVM This change now supports building subzero as part of the LLVM build (instead of in a separate build step). It is modeled on clang's Makefiles. The existing Makefile has been renamed and can still be used manually, e.g. Make -f Makefile.standalone It does not yet support running tests, just building. R=stichnot@chromium.org, jvoung@chromium.org BUG= Review URL: https://codereview.chromium.org/293983007
diff --git a/Makefile.standalone b/Makefile.standalone new file mode 100644 index 0000000..a1584f5 --- /dev/null +++ b/Makefile.standalone
@@ -0,0 +1,78 @@ +# The following variables will likely need to be modified, depending on where +# and how you built LLVM & Clang. They can be overridden in a command-line +# invocation of make, like: +# +# make LLVM_SRC_PATH=<path> LLVM_BIN_PATH=<path> ... +# + +# LLVM_SRC_PATH is the path to the root of the checked out source code. This +# directory should contain the configure script, the include/ and lib/ +# directories of LLVM, Clang in tools/clang/, etc. +# Alternatively, if you're building vs. a binary download of LLVM, then +# LLVM_SRC_PATH can point to the main untarred directory. +LLVM_SRC_PATH ?= ../llvm + +# LLVM_BIN_PATH is the directory where binaries are placed by the LLVM build +# process. It should contain the tools like opt, llc and clang. The default +# reflects a debug build with autotools (configure & make). +LLVM_BIN_PATH ?= $(shell readlink -e \ + ../../out/llvm_i686_linux_work/Release+Asserts/bin) + +$(info -----------------------------------------------) +$(info Using LLVM_SRC_PATH = $(LLVM_SRC_PATH)) +$(info Using LLVM_BIN_PATH = $(LLVM_BIN_PATH)) +$(info -----------------------------------------------) + +LLVM_CXXFLAGS := `$(LLVM_BIN_PATH)/llvm-config --cxxflags` +LLVM_LDFLAGS := `$(LLVM_BIN_PATH)/llvm-config --ldflags --libs` + +# It's recommended that CXX matches the compiler you used to build LLVM itself. +OPTLEVEL := -O0 +CXX := g++ +CXXFLAGS := -Wall -Wextra -Werror -fno-rtti -fno-exceptions \ + $(OPTLEVEL) -g $(LLVM_CXXFLAGS) -m32 +LDFLAGS := -m32 + +SRCS= \ + IceCfg.cpp \ + IceCfgNode.cpp \ + IceGlobalContext.cpp \ + IceInst.cpp \ + IceInstX8632.cpp \ + IceOperand.cpp \ + IceTargetLowering.cpp \ + IceTargetLoweringX8632.cpp \ + IceTypes.cpp \ + llvm2ice.cpp + +OBJS=$(patsubst %.cpp, build/%.o, $(SRCS)) + +# Keep all the first target so it's the default. +all: llvm2ice + +.PHONY: all + +llvm2ice: $(OBJS) + $(CXX) $(LDFLAGS) -o $@ $^ $(LLVM_LDFLAGS) -ldl + +# TODO: Be more precise than "*.h" here and elsewhere. +$(OBJS): build/%.o: src/%.cpp src/*.h src/*.def + $(CXX) -c $(CXXFLAGS) $< -o $@ + +$(OBJS): | build + +build: + @mkdir -p $@ + +check: llvm2ice + LLVM_BIN_PATH=$(LLVM_BIN_PATH) \ + $(LLVM_SRC_PATH)/utils/lit/lit.py -sv tests_lit + (cd crosstest; LLVM_BIN_PATH=$(LLVM_BIN_PATH) ./runtests.sh) + +# TODO: Fix the use of wildcards. +format: + $(LLVM_BIN_PATH)/clang-format -style=LLVM -i \ + src/Ice*.h src/Ice*.cpp src/llvm2ice.cpp + +clean: + rm -rf llvm2ice *.o build/