Index: Makefile.standalone |
diff --git a/Makefile.standalone b/Makefile.standalone |
index 4c369d238b3706f4a1327dfa8c24282dcc8427c8..b98e0476b2d50279fdd023a06b45160e595f62dd 100644 |
--- a/Makefile.standalone |
+++ b/Makefile.standalone |
@@ -2,8 +2,7 @@ |
# 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> \ |
-# LIBCXX_INSTALL_PATH=<path> CLANG_PATH=<path> \ |
+# make LLVM_SRC_PATH=<path> LIBCXX_INSTALL_PATH=<path> CLANG_PATH=<path> \ |
# PNACL_BIN_PATH=<path> ... |
# |
@@ -14,17 +13,6 @@ |
# 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 clang, clang-format, llc, |
-# llvm-as, llvm-config, llvm-mc, pnacl-bcdis, and pnacl-freeze. |
-ifdef CMAKE |
- # LLVM cmake build |
- LLVM_BIN_PATH ?= ../../out/llvm_x86_64_linux_work/bin |
-else |
- # LLVM autoconf build |
- LLVM_BIN_PATH ?= ../../out/llvm_x86_64_linux_work/Release+Asserts/bin |
-endif |
- |
# The x86-32-specific sandboxed translator directory. |
# It holds sandboxed versions of libraries and binaries. |
SB_LLVM_PATH ?= $(shell readlink -e \ |
@@ -37,11 +25,17 @@ NACL_ROOT ?= $(shell python -c "import sys; sys.path.insert(0, 'pydir'); \ |
# PNACL_TOOLCHAIN_ROOT is the location of the PNaCl toolchain. |
# This is used as the default root for finding binutils, libcxx, etc. |
PNACL_TOOLCHAIN_ROOT ?= $(shell readlink -e \ |
- $(NACL_ROOT)/toolchain/linux_x86/pnacl_newlib) |
+ $(NACL_ROOT)/toolchain/linux_x86/pnacl_newlib_raw) |
# The location of PNaCl tools (e.g., binutils objdump, pnacl-clang++, etc.). |
PNACL_BIN_PATH ?= $(shell readlink -e $(PNACL_TOOLCHAIN_ROOT)/bin) |
+# Hack to auto-detect autoconf versus cmake build of LLVM. If the LLVM tools |
+# were dynamically linked with something like libLLVM-3.6svn.so, it is an |
+# autoconf build, otherwise it is a cmake build. AUTOCONF is set to 0 for |
+# cmake, nonzero for autoconf. |
+AUTOCONF ?= $(shell ldd $(PNACL_BIN_PATH)/opt | grep -c libLLVM-) |
+ |
# CLANG_PATH is the location of the clang compiler to use for building |
# the host binaries. |
CLANG_PATH ?= $(shell readlink -e \ |
@@ -109,7 +103,6 @@ SB_OBJDIR := $(OBJDIR)+Sandboxed |
$(info -----------------------------------------------) |
$(info Using LLVM_SRC_PATH = $(LLVM_SRC_PATH)) |
-$(info Using LLVM_BIN_PATH = $(LLVM_BIN_PATH)) |
$(info Using SB_LLVM_PATH = $(SB_LLVM_PATH)) |
$(info Using NACL_ROOT = $(NACL_ROOT)) |
$(info Using PNACL_TOOLCHAIN_ROOT = $(PNACL_TOOLCHAIN_ROOT)) |
@@ -119,20 +112,36 @@ $(info Using LIBCXX_INSTALL_PATH = $(LIBCXX_INSTALL_PATH)) |
$(info Using HOST_ARCH = $(HOST_ARCH)) |
$(info -----------------------------------------------) |
-LLVM_CXXFLAGS := `$(LLVM_BIN_PATH)/llvm-config --cxxflags` |
+LLVM_CXXFLAGS := `$(PNACL_BIN_PATH)/llvm-config --cxxflags` |
SB_LLVM_CXXFLAGS := $(LLVM_CXXFLAGS) |
# Listing specific libraries that are needed for pnacl-sz |
# and the unittests, since we build "tools-only" for the |
# sandboxed_translators (which doesn't include every library |
# listed by llvm-config). |
-LLVM_LIBS := -lLLVMIRReader -lLLVMBitReader -lLLVMNaClBitTestUtils \ |
- -lLLVMNaClBitReader -lLLVMNaClBitAnalysis -lLLVMNaClBitWriter \ |
- -lLLVMAsmParser -lLLVMNaClAnalysis -lLLVMCore -lLLVMSupport |
+ |
+LLVM_LIBS_LIST := -lLLVMIRReader -lLLVMBitReader -lLLVMNaClBitTestUtils \ |
+ -lLLVMNaClBitReader -lLLVMNaClBitAnalysis -lLLVMNaClBitWriter \ |
+ -lLLVMAsmParser -lLLVMNaClAnalysis -lLLVMCore -lLLVMSupport |
+ |
+ifeq ($(AUTOCONF), 0) |
+ # LLVM cmake build |
+ LLVM_LIBS := $(LLVM_LIBS_LIST) |
+ # For the cmake build, the gtest libs end up in the same place as the LLVM |
+ # libs, so no "-L..." arg is needed. |
+ GTEST_LIB_PATH ?= |
+ CLANG_FORMAT_PATH ?= $(PNACL_BIN_PATH) |
+else |
+ # LLVM autoconf build |
+ LLVM_LIBS := -lLLVM-3.6svn |
+ GTEST_LIB_PATH ?= -L../../out/llvm_x86_64_linux_work/Release+Asserts/lib |
+ CLANG_FORMAT_PATH ?= ../../out/llvm_x86_64_linux_work/Release+Asserts/bin |
+endif |
+ |
LLVM_LDFLAGS := $(LLVM_LIBS) \ |
- `$(LLVM_BIN_PATH)/llvm-config --ldflags` \ |
- `$(LLVM_BIN_PATH)/llvm-config --system-libs` |
-SB_LLVM_LDFLAGS := $(LLVM_LIBS) \ |
+ `$(PNACL_BIN_PATH)/llvm-config --ldflags` \ |
+ `$(PNACL_BIN_PATH)/llvm-config --system-libs` |
+SB_LLVM_LDFLAGS := $(LLVM_LIBS_LIST) \ |
-L$(SB_LLVM_PATH)/lib |
CCACHE := `command -v ccache` |
@@ -239,7 +248,8 @@ $(SB_OBJS): $(SB_OBJDIR)/%.o: src/%.cpp src/*.h src/*.def |
$(SB_CXX) -c $(SB_CXXFLAGS) $< -o $@ |
$(OBJDIR)/run_unittests: $(UNITTEST_OBJS) $(UNITTEST_LIB_OBJS) |
- $(CXX) $(LDFLAGS) -o $@ $^ $(LLVM_LDFLAGS) -lgtest -lgtest_main -ldl \ |
+ $(CXX) $(LDFLAGS) -o $@ $^ $(LLVM_LDFLAGS) \ |
+ $(GTEST_LIB_PATH) -lgtest -lgtest_main -ldl \ |
-Wl,-rpath=$(abspath $(LIBCXX_INSTALL_PATH)/lib) |
$(UNITTEST_OBJS): $(OBJDIR)/unittest/%.o: unittest/%.cpp \ |
@@ -277,8 +287,7 @@ runtime.is.built: $(RT_SRC) |
./pydir/build-runtime.py -v --pnacl-root $(PNACL_TOOLCHAIN_ROOT) |
check-lit: $(OBJDIR)/pnacl-sz make_symlink |
- LLVM_BIN_PATH=$(LLVM_BIN_PATH) \ |
- BINUTILS_BIN_PATH=$(PNACL_BIN_PATH) \ |
+ PNACL_BIN_PATH=$(PNACL_BIN_PATH) \ |
$(LLVM_SRC_PATH)/utils/lit/lit.py -sv tests_lit |
ifdef MINIMAL |
@@ -291,7 +300,7 @@ check-xtest: $(OBJDIR)/pnacl-sz make_symlink runtime |
./pydir/crosstest_generator.py -v --lit \ |
-i native,sse2 -i native,sse4.1,test_vector_ops \ |
-i sandbox,sse4.1,Om1 |
- LLVM_BIN_PATH=$(LLVM_BIN_PATH) \ |
+ PNACL_BIN_PATH=$(PNACL_BIN_PATH) \ |
$(LLVM_SRC_PATH)/utils/lit/lit.py -sv crosstest/Output |
endif |
@@ -304,12 +313,12 @@ FORMAT_BLACKLIST = |
# Add one of the following lines for each source file to ignore. |
FORMAT_BLACKLIST += ! -name IceParseInstsTest.cpp |
format: |
- $(LLVM_BIN_PATH)/clang-format -style=LLVM -i \ |
+ $(CLANG_FORMAT_PATH)/clang-format -style=LLVM -i \ |
`find . -regex '.*\.\(c\|h\|cpp\)' $(FORMAT_BLACKLIST)` |
format-diff: |
git diff -U0 `git merge-base HEAD master` | \ |
- PATH=$(LLVM_BIN_PATH):$(PATH) \ |
+ PATH=$(PNACL_BIN_PATH):$(PATH) \ |
$(LLVM_SRC_PATH)/../clang/tools/clang-format/clang-format-diff.py \ |
-p1 -style=LLVM -i |