Convert some tab stops into spaces.
[oota-llvm.git] / Makefile.rules
index 1e3194f78e5328d296197cf82d1b6bc9002405f8..dc15c921ffcdebad46ece8633667211df1d81216 100644 (file)
@@ -388,7 +388,6 @@ endif
 # If REQUIRES_RTTI=1 is specified then don't disable run-time type id.
 ifneq ($(REQUIRES_RTTI), 1)
   CXX.Flags += -fno-rtti
-  CXXFLAGS += -fno-rtti
 endif
 
 ifdef ENABLE_COVERAGE
@@ -399,12 +398,11 @@ endif
 
 # If DISABLE_ASSERTIONS=1 is specified (make command line or configured),
 # then disable assertions by defining the appropriate preprocessor symbols.
-ifdef DISABLE_ASSERTIONS
-  # Indicate that assertions are turned off using a minus sign
-  BuildMode := $(BuildMode)-Asserts
-  CPP.Defines += -DNDEBUG
-else
+ifndef DISABLE_ASSERTIONS
+  BuildMode := $(BuildMode)+Asserts
   CPP.Defines += -D_DEBUG
+else
+  CPP.Defines += -DNDEBUG
 endif
 
 # If ENABLE_EXPENSIVE_CHECKS=1 is specified (make command line or
@@ -448,6 +446,14 @@ else
   endif
 endif
 
+# Support makefile variable to disable any kind of timestamp/non-deterministic
+# info from being used in the build.
+ifeq ($(ENABLE_TIMESTAMPS),1)
+  DOTDIR_TIMESTAMP_COMMAND := $(DATE)
+else
+  DOTDIR_TIMESTAMP_COMMAND := echo 'Created.'
+endif
+
 ifeq ($(HOST_OS),MingW)
   # Work around PR4957
   CPP.Defines += -D__NO_CTYPE_INLINE
@@ -561,7 +567,7 @@ ifeq ($(HOST_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 \
+  SharedLinkOptions=-Wl,-flat_namespace -Wl,-undefined,suppress \
                     -dynamiclib
   ifneq ($(ARCH),ARM)
     SharedLinkOptions += -mmacosx-version-min=$(DARWIN_VERSION)
@@ -578,23 +584,18 @@ endif
 ifeq ($(TARGET_OS),Darwin)
   ifneq ($(ARCH),ARM)
     TargetCommonOpts += -mmacosx-version-min=$(DARWIN_VERSION)
-  else
-    TargetCommonOpts += -marm
   endif
 endif
 
-# Adjust LD.Flags depending on the kind of library that is to be built. Note
-# that if LOADABLE_MODULE is specified then the resulting shared library can
-# be opened with dlopen.
-ifdef LOADABLE_MODULE
-  LD.Flags += -module
-endif
-
 ifdef SHARED_LIBRARY
+ifneq ($(HOST_OS),Darwin)
+  LD.Flags += $(RPATH) -Wl,'$$ORIGIN'
+else
 ifneq ($(DARWIN_MAJVERS),4)
   LD.Flags += $(RPATH) -Wl,$(LibDir)
 endif
 endif
+endif
 
 ifdef TOOL_VERBOSE
   C.Flags += -v
@@ -642,6 +643,8 @@ CompileCommonOpts += -pedantic -Wno-long-long
 endif
 CompileCommonOpts += -Wall -W -Wno-unused-parameter -Wwrite-strings \
                      $(EXTRA_OPTIONS)
+# Enable cast-qual for C++; the workaround is to use const_cast.
+CXX.Flags += -Wcast-qual
 
 ifeq ($(HOST_OS),HP-UX)
   CompileCommonOpts := -D_REENTRANT -D_HPUX_SOURCE
@@ -787,7 +790,7 @@ $(DESTDIR)$(PROJ_bindir) $(DESTDIR)$(PROJ_libdir) $(DESTDIR)$(PROJ_includedir) $
 # To create other directories, as needed, and timestamp their creation
 %/.dir:
        $(Verb) $(MKDIR) $* > /dev/null
-       $(Verb) $(DATE) > $@
+       $(Verb) $(DOTDIR_TIMESTAMP_COMMAND) > $@
 
 .PRECIOUS: $(ObjDir)/.dir $(LibDir)/.dir $(ToolDir)/.dir $(ExmplDir)/.dir
 .PRECIOUS: $(LLVMLibDir)/.dir $(LLVMToolDir)/.dir $(LLVMExmplDir)/.dir
@@ -803,7 +806,8 @@ SubDirs += $(DIRS)
 ifneq ($(PROJ_SRC_ROOT),$(PROJ_OBJ_ROOT))
 $(RecursiveTargets)::
        $(Verb) for dir in $(DIRS); do \
-         if [ ! -f $$dir/Makefile ]; then \
+         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; \
          fi; \
@@ -825,7 +829,8 @@ endif
 ifdef EXPERIMENTAL_DIRS
 $(RecursiveTargets)::
        $(Verb) for dir in $(EXPERIMENTAL_DIRS); do \
-         if [ ! -f $$dir/Makefile ]; then \
+         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; \
          fi; \
@@ -859,7 +864,9 @@ unitcheck:: $(addsuffix /.makeunitcheck,$(PARALLEL_DIRS))
 ParallelTargets := $(foreach T,$(RecursiveTargets),%/.make$(T))
 
 $(ParallelTargets) :
-       $(Verb) if [ ! -f $(@D)/Makefile ]; then \
+       $(Verb) if ([ ! -f $(@D)/Makefile ] || \
+                   command test $(@D)/Makefile -ot \
+                      $(PROJ_SRC_DIR)/$(@D)/Makefile ); then \
          $(MKDIR) $(@D); \
          $(CP) $(PROJ_SRC_DIR)/$(@D)/Makefile $(@D)/Makefile; \
        fi; \
@@ -878,7 +885,8 @@ ifneq ($(PROJ_SRC_ROOT),$(PROJ_OBJ_ROOT))
 $(RecursiveTargets)::
        $(Verb) for dir in $(OPTIONAL_DIRS); do \
          if [ -d $(PROJ_SRC_DIR)/$$dir ]; then\
-           if [ ! -f $$dir/Makefile ]; then \
+           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; \
            fi; \
@@ -926,7 +934,7 @@ endif
 endif
 
 ###############################################################################
-# Set up variables for building libararies
+# Set up variables for building libraries
 ###############################################################################
 
 #---------------------------------------------------------
@@ -972,6 +980,49 @@ endif
 endif
 endif
 
+# Set up the library exports file.
+ifdef EXPORTED_SYMBOL_FILE
+
+# First, set up the native export file, which may differ from the source
+# export file.
+
+ifeq ($(HOST_OS),Darwin)
+# Darwin convention prefixes symbols with underscores.
+NativeExportsFile := $(ObjDir)/$(notdir $(EXPORTED_SYMBOL_FILE)).sed
+$(NativeExportsFile): $(EXPORTED_SYMBOL_FILE) $(ObjDir)/.dir
+       $(Verb) sed -e 's/^/_/' < $< > $@
+clean-local::
+       -$(Verb) $(RM) -f $(NativeExportsFile)
+else
+ifeq ($(HAVE_LINK_VERSION_SCRIPT),1)
+# Gold and BFD ld require a version script rather than a plain list.
+NativeExportsFile := $(ObjDir)/$(notdir $(EXPORTED_SYMBOL_FILE)).map
+$(NativeExportsFile): $(EXPORTED_SYMBOL_FILE) $(ObjDir)/.dir
+       $(Verb) echo "{" > $@
+       $(Verb) grep -q "\<" $< && echo "  global:" >> $@ || :
+       $(Verb) sed -e 's/$$/;/' -e 's/^/    /' < $< >> $@
+       $(Verb) echo "  local: *;" >> $@
+       $(Verb) echo "};" >> $@
+clean-local::
+       -$(Verb) $(RM) -f $(NativeExportsFile)
+else
+NativeExportsFile := $(EXPORTED_SYMBOL_FILE)
+endif
+endif
+
+# Now add the linker command-line options to use the native export file.
+
+ifeq ($(HOST_OS),Darwin)
+LLVMLibsOptions += -Wl,-exported_symbols_list,$(NativeExportsFile)
+endif
+
+# gold, bfd ld, etc.
+ifeq ($(HAVE_LINK_VERSION_SCRIPT),1)
+LLVMLibsOptions += -Wl,--version-script,$(NativeExportsFile)
+endif
+
+endif
+
 ###############################################################################
 # Library Build Rules: Four ways to build a library
 ###############################################################################
@@ -1062,6 +1113,10 @@ ifdef SHARED_LIBRARY
 
 all-local:: $(LibName.SO)
 
+ifdef EXPORTED_SYMBOL_FILE
+$(LibName.SO): $(NativeExportsFile)
+endif
+
 ifdef LINK_LIBS_IN_SHARED
 ifdef LOADABLE_MODULE
 SharedLibKindMessage := "Loadable Module"
@@ -1075,7 +1130,7 @@ $(LibName.SO): $(ObjectsO) $(ProjLibsPaths) $(LLVMLibsPaths) $(LibDir)/.dir
          $(ProjLibsOptions) $(LLVMLibsOptions) $(LIBS)
 else
 $(LibName.SO): $(ObjectsO) $(LibDir)/.dir
-       $(Echo) Linking $(BuildMode) Shared Library $(LIBRARYNAME)$(SHLIBEXT)
+       $(Echo) Linking $(BuildMode) Shared Library $(basename $@)
        $(Verb) $(Link) $(SharedLinkOptions) -o $@ $(ObjectsO)
 endif
 
@@ -1090,7 +1145,12 @@ install-local::
 uninstall-local::
        $(Echo) Uninstall circumvented with NO_INSTALL
 else
+
+ifdef LOADABLE_MODULE
+DestSharedLib = $(DESTDIR)$(PROJ_libdir)/$(LIBRARYNAME)$(SHLIBEXT)
+else
 DestSharedLib = $(DESTDIR)$(PROJ_libdir)/lib$(LIBRARYNAME)$(SHLIBEXT)
+endif
 
 install-local:: $(DestSharedLib)
 
@@ -1209,6 +1269,12 @@ install-local::
 uninstall-local::
        $(Echo) Uninstall circumvented with NO_INSTALL
 else
+ifdef NO_INSTALL_ARCHIVES
+install-local::
+       $(Echo) Install circumvented with NO_INSTALL
+uninstall-local::
+       $(Echo) Uninstall circumvented with NO_INSTALL
+else
 DestArchiveLib := $(DESTDIR)$(PROJ_libdir)/lib$(LIBRARYNAME).a
 
 install-local:: $(DestArchiveLib)
@@ -1223,6 +1289,7 @@ uninstall-local::
        -$(Verb) $(RM) -f $(DestArchiveLib)
 endif
 endif
+endif
 
 # endif LIBRARYNAME
 endif
@@ -1264,7 +1331,7 @@ ifeq ($(HOST_OS),Darwin)
 
 # Tiger tools don't support this.
 ifneq ($(DARWIN_MAJVERS),4)
-LD.Flags += -Wl,-exported_symbol -Wl,_main
+LD.Flags += -Wl,-exported_symbol,_main
 endif
 endif
 
@@ -1333,7 +1400,7 @@ DestToolAlias = $(DESTDIR)$(PROJ_bindir)/$(TOOLALIAS)$(EXEEXT)
 
 install-local:: $(DestToolAlias)
 
-$(DestToolAlias): $(DestTool) $(PROJ_bindir)
+$(DestToolAlias): $(DestTool)
        $(Echo) Installing $(BuildMode) $(DestToolAlias)
        $(Verb) $(RM) -f $(DestToolAlias)
        $(Verb) $(AliasTool) $(TOOLEXENAME) $(DestToolAlias)
@@ -1614,9 +1681,9 @@ $(ObjDir)/%GenIntrinsics.inc.tmp : %.td $(ObjDir)/.dir
        $(Echo) "Building $(<F) intrinsics information with tblgen"
        $(Verb) $(TableGen) -gen-tgt-intrinsic -o $(call SYSPATH, $@) $<
 
-$(ObjDir)/ARMDisassemblerTables.inc.tmp : ARM.td $(ObjDir)/.dir
-       $(Echo) "Building ARM disassembly tables with tblgen"
-       $(Verb) $(TableGen) -gen-risc-disassembler -o $(call SYSPATH, $@) $<
+$(ObjDir)/ARMGenDecoderTables.inc.tmp : ARM.td $(ObjDir)/.dir
+       $(Echo) "Building $(<F) decoder tables with tblgen"
+       $(Verb) $(TableGen) -gen-arm-decoder -o $(call SYSPATH, $@) $<
 
 
 clean-local::