From: Anton Korobeynikov Date: Mon, 10 Nov 2008 07:33:13 +0000 (+0000) Subject: Proper way of doing llvm canadian-cross compilation. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=569c45cab2354a2ce5e2657f6cd159d8ab84cd5a;p=oota-llvm.git Proper way of doing llvm canadian-cross compilation. Patch by Jim Grosbach! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58981 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Makefile b/Makefile index 58a5fe5e183..cfb4c1258ed 100644 --- a/Makefile +++ b/Makefile @@ -17,20 +17,21 @@ LEVEL := . # 5. Build llvm-config, which determines inter-lib dependencies for tools. # 6. Build tools, runtime, docs. # -DIRS := lib/System lib/Support utils lib/VMCore lib tools/llvm-config \ - tools runtime docs +# When cross-compiling, there are some things (tablegen) that need to +# be build for the build system first. +ifeq ($(BUILD_DIRS_ONLY),1) + DIRS := lib/System lib/Support utils + OPTIONAL_DIRS := +else + DIRS := lib/System lib/Support utils lib/VMCore lib tools/llvm-config \ + tools runtime docs + OPTIONAL_DIRS := examples projects bindings +endif -OPTIONAL_DIRS := examples projects bindings EXTRA_DIST := test llvm.spec include win32 Xcode include $(LEVEL)/Makefile.config -# When cross-compiling, there are some things (tablegen) that need to -# be build for the build system. -ifeq ($(LLVM_CROSS_COMPILING),1) - BUILD_TARGET_DIRS := lib/System lib/Support utils -endif - # llvm-gcc4 doesn't need runtime libs. llvm-gcc4 is the only supported one. # FIXME: Remove runtime entirely once we have an understanding of where # libprofile etc should go. @@ -60,6 +61,23 @@ ifeq ($(MAKECMDGOALS),install) OPTIONAL_DIRS := $(filter bindings, $(OPTIONAL_DIRS)) endif +# If we're cross-compiling, build the build-hosted tools first +ifeq ($(LLVM_CROSS_COMPILING),1) +all:: cross-compile-build-tools + +clean:: + $(Verb) rm -rf BuildTools + +cross-compile-build-tools: + $(Verb) if [ ! -f BuildTools/Makefile ]; then \ + $(MKDIR) BuildTools; \ + cd BuildTools ; \ + $(PROJ_SRC_DIR)/configure ; \ + cd .. ; \ + fi; \ + ($(MAKE) -C BuildTools BUILD_DIRS_ONLY=1 ) || exit 1; +endif + # Include the main makefile machinery. include $(LLVM_SRC_ROOT)/Makefile.rules @@ -114,6 +132,7 @@ $(FilesToConfigPATH) : $(LLVM_OBJ_ROOT)/% : $(LLVM_SRC_ROOT)/%.in # NOTE: This needs to remain as the last target definition in this file so # that it gets executed last. +ifneq ($(BUILD_DIRS_ONLY),1) all:: $(Echo) '*****' Completed $(BuildMode)$(AssertMode) Build ifeq ($(BuildMode),Debug) @@ -122,6 +141,7 @@ ifeq ($(BuildMode),Debug) $(Echo) '*****' make an optimized build. Alternatively you can $(Echo) '*****' configure with --enable-optimized. endif +endif check-llvm2cpp: $(Verb)$(MAKE) check TESTSUITE=Feature RUNLLVM2CPP=1 diff --git a/Makefile.rules b/Makefile.rules index 3fdae66c413..849c70bc04c 100644 --- a/Makefile.rules +++ b/Makefile.rules @@ -184,7 +184,7 @@ endif $(UserTargets):: $(PreConditions) all:: all-local -clean:: clean-local +clean:: clean-local clean-all:: clean-local clean-all-local install:: install-local uninstall:: uninstall-local @@ -309,29 +309,17 @@ endif #-------------------------------------------------------------------- TargetMode := ifeq ($(LLVM_CROSS_COMPILING),1) - ifeq ($(BUILD_COMPONENT),1) - TargetMode := Build - else - TargetMode := Host - endif - BuildLLVMToolDir := $(LLVM_OBJ_ROOT)/$(BuildMode)/Build/bin + BuildLLVMToolDir := $(LLVM_OBJ_ROOT)/BuildTools/$(BuildMode)/bin endif ObjRootDir := $(PROJ_OBJ_DIR)/$(BuildMode) -# It is very important that ObjDir not have an extra trailing -# slash. This ends up changing the rules so that dependency file (.d) -# information is not used at all! -ifeq ($(TargetMode),) - ObjDir := $(ObjRootDir) -else - ObjDir := $(ObjRootDir)/$(TargetMode) -endif -LibDir := $(PROJ_OBJ_ROOT)/$(BuildMode)/$(TargetMode)/lib -ToolDir := $(PROJ_OBJ_ROOT)/$(BuildMode)/$(TargetMode)/bin -ExmplDir := $(PROJ_OBJ_ROOT)/$(BuildMode)/$(TargetMode)/examples -LLVMLibDir := $(LLVM_OBJ_ROOT)/$(BuildMode)/$(TargetMode)/lib -LLVMToolDir := $(LLVM_OBJ_ROOT)/$(BuildMode)/$(TargetMode)/bin -LLVMExmplDir:= $(LLVM_OBJ_ROOT)/$(BuildMode)/$(TargetMode)/examples +ObjDir := $(ObjRootDir) +LibDir := $(PROJ_OBJ_ROOT)/$(BuildMode)/lib +ToolDir := $(PROJ_OBJ_ROOT)/$(BuildMode)/bin +ExmplDir := $(PROJ_OBJ_ROOT)/$(BuildMode)/examples +LLVMLibDir := $(LLVM_OBJ_ROOT)/$(BuildMode)/lib +LLVMToolDir := $(LLVM_OBJ_ROOT)/$(BuildMode)/bin +LLVMExmplDir:= $(LLVM_OBJ_ROOT)/$(BuildMode)/examples CFERuntimeLibDir := $(LLVMGCCDIR)/lib #-------------------------------------------------------------------- @@ -347,7 +335,7 @@ LLVMAS := $(LLVMToolDir)/llvm-as$(EXEEXT) endif ifndef TBLGEN ifeq ($(LLVM_CROSS_COMPILING),1) - TBLGEN := $(BuildLLVMToolDir)/tblgen$(EXEEXT) + TBLGEN := $(BuildLLVMToolDir)/tblgen$(BUILD_EXEEXT) else TBLGEN := $(LLVMToolDir)/tblgen$(EXEEXT) endif @@ -594,16 +582,6 @@ ifdef DIRS SubDirs += $(DIRS) ifneq ($(PROJ_SRC_ROOT),$(PROJ_OBJ_ROOT)) -ifdef BUILD_TARGET_DIRS -$(RecursiveTargets):: - $(Verb) for dir in $(BUILD_TARGET_DIRS); do \ - if [ ! -f $$dir/Makefile ]; then \ - $(MKDIR) $$dir; \ - $(CP) $(PROJ_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \ - fi; \ - ($(MAKE) -C $$dir $@ BUILD_COMPONENT=1 NO_INSTALL=1 ) || exit 1; \ - done -endif $(RecursiveTargets):: $(Verb) for dir in $(DIRS); do \ if [ ! -f $$dir/Makefile ]; then \ @@ -613,12 +591,6 @@ $(RecursiveTargets):: ($(MAKE) -C $$dir $@ ) || exit 1; \ done else -ifdef BUILD_TARGET_DIRS -$(RecursiveTargets):: - $(Verb) for dir in $(BUILD_TARGET_DIRS); do \ - ($(MAKE) -C $$dir $@ BUILD_COMPONENT=1 NO_INSTALL=1 ) || exit 1; \ - done -endif $(RecursiveTargets):: $(Verb) for dir in $(DIRS); do \ ($(MAKE) -C $$dir $@ ) || exit 1; \