Add support for truncating integer casts from long.
[oota-llvm.git] / Makefile.rules
index acc4403e0834c4d543d7548dd6a9bdd97b6ef806..d6ed2d531613a5234ce7a5ac6d023a6d63646449 100644 (file)
@@ -63,8 +63,9 @@ $(UserTargets)::
 SrcMakefiles       := $(filter %Makefile %Makefile.tests,\
                       $(wildcard $(BUILD_SRC_DIR)/Makefile*))
 ObjMakefiles       := $(subst $(BUILD_SRC_DIR),$(BUILD_OBJ_DIR),$(SrcMakefiles))
-ConfigureScript    := $(LLVM_SRC_ROOT)/configure
-ConfigStatusScript := $(LLVM_OBJ_ROOT)/config.status
+ConfigureScript    := $(BUILD_SRC_ROOT)/configure
+ConfigStatusScript := $(BUILD_OBJ_ROOT)/config.status
+LConfigStatusScript:= $(LLVM_OBJ_ROOT)/config.status
 MakefileConfigIn   := $(LLVM_SRC_ROOT)/Makefile.config.in
 MakefileConfig     := $(LLVM_OBJ_ROOT)/Makefile.config
 PreConditions      := $(ConfigStatusScript) $(MakefileConfig) $(ObjMakefiles)
@@ -74,31 +75,64 @@ preconditions : $(PreConditions)
 #------------------------------------------------------------------------
 # Make sure the BUILT_SOURCES are built first
 #------------------------------------------------------------------------
-$(filter-out clean clean-local,UserTargets):: $(BUILT_SOURCES)
+$(filter-out clean clean-local,$(UserTargets)):: $(BUILT_SOURCES)
 
 clean-local::
 ifneq ($(strip $(BUILT_SOURCES)),)
        -$(Verb) $(RM) -f $(BUILT_SOURCES)
 endif
 
+ifneq ($(BUILD_OBJ_ROOT),$(BUILD_SRC_ROOT))
+spotless:
+       $(Verb) if test -x config.status ; then \
+         $(EchoCmd) Wiping out $(BUILD_OBJ_ROOT) ; \
+         $(MKDIR) .spotless.save ; \
+         $(MV) config.status .spotless.save ; \
+         $(MV) mklib  .spotless.save ; \
+         $(MV) projects  .spotless.save ; \
+         $(RM) -rf * ; \
+         $(MV) .spotless.save/config.status . ; \
+         $(MV) .spotless.save/mklib . ; \
+         $(MV) .spotless.save/projects . ; \
+         $(RM) -rf .spotless.save ; \
+         $(EchoCmd) Rebuilding configuration of $(BUILD_OBJ_ROOT) ; \
+         $(ConfigStatusScript) --recheck $(ConfigureScriptFLAGS) && \
+         $(ConfigStatusScript) ; \
+       else \
+         $(EchoCmd) "make spotless" can only be run from $(BUILD_OBJ_ROOT); \
+       fi
+endif
+
 $(BUILT_SOURCES) : $(ObjMakefiles)
 
 #------------------------------------------------------------------------
 # Make sure we're not using a stale configuration
 #------------------------------------------------------------------------
+reconfigure:
+       $(Echo) Reconfiguring $(BUILD_OBJ_ROOT)
+       $(Verb) cd $(BUILD_OBJ_ROOT) && \
+         if test -w $(BUILD_OBJ_ROOT)/config.cache ; then \
+           $(RM) $(BUILD_OBJ_ROOT)/config.cache ; \
+         fi ; \
+         $(ConfigStatusScript) --recheck $(ConfigureScriptFLAGS) && \
+         $(ConfigStatusScript)
+
 .PRECIOUS: $(ConfigStatusScript)
 $(ConfigStatusScript): $(ConfigureScript)
        $(Echo) Reconfiguring with $<
        $(Verb) cd $(BUILD_OBJ_ROOT) && \
+         if test -w $(BUILD_OBJ_ROOT)/config.cache ; then \
+           $(RM) $(BUILD_OBJ_ROOT)/config.cache ; \
+         fi ; \
          $(ConfigStatusScript) --recheck $(ConfigureScriptFLAGS) && \
          $(ConfigStatusScript)
 
 #------------------------------------------------------------------------
 # Make sure the configuration makefile is up to date
 #------------------------------------------------------------------------
-$(MakefileConfig): $(MakefileConfigIn) $(ConfigStatusScript)
+$(MakefileConfig): $(MakefileConfigIn) $(LConfigStatusScript)
        $(Echo) Regenerating $@
-       $(Verb) cd $(LLVM_OBJ_ROOT) ; $(ConfigStatusScript) Makefile.config
+       $(Verb) cd $(LLVM_OBJ_ROOT) ; $(LConfigStatusScript) Makefile.config
 
 #------------------------------------------------------------------------
 # If the Makefile in the source tree has been updated, copy it over into the
@@ -109,7 +143,7 @@ ifneq ($(BUILD_OBJ_DIR),$(BUILD_SRC_DIR))
 Makefile: $(BUILD_SRC_DIR)/Makefile
        $(Echo) "Updating Makefile"
        $(Verb) $(MKDIR) $(@D)
-       $(Verb) cp -f $< $@
+       $(Verb) $(CP) -f $< $@
 
 # Copy the Makefile.* files unless we're in the root directory which avoids
 # the copying of Makefile.config.in or other things that should be explicitly
@@ -120,7 +154,7 @@ $(BUILD_OBJ_DIR)/Makefile% : $(BUILD_SRC_DIR)/Makefile%
           *.in) ;; \
           *) $(Echo) "Updating $(@F)" ; \
             $(MKDIR) $(@D) ; \
-            cp -f $< $@ ;; \
+            $(CP) -f $< $@ ;; \
        esac
          
 endif
@@ -146,6 +180,7 @@ install-bytecode:: install-bytecode-local
 # Variables derived from configuration we are building
 #--------------------------------------------------------------------
 
+
 ifdef ENABLE_PROFILING
   BuildMode := Profile
   CXX.Flags := -O3 -DNDEBUG -felide-constructors -finline-functions -pg
@@ -154,9 +189,13 @@ ifdef ENABLE_PROFILING
 else
   ifdef ENABLE_OPTIMIZED
     BuildMode := Release
-    CXX.Flags  := -O3 -DNDEBUG -finline-functions \
-                  -felide-constructors -fomit-frame-pointer
-    C.Flags    := -O3 -DNDEBUG -fomit-frame-pointer
+    # Don't use -fomit-frame-pointer on FreeBSD
+    ifneq ($(OS),FreeBSD)
+      OmitFramePointer := -fomit-frame-pointer
+    endif
+    CXX.Flags  := -O3 -DNDEBUG -finline-functions -felide-constructors \
+                  $(OmitFramePointer)
+    C.Flags    := -O3 -DNDEBUG $(OmitFramePointer)
     LD.Flags   := -O3 -DNDEBUG 
   else
     BuildMode := Debug
@@ -183,7 +222,8 @@ ToolDir     := $(BUILD_OBJ_ROOT)/$(BuildMode)/bin
 ExmplDir    := $(BUILD_OBJ_ROOT)/$(BuildMode)/examples
 LLVMLibDir  := $(LLVM_OBJ_ROOT)/$(BuildMode)/lib
 LLVMToolDir := $(LLVM_OBJ_ROOT)/$(BuildMode)/bin
-LExmplDir   := $(LLVM_OBJ_ROOT)/$(BuildMode)/examples
+LLVMExmplDir:= $(LLVM_OBJ_ROOT)/$(BuildMode)/examples
+CFERuntimeLibDir := $(LLVMGCCDIR)/lib
 
 #--------------------------------------------------------------------
 # Full Paths To Compiled Tools and Utilities
@@ -208,12 +248,17 @@ endif
 ifndef GCCLD
 GCCLD    := $(LLVMToolDir)/gccld$(EXEEXT)
 endif
-ifndef LLVMGCC
-LLVMGCC  := PATH=$(LLVMToolDir):$(PATH) $(LLVMGCCDIR)/bin/gcc
+ifndef LDIS
+LLVMDIS  := $(LLVMToolDir)/llvm-dis$(EXEEXT)
+endif
+ifndef LLI
+LLI      := $(LLVMToolDir)/lli$(EXEEXT)
 endif
-ifndef LLVMGXX
-LLVMGXX  := PATH=$(LLVMToolDir):$(PATH) $(LLVMGCCDIR)/bin/g++
+ifndef LOPT
+LOPT     := $(LLVMToolDir)/opt$(EXEEXT)
 endif
+LLVMGCCWITHPATH  := PATH="$(LLVMToolDir):$(PATH)" $(LLVMGCC)
+LLVMGXXWITHPATH  := PATH="$(LLVMToolDir):$(PATH)" $(LLVMGXX)
 
 #--------------------------------------------------------------------
 # Adjust to user's request
@@ -275,10 +320,12 @@ CPP.Flags += -I$(BUILD_OBJ_DIR) \
 
 Compile.C     = $(CC) $(CPP.Flags) $(CompileCommonOpts) -c $(C.Flags)
 LTCompile.C   = $(LIBTOOL) $(LibTool.Flags) --mode=compile $(Compile.C)
-BCCompile.C   = $(LLVMGCC) $(CPP.Flags) $(CompileCommonOpts) $(C.Flags) -c
+BCCompile.C   = $(LLVMGCCWITHPATH) $(CPP.Flags) $(CompileCommonOpts) \
+                $(C.Flags) -c
 Compile.CXX   = $(CXX) $(CPP.Flags) $(CompileCommonOpts) $(CXX.Flags) -c
 LTCompile.CXX = $(LIBTOOL) $(LibTool.Flags) --mode=compile $(Compile.CXX)
-BCCompile.CXX = $(LLVMGXX) $(CPP.Flags) $(CompileCommonOpts) $(CXX.Flags) -c
+BCCompile.CXX = $(LLVMGXXWITHPATH) $(CPP.Flags) $(CompileCommonOpts) \
+                $(CXX.Flags) -c
 Link          = $(LIBTOOL) $(LibTool.Flags) --mode=link $(CXX) $(CPP.Flags) \
                $(CompileCommonOpts) $(LD.Flags) $(Strip)
 Relink        = $(LIBTOOL) $(LibTool.Flags) --mode=link $(CXX) $(CPP.Flags) \
@@ -367,7 +414,7 @@ $(RecursiveTargets)::
        $(Verb) for dir in $(DIRS); do \
          if [ ! -f $$dir/Makefile ]; then \
            $(MKDIR) $$dir; \
-           cp $(BUILD_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \
+           $(CP) $(BUILD_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \
          fi; \
          if [ ! -f $$dir/LLVM_DO_NOT_BUILD ]; then \
            ($(MAKE) -C $$dir $@ ) || exit 1; \
@@ -384,7 +431,7 @@ $(RecursiveTargets)::
        $(Verb) for dir in $(EXPERIMENTAL_DIRS); do \
          if [ ! -f $$dir/Makefile ]; then \
            $(MKDIR) $$dir; \
-           cp $(BUILD_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \
+           $(CP) $(BUILD_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \
          fi; \
          if [ ! -f $$dir/LLVM_DO_NOT_BUILD ]; then \
            ($(MAKE) -C $$dir $@ ) || exit 0; \
@@ -412,7 +459,7 @@ ParallelTargets := $(foreach T,$(RecursiveTargets),%/.make$(T))
 $(ParallelTargets) :
        $(Verb) if [ ! -f $(@D)/Makefile ]; then \
          $(MKDIR) $(@D); \
-         cp $(BUILD_SRC_DIR)/$(@D)/Makefile $(@D)/Makefile; \
+         $(CP) $(BUILD_SRC_DIR)/$(@D)/Makefile $(@D)/Makefile; \
        fi; \
        if [ ! -f $$dir/LLVM_DO_NOT_BUILD ]; then \
          $(MAKE) -C $(@D) $(subst $(@D)/.make,,$@) ; \
@@ -432,7 +479,7 @@ $(RecursiveTargets)::
          if [ -d $(BUILD_SRC_DIR)/$$dir ]; then\
            if [ ! -f $$dir/Makefile ]; then \
              $(MKDIR) $$dir; \
-             cp $(BUILD_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \
+             $(CP) $(BUILD_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \
            fi; \
            if [ ! -f $$dir/LLVM_DO_NOT_BUILD ]; then \
              ($(MAKE) -C$$dir $@ ) || exit 1; \
@@ -481,7 +528,7 @@ endif
 ifdef MODULE_NAME
 
 Module     := $(LibDir)/$(MODULE_NAME).bc
-LinkModule := $(LLVMGCC) -shared -nostdlib
+LinkModule := $(LLVMGCCWITHPATH) -shared -nostdlib
 
 ifdef EXPORTED_SYMBOL_FILE
 LinkMOdule += -Xlinker -internalize-public-api-file=$(EXPORTED_SYMBOL_FILE)
@@ -501,7 +548,7 @@ endif
 ifdef BYTECODE_DESTINATION
 ModuleDestDir := $(BYTECODE_DESTINATION)
 else
-ModuleDestDir := $(BYTECODE_DESTINATION)
+ModuleDestDir := $(libdir)
 endif
 
 DestModule := $(ModuleDestDir)/$(MODULE_NAME).bc
@@ -539,7 +586,7 @@ ifdef SHARED_LIBRARY
 
 all-local:: $(LibName.LA)
 
-$(LibName.LA): $(BUILT_SOURCES) $(ObjectsLO) $(LibDir)/.dir
+$(LibName.LA): $(ObjectsLO) $(LibDir)/.dir
        $(Echo) Linking $(BuildMode) Shared Library $(LIBRARYNAME)$(SHLIBEXT)
        $(Verb) $(Link) -o $@ $(ObjectsLO)
        $(Verb) $(LTInstall) $@ $(LibDir)
@@ -579,17 +626,19 @@ BCCompile.CXX += -Wa,-strip-debug
 all-local:: $(LibName.BCA)
 
 ifdef EXPORTED_SYMBOL_FILE
-BCLinkLib = $(LLVMGCC) -shared -nostdlib -Xlinker \
+BCLinkLib = $(LLVMGCCWITHPATH) -shared -nostdlib -Xlinker \
            -internalize-public-api-file=$(EXPORTED_SYMBOL_FILE)
 
-$(LibName.BCA): $(BUILT_SOURCES) $(ObjectsBC) $(LibDir)/.dir $(GCCLD)
+$(LibName.BCA): $(ObjectsBC) $(LibDir)/.dir $(GCCLD) \
+                $(LLVMToolDir)/llvm-ar
        $(Echo) Building $(BuildMode) Bytecode Archive $(notdir $@) \
          "(internalize)"
        $(Verb) $(BCLinkLib) -o $(ObjDir)/$(LIBRARYNAME).o $(ObjectsBC)
        $(Verb) $(RM) -f $@
        $(Verb) $(LArchive) $@ $(ObjDir)/$(LIBRARYNAME).o
 else
-$(LibName.BCA): $(BUILT_SOURCES) $(ObjectsBC) $(LibDir)/.dir
+$(LibName.BCA): $(ObjectsBC) $(LibDir)/.dir \
+                $(LLVMToolDir)/llvm-ar
        $(Echo) Building $(BuildMode) Bytecode Archive $(notdir $@)
        $(Verb) $(RM) -f $@
        $(Verb) $(LArchive) $@ $(ObjectsBC)
@@ -632,7 +681,7 @@ ifndef DONT_BUILD_RELINKED
 
 all-local:: $(LibName.O)
 
-$(LibName.O): $(BUILT_SOURCES) $(ObjectsO) $(LibDir)/.dir
+$(LibName.O): $(ObjectsO) $(LibDir)/.dir
        $(Echo) Linking $(BuildMode) Object Library $(notdir $@)
        $(Verb) $(Relink) -o $@ $(ObjectsO)
 
@@ -664,7 +713,7 @@ ifdef BUILD_ARCHIVE
 
 all-local:: $(LibName.A)
 
-$(LibName.A): $(BUILT_SOURCES) $(ObjectsO) $(LibDir)/.dir
+$(LibName.A): $(ObjectsO) $(LibDir)/.dir
        $(Echo) Building $(BuildMode) Archive Library $(notdir $@)
        -$(Verb) $(RM) -f $@
        $(Verb) $(Archive) $@ $(ObjectsO)
@@ -796,7 +845,7 @@ else
 $(ToolBuildPath): $(ToolDir)/.dir
 endif
 
-$(ToolBuildPath): $(BUILT_SOURCES) $(ObjectsO) $(ProjLibsPaths) $(LLVMLibsPaths)
+$(ToolBuildPath): $(ObjectsO) $(ProjLibsPaths) $(LLVMLibsPaths)
        $(Echo) Linking $(BuildMode) executable $(TOOLNAME) $(StripWarnMsg)
        $(Verb) $(Link) -o $@ $(TOOLLINKOPTS) $(ObjectsO) $(ProjLibsOptions) \
           $(LLVMLibsOptions) $(ExtraLibs) $(TOOLLINKOPTSB)
@@ -828,13 +877,13 @@ ifndef DISABLE_AUTO_DEPENDENCIES
 #---------------------------------------------------------
 ifdef SHARED_LIBRARY
 
-$(ObjDir)/%.lo $(ObjDir)/%.o: %.cpp $(ObjDir)/.dir
+$(ObjDir)/%.lo $(ObjDir)/%.o: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES)
        $(Echo) "Compiling $*.cpp for $(BuildMode) build (PIC)"
        $(Verb) if $(LTCompile.CXX) -MD -MT $@ -MP -MF $(ObjDir)/$*.LACXXd $< -o $@ ; \
        then $(MV) -f "$(ObjDir)/$*.LACXXd" "$(ObjDir)/$*.d"; \
        else $(RM) -f "$(ObjDir)/$*.LACXXd"; exit 1; fi
 
-$(ObjDir)/%.lo $(ObjDir)/%.o: %.c $(ObjDir)/.dir 
+$(ObjDir)/%.lo $(ObjDir)/%.o: %.c $(ObjDir)/.dir $(BUILT_SOURCES)
        $(Echo) "Compiling $*.c for $(BuildMode) build (PIC)"
        $(Verb) if $(LTCompile.C) -MD -MT $@ -MP -MF $(ObjDir)/$*.LACd $< -o $@ ; \
        then $(MV) -f "$(ObjDir)/$*.LACd" "$(ObjDir)/$*.d"; \
@@ -845,13 +894,13 @@ $(ObjDir)/%.lo $(ObjDir)/%.o: %.c $(ObjDir)/.dir
 #---------------------------------------------------------
 else
 
-$(ObjDir)/%.o: %.cpp $(ObjDir)/.dir
+$(ObjDir)/%.o: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES)
        $(Echo) "Compiling $*.cpp for $(BuildMode) build"
        $(Verb) if $(Compile.CXX) -MD -MT $@ -MP -MF $(ObjDir)/$*.CXXd $< -o $@ ; \
        then $(MV) -f "$(ObjDir)/$*.CXXd" "$(ObjDir)/$*.d"; \
        else $(RM) -f "$(ObjDir)/$*.CXXd"; exit 1; fi
 
-$(ObjDir)/%.o: %.c $(ObjDir)/.dir
+$(ObjDir)/%.o: %.c $(ObjDir)/.dir $(BUILT_SOURCES)
        $(Echo) "Compiling $*.c for $(BuildMode) build"
        $(Verb) if $(Compile.C) -MD -MT $@ -MP -MF $(ObjDir)/$*.Cd $< -o $@ ; \
        then $(MV) -f "$(ObjDir)/$*.Cd" "$(ObjDir)/$*.d"; \
@@ -862,13 +911,13 @@ endif
 #---------------------------------------------------------
 # Create .bc files in the ObjDir directory from .cpp and .c files...
 #---------------------------------------------------------
-$(ObjDir)/%.bc: %.cpp $(ObjDir)/.dir $(GCCAS)
+$(ObjDir)/%.bc: %.cpp $(ObjDir)/.dir $(GCCAS) $(BUILT_SOURCES)
        $(Echo) "Compiling $*.cpp for $(BuildMode) build (bytecode)"
        $(Verb) if $(BCCompile.CXX) -MD -MT $@ -MP -MF "$(ObjDir)/$*.BCCXXd" $< -o $@ ; \
        then $(MV) -f "$(ObjDir)/$*.BCCXXd" "$(ObjDir)/$*.d"; \
        else $(RM) -f "$(ObjDir)/$*.BCCXXd"; exit 1; fi
 
-$(ObjDir)/%.bc: %.c $(ObjDir)/.dir $(GCCAS)
+$(ObjDir)/%.bc: %.c $(ObjDir)/.dir $(GCCAS) $(BUILT_SOURCES)
        $(Echo) "Compiling $*.c for $(BuildMode) build (bytecode)"
        $(Verb) if $(BCCompile.C) -MD -MT $@ -MP -MF "$(ObjDir)/$*.BCCd" $< -o $@ ; \
        then $(MV) -f "$(ObjDir)/$*.BCCd" "$(ObjDir)/$*.d"; \
@@ -879,30 +928,30 @@ else
 
 ifdef SHARED_LIBRARY
 
-$(ObjDir)/%.lo $(ObjDir)/%.o: %.cpp $(ObjDir)/.dir 
+$(ObjDir)/%.lo $(ObjDir)/%.o: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES)
        $(Echo) "Compiling $*.cpp for $(BuildMode) build (PIC)"
        $(LTCompile.CXX) $< -o $@ 
 
-$(ObjDir)/%.lo $(ObjDir)/%.o: %.c $(ObjDir)/.dir 
-       $(Echo) "Compiling $*.cpp for $(BuildMode) build (PIC)"
+$(ObjDir)/%.lo $(ObjDir)/%.o: %.c $(ObjDir)/.dir $(BUILT_SOURCES)
+       $(Echo) "Compiling $*.c for $(BuildMode) build (PIC)"
        $(LTCompile.C) $< -o $@ 
 
 else
 
-$(ObjDir)/%.o: %.cpp $(ObjDir)/.dir
+$(ObjDir)/%.o: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES)
        $(Echo) "Compiling $*.cpp for $(BuildMode) build"
        $(Compile.CXX) $< -o $@ 
 
-$(ObjDir)/%.o: %.c $(ObjDir)/.dir
-       $(Echo) "Compiling $*.cpp for $(BuildMode) build"
+$(ObjDir)/%.o: %.c $(ObjDir)/.dir $(BUILT_SOURCES)
+       $(Echo) "Compiling $*.c for $(BuildMode) build"
        $(Compile.C) $< -o $@ 
 endif
 
-$(ObjDir)/%.bc: %.cpp $(ObjDir)/.dir $(GCCAS)
+$(ObjDir)/%.bc: %.cpp $(ObjDir)/.dir $(GCCAS) $(BUILT_SOURCES)
        $(Echo) "Compiling $*.cpp for $(BuildMode) build (bytecode)"
        $(BCCompile.CXX) $< -o $@ 
 
-$(ObjDir)/%.bc: %.c $(ObjDir)/.dir $(GCCAS)
+$(ObjDir)/%.bc: %.c $(ObjDir)/.dir $(GCCAS) $(BUILT_SOURCES)
        $(Echo) "Compiling $*.c for $(BuildMode) build (bytecode)"
        $(BCCompile.C) $< -o $@
 
@@ -924,46 +973,58 @@ ifdef TARGET
 
 TDFiles := $(strip $(wildcard $(BUILD_SRC_DIR)/*.td) $(LLVM_SRC_ROOT)/lib/Target/Target.td)
 INCFiles := $(filter %.inc,$(BUILT_SOURCES))
-
-$(INCFiles) : $(TBLGEN) $(TDFiles)
-
-%GenRegisterNames.inc : %.td 
+INCTMPFiles := $(INCFiles:%=$(ObjDir)/%.tmp)
+.PRECIOUS: $(INCTMPFiles) $(INCFiles)
+
+# All of these files depend on tblgen and the .td files.
+$(INCTMPFiles) : $(TBLGEN) $(TDFiles)
+
+# INCFiles rule: All of the tblgen generated files are emitted to 
+# $(ObjDir)/%.inc.tmp, instead of emitting them directly to %.inc.  This allows
+# us to only "touch" the real file if the contents of it change.  IOW, if
+# tblgen is modified, all of the .inc.tmp files are regereated, but no
+# dependencies of the .inc files are, unless the contents of the .inc file
+# changes.
+$(INCFiles) : %.inc : $(ObjDir)/%.inc.tmp
+       $(Verb) $(CMP) -s $@ $< || $(CP) $< $@
+
+$(TARGET:%=$(ObjDir)/%GenRegisterNames.inc.tmp): \
+$(ObjDir)/%GenRegisterNames.inc.tmp : %.td $(ObjDir)/.dir
        $(Echo) "Building $(<F) register names with tblgen"
        $(Verb) $(TableGen) -gen-register-enums -o $@ $<
 
-%GenRegisterInfo.h.inc : %.td 
+$(TARGET:%=$(ObjDir)/%GenRegisterInfo.h.inc.tmp): \
+$(ObjDir)/%GenRegisterInfo.h.inc.tmp : %.td $(ObjDir)/.dir
        $(Echo) "Building $(<F) register information header with tblgen"
        $(Verb) $(TableGen) -gen-register-desc-header -o $@ $<
 
-%GenRegisterInfo.inc : %.td
+$(TARGET:%=$(ObjDir)/%GenRegisterInfo.inc.tmp): \
+$(ObjDir)/%GenRegisterInfo.inc.tmp : %.td $(ObjDir)/.dir
        $(Echo) "Building $(<F) register info implementation with tblgen"
        $(Verb) $(TableGen) -gen-register-desc -o $@ $<
 
-%GenInstrNames.inc : %.td
+$(TARGET:%=$(ObjDir)/%GenInstrNames.inc.tmp): \
+$(ObjDir)/%GenInstrNames.inc.tmp : %.td $(ObjDir)/.dir
        $(Echo) "Building $(<F) instruction names with tblgen"
        $(Verb) $(TableGen) -gen-instr-enums -o $@ $<
 
-%GenInstrInfo.inc : %.td
+$(TARGET:%=$(ObjDir)/%GenInstrInfo.inc.tmp): \
+$(ObjDir)/%GenInstrInfo.inc.tmp : %.td $(ObjDir)/.dir
        $(Echo) "Building $(<F) instruction information with tblgen"
        $(Verb) $(TableGen) -gen-instr-desc -o $@ $<
 
-%GenAsmWriter.inc : %.td
+$(TARGET:%=$(ObjDir)/%GenAsmWriter.inc.tmp): \
+$(ObjDir)/%GenAsmWriter.inc.tmp : %.td $(ObjDir)/.dir
        $(Echo) "Building $(<F) assembly writer with tblgen"
        $(Verb) $(TableGen) -gen-asm-writer -o $@ $<
 
-%GenATTAsmWriter.inc : %.td
-       $(Echo) "Building $(<F) AT&T assembly writer with tblgen"
-       $(Verb) $(TableGen) -gen-asm-writer -o $@ $< 
-
-%GenIntelAsmWriter.inc : %.td
-       $(Echo) "Building $(<F) Intel assembly writer with tblgen"
+$(TARGET:%=$(ObjDir)/%GenAsmWriter1.inc.tmp): \
+$(ObjDir)/%GenAsmWriter1.inc.tmp : %.td $(ObjDir)/.dir
+       $(Echo) "Building $(<F) assembly writer #1 with tblgen"
        $(Verb) $(TableGen) -gen-asm-writer -asmwriternum=1 -o $@ $< 
 
-%GenInstrSelector.inc: %.td
-       $(Echo) "Building $(<F) instruction selector with tblgen"
-       $(Verb) $(TableGen) -gen-instr-selector -o $@ $< 
-
-%GenCodeEmitter.inc:: %.td
+$(TARGET:%=$(ObjDir)/%GenCodeEmitter.inc.tmp): \
+$(ObjDir)/%GenCodeEmitter.inc.tmp: %.td $(ObjDir)/.dir
        $(Echo) "Building $(<F) code emitter with tblgen"
        $(Verb) $(TableGen) -gen-emitter -o $@ $<
 
@@ -1219,7 +1280,7 @@ dist-check:: $(DistTarGZip)
          gunzip -c $(DistTarGZip) | $(TAR) xf - && \
          cd build && \
          ../$(DistName)/configure --prefix="$(DistCheckDir)/install" \
-           --srcdir=../$(DistName) --with-llvmgccdir="$(LLVMGCCDIR)" && \
+           --srcdir=../$(DistName) && \
          $(MAKE) all && \
          $(MAKE) check && \
          $(MAKE) install && \
@@ -1285,13 +1346,13 @@ $(DistDir)/.makedistdir: $(DistSources)
          if test -d "$$from_dir/$$file"; then \
            if test -d "$(BUILD_SRC_DIR)/$$file" && \
               test "$$from_dir" != "$(BUILD_SRC_DIR)" ; then \
-             cp -pR "$(BUILD_SRC_DIR)/$$file" "$$to_dir" || exit 1; \
+             $(CP) -pR "$(BUILD_SRC_DIR)/$$file" "$$to_dir" || exit 1; \
            fi; \
-           cp -pR $$from_dir/$$file $$to_dir || exit 1; \
+           $(CP) -pR $$from_dir/$$file $$to_dir || exit 1; \
          elif test -f "$$from_dir/$$file" ; then \
-           cp -p "$$from_dir/$$file" "$(DistDir)/$$file" || exit 1; \
+           $(CP) -p "$$from_dir/$$file" "$(DistDir)/$$file" || exit 1; \
          elif test -L "$$from_dir/$$file" ; then \
-           cp -pd "$$from_dir/$$file" $(DistDir)/$$file || exit 1; \
+           $(CP) -pd "$$from_dir/$$file" $(DistDir)/$$file || exit 1; \
          elif echo "$(DistAlways)" | grep -v "$$file" >/dev/null ; then \
            $(EchoCmd) "===== WARNING: Distribution Source " \
              "$$from_dir/$$file Not Found!" ; \
@@ -1379,6 +1440,7 @@ printvars::
        $(Echo) "Sources        : " '$(Sources)'
        $(Echo) "TDFiles        : " '$(TDFiles)'
        $(Echo) "INCFiles       : " '$(INCFiles)'
+       $(Echo) "INCTMPFiles    : " '$(INCTMPFiles)'
        $(Echo) "Compile.CXX    : " '$(Compile.CXX)'
        $(Echo) "Compile.C      : " '$(Compile.C)'
        $(Echo) "Archive        : " '$(Archive)'