Fix CMake build. Patch from Ingmar Vanhassel.
[oota-llvm.git] / Makefile.rules
index 22056f7b18c617cfdb527e3938783014fb01dceb..4a77bf536dffcdcbd98a53bd7947683b4542141d 100644 (file)
@@ -229,43 +229,46 @@ endif
 CPP.Defines :=
 # OPTIMIZE_OPTION - The optimization level option we want to build LLVM with
 # this can be overridden on the make command line.
-ifneq ($(OS),MingW)
-  OPTIMIZE_OPTION := -O3
-else
-  OPTIMIZE_OPTION := -O2
+ifndef OPTIMIZE_OPTION
+  ifneq ($(OS),MingW)
+    OPTIMIZE_OPTION := -O3
+  else
+    OPTIMIZE_OPTION := -O2
+  endif
 endif
 
-ifdef ENABLE_PROFILING
-  BuildMode := Profile
-  CXX.Flags += $(OPTIMIZE_OPTION) -pg -g
-  C.Flags   += $(OPTIMIZE_OPTION) -pg -g
-  LD.Flags  += $(OPTIMIZE_OPTION) -pg -g
-  KEEP_SYMBOLS := 1
-else
-  ifeq ($(ENABLE_OPTIMIZED),1)
-    BuildMode := Release
-    # Don't use -fomit-frame-pointer on Darwin or FreeBSD.
-    ifneq ($(OS),FreeBSD)
-    ifneq ($(OS),Darwin)
-      OmitFramePointer := -fomit-frame-pointer
-    endif
-    endif
+ifeq ($(ENABLE_OPTIMIZED),1)
+  BuildMode := Release
+  # Don't use -fomit-frame-pointer on Darwin or FreeBSD.
+  ifneq ($(OS),FreeBSD)
+  ifneq ($(OS),Darwin)
+    OmitFramePointer := -fomit-frame-pointer
+  endif
+  endif
 
-    # Darwin requires -fstrict-aliasing to be explicitly enabled.
-    ifeq ($(OS),Darwin)
-      EXTRA_OPTIONS += -fstrict-aliasing -Wstrict-aliasing
-    endif
+  # Darwin requires -fstrict-aliasing to be explicitly enabled.
+  # Avoid -fstrict-aliasing on Darwin for now, there are unresolved issues
+  # with -fstrict-aliasing and ipa-type-escape radr://6756684
+  #ifeq ($(OS),Darwin)
+  #  EXTRA_OPTIONS += -fstrict-aliasing -Wstrict-aliasing
+  #endif
+  CXX.Flags += $(OPTIMIZE_OPTION) $(OmitFramePointer)
+  C.Flags   += $(OPTIMIZE_OPTION) $(OmitFramePointer)
+  LD.Flags  += $(OPTIMIZE_OPTION)
+else
+  BuildMode := Debug
+  CXX.Flags += -g
+  C.Flags   += -g
+  LD.Flags  += -g
+  KEEP_SYMBOLS := 1
+endif
 
-    CXX.Flags += $(OPTIMIZE_OPTION) $(OmitFramePointer)
-    C.Flags   += $(OPTIMIZE_OPTION) $(OmitFramePointer)
-    LD.Flags  += $(OPTIMIZE_OPTION)
-  else
-    BuildMode := Debug
-    CXX.Flags += -g
-    C.Flags   += -g
-    LD.Flags  += -g
-    KEEP_SYMBOLS := 1
-  endif
+ifeq ($(ENABLE_PROFILING),1)
+  BuildMode := $(BuildMode)+Profile
+  CXX.Flags := $(filter-out -fomit-frame-pointer,$(CXX.Flags)) -pg -g
+  C.Flags   := $(filter-out -fomit-frame-pointer,$(C.Flags)) -pg -g
+  LD.Flags  := $(filter-out -fomit-frame-pointer,$(LD.Flags)) -pg -g
+  KEEP_SYMBOLS := 1
 endif
 
 #ifeq ($(ENABLE_VISIBILITY_INLINES_HIDDEN),1)
@@ -293,7 +296,8 @@ endif
 # If DISABLE_ASSERTIONS=1 is specified (make command line or configured),
 # then disable assertions by defining the appropriate preprocessor symbols.
 ifdef DISABLE_ASSERTIONS
-  BuildMode := $(BuildMode)-NoAsserts
+  # Indicate that assertions are turned off using a minus sign
+  BuildMode := $(BuildMode)-Asserts
   CPP.Defines += -DNDEBUG
 else
   CPP.Defines += -D_DEBUG
@@ -334,6 +338,11 @@ ifeq ($(ENABLE_PIC),1)
       C.Flags   += -fPIC
     endif
   endif
+else
+  ifeq ($(OS),Darwin)
+      CXX.Flags += -mdynamic-no-pic
+      C.Flags   += -mdynamic-no-pic
+  endif
 endif
 
 CXX.Flags     += $(CXXFLAGS) -Woverloaded-virtual
@@ -357,6 +366,21 @@ ifeq ($(ARCH),Alpha)
   LD.Flags += -Wl,--no-relax
 endif
 
+ifeq ($(OS),MingW)
+  ifeq ($(LLVM_CROSS_COMPILING),1)
+    # Work around http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=525016
+    ifdef TOOLNAME
+      LD.Flags += -Wl,--allow-multiple-definition
+    endif
+  endif
+endif
+
+ifdef ENABLE_EXPENSIVE_CHECKS
+  # GNU libstdc++ uses RTTI if you define _GLIBCXX_DEBUG, which we did above.
+  # See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40160
+  CXX.Flags := $(filter-out -fno-rtti,$(CXX.Flags))
+endif
+
 #--------------------------------------------------------------------
 # Directory locations
 #--------------------------------------------------------------------
@@ -413,13 +437,9 @@ ifndef LUPGRADE
 LUPGRADE := $(LLVMToolDir)/llvm-upgrade$(EXEEXT)
 endif
 ifeq ($(LLVMGCC_MAJVERS),3)
-UPGRADE_MSG = $(Echo) "Upgrading $(1) assembly to latest."
-UPGRADE_LL  = $(Verb)$(LUPGRADE) $(1) -o $(1).up.tmp -f ; $(MV) $(1).up.tmp $(1)
 LLVMGCCWITHPATH  := PATH="$(LLVMToolDir):$(PATH)" $(LLVMGCC)
 LLVMGXXWITHPATH  := PATH="$(LLVMToolDir):$(PATH)" $(LLVMGXX)
 else
-UPGRADE_MSG =
-UPGRADE_LL  =
 LLVMGCCWITHPATH  := $(LLVMGCC)
 LLVMGXXWITHPATH  := $(LLVMGXX)
 endif
@@ -435,8 +455,8 @@ ifeq ($(OS),Darwin)
   # Get "4" out of 10.4 for later pieces in the makefile.
   DARWIN_MAJVERS := $(shell echo $(DARWIN_VERSION)| sed -E 's/10.([0-9]).*/\1/')
 
-  SharedLinkOptions=-Wl,-flat_namespace -Wl,-undefined -Wl,suppress -Wl,-dylib \
-                    -mmacosx-version-min=$(DARWIN_VERSION)
+  SharedLinkOptions=-Wl,-flat_namespace -Wl,-undefined -Wl,suppress \
+                    -dynamiclib -mmacosx-version-min=$(DARWIN_VERSION)
   TargetCommonOpts += -mmacosx-version-min=$(DARWIN_VERSION)
 else
   ifeq ($(OS),Cygwin)
@@ -501,7 +521,10 @@ endif
 # Options To Invoke Tools
 #----------------------------------------------------------
 
-CompileCommonOpts += -pedantic -Wall -W -Wwrite-strings -Wno-long-long \
+ifndef NO_PEDANTIC
+CompileCommonOpts += -pedantic
+endif
+CompileCommonOpts += -Wall -W -Wwrite-strings -Wno-long-long \
                      -Wunused -Wno-unused-parameter $(EXTRA_OPTIONS)
 
 ifeq ($(OS),HP-UX)
@@ -925,7 +948,7 @@ $(LibName.SO): $(ObjectsO) $(ProjLibsPaths) $(LLVMLibsPaths) $(LibDir)/.dir
        $(Echo) Linking $(BuildMode) $(SharedLibKindMessage) \
          $(LIBRARYNAME)$(SHLIBEXT)
        $(Verb) $(Link) $(SharedLinkOptions) -o $@ $(ObjectsO) \
-         $(ProjLibsOptions) $(LLVMLibsOptions)
+         $(ProjLibsOptions) $(LLVMLibsOptions) $(LIBS)
 else
 $(LibName.SO): $(ObjectsO) $(LibDir)/.dir
        $(Echo) Linking $(BuildMode) Shared Library $(LIBRARYNAME)$(SHLIBEXT)
@@ -1001,7 +1024,7 @@ else
 BytecodeDestDir := $(PROJ_libdir)
 endif
 
-DestBytecodeLib = $(BytecodeDestDir)/lib$(LIBRARYNAME).a
+DestBytecodeLib = $(BytecodeDestDir)/lib$(LIBRARYNAME).bca
 
 install-bytecode-local:: $(DestBytecodeLib)
 
@@ -1043,7 +1066,7 @@ all-local:: $(LibName.O)
 
 $(LibName.O): $(ObjectsO) $(LibDir)/.dir
        $(Echo) Linking $(BuildMode) Object Library $(notdir $@)
-       $(Verb) $(Relink) -Wl,-r -nodefaultlibs -nostdlib -nostartfiles -o $@ $(ObjectsO)
+       $(Verb) $(Relink) -r -nodefaultlibs -nostdlib -nostartfiles -o $@ $(ObjectsO)
 
 clean-local::
 ifneq ($(strip $(LibName.O)),)
@@ -1213,8 +1236,8 @@ ifndef DISABLE_AUTO_DEPENDENCIES
 DEPEND_OPTIONS = -MMD -MP -MF "$(ObjDir)/$*.d.tmp" \
          -MT "$(ObjDir)/$*.o" -MT "$(ObjDir)/$*.d"
 
-# If the build succeeded, move the dependency file over.  If it failed, put an
-# empty file there.
+# If the build succeeded, move the dependency file over, otherwise
+# remove it.
 DEPEND_MOVEFILE = then $(MV) -f "$(ObjDir)/$*.d.tmp" "$(ObjDir)/$*.d"; \
                   else $(RM) "$(ObjDir)/$*.d.tmp"; exit 1; fi
 
@@ -1237,32 +1260,31 @@ $(ObjDir)/%.o: %.c $(ObjDir)/.dir $(BUILT_SOURCES)
 # Create .bc files in the ObjDir directory from .cpp .cc and .c files...
 #---------------------------------------------------------
 
+BC_DEPEND_OPTIONS = -MMD -MP -MF "$(ObjDir)/$*.bc.d.tmp" \
+       -MT "$(ObjDir)/$*.ll" -MT "$(ObjDir)/$*.bc.d"
+
+# If the build succeeded, move the dependency file over, otherwise
+# remove it.
+BC_DEPEND_MOVEFILE = then $(MV) -f "$(ObjDir)/$*.bc.d.tmp" "$(ObjDir)/$*.bc.d"; \
+                     else $(RM) "$(ObjDir)/$*.bc.d.tmp"; exit 1; fi
+
 $(ObjDir)/%.ll: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMGXX)
        $(Echo) "Compiling $*.cpp for $(BuildMode) build (bytecode)"
-       $(Verb) if $(BCCompile.CXX) -MD -MT $@ -MP -MF "$(ObjDir)/$*.BCCXXd" \
-                              $< -o $@ -S -emit-llvm ; \
-       then $(MV) -f "$(ObjDir)/$*.BCCXXd" "$(ObjDir)/$*.d"; \
-       else $(RM) -f "$(ObjDir)/$*.BCCXXd"; exit 1; fi
-       $(call UPGRADE_MSG,$@)
-       $(call UPGRADE_LL,$@)
+       $(Verb) if $(BCCompile.CXX) $(BC_DEPEND_OPTIONS) \
+                              $< -o $(ObjDir)/$*.ll -S -emit-llvm ; \
+               $(BC_DEPEND_MOVEFILE)
 
 $(ObjDir)/%.ll: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMGXX)
        $(Echo) "Compiling $*.cc for $(BuildMode) build (bytecode)"
-       $(Verb) if $(BCCompile.CXX) -MD -MT $@ -MP -MF "$(ObjDir)/$*.BCCXXd" \
-                              $< -o $@ -S -emit-llvm ; \
-       then $(MV) -f "$(ObjDir)/$*.BCCXXd" "$(ObjDir)/$*.d"; \
-       else $(RM) -f "$(ObjDir)/$*.BCCXXd"; exit 1; fi
-       $(call UPGRADE_MSG,$@)
-       $(call UPGRADE_LL,$@)
+       $(Verb) if $(BCCompile.CXX) $(BC_DEPEND_OPTIONS) \
+                              $< -o $(ObjDir)/$*.ll -S -emit-llvm ; \
+               $(BC_DEPEND_MOVEFILE)
 
 $(ObjDir)/%.ll: %.c $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMGCC)
        $(Echo) "Compiling $*.c for $(BuildMode) build (bytecode)"
-       $(Verb) if $(BCCompile.C) -MD -MT $@ -MP -MF "$(ObjDir)/$*.BCCd" \
-                            $< -o $@ -S -emit-llvm ; \
-       then $(MV) -f "$(ObjDir)/$*.BCCd" "$(ObjDir)/$*.d"; \
-       else $(RM) -f "$(ObjDir)/$*.BCCd"; exit 1; fi
-       $(call UPGRADE_MSG,$@)
-       $(call UPGRADE_LL,$@)
+       $(Verb) if $(BCCompile.C) $(BC_DEPEND_OPTIONS) \
+                              $< -o $(ObjDir)/$*.ll -S -emit-llvm ; \
+               $(BC_DEPEND_MOVEFILE)
 
 # Provide alternate rule sets if dependencies are disabled
 else
@@ -1282,20 +1304,14 @@ $(ObjDir)/%.o: %.c $(ObjDir)/.dir $(BUILT_SOURCES)
 $(ObjDir)/%.ll: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMGXX)
        $(Echo) "Compiling $*.cpp for $(BuildMode) build (bytecode)"
        $(BCCompile.CXX) $< -o $@ -S -emit-llvm
-       $(call UPGRADE_MSG,$@)
-       $(call UPGRADE_LL,$@)
 
 $(ObjDir)/%.ll: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMGXX)
        $(Echo) "Compiling $*.cc for $(BuildMode) build (bytecode)"
        $(BCCompile.CXX) $< -o $@ -S -emit-llvm
-       $(call UPGRADE_MSG,$@)
-       $(call UPGRADE_LL,$@)
 
 $(ObjDir)/%.ll: %.c $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMGCC)
        $(Echo) "Compiling $*.c for $(BuildMode) build (bytecode)"
        $(BCCompile.C) $< -o $@ -S -emit-llvm
-       $(call UPGRADE_MSG,@)
-       $(call UPGRADE_LL,@)
 
 endif
 
@@ -1360,10 +1376,6 @@ ifdef LLVMC_BUILD_AUTOGENERATED_INC
 TABLEGEN_INC_FILES_COMMON = 1
 endif
 
-ifdef CLANG_BUILD_DIAGNOSTICS_INC
-TABLEGEN_INC_FILES_COMMON = 1
-endif
-
 ifdef TABLEGEN_INC_FILES_COMMON
 
 INCFiles := $(filter %.inc,$(BUILT_SOURCES))
@@ -1466,7 +1478,8 @@ endif # TARGET
 
 ifdef LLVMC_BUILD_AUTOGENERATED_INC
 
-LLVMCPluginSrc := $(strip $(wildcard $(PROJ_SRC_DIR)/*.td))
+LLVMCPluginSrc := $(sort $(strip $(wildcard $(PROJ_SRC_DIR)/*.td)) \
+       $(strip $(wildcard $(PROJ_OBJ_DIR)/*.td)))
 
 TDFiles := $(LLVMCPluginSrc) \
        $(strip $(wildcard $(LLVM_SRC_ROOT)/include/llvm/CompilerDriver/*.td))
@@ -1478,15 +1491,6 @@ $(ObjDir)/AutoGenerated.inc.tmp: $(LLVMCPluginSrc) $(ObjDir)/.dir \
 
 endif # LLVMC_BUILD_AUTOGENERATED_INC
 
-ifdef CLANG_BUILD_DIAGNOSTICS_INC
-
-$(ObjDir)/Diagnostic%Kinds.inc.tmp : Diagnostic.td Diagnostic%Kinds.td $(TBLGEN)
-       $(Echo) "Building Clang $(patsubst Diagnostic%Kinds.inc.tmp,%,$(@F)) diagnostic tables with tblgen"
-       $(Verb) $(MKDIR) $(@D)
-       $(Verb) $(TableGen) -gen-clang-diags-defs -clang-component=$(patsubst Diagnostic%Kinds.inc.tmp,%,$(@F)) -o $(call SYSPATH, $@) $<
-
-endif
-
 ###############################################################################
 # OTHER RULES: Other rules needed
 ###############################################################################
@@ -1531,8 +1535,13 @@ ifndef DISABLE_AUTO_DEPENDENCIES
 ifndef IS_CLEANING_TARGET
 
 # Get the list of dependency files
-DependFiles := $(basename $(filter %.cpp %.c %.cc, $(Sources)))
-DependFiles := $(DependFiles:%=$(PROJ_OBJ_DIR)/$(BuildMode)/%.d)
+DependSourceFiles := $(basename $(filter %.cpp %.c %.cc, $(Sources)))
+DependFiles := $(DependSourceFiles:%=$(PROJ_OBJ_DIR)/$(BuildMode)/%.d)
+
+# Include bitcode dependency files if using bitcode libraries
+ifdef BYTECODE_LIBRARY
+DependFiles += $(DependSourceFiles:%=$(PROJ_OBJ_DIR)/$(BuildMode)/%.bc.d)
+endif
 
 -include $(DependFiles) ""