diff options
author | Ray Donnelly <mingw.android@gmail.com> | 2013-08-27 00:32:42 +0100 |
---|---|---|
committer | Logan Chien <tzuhsiang.chien@gmail.com> | 2013-12-22 22:11:21 +0800 |
commit | 64b0a3f87c6305995378dba94481d07e7f215926 (patch) | |
tree | 8f5a9e1a55f2b610d7c0149a1810a57cec130267 | |
parent | d44086b8ba122665b38a75e799ff229769b01077 (diff) | |
download | llvm-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-- | Makefile | 34 | ||||
-rw-r--r-- | Makefile.rules | 3 | ||||
-rw-r--r-- | projects/sample/Makefile.llvm.rules | 1 | ||||
-rw-r--r-- | tools/llvm-config/Makefile | 30 | ||||
-rw-r--r-- | tools/llvm-config/Makefile.buildvars | 61 |
5 files changed, 104 insertions, 25 deletions
@@ -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 |