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 b/Makefile
index a1584f5..12ffff7 100644
--- a/Makefile
+++ b/Makefile
@@ -1,78 +1,13 @@
-# 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
+ifndef SUBZERO_LEVEL
+# Top-level, not included from a subdir
+SUBZERO_LEVEL := .
+DIRS := src
+PARALLEL_DIRS :=
+endif
 
-# 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)
+# Set LLVM source root level.
+LEVEL := $(SUBZERO_LEVEL)/../..
 
-$(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/
+# Include LLVM common makefile.
+include $(LEVEL)/Makefile.common
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/
diff --git a/src/Makefile b/src/Makefile
new file mode 100644
index 0000000..b6c9d0d
--- /dev/null
+++ b/src/Makefile
@@ -0,0 +1,13 @@
+
+SUBZERO_LEVEL := ..
+
+TOOLNAME := llvm2ice
+LINK_COMPONENTS := support
+
+# This tool has no plugins, optimize startup time.
+TOOL_NO_EXPORTS := 1
+
+include $(SUBZERO_LEVEL)/../../Makefile.config
+
+include $(SUBZERO_LEVEL)/Makefile
+