[llvm-commits] [llvm] r58981 - in /llvm/trunk: Makefile Makefile.rules

Anton Korobeynikov asl at math.spbu.ru
Sun Nov 9 23:33:13 PST 2008


Author: asl
Date: Mon Nov 10 01:33:13 2008
New Revision: 58981

URL: http://llvm.org/viewvc/llvm-project?rev=58981&view=rev
Log:
Proper way of doing llvm canadian-cross compilation.
Patch by Jim Grosbach!

Modified:
    llvm/trunk/Makefile
    llvm/trunk/Makefile.rules

Modified: llvm/trunk/Makefile
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/Makefile?rev=58981&r1=58980&r2=58981&view=diff

==============================================================================
--- llvm/trunk/Makefile (original)
+++ llvm/trunk/Makefile Mon Nov 10 01:33:13 2008
@@ -17,20 +17,21 @@
 #   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 @@
   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 @@
 
 # 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 @@
 	$(Echo) '*****' make an optimized build. Alternatively you can
 	$(Echo) '*****' configure with --enable-optimized.
 endif
+endif
 
 check-llvm2cpp:
 	$(Verb)$(MAKE) check TESTSUITE=Feature RUNLLVM2CPP=1

Modified: llvm/trunk/Makefile.rules
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/Makefile.rules?rev=58981&r1=58980&r2=58981&view=diff

==============================================================================
--- llvm/trunk/Makefile.rules (original)
+++ llvm/trunk/Makefile.rules Mon Nov 10 01:33:13 2008
@@ -184,7 +184,7 @@
 $(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 @@
 #--------------------------------------------------------------------
 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 @@
 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 @@
 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 @@
 	  ($(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; \





More information about the llvm-commits mailing list