aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Donnelly <mingw.android@gmail.com>2013-08-27 00:32:42 +0100
committerLogan Chien <tzuhsiang.chien@gmail.com>2013-12-22 22:11:21 +0800
commit64b0a3f87c6305995378dba94481d07e7f215926 (patch)
tree8f5a9e1a55f2b610d7c0149a1810a57cec130267
parentd44086b8ba122665b38a75e799ff229769b01077 (diff)
downloadllvm-64b0a3f87c6305995378dba94481d07e7f215926.tar.gz
[ndk][conf] Make an llvm-config for cross-compilation
The llvm-config-host program that was installed wasn't host-related at all; it runs on build and also reports about build. This program is still needed for the build to work, so a new BuildToolsCross folder is created and in there, an llvm-config is built that runs on build and reports about host. For this to work, the Makefile that generates llvm-config and the one that generates BuildVariables.inc must not be the same, so Makefile.buildvars is used, and an extra var CROSS_DEPTH is used to enable BuildToolsCross to step one folder higher up into the top-level build folder to get the correct values to be emitted into BuildVariables.inc. The old BuildTools/*/bin/llvm-config is now installed as llvm-config-build, and the new one is installed as llvm-config-host This change has also been submitted to llvm-commits ML: http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20130826/185708.html Cherry-picked from release_33 branch. Change-Id: Icc630908044c8bd54166bfbe7295414d7f22793b
-rw-r--r--Makefile34
-rw-r--r--Makefile.rules3
-rw-r--r--projects/sample/Makefile.llvm.rules1
-rw-r--r--tools/llvm-config/Makefile30
-rw-r--r--tools/llvm-config/Makefile.buildvars61
5 files changed, 104 insertions, 25 deletions
diff --git a/Makefile b/Makefile
index b84553a70c1..f6603105816 100644
--- a/Makefile
+++ b/Makefile
@@ -104,8 +104,10 @@ ifeq ($(LLVM_CROSS_COMPILING),1)
all:: cross-compile-build-tools
clean::
- $(Verb) rm -rf BuildTools
+ $(Verb) rm -rf BuildTools BuildToolsCross
+# BuildToolsCross is built the same as BuildTools except
+# that CROSS_DEPTH is ../ for BuildToolsCross
cross-compile-build-tools:
$(Verb) if [ ! -f BuildTools/Makefile ]; then \
$(MKDIR) BuildTools; \
@@ -135,6 +137,36 @@ cross-compile-build-tools:
ENABLE_LIBCPP=$(ENABLE_LIBCPP) \
CFLAGS= \
CXXFLAGS= \
+ ) || exit 1; \
+ if [ ! -f BuildToolsCross/Makefile ]; then \
+ $(MKDIR) BuildToolsCross; \
+ cd BuildToolsCross ; \
+ unset CFLAGS ; \
+ unset CXXFLAGS ; \
+ unset LDFLAGS ; \
+ unset SDKROOT ; \
+ unset UNIVERSAL_SDK_PATH ; \
+ $(PROJ_SRC_DIR)/configure --build=$(BUILD_TRIPLE) \
+ --host=$(BUILD_TRIPLE) --target=$(BUILD_TRIPLE) \
+ --disable-polly ; \
+ cd .. ; \
+ fi; \
+ ($(MAKE) -C BuildToolsCross \
+ BUILD_DIRS_ONLY=1 \
+ UNIVERSAL= \
+ UNIVERSAL_SDK_PATH= \
+ SDKROOT= \
+ TARGET_NATIVE_ARCH="$(TARGET_NATIVE_ARCH)" \
+ TARGETS_TO_BUILD="$(TARGETS_TO_BUILD)" \
+ ENABLE_OPTIMIZED=$(ENABLE_OPTIMIZED) \
+ ENABLE_PROFILING=$(ENABLE_PROFILING) \
+ ENABLE_COVERAGE=$(ENABLE_COVERAGE) \
+ DISABLE_ASSERTIONS=$(DISABLE_ASSERTIONS) \
+ ENABLE_EXPENSIVE_CHECKS=$(ENABLE_EXPENSIVE_CHECKS) \
+ ENABLE_LIBCPP=$(ENABLE_LIBCPP) \
+ CFLAGS= \
+ CXXFLAGS= \
+ CROSS_DEPTH=../ \
) || exit 1;
endif
diff --git a/Makefile.rules b/Makefile.rules
index 68f6cf8ec5d..df06d3a3046 100644
--- a/Makefile.rules
+++ b/Makefile.rules
@@ -465,6 +465,7 @@ endif
TargetMode :=
ifeq ($(LLVM_CROSS_COMPILING),1)
BuildLLVMToolDir := $(LLVM_OBJ_ROOT)/BuildTools/$(BuildMode)/bin
+ BuildLLVMCrossToolDir := $(LLVM_OBJ_ROOT)/BuildToolsCross/$(BuildMode)/bin
endif
ObjRootDir := $(PROJ_OBJ_DIR)/$(BuildMode)
@@ -842,7 +843,7 @@ $(RecursiveTargets)::
if ([ ! -f $$dir/Makefile ] || \
command test $$dir/Makefile -ot $(PROJ_SRC_DIR)/$$dir/Makefile ); then \
$(MKDIR) $$dir; \
- $(CP) $(PROJ_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \
+ $(CP) $(PROJ_SRC_DIR)/$$dir/Makefile* $$dir/; \
fi; \
($(MAKE) -C $$dir $@ ) || exit 1; \
done
diff --git a/projects/sample/Makefile.llvm.rules b/projects/sample/Makefile.llvm.rules
index 545e629cf34..e9857fb0a22 100644
--- a/projects/sample/Makefile.llvm.rules
+++ b/projects/sample/Makefile.llvm.rules
@@ -406,6 +406,7 @@ endif
TargetMode :=
ifeq ($(LLVM_CROSS_COMPILING),1)
BuildLLVMToolDir := $(LLVM_OBJ_ROOT)/BuildTools/$(BuildMode)/bin
+ BuildLLVMCrossToolDir := $(LLVM_OBJ_ROOT)/BuildToolsCross/$(BuildMode)/bin
endif
ObjRootDir := $(PROJ_OBJ_DIR)/$(BuildMode)
diff --git a/tools/llvm-config/Makefile b/tools/llvm-config/Makefile
index b20b6bf4a4b..5f1f81b3f1b 100644
--- a/tools/llvm-config/Makefile
+++ b/tools/llvm-config/Makefile
@@ -35,33 +35,17 @@ SUB_CXXFLAGS := ${CPP.BaseFlags} ${CXX.Flags}
# user to use libtool when linking against LLVM.
SUB_LDFLAGS :=
-$(ObjDir)/BuildVariables.inc: $(BUILDVARIABLES_SRCPATH) Makefile $(ObjDir)/.dir
- $(Echo) "Building llvm-config BuildVariables.inc file."
- $(Verb) $(ECHO) 's/@LLVM_SRC_ROOT@/$(subst /,\/,$(LLVM_SRC_ROOT))/' \
- > temp.sed
- $(Verb) $(ECHO) 's/@LLVM_OBJ_ROOT@/$(subst /,\/,$(LLVM_OBJ_ROOT))/' \
- >> temp.sed
- $(Verb) $(ECHO) 's/@LLVM_CPPFLAGS@/$(subst /,\/,$(SUB_CPPFLAGS))/' \
- >> temp.sed
- $(Verb) $(ECHO) 's/@LLVM_CFLAGS@/$(subst /,\/,$(SUB_CFLAGS))/' \
- >> temp.sed
- $(Verb) $(ECHO) 's/@LLVM_CXXFLAGS@/$(subst /,\/,$(SUB_CXXFLAGS))/' \
- >> temp.sed
- $(Verb) $(ECHO) 's/@LLVM_LDFLAGS@/$(subst /,\/,$(SUB_LDFLAGS))/' \
- >> temp.sed
- $(Verb) $(ECHO) 's/@LLVM_BUILDMODE@/$(subst /,\/,$(BuildMode))/' \
- >> temp.sed
- $(Verb) $(ECHO) 's/@LLVM_SYSTEM_LIBS@/$(subst /,\/,$(LIBS))/' \
- >> temp.sed
- $(Verb) $(ECHO) 's/@LLVM_TARGETS_BUILT@/$(subst /,\/,$(TARGETS_TO_BUILD))/' \
- >> temp.sed
- $(Verb) $(SED) -f temp.sed < $< > $@
- $(Verb) $(RM) temp.sed
+$(ObjDir)/BuildVariables.inc: $(BUILDVARIABLES_SRCPATH) Makefile Makefile.buildvars $(ObjDir)/.dir
+ $(Echo) "Making llvm-config $@ file."
+ $(MAKE) -f Makefile.buildvars CROSS_DEPTH=$(CROSS_DEPTH)
# When cross-compiling, install a version of llvm-config that runs on the host.
ifeq ($(LLVM_CROSS_COMPILING),1)
install:: $(DESTDIR)$(PROJ_bindir)
$(Echo) Installing llvm-config-host
$(Verb) $(ProgInstall) $(BuildLLVMToolDir)/llvm-config \
- $(DESTDIR)$(PROJ_bindir)/$(program_prefix)llvm-config-host
+ $(DESTDIR)$(PROJ_bindir)/$(program_prefix)llvm-config-build
+ $(Echo) Installing llvm-config-host
+ $(Verb) $(ProgInstall) $(BuildLLVMCrossToolDir)/llvm-config \
+ $(DESTDIR)$(PROJ_bindir)/$(program_prefix)llvm-config-host
endif
diff --git a/tools/llvm-config/Makefile.buildvars b/tools/llvm-config/Makefile.buildvars
new file mode 100644
index 00000000000..92098cacb2d
--- /dev/null
+++ b/tools/llvm-config/Makefile.buildvars
@@ -0,0 +1,61 @@
+##===- tools/llvm-config/Makefile.buildvars-----------------*- Makefile -*-===##
+#
+# The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+#
+##===----------------------------------------------------------------------===##
+
+LEVEL := $(CROSS_DEPTH)../..
+TOOLNAME :=
+USEDLIBS :=
+
+# We generate sources in the build directory, make sure it is in the include
+# paths.
+INCLUDE_BUILD_DIR := 1
+
+# This tool has no plugins, optimize startup time.
+TOOL_NO_EXPORTS := 1
+
+# Note that we have to use lazy expansion here.
+BUILDVARIABLES_SRCPATH = $(PROJ_SRC_ROOT)/tools/llvm-config/BuildVariables.inc.in
+BUILDVARIABLES_OBJPATH = $(ObjDir)/BuildVariables.inc
+BUILT_SOURCES = $(BUILDVARIABLES_OBJPATH)
+
+include $(LEVEL)/Makefile.common
+
+# Combine preprocessor flags (except for -I) and CXX flags.
+SUB_CPPFLAGS := ${CPP.BaseFlags}
+SUB_CFLAGS := ${CPP.BaseFlags} ${C.Flags}
+SUB_CXXFLAGS := ${CPP.BaseFlags} ${CXX.Flags}
+
+# This is blank for now. We need to be careful about adding stuff here:
+# LDFLAGS tend not to be portable, and we don't currently require the
+# user to use libtool when linking against LLVM.
+SUB_LDFLAGS :=
+
+$(ObjDir)/BuildVariables.inc: $(BUILDVARIABLES_SRCPATH) Makefile.buildvars
+ $(Echo) "Building llvm-config $@ file."
+ $(Verb) $(ECHO) 's/@LLVM_SRC_ROOT@/$(subst /,\/,$(LLVM_SRC_ROOT))/' \
+ > temp.sed
+ $(Verb) $(ECHO) 's/@LLVM_OBJ_ROOT@/$(subst /,\/,$(LLVM_OBJ_ROOT))/' \
+ >> temp.sed
+ $(Verb) $(ECHO) 's/@LLVM_CPPFLAGS@/$(subst /,\/,$(SUB_CPPFLAGS))/' \
+ >> temp.sed
+ $(Verb) $(ECHO) 's/@LLVM_CFLAGS@/$(subst /,\/,$(SUB_CFLAGS))/' \
+ >> temp.sed
+ $(Verb) $(ECHO) 's/@LLVM_CXXFLAGS@/$(subst /,\/,$(SUB_CXXFLAGS))/' \
+ >> temp.sed
+ $(Verb) $(ECHO) 's/@LLVM_LDFLAGS@/$(subst /,\/,$(SUB_LDFLAGS))/' \
+ >> temp.sed
+ $(Verb) $(ECHO) 's/@LLVM_BUILDMODE@/$(subst /,\/,$(BuildMode))/' \
+ >> temp.sed
+ $(Verb) $(ECHO) 's/@LLVM_SYSTEM_LIBS@/$(subst /,\/,$(LIBS))/' \
+ >> temp.sed
+ $(Verb) $(ECHO) 's/@LLVM_TARGETS_BUILT@/$(subst /,\/,$(TARGETS_TO_BUILD))/' \
+ >> temp.sed
+ $(Verb) $(SED) -f temp.sed < $< > $@
+ $(Verb) $(RM) temp.sed
+
+all:: $(ObjDir)/BuildVariables.inc