Remove libtool.
[oota-llvm.git] / Makefile.rules
index bb1ea75deff504a4327e086d4aace393f01027ba..82998793654009e84d3f1a7e123115e84bb3164f 100644 (file)
@@ -2,9 +2,9 @@
 #
 #                     The LLVM Compiler Infrastructure
 #
-# This file was developed by the LLVM research group and is distributed under
-# the University of Illinois Open Source License. See LICENSE.TXT for details.
-# 
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+#
 #===------------------------------------------------------------------------===#
 #
 # This file is included by all of the LLVM makefiles.  For details on how to use
@@ -22,9 +22,9 @@
 RecursiveTargets := all clean clean-all install uninstall install-bytecode
 LocalTargets     := all-local clean-local clean-all-local check-local \
                     install-local printvars uninstall-local \
-                   install-bytecode-local
+                   install-bytecode-local unittests
 TopLevelTargets  := check dist dist-check dist-clean dist-gzip dist-bzip2 \
-                    dist-zip
+                    dist-zip unittests
 UserTargets      := $(RecursiveTargets) $(LocalTargets) $(TopLevelTargets)
 InternalTargets  := preconditions distdir dist-hook
 
@@ -41,7 +41,7 @@ VPATH=$(PROJ_SRC_DIR)
 # Reset the list of suffixes we know how to build.
 #--------------------------------------------------------------------
 .SUFFIXES:
-.SUFFIXES: .c .cpp .cc .h .hpp .y .l .lo .o .a .bc .td .ps .dot .ll
+.SUFFIXES: .c .cpp .cc .h .hpp .o .a .bc .td .ps .dot .ll
 .SUFFIXES: $(SHLIBEXT) $(SUFFIXES)
 
 #--------------------------------------------------------------------
@@ -50,7 +50,7 @@ VPATH=$(PROJ_SRC_DIR)
 .PHONY: $(UserTargets) $(InternalTargets)
 
 #--------------------------------------------------------------------
-# Make sure all the user-target rules are double colon rules and 
+# Make sure all the user-target rules are double colon rules and
 # they are defined first.
 #--------------------------------------------------------------------
 
@@ -159,7 +159,7 @@ endif
 #------------------------------------------------------------------------
 ifneq ($(PROJ_OBJ_DIR),$(PROJ_SRC_DIR))
 
-Makefile: $(PROJ_SRC_DIR)/Makefile
+Makefile: $(PROJ_SRC_DIR)/Makefile $(ExtraMakefiles)
        $(Echo) "Updating Makefile"
        $(Verb) $(MKDIR) $(@D)
        $(Verb) $(CP) -f $< $@
@@ -171,11 +171,11 @@ $(PROJ_OBJ_DIR)/Makefile% : $(PROJ_SRC_DIR)/Makefile%
        @case '$?' in \
           *Makefile.rules) ;; \
           *.in) ;; \
-          *) $(Echo) "Updating $(@F)" ; \
+          *) $(EchoCmd) "Updating $(@F)" ; \
             $(MKDIR) $(@D) ; \
             $(CP) -f $< $@ ;; \
        esac
-         
+
 endif
 
 #------------------------------------------------------------------------
@@ -184,17 +184,22 @@ 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
-install-local:: all-local 
+install-local:: all-local
 install-bytecode:: install-bytecode-local
 
 ###############################################################################
 # VARIABLES: Set up various variables based on configuration data
 ###############################################################################
 
+# Variable for if this make is for a "cleaning" target
+ifneq ($(strip $(filter clean clean-local dist-clean,$(MAKECMDGOALS))),)
+  IS_CLEANING_TARGET=1
+endif
+
 #--------------------------------------------------------------------
 # Variables derived from configuration we are building
 #--------------------------------------------------------------------
@@ -210,9 +215,9 @@ endif
 
 ifdef ENABLE_PROFILING
   BuildMode := Profile
-  CXX.Flags := $(OPTIMIZE_OPTION) -pg -g
-  C.Flags   := $(OPTIMIZE_OPTION) -pg -g
-  LD.Flags  := $(OPTIMIZE_OPTION) -pg -g
+  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)
@@ -226,21 +231,25 @@ else
 
     # Darwin requires -fstrict-aliasing to be explicitly enabled.
     ifeq ($(OS),Darwin)
-      EXTRA_OPTIONS += -fstrict-aliasing
+      EXTRA_OPTIONS += -fstrict-aliasing -Wstrict-aliasing
     endif
 
-    CXX.Flags := $(OPTIMIZE_OPTION) $(OmitFramePointer)
-    C.Flags   := $(OPTIMIZE_OPTION) $(OmitFramePointer)
-    LD.Flags  := $(OPTIMIZE_OPTION)
+    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
+    CXX.Flags += -g
+    C.Flags   += -g
+    LD.Flags  += -g
     KEEP_SYMBOLS := 1
   endif
 endif
 
+#ifeq ($(ENABLE_VISIBILITY_INLINES_HIDDEN),1)
+#    CXX.Flags += -fvisibility-inlines-hidden
+#endif
+
 # IF REQUIRES_EH=1 is specified then don't disable exceptions
 ifndef REQUIRES_EH
   CXX.Flags += -fno-exceptions
@@ -260,17 +269,41 @@ else
   CPP.Defines += -D_DEBUG
 endif
 
-# If ENABLE_EXPENSIVE_CHECKS=1 is specified (make command line or 
-# configured), then enable expensive checks by defining the 
+# If ENABLE_EXPENSIVE_CHECKS=1 is specified (make command line or
+# configured), then enable expensive checks by defining the
 # appropriate preprocessor symbols.
 ifdef ENABLE_EXPENSIVE_CHECKS
   BuildMode := $(BuildMode)+Checks
-  CPP.Defines += -D_GLIBCXX_DEBUG
+  CPP.Defines += -D_GLIBCXX_DEBUG -DXDEBUG
+endif
+
+# LOADABLE_MODULE implies several other things so we force them to be
+# defined/on.
+ifdef LOADABLE_MODULE
+  SHARED_LIBRARY := 1
+  DONT_BUILD_RELINKED := 1
+  LINK_LIBS_IN_SHARED := 1
+endif
+
+ifdef SHARED_LIBRARY
+  ENABLE_PIC := 1
+  PIC_FLAG = "(PIC)"
 endif
 
 ifeq ($(ENABLE_PIC),1)
-  CXX.Flags += -fPIC
-  C.Flags   += -fPIC
+  ifeq ($(LLVM_ON_WIN32),1)
+    # Nothing. Win32 defaults to PIC and warns when given -fPIC
+  else
+    ifeq ($(OS),Darwin)
+      # Common symbols not allowed in dylib files
+      CXX.Flags += -fno-common
+      C.Flags   += -fno-common
+    else
+      # Linux and others; pass -fPIC
+      CXX.Flags += -fPIC
+      C.Flags   += -fPIC
+    endif
+  endif
 endif
 
 CXX.Flags     += $(CXXFLAGS) -Woverloaded-virtual
@@ -279,7 +312,6 @@ CPP.Defines   += $(CPPFLAGS)
 CPP.BaseFlags += $(CPP.Defines)
 LD.Flags      += $(LDFLAGS)
 AR.Flags      := cru
-LibTool.Flags := --tag=CXX
 
 # Make Floating point IEEE compliant on Alpha.
 ifeq ($(ARCH),Alpha)
@@ -298,7 +330,13 @@ endif
 #--------------------------------------------------------------------
 # Directory locations
 #--------------------------------------------------------------------
-ObjDir      := $(PROJ_OBJ_DIR)/$(BuildMode)
+TargetMode :=
+ifeq ($(LLVM_CROSS_COMPILING),1)
+  BuildLLVMToolDir := $(LLVM_OBJ_ROOT)/BuildTools/$(BuildMode)/bin
+endif
+
+ObjRootDir  := $(PROJ_OBJ_DIR)/$(BuildMode)
+ObjDir      := $(ObjRootDir)
 LibDir      := $(PROJ_OBJ_ROOT)/$(BuildMode)/lib
 ToolDir     := $(PROJ_OBJ_ROOT)/$(BuildMode)/bin
 ExmplDir    := $(PROJ_OBJ_ROOT)/$(BuildMode)/examples
@@ -312,20 +350,17 @@ CFERuntimeLibDir := $(LLVMGCCDIR)/lib
 #--------------------------------------------------------------------
 EchoCmd  = $(ECHO) llvm[$(MAKELEVEL)]:
 Echo     = @$(EchoCmd)
-ifndef LIBTOOL
-LIBTOOL  := $(LLVM_OBJ_ROOT)/mklib
-endif
 ifndef LLVMAS
 LLVMAS   := $(LLVMToolDir)/llvm-as$(EXEEXT)
 endif
 ifndef TBLGEN
   ifeq ($(LLVM_CROSS_COMPILING),1)
-    TBLGEN   := $(LLVMToolDir)/tblgen$(BUILD_EXEEXT)
+    TBLGEN   := $(BuildLLVMToolDir)/tblgen$(BUILD_EXEEXT)
   else
     TBLGEN   := $(LLVMToolDir)/tblgen$(EXEEXT)
   endif
 endif
-LLVM_CONFIG := $(LLVMToolDir)/llvm-config 
+LLVM_CONFIG := $(LLVMToolDir)/llvm-config
 ifndef LLVMLD
 LLVMLD    := $(LLVMToolDir)/llvm-ld$(EXEEXT)
 endif
@@ -363,21 +398,15 @@ endif
 # Adjust to user's request
 #--------------------------------------------------------------------
 
-# Adjust LD.Flags and Libtool.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. Also, LOADABLE_MODULE implies 
-# several other things so we force them to be defined/on.
+# 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
-  SHARED_LIBRARY := 1
-  DONT_BUILD_RELINKED := 1
-  LINK_LIBS_IN_SHARED := 1
   LD.Flags += -module
 endif
 
 ifdef SHARED_LIBRARY
-  LD.Flags += -rpath $(LibDir)
-else
-  LibTool.Flags += --tag=disable-shared
+  LD.Flags += -Wl,-rpath -Wl,$(LibDir)
 endif
 
 ifdef TOOL_VERBOSE
@@ -390,11 +419,10 @@ endif
 # Adjust settings for verbose mode
 ifndef VERBOSE
   Verb := @
-  LibTool.Flags += --silent
   AR.Flags += >/dev/null 2>/dev/null
   ConfigureScriptFLAGS += >$(PROJ_OBJ_DIR)/configure.out 2>&1
 else
-  ConfigureScriptFLAGS := 
+  ConfigureScriptFLAGS :=
 endif
 
 # By default, strip symbol information from executable
@@ -405,14 +433,22 @@ ifndef KEEP_SYMBOLS
 endif
 
 # Adjust linker flags for building an executable
+ifndef ($(OS),Darwin)
 ifdef TOOLNAME
 ifdef EXAMPLE_TOOL
-  LD.Flags += -rpath $(ExmplDir) -export-dynamic
+  LD.Flags += -Wl,-rpath -Wl,$(ExmplDir) -export-dynamic
 else
-  LD.Flags += -rpath $(ToolDir) -export-dynamic
+  LD.Flags += -Wl,-rpath -Wl,$(ToolDir) -export-dynamic
+endif
 endif
 endif
 
+ifeq ($(OS),Darwin)
+  SharedLinkOptions=-Wl,-flat_namespace -Wl,-undefined -Wl,suppress -bundle
+else
+  SharedLinkOptions=-shared
+endif
+
 #----------------------------------------------------------
 # Options To Invoke Tools
 #----------------------------------------------------------
@@ -451,40 +487,55 @@ ifdef UNIVERSAL
   DISABLE_AUTO_DEPENDENCIES=1
 endif
 
-LD.Flags      += -L$(LibDir) -L$(LLVMLibDir) 
-CPP.BaseFlags += -D_GNU_SOURCE -D__STDC_LIMIT_MACROS
+ifeq ($(OS),SunOS)
+CPP.BaseFlags += -include llvm/System/Solaris.h
+endif
+
+LD.Flags      += -L$(LibDir) -L$(LLVMLibDir)
+CPP.BaseFlags += -D_GNU_SOURCE -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS
 # All -I flags should go here, so that they don't confuse llvm-config.
-CPP.Flags     += -I$(PROJ_OBJ_DIR) -I$(PROJ_SRC_DIR) \
-                -I$(PROJ_OBJ_ROOT)/include \
-                -I$(PROJ_SRC_ROOT)/include \
-                -I$(LLVM_OBJ_ROOT)/include \
-                -I$(LLVM_SRC_ROOT)/include \
-                $(CPP.BaseFlags)
-
-Compile.C     = $(CC) $(CPP.Flags) $(C.Flags) $(CompileCommonOpts) -c
-LTCompile.C   = $(LIBTOOL) $(LibTool.Flags) --mode=compile $(Compile.C)
+CPP.Flags     += $(sort -I$(PROJ_OBJ_DIR) -I$(PROJ_SRC_DIR) \
+                $(patsubst %,-I%/include,\
+                $(PROJ_OBJ_ROOT) $(PROJ_SRC_ROOT) \
+                $(LLVM_OBJ_ROOT) $(LLVM_SRC_ROOT))) \
+                $(CPP.BaseFlags)
+
+ ifeq ($(BUILD_COMPONENT), 1)
+  Compile.C     = $(BUILD_CC) $(CPP.Flags) $(C.Flags) $(CompileCommonOpts) -c
+  Compile.CXX   = $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) -c
+  Preprocess.CXX= $(BUILD_CXX) $(CPP.Flags) $(CompileCommonOpts) $(CXX.Flags) -E
+  Link          = $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) \
+                  $(LD.Flags) $(Strip)
+  Relink        = $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) \
+                 $(Relink.Flags)
+else
+  Compile.C     = $(CC) $(CPP.Flags) $(C.Flags) $(CompileCommonOpts) -c
+  Compile.CXX   = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) -c
+  Preprocess.CXX= $(CXX) $(CPP.Flags) $(CompileCommonOpts) $(CXX.Flags) -E
+  Link          = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) \
+                  $(LD.Flags) $(Strip)
+  Relink        = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) \
+                 $(Relink.Flags)
+endif
+
 BCCompile.C   = $(LLVMGCCWITHPATH) $(CPP.Flags) $(C.Flags) $(CompileCommonOpts)
 Preprocess.C  = $(CC) $(CPP.Flags) $(C.Flags) $(CompileCommonOpts) -E
 
-Compile.CXX   = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) -c
-LTCompile.CXX = $(LIBTOOL) $(LibTool.Flags) --mode=compile $(Compile.CXX)
 BCCompile.CXX = $(LLVMGXXWITHPATH) $(CPP.Flags) $(CXX.Flags) \
                 $(CompileCommonOpts)
 
-Preprocess.CXX= $(CXX) $(CPP.Flags) $(CompileCommonOpts) $(CXX.Flags) -E
-Link          = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) \
-               $(LD.Flags) $(Strip)
-LTLink        = $(LIBTOOL) $(LibTool.Flags) --mode=link $(Link)
-Relink        = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) \
-               $(Relink.Flags)
-LTRelink      = $(LIBTOOL) $(LibTool.Flags) --mode=link $(Relink)
-LTInstall     = $(LIBTOOL) $(LibTool.Flags) --mode=install $(INSTALL) \
-               $(Install.Flags)
-ProgInstall   = $(INSTALL) $(Install.StripFlag) -m 0755 
-ScriptInstall = $(INSTALL) -m 0755 
+ProgInstall   = $(INSTALL) $(Install.StripFlag) -m 0755
+ScriptInstall = $(INSTALL) -m 0755
 DataInstall   = $(INSTALL) -m 0644
-TableGen      = $(TBLGEN) -I $(PROJ_SRC_DIR) -I$(PROJ_SRC_ROOT)/include \
-                -I $(PROJ_SRC_ROOT)/lib/Target      
+
+# When compiling under Mingw/Cygwin, the tblgen tool expects Windows
+# paths. In this case, the SYSPATH function (defined in
+# Makefile.config) transforms Unix paths into Windows paths.
+TableGen      = $(TBLGEN) -I $(call SYSPATH, $(PROJ_SRC_DIR)) \
+                -I $(call SYSPATH, $(LLVM_SRC_ROOT)/include) \
+                -I $(call SYSPATH, $(PROJ_SRC_ROOT)/include) \
+                -I $(call SYSPATH, $(PROJ_SRC_ROOT)/lib/Target)
+
 Archive       = $(AR) $(AR.Flags)
 LArchive      = $(LLVMToolDir)/llvm-ar rcsf
 ifdef RANLIB
@@ -494,26 +545,24 @@ Ranlib        = ranlib
 endif
 
 #----------------------------------------------------------
-# Get the list of source files and compute object file 
-# names from them. 
+# Get the list of source files and compute object file
+# names from them.
 #----------------------------------------------------------
 
 ifndef SOURCES
   Sources := $(notdir $(wildcard $(PROJ_SRC_DIR)/*.cpp \
-             $(PROJ_SRC_DIR)/*.cc $(PROJ_SRC_DIR)/*.c $(PROJ_SRC_DIR)/*.y \
-             $(PROJ_SRC_DIR)/*.l))
+             $(PROJ_SRC_DIR)/*.cc $(PROJ_SRC_DIR)/*.c))
 else
   Sources := $(SOURCES)
-endif 
+endif
 
 ifdef BUILT_SOURCES
-Sources += $(filter %.cpp %.c %.cc %.y %.l,$(BUILT_SOURCES))
+Sources += $(filter %.cpp %.c %.cc,$(BUILT_SOURCES))
 endif
 
 BaseNameSources := $(sort $(basename $(Sources)))
 
 ObjectsO  := $(BaseNameSources:%=$(ObjDir)/%.o)
-ObjectsLO := $(BaseNameSources:%=$(ObjDir)/%.lo)
 ObjectsBC := $(BaseNameSources:%=$(ObjDir)/%.bc)
 
 ###############################################################################
@@ -525,10 +574,8 @@ ObjectsBC := $(BaseNameSources:%=$(ObjDir)/%.bc)
 # in the file so they get built before dependencies
 #---------------------------------------------------------
 
-$(PROJ_bindir): $(PROJ_bindir)/.dir
-$(PROJ_libdir): $(PROJ_libdir)/.dir
-$(PROJ_includedir): $(PROJ_includedir)/.dir
-$(PROJ_etcdir): $(PROJ_etcdir)/.dir
+$(PROJ_bindir) $(PROJ_libdir) $(PROJ_includedir) $(PROJ_etcdir)::
+       $(Verb) $(MKDIR) $@
 
 # To create other directories, as needed, and timestamp their creation
 %/.dir:
@@ -542,7 +589,7 @@ $(PROJ_etcdir): $(PROJ_etcdir)/.dir
 # Handle the DIRS options for sequential construction
 #---------------------------------------------------------
 
-SubDirs := 
+SubDirs :=
 ifdef DIRS
 SubDirs += $(DIRS)
 
@@ -579,6 +626,13 @@ $(RecursiveTargets)::
        done
 endif
 
+#-----------------------------------------------------------
+# Handle the OPTIONAL_PARALLEL_DIRS options for optional parallel construction
+#-----------------------------------------------------------
+ifdef OPTIONAL_PARALLEL_DIRS
+  PARALLEL_DIRS += $(foreach T,$(OPTIONAL_PARALLEL_DIRS),$(shell test -d $(PROJ_SRC_DIR)/$(T) && echo "$(T)"))
+endif
+
 #-----------------------------------------------------------
 # Handle the PARALLEL_DIRS options for parallel construction
 #-----------------------------------------------------------
@@ -669,8 +723,8 @@ endif
 
 #---------------------------------------------------------
 # Define various command line options pertaining to the
-# libraries needed when linking. There are "Proj" libs 
-# (defined by the user's project) and "LLVM" libs (defined 
+# libraries needed when linking. There are "Proj" libs
+# (defined by the user's project) and "LLVM" libs (defined
 # by the LLVM project).
 #---------------------------------------------------------
 
@@ -688,7 +742,7 @@ LLVMUsedLibs    := $(patsubst %.a.o, lib%.a, $(addsuffix .o, $(LLVMLIBS)))
 LLVMLibsPaths   := $(addprefix $(LLVMLibDir)/,$(LLVMUsedLibs))
 endif
 
-ifeq ($(strip $(filter clean clean-local dist-clean,$(MAKECMDGOALS))),)
+ifndef IS_CLEANING_TARGET
 ifdef LINK_COMPONENTS
 
 # If LLVM_CONFIG doesn't exist, build it.  This can happen if you do a make
@@ -696,7 +750,7 @@ ifdef LINK_COMPONENTS
 $(LLVM_CONFIG):
        @echo "*** llvm-config doesn't exist - rebuilding it."
        @$(MAKE) -C $(PROJ_OBJ_ROOT)/tools/llvm-config
-        
+
 $(ToolDir)/$(strip $(TOOLNAME))$(EXEEXT): $(LLVM_CONFIG)
 
 ProjLibsOptions += $(shell $(LLVM_CONFIG) --libs     $(LINK_COMPONENTS))
@@ -723,7 +777,7 @@ $(warning Modules require llvm-gcc but no llvm-gcc is available ****)
 else
 
 Module     := $(LibDir)/$(MODULE_NAME).bc
-LinkModule := $(LLVMLD) -L$(CFERuntimeLibDir)
+LinkModule := $(LLVMLD) -L$(CFERuntimeLibDir) -r
 
 
 ifdef EXPORTED_SYMBOL_FILE
@@ -758,7 +812,7 @@ DestModule := $(ModuleDestDir)/$(MODULE_NAME).bc
 install-module:: $(DestModule)
 install-local:: $(DestModule)
 
-$(DestModule): $(ModuleDestDir) $(Module) 
+$(DestModule): $(ModuleDestDir) $(Module)
        $(Echo) Installing $(BuildMode) Bytecode Module $(DestModule)
        $(Verb) $(DataInstall) $(Module) $(DestModule)
 
@@ -776,11 +830,12 @@ ifdef LIBRARYNAME
 # Make sure there isn't any extranous whitespace on the LIBRARYNAME option
 LIBRARYNAME := $(strip $(LIBRARYNAME))
 ifdef LOADABLE_MODULE
-LibName.LA := $(LibDir)/$(LIBRARYNAME).la
+LibName.A  := $(LibDir)/$(LIBRARYNAME).a
+LibName.SO := $(LibDir)/$(LIBRARYNAME)$(SHLIBEXT)
 else
-LibName.LA := $(LibDir)/lib$(LIBRARYNAME).la
-endif
 LibName.A  := $(LibDir)/lib$(LIBRARYNAME).a
+LibName.SO := $(LibDir)/lib$(LIBRARYNAME)$(SHLIBEXT)
+endif
 LibName.O  := $(LibDir)/$(LIBRARYNAME).o
 LibName.BCA:= $(LibDir)/lib$(LIBRARYNAME).bca
 
@@ -792,7 +847,7 @@ LibName.BCA:= $(LibDir)/lib$(LIBRARYNAME).bca
 #---------------------------------------------------------
 ifdef SHARED_LIBRARY
 
-all-local:: $(LibName.LA)
+all-local:: $(LibName.SO)
 
 ifdef LINK_LIBS_IN_SHARED
 ifdef LOADABLE_MODULE
@@ -800,22 +855,20 @@ SharedLibKindMessage := "Loadable Module"
 else
 SharedLibKindMessage := "Shared Library"
 endif
-$(LibName.LA): $(ObjectsLO) $(LibDir)/.dir
+$(LibName.SO): $(ObjectsO) $(ProjLibsPaths) $(LLVMLibsPaths) $(LibDir)/.dir
        $(Echo) Linking $(BuildMode) $(SharedLibKindMessage) \
          $(LIBRARYNAME)$(SHLIBEXT)
-       $(Verb) $(LTLink) -o $@ $(ObjectsLO) $(ProjLibsOptions) \
-         $(LLVMLibsOptions)
-       $(Verb) $(LTInstall) $@ $(LibDir)
+       $(Verb) $(Link) $(SharedLinkOptions) -o $@ $(ObjectsO) \
+         $(ProjLibsOptions) $(LLVMLibsOptions)
 else
-$(LibName.LA): $(ObjectsLO) $(LibDir)/.dir
+$(LibName.SO): $(ObjectsO) $(LibDir)/.dir
        $(Echo) Linking $(BuildMode) Shared Library $(LIBRARYNAME)$(SHLIBEXT)
-       $(Verb) $(LTLink) -o $@ $(ObjectsLO)
-       $(Verb) $(LTInstall) $@ $(LibDir)
+       $(Verb) $(Link) $(SharedLinkOptions) -o $@ $(ObjectsO)
 endif
 
 clean-local::
-ifneq ($(strip $(LibName.LA)),)
-       -$(Verb) $(RM) -f $(LibName.LA)
+ifneq ($(strip $(LibName.SO)),)
+       -$(Verb) $(RM) -f $(LibName.SO)
 endif
 
 ifdef NO_INSTALL
@@ -828,12 +881,11 @@ DestSharedLib = $(PROJ_libdir)/lib$(LIBRARYNAME)$(SHLIBEXT)
 
 install-local:: $(DestSharedLib)
 
-$(DestSharedLib): $(PROJ_libdir) $(LibName.LA)
+$(DestSharedLib): $(LibName.SO) $(PROJ_libdir)
        $(Echo) Installing $(BuildMode) Shared Library $(DestSharedLib)
-       $(Verb) $(LTInstall) $(LibName.LA) $(DestSharedLib)
-       $(Verb) $(LIBTOOL) --finish $(PROJ_libdir)
+       $(Verb) $(INSTALL) $(LibName.SO) $(DestSharedLib)
 
-uninstall-local:: 
+uninstall-local::
        $(Echo) Uninstalling $(BuildMode) Shared Library $(DestSharedLib)
        -$(Verb) $(RM) -f $(PROJ_libdir)/lib$(LIBRARYNAME).*
 endif
@@ -842,7 +894,7 @@ endif
 #---------------------------------------------------------
 # Bytecode Library Targets:
 #   If the user asked for a bytecode library to be built
-#   with the BYTECODE_LIBRARY variable, then we provide 
+#   with the BYTECODE_LIBRARY variable, then we provide
 #   targets for building them.
 #---------------------------------------------------------
 ifdef BYTECODE_LIBRARY
@@ -895,7 +947,7 @@ uninstall-local::
 else
 install-local:: $(DestBytecodeLib)
 
-$(DestBytecodeLib): $(BytecodeDestDir) $(LibName.BCA) 
+$(DestBytecodeLib): $(LibName.BCA) $(BytecodeDestDir)
        $(Echo) Installing $(BuildMode) Bytecode Archive $(DestBytecodeLib)
        $(Verb) $(DataInstall) $(LibName.BCA) $(DestBytecodeLib)
 
@@ -925,7 +977,7 @@ all-local:: $(LibName.O)
 
 $(LibName.O): $(ObjectsO) $(LibDir)/.dir
        $(Echo) Linking $(BuildMode) Object Library $(notdir $@)
-       $(Verb) $(LTRelink) -o $@ $(ObjectsO)
+       $(Verb) $(Relink) -Wl,-r -nodefaultlibs -nostdlibs -nostartfiles -o $@ $(ObjectsO)
 
 clean-local::
 ifneq ($(strip $(LibName.O)),)
@@ -942,9 +994,9 @@ DestRelinkedLib = $(PROJ_libdir)/$(LIBRARYNAME).o
 
 install-local:: $(DestRelinkedLib)
 
-$(DestRelinkedLib): $(PROJ_libdir) $(LibName.O)
+$(DestRelinkedLib): $(LibName.O) $(PROJ_libdir)
        $(Echo) Installing $(BuildMode) Object Library $(DestRelinkedLib)
-       $(Verb) $(LTInstall) $(LibName.O) $(DestRelinkedLib)
+       $(Verb) $(INSTALL) $(LibName.O) $(DestRelinkedLib)
 
 uninstall-local::
        $(Echo) Uninstalling $(BuildMode) Object Library $(DestRelinkedLib)
@@ -954,7 +1006,7 @@ endif
 
 #---------------------------------------------------------
 # Archive Library Targets:
-#   If the user wanted a regular archive library built, 
+#   If the user wanted a regular archive library built,
 #   then we provide targets for building them.
 #---------------------------------------------------------
 ifdef BUILD_ARCHIVE
@@ -982,10 +1034,10 @@ DestArchiveLib := $(PROJ_libdir)/lib$(LIBRARYNAME).a
 
 install-local:: $(DestArchiveLib)
 
-$(DestArchiveLib): $(PROJ_libdir) $(LibName.A)
+$(DestArchiveLib): $(LibName.A) $(PROJ_libdir)
        $(Echo) Installing $(BuildMode) Archive Library $(DestArchiveLib)
        $(Verb) $(MKDIR) $(PROJ_libdir)
-       $(Verb) $(LTInstall) $(LibName.A) $(DestArchiveLib)
+       $(Verb) $(INSTALL) $(LibName.A) $(DestArchiveLib)
 
 uninstall-local::
        $(Echo) Uninstalling $(BuildMode) Archive Library $(DestArchiveLib)
@@ -994,7 +1046,7 @@ endif
 endif
 
 # endif LIBRARYNAME
-endif 
+endif
 
 ###############################################################################
 # Tool Build Rules: Build executable tool based on TOOLNAME option
@@ -1029,10 +1081,10 @@ endif
 
 $(ToolBuildPath): $(ObjectsO) $(ProjLibsPaths) $(LLVMLibsPaths)
        $(Echo) Linking $(BuildMode) executable $(TOOLNAME) $(StripWarnMsg)
-       $(Verb) $(LTLink) -o $@ $(TOOLLINKOPTS) $(ObjectsO) $(ProjLibsOptions) \
+       $(Verb) $(Link) -o $@ $(TOOLLINKOPTS) $(ObjectsO) $(ProjLibsOptions) \
        $(LLVMLibsOptions) $(ExtraLibs) $(TOOLLINKOPTSB) $(LIBS)
        $(Echo) ======= Finished Linking $(BuildMode) Executable $(TOOLNAME) \
-          $(StripWarnMsg) 
+          $(StripWarnMsg)
 
 ifdef NO_INSTALL
 install-local::
@@ -1044,7 +1096,7 @@ DestTool = $(PROJ_bindir)/$(TOOLNAME)
 
 install-local:: $(DestTool)
 
-$(DestTool): $(PROJ_bindir) $(ToolBuildPath)
+$(DestTool): $(ToolBuildPath) $(PROJ_bindir)
        $(Echo) Installing $(BuildMode) $(DestTool)
        $(Verb) $(ProgInstall) $(ToolBuildPath) $(DestTool)
 
@@ -1055,7 +1107,7 @@ endif
 endif
 
 ###############################################################################
-# Object Build Rules: Build object files based on sources 
+# Object Build Rules: Build object files based on sources
 ###############################################################################
 
 # FIXME: This should be checking for "if not GCC or ICC", not for "if HP-UX"
@@ -1063,39 +1115,35 @@ ifeq ($(OS),HP-UX)
   DISABLE_AUTO_DEPENDENCIES=1
 endif
 
-ifdef SHARED_LIBRARY
-PIC_FLAG = "(PIC)"
-MAYBE_PIC_Compile.CXX = $(LTCompile.CXX)
-MAYBE_PIC_Compile.C = $(LTCompile.C)
-else
-MAYBE_PIC_Compile.CXX = $(Compile.CXX)
-MAYBE_PIC_Compile.C = $(Compile.C)
-endif
-
 # Provide rule sets for when dependency generation is enabled
 ifndef DISABLE_AUTO_DEPENDENCIES
 
 #---------------------------------------------------------
-# Create .lo files in the ObjDir directory from the .cpp and .c files...
+# Create .o files in the ObjDir directory from the .cpp and .c files...
 #---------------------------------------------------------
 
-$(ObjDir)/%.lo $(ObjDir)/%.o: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES)
+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.
+DEPEND_MOVEFILE = then $(MV) -f "$(ObjDir)/$*.d.tmp" "$(ObjDir)/$*.d"; \
+                  else $(RM) "$(ObjDir)/$*.d.tmp"; exit 1; fi
+
+$(ObjDir)/%.o: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES)
        $(Echo) "Compiling $*.cpp for $(BuildMode) build " $(PIC_FLAG)
-       $(Verb) if $(MAYBE_PIC_Compile.CXX) -MD -MT $@ -MP -MF $(ObjDir)/$*.LACXXd $< -o $@ ;\
-         then $(MV) -f "$(ObjDir)/$*.LACXXd" "$(ObjDir)/$*.d"; \
-         else $(RM) -f "$(ObjDir)/$*.LACXXd"; exit 1; fi
+       $(Verb) if $(Compile.CXX) $(DEPEND_OPTIONS) $< -o $(ObjDir)/$*.o ; \
+               $(DEPEND_MOVEFILE)
 
-$(ObjDir)/%.lo $(ObjDir)/%.o: %.cc $(ObjDir)/.dir $(BUILT_SOURCES)
+$(ObjDir)/%.o: %.cc $(ObjDir)/.dir $(BUILT_SOURCES)
        $(Echo) "Compiling $*.cc for $(BuildMode) build" $(PIC_FLAG)
-       $(Verb) if $(MAYBE_PIC_Compile.CXX) -MD -MT $@ -MP -MF $(ObjDir)/$*.LACXXd $< -o $@ ;\
-       then $(MV) -f "$(ObjDir)/$*.LACXXd" "$(ObjDir)/$*.d"; \
-       else $(RM) -f "$(ObjDir)/$*.LACXXd"; exit 1; fi
+       $(Verb) if $(Compile.CXX) $(DEPEND_OPTIONS) $< -o $(ObjDir)/$*.o ; \
+               $(DEPEND_MOVEFILE)
 
-$(ObjDir)/%.lo $(ObjDir)/%.o: %.c $(ObjDir)/.dir $(BUILT_SOURCES)
+$(ObjDir)/%.o: %.c $(ObjDir)/.dir $(BUILT_SOURCES)
        $(Echo) "Compiling $*.c for $(BuildMode) build" $(PIC_FLAG)
-       $(Verb) if $(MAYBE_PIC_Compile.C) -MD -MT $@ -MP -MF $(ObjDir)/$*.LACd $< -o $@ ; \
-       then $(MV) -f "$(ObjDir)/$*.LACd" "$(ObjDir)/$*.d"; \
-       else $(RM) -f "$(ObjDir)/$*.LACd"; exit 1; fi
+       $(Verb) if $(Compile.C) $(DEPEND_OPTIONS) $< -o $(ObjDir)/$*.o ; \
+               $(DEPEND_MOVEFILE)
 
 #---------------------------------------------------------
 # Create .bc files in the ObjDir directory from .cpp .cc and .c files...
@@ -1107,7 +1155,7 @@ $(ObjDir)/%.ll: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMGXX)
                               $< -o $@ -S -emit-llvm ; \
        then $(MV) -f "$(ObjDir)/$*.BCCXXd" "$(ObjDir)/$*.d"; \
        else $(RM) -f "$(ObjDir)/$*.BCCXXd"; exit 1; fi
-       $(call UPGRADE_MSG,$@) 
+       $(call UPGRADE_MSG,$@)
        $(call UPGRADE_LL,$@)
 
 $(ObjDir)/%.ll: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMGXX)
@@ -1116,7 +1164,7 @@ $(ObjDir)/%.ll: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMGXX)
                               $< -o $@ -S -emit-llvm ; \
        then $(MV) -f "$(ObjDir)/$*.BCCXXd" "$(ObjDir)/$*.d"; \
        else $(RM) -f "$(ObjDir)/$*.BCCXXd"; exit 1; fi
-       $(call UPGRADE_MSG,$@) 
+       $(call UPGRADE_MSG,$@)
        $(call UPGRADE_LL,$@)
 
 $(ObjDir)/%.ll: %.c $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMGCC)
@@ -1125,40 +1173,40 @@ $(ObjDir)/%.ll: %.c $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMGCC)
                             $< -o $@ -S -emit-llvm ; \
        then $(MV) -f "$(ObjDir)/$*.BCCd" "$(ObjDir)/$*.d"; \
        else $(RM) -f "$(ObjDir)/$*.BCCd"; exit 1; fi
-       $(call UPGRADE_MSG,$@) 
+       $(call UPGRADE_MSG,$@)
        $(call UPGRADE_LL,$@)
 
 # Provide alternate rule sets if dependencies are disabled
 else
 
-$(ObjDir)/%.lo $(ObjDir)/%.o: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES)
+$(ObjDir)/%.o: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES)
        $(Echo) "Compiling $*.cpp for $(BuildMode) build" $(PIC_FLAG)
-       $(MAYBE_PIC_Compile.CXX) $< -o $@ 
+       $(Compile.CXX) $< -o $@
 
-$(ObjDir)/%.lo $(ObjDir)/%.o: %.cc $(ObjDir)/.dir $(BUILT_SOURCES)
+$(ObjDir)/%.o: %.cc $(ObjDir)/.dir $(BUILT_SOURCES)
        $(Echo) "Compiling $*.cc for $(BuildMode) build" $(PIC_FLAG)
-       $(MAYBE_PIC_Compile.CXX) $< -o $@ 
+       $(Compile.CXX) $< -o $@
 
-$(ObjDir)/%.lo $(ObjDir)/%.o: %.c $(ObjDir)/.dir $(BUILT_SOURCES)
+$(ObjDir)/%.o: %.c $(ObjDir)/.dir $(BUILT_SOURCES)
        $(Echo) "Compiling $*.c for $(BuildMode) build" $(PIC_FLAG)
-       $(MAYBE_PIC_Compile.C) $< -o $@ 
+       $(Compile.C) $< -o $@
 
 $(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_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_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_MSG,@)
        $(call UPGRADE_LL,@)
 
 endif
@@ -1180,15 +1228,15 @@ $(BuildMode)/%.i: %.c $(ObjDir)/.dir $(BUILT_SOURCES)
 
 $(ObjDir)/%.s: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES)
        $(Echo) "Compiling $*.cpp to asm for $(BuildMode) build" $(PIC_FLAG)
-       $(MAYBE_PIC_Compile.CXX) $< -o $@ -S
+       $(Compile.CXX) $< -o $@ -S
 
 $(ObjDir)/%.s: %.cc $(ObjDir)/.dir $(BUILT_SOURCES)
        $(Echo) "Compiling $*.cc to asm for $(BuildMode) build" $(PIC_FLAG)
-       $(MAYBE_PIC_Compile.CXX) $< -o $@ -S
+       $(Compile.CXX) $< -o $@ -S
 
 $(ObjDir)/%.s: %.c $(ObjDir)/.dir $(BUILT_SOURCES)
        $(Echo) "Compiling $*.c to asm for $(BuildMode) build" $(PIC_FLAG)
-       $(MAYBE_PIC_Compile.C) $< -o $@ -S
+       $(Compile.C) $< -o $@ -S
 
 
 # make the C and C++ compilers strip debug info out of bytecode libraries.
@@ -1219,9 +1267,10 @@ $(ObjDir)/%.bc: %.ll $(ObjDir)/.dir $(LLVMAS)
 ifdef TARGET
 
 TDFiles := $(strip $(wildcard $(PROJ_SRC_DIR)/*.td) \
-           $(LLVM_SRC_ROOT)/lib/Target/Target.td \
-           $(LLVM_SRC_ROOT)/lib/Target/TargetCallingConv.td \
-           $(LLVM_SRC_ROOT)/lib/Target/TargetSelectionDAG.td \
+           $(LLVM_SRC_ROOT)/include/llvm/Target/Target.td \
+           $(LLVM_SRC_ROOT)/include/llvm/Target/TargetCallingConv.td \
+           $(LLVM_SRC_ROOT)/include/llvm/Target/TargetSchedule.td \
+           $(LLVM_SRC_ROOT)/include/llvm/Target/TargetSelectionDAG.td \
            $(LLVM_SRC_ROOT)/include/llvm/CodeGen/ValueTypes.td) \
            $(wildcard $(LLVM_SRC_ROOT)/include/llvm/Intrinsics*.td)
 INCFiles := $(filter %.inc,$(BUILT_SOURCES))
@@ -1231,10 +1280,10 @@ INCTMPFiles := $(INCFiles:%=$(ObjDir)/%.tmp)
 # 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 
+# 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
+# tblgen is modified, all of the .inc.tmp files are regenerated, but no
 # dependencies of the .inc files are, unless the contents of the .inc file
 # changes.
 $(INCFiles) : %.inc : $(ObjDir)/%.inc.tmp
@@ -1243,166 +1292,71 @@ $(INCFiles) : %.inc : $(ObjDir)/%.inc.tmp
 $(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 $@ $<
+       $(Verb) $(TableGen) -gen-register-enums -o $(call SYSPATH, $@) $<
 
 $(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 $@ $<
+       $(Verb) $(TableGen) -gen-register-desc-header -o $(call SYSPATH, $@) $<
 
 $(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 $@ $<
+       $(Verb) $(TableGen) -gen-register-desc -o $(call SYSPATH, $@) $<
 
 $(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 $@ $<
+       $(Verb) $(TableGen) -gen-instr-enums -o $(call SYSPATH, $@) $<
 
 $(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 $@ $<
+       $(Verb) $(TableGen) -gen-instr-desc -o $(call SYSPATH, $@) $<
 
 $(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 $@ $<
+       $(Verb) $(TableGen) -gen-asm-writer -o $(call SYSPATH, $@) $<
 
 $(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 $@ $< 
+       $(Verb) $(TableGen) -gen-asm-writer -asmwriternum=1 -o $(call SYSPATH, $@) $<
 
 $(TARGET:%=$(ObjDir)/%GenCodeEmitter.inc.tmp): \
 $(ObjDir)/%GenCodeEmitter.inc.tmp: %.td $(ObjDir)/.dir
        $(Echo) "Building $(<F) code emitter with tblgen"
-       $(Verb) $(TableGen) -gen-emitter -o $@ $<
+       $(Verb) $(TableGen) -gen-emitter -o $(call SYSPATH, $@) $<
 
 $(TARGET:%=$(ObjDir)/%GenDAGISel.inc.tmp): \
 $(ObjDir)/%GenDAGISel.inc.tmp : %.td $(ObjDir)/.dir
-       $(Echo) "Building $(<F) instruction selector implementation with tblgen"
-       $(Verb) $(TableGen) -gen-dag-isel -o $@ $<
+       $(Echo) "Building $(<F) DAG instruction selector implementation with tblgen"
+       $(Verb) $(TableGen) -gen-dag-isel -o $(call SYSPATH, $@) $<
+
+$(TARGET:%=$(ObjDir)/%GenFastISel.inc.tmp): \
+$(ObjDir)/%GenFastISel.inc.tmp : %.td $(ObjDir)/.dir
+       $(Echo) "Building $(<F) \"fast\" instruction selector implementation with tblgen"
+       $(Verb) $(TableGen) -gen-fast-isel -o $(call SYSPATH, $@) $<
 
 $(TARGET:%=$(ObjDir)/%GenSubtarget.inc.tmp): \
 $(ObjDir)/%GenSubtarget.inc.tmp : %.td $(ObjDir)/.dir
        $(Echo) "Building $(<F) subtarget information with tblgen"
-       $(Verb) $(TableGen) -gen-subtarget -o $@ $<
+       $(Verb) $(TableGen) -gen-subtarget -o $(call SYSPATH, $@) $<
 
 $(TARGET:%=$(ObjDir)/%GenCallingConv.inc.tmp): \
 $(ObjDir)/%GenCallingConv.inc.tmp : %.td $(ObjDir)/.dir
        $(Echo) "Building $(<F) calling convention information with tblgen"
-       $(Verb) $(TableGen) -gen-callingconv -o $@ $<
-
-clean-local::
-       -$(Verb) $(RM) -f $(INCFiles)
-
-endif
+       $(Verb) $(TableGen) -gen-callingconv -o $(call SYSPATH, $@) $<
 
-###############################################################################
-# LEX AND YACC: Provide rules for generating sources with lex and yacc
-###############################################################################
-
-#---------------------------------------------------------
-# Provide rules for generating a .cpp source file from 
-# (f)lex input sources. 
-#---------------------------------------------------------
-
-LexFiles  := $(filter %.l,$(Sources))
-
-ifneq ($(LexFiles),)
-
-# Cancel built-in rules for lex
-%.c: %.l
-%.cpp: %.l
-
-all:: $(LexFiles:%.l=$(PROJ_SRC_DIR)/%.cpp.cvs)
-
-# Note the extra sed filtering here, used to cut down on the warnings emited 
-# by GCC.  The last line is a gross hack to work around flex aparently not 
-# being able to resize the buffer on a large token input.  Currently, for 
-# uninitialized string buffers in LLVM we can generate very long tokens, so 
-# this is a hack around it.
-# FIXME.  (f.e. char Buffer[10000] )
-$(PROJ_SRC_DIR)/%.cpp: $(PROJ_SRC_DIR)/%.l
-       $(Echo) Flexing $*.l
-       $(Verb) $(FLEX) -t $(PROJ_SRC_DIR)/$*.l | \
-       $(SED) 's/void yyunput/inline void yyunput/' | \
-       $(SED) 's/void \*yy_flex_realloc/inline void *yy_flex_realloc/' | \
-       $(SED) 's/#define YY_BUF_SIZE 16384/#define YY_BUF_SIZE (16384*64)/' \
-         > $(PROJ_SRC_DIR)/$*.cpp
-    
-# IFF the .l file has changed since it was last checked into CVS, copy the .l
-# file to .l.cvs and the generated .cpp file to .cpp.cvs.  We use this mechanism
-# so that people without flex can build LLVM by copying the .cvs files to the 
-# source location and building them.
-$(LexFiles:%.l=$(PROJ_SRC_DIR)/%.cpp.cvs): \
-$(PROJ_SRC_DIR)/%.cpp.cvs: $(PROJ_SRC_DIR)/%.cpp
-       $(Verb) $(CMP) -s $(PROJ_SRC_DIR)/$*.l $(PROJ_SRC_DIR)/$*.l.cvs || \
-      ($(CP) $< $@; $(CP) $(PROJ_SRC_DIR)/$*.l $(PROJ_SRC_DIR)/$*.l.cvs)
-
-$(LexFiles:%.l=$(ObjDir)/%.o) : \
-$(ObjDir)/%.o : $(PROJ_SRC_DIR)/%.cpp
+$(TARGET:%=$(ObjDir)/%GenIntrinsics.inc.tmp): \
+$(ObjDir)/%GenIntrinsics.inc.tmp : Intrinsics%.td $(ObjDir)/.dir
+       $(Echo) "Building $(<F) calling convention information with tblgen"
+       $(Verb) $(TableGen) -gen-tgt-intrinsic -o $(call SYSPATH, $@) $<
 
 clean-local::
-       -$(Verb) $(RM) -f $(LexOutput)
-
-endif
-
-#---------------------------------------------------------
-# Provide rules for generating a .cpp and .h source files 
-# from yacc (bison) input sources.
-#---------------------------------------------------------
-
-YaccFiles  := $(filter %.y,$(Sources))
-ifneq ($(YaccFiles),)
-
-.PRECIOUS: $(YaccOutput)
-
-all:: $(YaccFiles:%.y=$(PROJ_SRC_DIR)/%.cpp.cvs)
-
-# Cancel built-in rules for yacc
-%.c: %.y 
-%.cpp: %.y
-%.h: %.y
-
-# Rule for building the bison based parsers...
-ifneq ($(BISON),)
-$(PROJ_SRC_DIR)/%.cpp $(PROJ_SRC_DIR)/%.h : $(PROJ_SRC_DIR)/%.y
-       $(Echo) "Bisoning $*.y"
-       $(Verb) $(BISON) -v -d -p $(<F:%Parser.y=%) -o $*.tab.c $<
-       $(Verb) $(MV) -f $*.tab.c $(PROJ_SRC_DIR)/$*.cpp
-       $(Verb) $(MV) -f $*.tab.h $(PROJ_SRC_DIR)/$*.h
-
-# IFF the .y file has changed since it was last checked into CVS, copy the .y
-# file to .y.cvs and the generated .cpp/.h file to .cpp.cvs/.h.cvs.  We use this
-# mechanism so that people without flex can build LLVM by copying the .cvs files
-# to the source location and building them.
-$(YaccFiles:%.y=$(PROJ_SRC_DIR)/%.cpp.cvs): \
-$(PROJ_SRC_DIR)/%.cpp.cvs: $(PROJ_SRC_DIR)/%.cpp
-       $(Verb) $(CMP) -s $(PROJ_SRC_DIR)/$*.y $(PROJ_SRC_DIR)/$*.y.cvs || \
-      ($(CP) $< $@; \
-       $(CP) $(PROJ_SRC_DIR)/$*.y $(PROJ_SRC_DIR)/$*.y.cvs; \
-       $(CP) $(PROJ_SRC_DIR)/$*.h $(PROJ_SRC_DIR)/$*.h.cvs)
-
-else
-$(PROJ_SRC_DIR)/%.cpp : $(PROJ_SRC_DIR)/%.cpp.cvs
-       $(Echo) "Bison of $*.y SKIPPED, bison not found -- copying .cpp.cvs"
-       $(Verb)$(CP) $(PROJ_SRC_DIR)/$*.cpp.cvs $(PROJ_SRC_DIR)/$*.cpp
-
-$(PROJ_SRC_DIR)/%.h : $(PROJ_SRC_DIR)/%.h.cvs
-       $(Echo) "Bison of $*.y SKIPPED, bison not found -- copying .h.cvs"
-       $(Verb)$(CP) $(PROJ_SRC_DIR)/$*.h.cvs $(PROJ_SRC_DIR)/$*.h
-endif
-
-
-$(YaccFiles:%.y=$(ObjDir)/%.o): $(ObjDir)/%.o : $(PROJ_SRC_DIR)/%.cpp
-
-YaccOutput := $(YaccFiles:%.y=%.output)
+       -$(Verb) $(RM) -f $(INCFiles)
 
-clean-local::
-       -$(Verb) $(RM) -f $(YaccOutput)
 endif
 
 ###############################################################################
@@ -1425,11 +1379,11 @@ endif
 %.hpp:: ;
 
 # Define clean-local to clean the current directory. Note that this uses a
-# very conservative approach ensuring that empty variables do not cause 
+# very conservative approach ensuring that empty variables do not cause
 # errors or disastrous removal.
 clean-local::
-ifneq ($(strip $(ObjDir)),)
-       -$(Verb) $(RM) -rf $(ObjDir)
+ifneq ($(strip $(ObjRootDir)),)
+       -$(Verb) $(RM) -rf $(ObjRootDir)
 endif
        -$(Verb) $(RM) -f core core.[0-9][0-9]* *.o *.d *~ *.flc
 ifneq ($(strip $(SHLIBEXT)),) # Extra paranoia - make real sure SHLIBEXT is set
@@ -1446,7 +1400,7 @@ clean-all-local::
 ifndef DISABLE_AUTO_DEPENDENCIES
 
 # If its not one of the cleaning targets
-ifneq ($(strip $(filter-out clean clean-local dist-clean,$(MAKECMDGOALS)))),)
+ifndef IS_CLEANING_TARGET
 
 # Get the list of dependency files
 DependFiles := $(basename $(filter %.cpp %.c %.cc, $(Sources)))
@@ -1456,7 +1410,7 @@ DependFiles := $(DependFiles:%=$(PROJ_OBJ_DIR)/$(BuildMode)/%.d)
 
 endif
 
-endif 
+endif
 
 ###############################################################################
 # CHECK: Running the test suite
@@ -1475,6 +1429,22 @@ check::
          $(EchoCmd) No test directory ; \
        fi
 
+###############################################################################
+# UNITTESTS: Running the unittests test suite
+###############################################################################
+
+unittests::
+       $(Verb) if test -d "$(PROJ_OBJ_ROOT)/unittests" ; then \
+         if test -f "$(PROJ_OBJ_ROOT)/unittests/Makefile" ; then \
+           $(EchoCmd) Running unittests test suite ; \
+           $(MAKE) -C $(PROJ_OBJ_ROOT)/unittests ; \
+         else \
+           $(EchoCmd) No Makefile in unittests directory ; \
+         fi ; \
+       else \
+         $(EchoCmd) No unittests directory ; \
+       fi
+
 ###############################################################################
 # DISTRIBUTION: Handle construction of a distribution tarball
 ###############################################################################
@@ -1543,7 +1513,7 @@ $(DistZip) : $(TopDistDir)/.makedistdir
        $(Verb) rm -f $(DistZip)
        $(Verb) cd $(PROJ_OBJ_ROOT) ; $(ZIP) -rq $(DistZip) $(DistName)
 
-dist :: $(DistTarGZip) $(DistTarBZ2) $(DistZip) 
+dist :: $(DistTarGZip) $(DistTarBZ2) $(DistZip)
        $(Echo) ===== DISTRIBUTION PACKAGING SUCESSFUL =====
 
 DistCheckDir := $(PROJ_OBJ_ROOT)/_distcheckdir
@@ -1563,6 +1533,7 @@ dist-check:: $(DistTarGZip)
            --srcdir=../$(DistName) $(DIST_CHECK_CONFIG_OPTIONS) && \
          $(MAKE) all && \
          $(MAKE) check && \
+         $(MAKE) unittests && \
          $(MAKE) install && \
          $(MAKE) uninstall && \
          $(MAKE) dist-clean && \
@@ -1591,7 +1562,7 @@ $(DistDir)/.makedistdir: $(DistSources)
          $(MAKE) ENABLE_OPTIMIZED=1 all ; \
        fi
        $(Echo) Building Distribution Directory $(DistDir)
-       $(Verb) $(MKDIR) $(DistDir) 
+       $(Verb) $(MKDIR) $(DistDir)
        $(Verb) srcdirstrip=`echo "$(PROJ_SRC_DIR)" | sed 's|.|.|g'`; \
        srcrootstrip=`echo "$(PROJ_SRC_ROOT)" | sed 's|.|.|g'`; \
        for file in $(DistFiles) ; do \
@@ -1692,7 +1663,7 @@ install-local::
        $(Verb) $(MKDIR) $(PROJ_includedir)
        $(Verb) if test -d "$(PROJ_SRC_ROOT)/include" ; then \
          cd $(PROJ_SRC_ROOT)/include && \
-         for  hdr in `find . -type f '!' '(' -name '*~' -o -name '.cvsignore' \
+         for  hdr in `find . -type f '!' '(' -name '*~' \
              -o -name '.#*' -o -name '*.in' ')' -print | grep -v CVS | \
              grep -v .svn` ; do \
            instdir=`dirname "$(PROJ_includedir)/$$hdr"` ; \
@@ -1717,7 +1688,7 @@ uninstall-local::
        $(Verb) if [ -d "$(PROJ_SRC_ROOT)/include" ] ; then \
          cd $(PROJ_SRC_ROOT)/include && \
            $(RM) -f `find . -path '*/Internal' -prune -o '(' -type f \
-             '!' '(' -name '*~' -o -name '.cvsignore' -o -name '.#*' \
+             '!' '(' -name '*~' -o -name '.#*' \
         -o -name '*.in' ')' -print ')' | \
         grep -v CVS | sed 's#^#$(PROJ_includedir)/#'` ; \
          cd $(PROJ_SRC_ROOT)/include && \
@@ -1728,10 +1699,17 @@ endif
 endif
 
 check-line-length:
-       @egrep -n '.{81}' $(Sources)
+       @echo searching for overlength lines in files: $(Sources)
+       @echo
+       @echo
+       egrep -n '.{81}' $(Sources) /dev/null
 
 check-for-tabs:
-       @egrep -n '     ' $(Sources)
+       @echo searching for tabs in files: $(Sources)
+       @echo
+       @echo
+       egrep -n '      ' $(Sources) /dev/null
+
 check-footprint:
        @ls -l $(LibDir) | awk '\
          BEGIN { sum = 0; } \
@@ -1779,3 +1757,11 @@ printvars::
        $(Echo) "SubDirs      : " '$(SubDirs)'
        $(Echo) "ProjLibsPaths: " '$(ProjLibsPaths)'
        $(Echo) "ProjLibsOptions: " '$(ProjLibsOptions)'
+
+###
+# Debugging
+
+# General debugging rule, use 'make print-XXX' to print the
+# definition, value and origin of XXX.
+print-%: 
+       $(error PRINT: $(value $*) = "$($*)" (from $(origin $*)))