#===-- Makefile.rules - Common make rules for LLVM ---------*- Makefile -*--===#
#
#                     The LLVM Compiler Infrastructure
#
# 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
# it properly, please see the document MakefileGuide.html in the docs directory.
#
#===-----------------------------------------------------------------------====#

################################################################################
# TARGETS: Define standard targets that can be invoked
################################################################################

#--------------------------------------------------------------------
# Define the various target sets
#--------------------------------------------------------------------
RecursiveTargets := all clean clean-all install uninstall install-bytecode \
                    unitcheck
LocalTargets     := all-local clean-local clean-all-local check-local \
                    install-local printvars uninstall-local \
		    install-bytecode-local
TopLevelTargets  := check dist dist-check dist-clean dist-gzip dist-bzip2 \
                    dist-zip unittests
UserTargets      := $(RecursiveTargets) $(LocalTargets) $(TopLevelTargets)
InternalTargets  := preconditions distdir dist-hook

################################################################################
# INITIALIZATION: Basic things the makefile needs
################################################################################

#--------------------------------------------------------------------
# Set the VPATH so that we can find source files.
#--------------------------------------------------------------------
VPATH=$(PROJ_SRC_DIR)

#--------------------------------------------------------------------
# Reset the list of suffixes we know how to build.
#--------------------------------------------------------------------
.SUFFIXES:
.SUFFIXES: .c .cpp .cc .h .hpp .o .a .bc .td .ps .dot .ll
.SUFFIXES: $(SHLIBEXT) $(SUFFIXES)

#--------------------------------------------------------------------
# Mark all of these targets as phony to avoid implicit rule search
#--------------------------------------------------------------------
.PHONY: $(UserTargets) $(InternalTargets)

#--------------------------------------------------------------------
# Make sure all the user-target rules are double colon rules and
# they are defined first.
#--------------------------------------------------------------------

$(UserTargets)::

################################################################################
# PRECONDITIONS: that which must be built/checked first
################################################################################

SrcMakefiles       := $(filter %Makefile %Makefile.tests,\
                      $(wildcard $(PROJ_SRC_DIR)/Makefile*))
ObjMakefiles       := $(subst $(PROJ_SRC_DIR),$(PROJ_OBJ_DIR),$(SrcMakefiles))
ConfigureScript    := $(PROJ_SRC_ROOT)/configure
ConfigStatusScript := $(PROJ_OBJ_ROOT)/config.status
MakefileConfigIn   := $(strip $(wildcard $(PROJ_SRC_ROOT)/Makefile.config.in))
MakefileCommonIn   := $(strip $(wildcard $(PROJ_SRC_ROOT)/Makefile.common.in))
MakefileConfig     := $(PROJ_OBJ_ROOT)/Makefile.config
MakefileCommon     := $(PROJ_OBJ_ROOT)/Makefile.common
PreConditions      := $(ConfigStatusScript) $(ObjMakefiles)
ifneq ($(MakefileCommonIn),)
PreConditions      += $(MakefileCommon)
endif

ifneq ($(MakefileConfigIn),)
PreConditions      += $(MakefileConfig)
endif

preconditions: $(PreConditions)

#------------------------------------------------------------------------
# Make sure the BUILT_SOURCES are built first
#------------------------------------------------------------------------
$(filter-out clean clean-local,$(UserTargets)):: $(BUILT_SOURCES)

clean-all-local::
ifneq ($(strip $(BUILT_SOURCES)),)
	-$(Verb) $(RM) -f $(BUILT_SOURCES)
endif

ifneq ($(PROJ_OBJ_ROOT),$(PROJ_SRC_ROOT))
spotless:
	$(Verb) if test -x config.status ; then \
	  $(EchoCmd) Wiping out $(PROJ_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 $(PROJ_OBJ_ROOT) ; \
	  $(ConfigStatusScript) --recheck $(ConfigureScriptFLAGS) && \
	  $(ConfigStatusScript) ; \
	else \
	  $(EchoCmd) "make spotless" can only be run from $(PROJ_OBJ_ROOT); \
	fi
else
spotless:
	$(EchoCmd) "spotless target not supported for objdir == srcdir"
endif

$(BUILT_SOURCES) : $(ObjMakefiles)

#------------------------------------------------------------------------
# Make sure we're not using a stale configuration
#------------------------------------------------------------------------
reconfigure:
	$(Echo) Reconfiguring $(PROJ_OBJ_ROOT)
	$(Verb) cd $(PROJ_OBJ_ROOT) && \
	  if test -w $(PROJ_OBJ_ROOT)/config.cache ; then \
	    $(RM) $(PROJ_OBJ_ROOT)/config.cache ; \
	  fi ; \
	  $(ConfigStatusScript) --recheck $(ConfigureScriptFLAGS) && \
	  $(ConfigStatusScript)

# FIXME: The {PIC16,MSP430}/AsmPrinter line here is a hack to force a reconfigure to pick
# up AsmPrinter changes. Remove it after a reasonable delay from 2009-08-13.

.PRECIOUS: $(ConfigStatusScript)
$(ConfigStatusScript): $(ConfigureScript) $(LLVM_SRC_ROOT)/lib/Target/PIC16/AsmPrinter/Makefile $(LLVM_SRC_ROOT)/lib/Target/MSP430/AsmPrinter/Makefile
	$(Echo) Reconfiguring with $<
	$(Verb) cd $(PROJ_OBJ_ROOT) && \
	  if test -w $(PROJ_OBJ_ROOT)/config.cache ; then \
	    $(RM) $(PROJ_OBJ_ROOT)/config.cache ; \
	  fi ; \
	  $(ConfigStatusScript) --recheck $(ConfigureScriptFLAGS) && \
	  $(ConfigStatusScript)

#------------------------------------------------------------------------
# Make sure the configuration makefile is up to date
#------------------------------------------------------------------------
ifneq ($(MakefileConfigIn),)
$(MakefileConfig): $(MakefileConfigIn) $(ConfigStatusScript)
	$(Echo) Regenerating $@
	$(Verb) cd $(PROJ_OBJ_ROOT) ; $(ConfigStatusScript) Makefile.config
endif

ifneq ($(MakefileCommonIn),)
$(MakefileCommon): $(MakefileCommonIn) $(ConfigStatusScript)
	$(Echo) Regenerating $@
	$(Verb) cd $(PROJ_OBJ_ROOT) ; $(ConfigStatusScript) Makefile.common
endif

#------------------------------------------------------------------------
# If the Makefile in the source tree has been updated, copy it over into the
# build tree. But, only do this if the source and object makefiles differ
#------------------------------------------------------------------------
ifneq ($(PROJ_OBJ_DIR),$(PROJ_SRC_DIR))

Makefile: $(PROJ_SRC_DIR)/Makefile $(ExtraMakefiles)
	$(Echo) "Updating Makefile"
	$(Verb) $(MKDIR) $(@D)
	$(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
# taken care of.
$(PROJ_OBJ_DIR)/Makefile% : $(PROJ_SRC_DIR)/Makefile%
	@case '$?' in \
          *Makefile.rules) ;; \
          *.in) ;; \
          *) $(EchoCmd) "Updating $(@F)" ; \
	     $(MKDIR) $(@D) ; \
	     $(CP) -f $< $@ ;; \
	esac

endif

#------------------------------------------------------------------------
# Set up the basic dependencies
#------------------------------------------------------------------------
$(UserTargets):: $(PreConditions)

all:: all-local
clean:: clean-local
clean-all:: clean-local clean-all-local
install:: install-local
uninstall:: uninstall-local
install-local:: all-local
install-bytecode:: install-bytecode-local

###############################################################################
# LLVMC: Provide rules for compiling llvmc plugins
###############################################################################

ifdef LLVMC_PLUGIN

LIBRARYNAME := $(patsubst %,plugin_llvmc_%,$(LLVMC_PLUGIN))
CPP.Flags += -DLLVMC_PLUGIN_NAME=$(LLVMC_PLUGIN)
REQUIRES_EH := 1

ifeq ($(ENABLE_LLVMC_DYNAMIC),1)
  LD.Flags += -lCompilerDriver
endif

# Build a dynamic library if the user runs `make` directly from the plugin
# directory.
ifndef LLVMC_BUILTIN_PLUGIN
  LOADABLE_MODULE = 1
endif

# TableGen stuff...
ifneq ($(BUILT_SOURCES),)
  LLVMC_BUILD_AUTOGENERATED_INC=1
endif

endif # LLVMC_PLUGIN

ifdef LLVMC_BASED_DRIVER

TOOLNAME = $(LLVMC_BASED_DRIVER)

REQUIRES_EH := 1

ifeq ($(ENABLE_LLVMC_DYNAMIC),1)
  LD.Flags += -lCompilerDriver
else
  LLVMLIBS = CompilerDriver.a
  LINK_COMPONENTS = support system
endif

# Preprocessor magic that generates references to static variables in built-in
# plugins.
ifneq ($(LLVMC_BUILTIN_PLUGINS),)

USEDLIBS += $(patsubst %,plugin_llvmc_%.a,$(LLVMC_BUILTIN_PLUGINS))

LLVMC_BUILTIN_PLUGIN_1 = $(word 1, $(LLVMC_BUILTIN_PLUGINS))
LLVMC_BUILTIN_PLUGIN_2 = $(word 2, $(LLVMC_BUILTIN_PLUGINS))
LLVMC_BUILTIN_PLUGIN_3 = $(word 3, $(LLVMC_BUILTIN_PLUGINS))
LLVMC_BUILTIN_PLUGIN_4 = $(word 4, $(LLVMC_BUILTIN_PLUGINS))
LLVMC_BUILTIN_PLUGIN_5 = $(word 5, $(LLVMC_BUILTIN_PLUGINS))
LLVMC_BUILTIN_PLUGIN_6 = $(word 6, $(LLVMC_BUILTIN_PLUGINS))
LLVMC_BUILTIN_PLUGIN_7 = $(word 7, $(LLVMC_BUILTIN_PLUGINS))
LLVMC_BUILTIN_PLUGIN_8 = $(word 8, $(LLVMC_BUILTIN_PLUGINS))
LLVMC_BUILTIN_PLUGIN_9 = $(word 9, $(LLVMC_BUILTIN_PLUGINS))
LLVMC_BUILTIN_PLUGIN_10 = $(word 10, $(LLVMC_BUILTIN_PLUGINS))


ifneq ($(LLVMC_BUILTIN_PLUGIN_1),)
CPP.Flags += -DLLVMC_BUILTIN_PLUGIN_1=$(LLVMC_BUILTIN_PLUGIN_1)
endif

ifneq ($(LLVMC_BUILTIN_PLUGIN_2),)
CPP.Flags += -DLLVMC_BUILTIN_PLUGIN_2=$(LLVMC_BUILTIN_PLUGIN_2)
endif

ifneq ($(LLVMC_BUILTIN_PLUGIN_3),)
CPP.Flags += -DLLVMC_BUILTIN_PLUGIN_3=$(LLVMC_BUILTIN_PLUGIN_3)
endif

ifneq ($(LLVMC_BUILTIN_PLUGIN_4),)
CPP.Flags += -DLLVMC_BUILTIN_PLUGIN_4=$(LLVMC_BUILTIN_PLUGIN_4)
endif

ifneq ($(LLVMC_BUILTIN_PLUGIN_5),)
CPP.Flags += -DLLVMC_BUILTIN_PLUGIN_5=$(LLVMC_BUILTIN_PLUGIN_5)
endif

ifneq ($(LLVMC_BUILTIN_PLUGIN_6),)
CPP.Flags += -DLLVMC_BUILTIN_PLUGIN_5=$(LLVMC_BUILTIN_PLUGIN_6)
endif

ifneq ($(LLVMC_BUILTIN_PLUGIN_7),)
CPP.Flags += -DLLVMC_BUILTIN_PLUGIN_5=$(LLVMC_BUILTIN_PLUGIN_7)
endif

ifneq ($(LLVMC_BUILTIN_PLUGIN_8),)
CPP.Flags += -DLLVMC_BUILTIN_PLUGIN_5=$(LLVMC_BUILTIN_PLUGIN_8)
endif

ifneq ($(LLVMC_BUILTIN_PLUGIN_9),)
CPP.Flags += -DLLVMC_BUILTIN_PLUGIN_5=$(LLVMC_BUILTIN_PLUGIN_9)
endif

ifneq ($(LLVMC_BUILTIN_PLUGIN_10),)
CPP.Flags += -DLLVMC_BUILTIN_PLUGIN_5=$(LLVMC_BUILTIN_PLUGIN_10)
endif


endif

endif # LLVMC_BASED_DRIVER

###############################################################################
# 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
#--------------------------------------------------------------------

CPP.Defines :=
ifeq ($(ENABLE_OPTIMIZED),1)
  BuildMode := Release
  # Don't use -fomit-frame-pointer on Darwin or FreeBSD.
  ifneq ($(HOST_OS),FreeBSD)
  ifneq ($(HOST_OS),Darwin)
    OmitFramePointer := -fomit-frame-pointer
  endif
  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 ($(HOST_OS),Darwin)
  #  EXTRA_OPTIONS += -fstrict-aliasing -Wstrict-aliasing
  #endif
  CXX.Flags += $(OPTIMIZE_OPTION) $(OmitFramePointer)
  C.Flags   += $(OPTIMIZE_OPTION) $(OmitFramePointer)
  LD.Flags  += $(OPTIMIZE_OPTION)
  ifdef DEBUG_SYMBOLS
    BuildMode := $(BuildMode)+Debug
    CXX.Flags += -g
    C.Flags   += -g
    LD.Flags  += -g
    KEEP_SYMBOLS := 1
  endif
else
  ifdef NO_DEBUG_SYMBOLS
    BuildMode := Unoptimized
    CXX.Flags +=
    C.Flags   +=
    LD.Flags  +=
    KEEP_SYMBOLS := 1
  else
    BuildMode := Debug
    CXX.Flags += -g
    C.Flags   += -g
    LD.Flags  += -g
    KEEP_SYMBOLS := 1
  endif
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)
#    CXX.Flags += -fvisibility-inlines-hidden
#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
  REQUIRES_RTTI := 1
endif

# IF REQUIRES_EH=1 is specified then don't disable exceptions
ifndef REQUIRES_EH
  CXX.Flags += -fno-exceptions
else
  # If the library requires EH, it also requires RTTI.
  REQUIRES_RTTI := 1
endif

ifdef REQUIRES_FRAME_POINTER
  CXX.Flags := $(filter-out -fomit-frame-pointer,$(CXX.Flags))
  C.Flags   := $(filter-out -fomit-frame-pointer,$(C.Flags))
  LD.Flags  := $(filter-out -fomit-frame-pointer,$(LD.Flags))
endif

# If REQUIRES_RTTI=1 is specified then don't disable run-time type id.
ifneq ($(REQUIRES_RTTI), 1)
  CXX.Flags += -fno-rtti
endif

ifdef ENABLE_COVERAGE
  BuildMode := $(BuildMode)+Coverage
  CXX.Flags += -ftest-coverage -fprofile-arcs
  C.Flags   += -ftest-coverage -fprofile-arcs
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
  CPP.Defines += -D_DEBUG
endif

# 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 -DXDEBUG
endif

# LOADABLE_MODULE implies several other things so we force them to be
# defined/on.
ifdef LOADABLE_MODULE
  SHARED_LIBRARY := 1
  LINK_LIBS_IN_SHARED := 1
endif

ifdef SHARED_LIBRARY
  ENABLE_PIC := 1
  PIC_FLAG = "(PIC)"
endif

ifeq ($(ENABLE_PIC),1)
  ifeq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
    # Nothing. Win32 defaults to PIC and warns when given -fPIC
  else
    ifeq ($(HOST_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
else
  ifeq ($(HOST_OS),Darwin)
      CXX.Flags += -mdynamic-no-pic
      C.Flags   += -mdynamic-no-pic
  endif
endif

ifeq ($(HOST_OS),MingW)
  # Work around PR4957
  CPP.Defines += -D__NO_CTYPE_INLINE
  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

CXX.Flags     += -Woverloaded-virtual
CPP.BaseFlags += $(CPP.Defines)
AR.Flags      := cru

# Make Floating point IEEE compliant on Alpha.
ifeq ($(ARCH),Alpha)
  CXX.Flags     += -mieee
  CPP.BaseFlags += -mieee
ifeq ($(ENABLE_PIC),0)
  CXX.Flags     += -fPIC
  CPP.BaseFlags += -fPIC
endif
endif

ifeq ($(ARCH),Alpha)
  LD.Flags += -Wl,--no-relax
endif

#--------------------------------------------------------------------
# Directory locations
#--------------------------------------------------------------------
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
LLVMLibDir  := $(LLVM_OBJ_ROOT)/$(BuildMode)/lib
LLVMToolDir := $(LLVM_OBJ_ROOT)/$(BuildMode)/bin
LLVMExmplDir:= $(LLVM_OBJ_ROOT)/$(BuildMode)/examples

#--------------------------------------------------------------------
# LLVM Capable Compiler
#--------------------------------------------------------------------

ifeq ($(LLVMCC_OPTION),llvm-gcc)
  LLVMCC := $(LLVMGCC)
  LLVMCXX := $(LLVMGXX)
else
  ifeq ($(LLVMCC_OPTION),clang)
    ifneq ($(CLANGPATH),)
      LLVMCC := $(CLANGPATH)
      LLVMCXX := $(CLANGXXPATH)
    else
      ifeq ($(ENABLE_BUILT_CLANG),1)
        LLVMCC := $(LLVMToolDir)/clang
        LLVMCXX := $(LLVMToolDir)/clang++
      endif
    endif
  endif
endif

#--------------------------------------------------------------------
# Full Paths To Compiled Tools and Utilities
#--------------------------------------------------------------------
EchoCmd  = $(ECHO) llvm[$(MAKELEVEL)]:
Echo     = @$(EchoCmd)
ifndef LLVMAS
LLVMAS   := $(LLVMToolDir)/llvm-as$(EXEEXT)
endif
ifndef TBLGEN
  ifeq ($(LLVM_CROSS_COMPILING),1)
    TBLGEN   := $(BuildLLVMToolDir)/tblgen$(BUILD_EXEEXT)
  else
    TBLGEN   := $(LLVMToolDir)/tblgen$(EXEEXT)
  endif
endif
LLVM_CONFIG := $(LLVMToolDir)/llvm-config
ifndef LLVMLD
LLVMLD    := $(LLVMToolDir)/llvm-ld$(EXEEXT)
endif
ifndef LLVMDIS
LLVMDIS  := $(LLVMToolDir)/llvm-dis$(EXEEXT)
endif
ifndef LLI
LLI      := $(LLVMToolDir)/lli$(EXEEXT)
endif
ifndef LLC
LLC      := $(LLVMToolDir)/llc$(EXEEXT)
endif
ifndef LOPT
LOPT     := $(LLVMToolDir)/opt$(EXEEXT)
endif
ifndef LBUGPOINT
LBUGPOINT := $(LLVMToolDir)/bugpoint$(EXEEXT)
endif

#--------------------------------------------------------------------
# Adjust to user's request
#--------------------------------------------------------------------

ifeq ($(HOST_OS),Darwin)
  DARWIN_VERSION := `sw_vers -productVersion`
  # Strip a number like 10.4.7 to 10.4
  DARWIN_VERSION := $(shell echo $(DARWIN_VERSION)| sed -E 's/(10.[0-9]).*/\1/')
  # 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 \
                    -dynamiclib
  ifneq ($(ARCH),ARM)
    SharedLinkOptions += -mmacosx-version-min=$(DARWIN_VERSION)
  endif
else
  ifeq ($(HOST_OS),Cygwin)
    SharedLinkOptions=-shared -nostdlib -Wl,--export-all-symbols \
                      -Wl,--enable-auto-import -Wl,--enable-auto-image-base
  else
    SharedLinkOptions=-shared
  endif
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 ($(DARWIN_MAJVERS),4)
  LD.Flags += $(RPATH) -Wl,$(LibDir)
endif
endif

ifdef TOOL_VERBOSE
  C.Flags += -v
  CXX.Flags += -v
  LD.Flags += -v
  VERBOSE := 1
endif

# Adjust settings for verbose mode
ifndef VERBOSE
  Verb := @
  AR.Flags += >/dev/null 2>/dev/null
  ConfigureScriptFLAGS += >$(PROJ_OBJ_DIR)/configure.out 2>&1
else
  ConfigureScriptFLAGS :=
endif

# By default, strip symbol information from executable
ifndef KEEP_SYMBOLS
  Strip := $(PLATFORMSTRIPOPTS)
  StripWarnMsg := "(without symbols)"
  Install.StripFlag += -s
endif

# Adjust linker flags for building an executable
ifneq ($(HOST_OS),Darwin)
ifneq ($(DARWIN_MAJVERS),4)
ifdef TOOLNAME
  LD.Flags += $(RPATH) -Wl,'$$ORIGIN/../lib'
  ifdef EXAMPLE_TOOL
    LD.Flags += $(RPATH) -Wl,$(ExmplDir) $(RDYNAMIC)
  else
    LD.Flags += $(RPATH) -Wl,$(ToolDir) $(RDYNAMIC)
  endif
endif
endif
endif

#----------------------------------------------------------
# Options To Invoke Tools
#----------------------------------------------------------

ifndef NO_PEDANTIC
CompileCommonOpts += -pedantic -Wno-long-long
endif
CompileCommonOpts += -Wall -W -Wno-unused-parameter -Wwrite-strings \
                     $(EXTRA_OPTIONS)

ifeq ($(HOST_OS),HP-UX)
  CompileCommonOpts := -D_REENTRANT -D_HPUX_SOURCE
endif

# If we are building a universal binary on Mac OS/X, pass extra options.  This
# is useful to people that want to link the LLVM libraries into their universal
# apps.
#
# The following can be optionally specified:
#   UNIVERSAL_SDK_PATH variable can be specified as a path to the SDK to use.
#      For Mac OS/X 10.4 Intel machines, the traditional one is:
#      UNIVERSAL_SDK_PATH=/Developer/SDKs/MacOSX10.4u.sdk/
#   UNIVERSAL_ARCH can be optionally specified to be a list of architectures
#      to build for, e.g. UNIVERSAL_ARCH="i386 ppc ppc64".  This defaults to
#      i386/ppc only.
ifdef UNIVERSAL
  ifndef UNIVERSAL_ARCH
    UNIVERSAL_ARCH := i386 ppc
  endif
  UNIVERSAL_ARCH_OPTIONS := $(UNIVERSAL_ARCH:%=-arch %)
  CompileCommonOpts += $(UNIVERSAL_ARCH_OPTIONS)
  ifdef UNIVERSAL_SDK_PATH
    CompileCommonOpts += -isysroot $(UNIVERSAL_SDK_PATH)
  endif

  # Building universal cannot compute dependencies automatically.
  DISABLE_AUTO_DEPENDENCIES=1
else
  ifeq ($(TARGET_OS),Darwin)
    ifeq ($(ARCH),x86_64)
      TargetCommonOpts = -m64
    else
      ifeq ($(ARCH),x86)
        TargetCommonOpts = -m32
      endif
    endif
  endif
endif

ifeq ($(HOST_OS),SunOS)
CPP.BaseFlags += -include llvm/System/Solaris.h
endif

ifeq ($(HOST_OS),AuroraUX)
CPP.BaseFlags += -include llvm/System/Solaris.h
endif # !HOST_OS - AuroraUX.

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     += $(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) $(CFLAGS) $(CPPFLAGS) \
                  $(TargetCommonOpts) $(CompileCommonOpts) -c
  Compile.CXX   = $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(CXXFLAGS) \
		  $(CPPFLAGS) \
                  $(TargetCommonOpts) $(CompileCommonOpts) -c
  Preprocess.CXX= $(BUILD_CXX) $(CPP.Flags) $(CPPFLAGS) $(TargetCommonOpts) \
                  $(CompileCommonOpts) $(CXX.Flags) -E
  Link          = $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(CXXFLAGS) \
		  $(LDFLAGS) \
                  $(TargetCommonOpts) $(CompileCommonOpts) $(LD.Flags) $(Strip)
else
  Compile.C     = $(CC) $(CPP.Flags) $(C.Flags) $(CFLAGS) $(CPPFLAGS) \
                  $(TargetCommonOpts) $(CompileCommonOpts) -c
  Compile.CXX   = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CXXFLAGS) $(CPPFLAGS) \
                  $(TargetCommonOpts) $(CompileCommonOpts) -c
  Preprocess.CXX= $(CXX) $(CPP.Flags) $(TargetCommonOpts) $(CPPFLAGS) \
                  $(CompileCommonOpts) $(CXX.Flags) -E
  Link          = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CXXFLAGS) $(LDFLAGS) \
                  $(TargetCommonOpts)  $(CompileCommonOpts) $(LD.Flags) $(Strip)
endif

BCCompile.C   = $(LLVMCC) $(CPP.Flags) $(C.Flags) $(CFLAGS) $(CPPFLAGS) \
                $(TargetCommonOpts) $(CompileCommonOpts)
Preprocess.C  = $(CC) $(CPP.Flags) $(C.Flags) $(CPPFLAGS) \
                $(TargetCommonOpts) $(CompileCommonOpts) -E

BCCompile.CXX = $(LLVMCXX) $(CPP.Flags) $(CXX.Flags) $(CXXFLAGS) $(CPPFLAGS) \
                $(TargetCommonOpts) $(CompileCommonOpts)

ProgInstall   = $(INSTALL) $(Install.StripFlag) -m 0755
ScriptInstall = $(INSTALL) -m 0755
DataInstall   = $(INSTALL) -m 0644

# 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
Ranlib        = $(RANLIB)
else
Ranlib        = ranlib
endif

AliasTool     = ln -s

#----------------------------------------------------------
# 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))
else
  Sources := $(SOURCES)
endif

ifdef BUILT_SOURCES
Sources += $(filter %.cpp %.c %.cc,$(BUILT_SOURCES))
endif

BaseNameSources := $(sort $(basename $(Sources)))

ObjectsO  := $(BaseNameSources:%=$(ObjDir)/%.o)
ObjectsBC := $(BaseNameSources:%=$(ObjDir)/%.bc)

###############################################################################
# DIRECTORIES: Handle recursive descent of directory structure
###############################################################################

#---------------------------------------------------------
# Provide rules to make install dirs. This must be early
# in the file so they get built before dependencies
#---------------------------------------------------------

$(DESTDIR)$(PROJ_bindir) $(DESTDIR)$(PROJ_libdir) $(DESTDIR)$(PROJ_includedir) $(DESTDIR)$(PROJ_etcdir)::
	$(Verb) $(MKDIR) $@

# To create other directories, as needed, and timestamp their creation
%/.dir:
	$(Verb) $(MKDIR) $* > /dev/null
	$(Verb) $(DATE) > $@

.PRECIOUS: $(ObjDir)/.dir $(LibDir)/.dir $(ToolDir)/.dir $(ExmplDir)/.dir
.PRECIOUS: $(LLVMLibDir)/.dir $(LLVMToolDir)/.dir $(LLVMExmplDir)/.dir

#---------------------------------------------------------
# Handle the DIRS options for sequential construction
#---------------------------------------------------------

SubDirs :=
ifdef DIRS
SubDirs += $(DIRS)

ifneq ($(PROJ_SRC_ROOT),$(PROJ_OBJ_ROOT))
$(RecursiveTargets)::
	$(Verb) for dir in $(DIRS); do \
	  if [ ! -f $$dir/Makefile ]; then \
	    $(MKDIR) $$dir; \
	    $(CP) $(PROJ_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \
	  fi; \
	  ($(MAKE) -C $$dir $@ ) || exit 1; \
	done
else
$(RecursiveTargets)::
	$(Verb) for dir in $(DIRS); do \
	  ($(MAKE) -C $$dir $@ ) || exit 1; \
	done
endif

endif

#---------------------------------------------------------
# Handle the EXPERIMENTAL_DIRS options ensuring success
# after each directory is built.
#---------------------------------------------------------
ifdef EXPERIMENTAL_DIRS
$(RecursiveTargets)::
	$(Verb) for dir in $(EXPERIMENTAL_DIRS); do \
	  if [ ! -f $$dir/Makefile ]; then \
	    $(MKDIR) $$dir; \
	    $(CP) $(PROJ_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \
	  fi; \
	  ($(MAKE) -C $$dir $@ ) || exit 0; \
	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
#-----------------------------------------------------------
ifdef PARALLEL_DIRS

SubDirs += $(PARALLEL_DIRS)

# Unfortunately, this list must be maintained if new recursive targets are added
all      :: $(addsuffix /.makeall      ,$(PARALLEL_DIRS))
clean    :: $(addsuffix /.makeclean    ,$(PARALLEL_DIRS))
clean-all:: $(addsuffix /.makeclean-all,$(PARALLEL_DIRS))
install  :: $(addsuffix /.makeinstall  ,$(PARALLEL_DIRS))
uninstall:: $(addsuffix /.makeuninstall,$(PARALLEL_DIRS))
install-bytecode  :: $(addsuffix /.makeinstall-bytecode,$(PARALLEL_DIRS))
unitcheck:: $(addsuffix /.makeunitcheck,$(PARALLEL_DIRS))

ParallelTargets := $(foreach T,$(RecursiveTargets),%/.make$(T))

$(ParallelTargets) :
	$(Verb) if [ ! -f $(@D)/Makefile ]; then \
	  $(MKDIR) $(@D); \
	  $(CP) $(PROJ_SRC_DIR)/$(@D)/Makefile $(@D)/Makefile; \
	fi; \
	$(MAKE) -C $(@D) $(subst $(@D)/.make,,$@)
endif

#---------------------------------------------------------
# Handle the OPTIONAL_DIRS options for directores that may
# or may not exist.
#---------------------------------------------------------
ifdef OPTIONAL_DIRS

SubDirs += $(OPTIONAL_DIRS)

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 \
	      $(MKDIR) $$dir; \
	      $(CP) $(PROJ_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \
	    fi; \
	    ($(MAKE) -C$$dir $@ ) || exit 1; \
	  fi \
	done
else
$(RecursiveTargets)::
	$(Verb) for dir in $(OPTIONAL_DIRS); do \
	  ($(MAKE) -C$$dir $@ ) || exit 1; \
	done
endif
endif

#---------------------------------------------------------
# Handle the CONFIG_FILES options
#---------------------------------------------------------
ifdef CONFIG_FILES

ifdef NO_INSTALL
install-local::
	$(Echo) Install circumvented with NO_INSTALL
uninstall-local::
	$(Echo) UnInstall circumvented with NO_INSTALL
else
install-local:: $(DESTDIR)$(PROJ_etcdir) $(CONFIG_FILES)
	$(Echo) Installing Configuration Files To $(DESTDIR)$(PROJ_etcdir)
	$(Verb)for file in $(CONFIG_FILES); do \
          if test -f $(PROJ_OBJ_DIR)/$${file} ; then \
            $(DataInstall) $(PROJ_OBJ_DIR)/$${file} $(DESTDIR)$(PROJ_etcdir) ; \
          elif test -f $(PROJ_SRC_DIR)/$${file} ; then \
            $(DataInstall) $(PROJ_SRC_DIR)/$${file} $(DESTDIR)$(PROJ_etcdir) ; \
          else \
            $(ECHO) Error: cannot find config file $${file}. ; \
          fi \
	done

uninstall-local::
	$(Echo) Uninstalling Configuration Files From $(DESTDIR)$(PROJ_etcdir)
	$(Verb)for file in $(CONFIG_FILES); do \
	  $(RM) -f $(DESTDIR)$(PROJ_etcdir)/$${file} ; \
	done
endif

endif

###############################################################################
# Set up variables for building libararies
###############################################################################

#---------------------------------------------------------
# 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
# by the LLVM project).
#---------------------------------------------------------

ifdef USEDLIBS
ProjLibsOptions := $(patsubst %.a.o, -l%, $(addsuffix .o, $(USEDLIBS)))
ProjLibsOptions := $(patsubst %.o, $(LibDir)/%.o,  $(ProjLibsOptions))
ProjUsedLibs    := $(patsubst %.a.o, lib%.a, $(addsuffix .o, $(USEDLIBS)))
ProjLibsPaths   := $(addprefix $(LibDir)/,$(ProjUsedLibs))
endif

ifdef LLVMLIBS
LLVMLibsOptions := $(patsubst %.a.o, -l%, $(addsuffix .o, $(LLVMLIBS)))
LLVMLibsOptions := $(patsubst %.o, $(LLVMLibDir)/%.o, $(LLVMLibsOptions))
LLVMUsedLibs    := $(patsubst %.a.o, lib%.a, $(addsuffix .o, $(LLVMLIBS)))
LLVMLibsPaths   := $(addprefix $(LLVMLibDir)/,$(LLVMUsedLibs))
endif

ifndef IS_CLEANING_TARGET
ifdef LINK_COMPONENTS

# If LLVM_CONFIG doesn't exist, build it.  This can happen if you do a make
# clean in tools, then do a make in tools (instead of at the top level).
$(LLVM_CONFIG):
	@echo "*** llvm-config doesn't exist - rebuilding it."
	@$(MAKE) -C $(PROJ_OBJ_ROOT)/tools/llvm-config

$(ToolDir)/$(strip $(TOOLNAME))$(EXEEXT): $(LLVM_CONFIG)

ifeq ($(ENABLE_SHARED), 1)
LLVMLibsOptions += -lLLVM-$(LLVMVersion)
LLVMLibsPaths += $(LibDir)/libLLVM-$(LLVMVersion)$(SHLIBEXT)
else
LLVMLibsOptions += $(shell $(LLVM_CONFIG) --libs     $(LINK_COMPONENTS))
LLVMLibsPaths   += $(LLVM_CONFIG) \
                   $(shell $(LLVM_CONFIG) --libfiles $(LINK_COMPONENTS))
endif
endif
endif

###############################################################################
# Library Build Rules: Four ways to build a library
###############################################################################

#---------------------------------------------------------
# Bytecode Module Targets:
#   If the user set MODULE_NAME then they want to build a
#   bytecode module from the sources. We compile all the
#   sources and link it together into a single bytecode
#   module.
#---------------------------------------------------------

ifdef MODULE_NAME
ifeq ($(strip $(LLVMCC)),)
$(warning Modules require LLVM capable compiler but none is available ****)
else

Module     := $(LibDir)/$(MODULE_NAME).bc
LinkModule := $(LLVMLD) -r


ifdef EXPORTED_SYMBOL_FILE
LinkModule += -internalize-public-api-file=$(EXPORTED_SYMBOL_FILE)
endif

$(Module): $(BUILT_SOURCES) $(ObjectsBC) $(LibDir)/.dir $(LLVMLD)
	$(Echo) Building $(BuildMode) Bytecode Module $(notdir $@)
	$(Verb) $(LinkModule) -o $@ $(ObjectsBC)

all-local:: $(Module)

clean-local::
ifneq ($(strip $(Module)),)
	-$(Verb) $(RM) -f $(Module)
endif

ifdef BYTECODE_DESTINATION
ModuleDestDir := $(BYTECODE_DESTINATION)
else
ModuleDestDir := $(DESTDIR)$(PROJ_libdir)
endif

ifdef NO_INSTALL
install-local::
	$(Echo) Install circumvented with NO_INSTALL
uninstall-local::
	$(Echo) Uninstall circumvented with NO_INSTALL
else
DestModule := $(ModuleDestDir)/$(MODULE_NAME).bc

install-module:: $(DestModule)
install-local:: $(DestModule)

$(DestModule): $(ModuleDestDir) $(Module)
	$(Echo) Installing $(BuildMode) Bytecode Module $(DestModule)
	$(Verb) $(DataInstall) $(Module) $(DestModule)

uninstall-local::
	$(Echo) Uninstalling $(BuildMode) Bytecode Module $(DestModule)
	-$(Verb) $(RM) -f $(DestModule)
endif

endif
endif

# if we're building a library ...
ifdef LIBRARYNAME

# Make sure there isn't any extraneous whitespace on the LIBRARYNAME option
LIBRARYNAME := $(strip $(LIBRARYNAME))
ifdef LOADABLE_MODULE
LibName.A  := $(LibDir)/$(LIBRARYNAME).a
LibName.SO := $(LibDir)/$(LIBRARYNAME)$(SHLIBEXT)
else
LibName.A  := $(LibDir)/lib$(LIBRARYNAME).a
LibName.SO := $(LibDir)/lib$(LIBRARYNAME)$(SHLIBEXT)
endif
LibName.O  := $(LibDir)/$(LIBRARYNAME).o
LibName.BCA:= $(LibDir)/lib$(LIBRARYNAME).bca

#---------------------------------------------------------
# Shared Library Targets:
#   If the user asked for a shared library to be built
#   with the SHARED_LIBRARY variable, then we provide
#   targets for building them.
#---------------------------------------------------------
ifdef SHARED_LIBRARY

all-local:: $(LibName.SO)

ifdef LINK_LIBS_IN_SHARED
ifdef LOADABLE_MODULE
SharedLibKindMessage := "Loadable Module"
else
SharedLibKindMessage := "Shared Library"
endif
$(LibName.SO): $(ObjectsO) $(ProjLibsPaths) $(LLVMLibsPaths) $(LibDir)/.dir
	$(Echo) Linking $(BuildMode) $(SharedLibKindMessage) \
	  $(LIBRARYNAME)$(SHLIBEXT)
	$(Verb) $(Link) $(SharedLinkOptions) -o $@ $(ObjectsO) \
	  $(ProjLibsOptions) $(LLVMLibsOptions) $(LIBS)
else
$(LibName.SO): $(ObjectsO) $(LibDir)/.dir
	$(Echo) Linking $(BuildMode) Shared Library $(LIBRARYNAME)$(SHLIBEXT)
	$(Verb) $(Link) $(SharedLinkOptions) -o $@ $(ObjectsO)
endif

clean-local::
ifneq ($(strip $(LibName.SO)),)
	-$(Verb) $(RM) -f $(LibName.SO)
endif

ifdef NO_INSTALL
install-local::
	$(Echo) Install circumvented with NO_INSTALL
uninstall-local::
	$(Echo) Uninstall circumvented with NO_INSTALL
else
DestSharedLib = $(DESTDIR)$(PROJ_libdir)/lib$(LIBRARYNAME)$(SHLIBEXT)

install-local:: $(DestSharedLib)

$(DestSharedLib): $(LibName.SO) $(DESTDIR)$(PROJ_libdir)
	$(Echo) Installing $(BuildMode) Shared Library $(DestSharedLib)
	$(Verb) $(INSTALL) $(LibName.SO) $(DestSharedLib)

uninstall-local::
	$(Echo) Uninstalling $(BuildMode) Shared Library $(DestSharedLib)
	-$(Verb) $(RM) -f $(DESTDIR)$(PROJ_libdir)/lib$(LIBRARYNAME).*
endif
endif

#---------------------------------------------------------
# Bytecode Library Targets:
#   If the user asked for a bytecode library to be built
#   with the BYTECODE_LIBRARY variable, then we provide
#   targets for building them.
#---------------------------------------------------------
ifdef BYTECODE_LIBRARY
ifeq ($(strip $(LLVMCC)),)
$(warning Bytecode libraries require LLVM capable compiler but none is available ****)
else

all-local:: $(LibName.BCA)

ifdef EXPORTED_SYMBOL_FILE
BCLinkLib = $(LLVMLD) -internalize-public-api-file=$(EXPORTED_SYMBOL_FILE)

$(LibName.BCA): $(ObjectsBC) $(LibDir)/.dir $(LLVMLD) \
                $(LLVMToolDir)/llvm-ar
	$(Echo) Building $(BuildMode) Bytecode Archive $(notdir $@) \
	  "(internalize)"
	$(Verb) $(BCLinkLib) -o $(ObjDir)/$(LIBRARYNAME).internalize $(ObjectsBC)
	$(Verb) $(RM) -f $@
	$(Verb) $(LArchive) $@ $(ObjDir)/$(LIBRARYNAME).internalize.bc
else
$(LibName.BCA): $(ObjectsBC) $(LibDir)/.dir \
                $(LLVMToolDir)/llvm-ar
	$(Echo) Building $(BuildMode) Bytecode Archive $(notdir $@)
	$(Verb) $(RM) -f $@
	$(Verb) $(LArchive) $@ $(ObjectsBC)

endif

clean-local::
ifneq ($(strip $(LibName.BCA)),)
	-$(Verb) $(RM) -f $(LibName.BCA)
endif

ifdef BYTECODE_DESTINATION
BytecodeDestDir := $(BYTECODE_DESTINATION)
else
BytecodeDestDir := $(DESTDIR)$(PROJ_libdir)
endif

DestBytecodeLib = $(BytecodeDestDir)/lib$(LIBRARYNAME).bca

install-bytecode-local:: $(DestBytecodeLib)

ifdef NO_INSTALL
install-local::
	$(Echo) Install circumvented with NO_INSTALL
uninstall-local::
	$(Echo) Uninstall circumvented with NO_INSTALL
else
install-local:: $(DestBytecodeLib)

$(DestBytecodeLib): $(LibName.BCA) $(BytecodeDestDir)
	$(Echo) Installing $(BuildMode) Bytecode Archive $(DestBytecodeLib)
	$(Verb) $(DataInstall) $(LibName.BCA) $(DestBytecodeLib)

uninstall-local::
	$(Echo) Uninstalling $(BuildMode) Bytecode Archive $(DestBytecodeLib)
	-$(Verb) $(RM) -f $(DestBytecodeLib)
endif
endif
endif

#---------------------------------------------------------
# Library Targets:
#   If neither BUILD_ARCHIVE or LOADABLE_MODULE are specified, default to
#   building an archive.
#---------------------------------------------------------
ifndef NO_BUILD_ARCHIVE
ifndef BUILD_ARCHIVE
ifndef LOADABLE_MODULE
BUILD_ARCHIVE = 1
endif
endif
endif

#---------------------------------------------------------
# Archive Library Targets:
#   If the user wanted a regular archive library built,
#   then we provide targets for building them.
#---------------------------------------------------------
ifdef BUILD_ARCHIVE

all-local:: $(LibName.A)

$(LibName.A): $(ObjectsO) $(LibDir)/.dir
	$(Echo) Building $(BuildMode) Archive Library $(notdir $@)
	-$(Verb) $(RM) -f $@
	$(Verb) $(Archive) $@ $(ObjectsO)
	$(Verb) $(Ranlib) $@

clean-local::
ifneq ($(strip $(LibName.A)),)
	-$(Verb) $(RM) -f $(LibName.A)
endif

ifdef NO_INSTALL
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)

$(DestArchiveLib): $(LibName.A) $(DESTDIR)$(PROJ_libdir)
	$(Echo) Installing $(BuildMode) Archive Library $(DestArchiveLib)
	$(Verb) $(MKDIR) $(DESTDIR)$(PROJ_libdir)
	$(Verb) $(INSTALL) $(LibName.A) $(DestArchiveLib)

uninstall-local::
	$(Echo) Uninstalling $(BuildMode) Archive Library $(DestArchiveLib)
	-$(Verb) $(RM) -f $(DestArchiveLib)
endif
endif

# endif LIBRARYNAME
endif

###############################################################################
# Tool Build Rules: Build executable tool based on TOOLNAME option
###############################################################################

ifdef TOOLNAME

#---------------------------------------------------------
# Set up variables for building a tool.
#---------------------------------------------------------
TOOLEXENAME := $(strip $(TOOLNAME))$(EXEEXT)
ifdef EXAMPLE_TOOL
ToolBuildPath   := $(ExmplDir)/$(TOOLEXENAME)
else
ToolBuildPath   := $(ToolDir)/$(TOOLEXENAME)
endif

# TOOLALIAS is a name to symlink (or copy) the tool to.
ifdef TOOLALIAS
ifdef EXAMPLE_TOOL
ToolAliasBuildPath   := $(ExmplDir)/$(strip $(TOOLALIAS))$(EXEEXT)
else
ToolAliasBuildPath   := $(ToolDir)/$(strip $(TOOLALIAS))$(EXEEXT)
endif
endif

#---------------------------------------------------------
# Prune Exports
#---------------------------------------------------------

# If the tool opts in with TOOL_NO_EXPORTS, optimize startup time of the app by
# not exporting all of the weak symbols from the binary.  This reduces dyld
# startup time by 4x on darwin in some cases.
ifdef TOOL_NO_EXPORTS
ifeq ($(HOST_OS),Darwin)

# Tiger tools don't support this.
ifneq ($(DARWIN_MAJVERS),4)
LD.Flags += -Wl,-exported_symbol -Wl,_main
endif
endif

ifeq ($(HOST_OS), $(filter $(HOST_OS), Linux NetBSD FreeBSD))
  LD.Flags += -Wl,--version-script=$(LLVM_SRC_ROOT)/autoconf/ExportMap.map
endif
endif


#---------------------------------------------------------
# Provide targets for building the tools
#---------------------------------------------------------
all-local:: $(ToolBuildPath) $(ToolAliasBuildPath)

clean-local::
ifneq ($(strip $(ToolBuildPath)),)
	-$(Verb) $(RM) -f $(ToolBuildPath)
endif
ifneq ($(strip $(ToolAliasBuildPath)),)
	-$(Verb) $(RM) -f $(ToolAliasBuildPath)
endif

ifdef EXAMPLE_TOOL
$(ToolBuildPath): $(ExmplDir)/.dir
else
$(ToolBuildPath): $(ToolDir)/.dir
endif

$(ToolBuildPath): $(ObjectsO) $(ProjLibsPaths) $(LLVMLibsPaths)
	$(Echo) Linking $(BuildMode) executable $(TOOLNAME) $(StripWarnMsg)
	$(Verb) $(Link) -o $@ $(TOOLLINKOPTS) $(ObjectsO) $(ProjLibsOptions) \
	$(LLVMLibsOptions) $(ExtraLibs) $(TOOLLINKOPTSB) $(LIBS)
	$(Echo) ======= Finished Linking $(BuildMode) Executable $(TOOLNAME) \
          $(StripWarnMsg)

ifneq ($(strip $(ToolAliasBuildPath)),)
$(ToolAliasBuildPath): $(ToolBuildPath)
	$(Echo) Creating $(BuildMode) Alias $(TOOLALIAS) $(StripWarnMsg)
	$(Verb) $(RM) -f $(ToolAliasBuildPath)
	$(Verb) $(AliasTool) $(TOOLEXENAME) $(ToolAliasBuildPath)
	$(Echo) ======= Finished Creating $(BuildMode) Alias $(TOOLNAME) \
          $(StripWarnMsg)
endif

ifdef NO_INSTALL
install-local::
	$(Echo) Install circumvented with NO_INSTALL
uninstall-local::
	$(Echo) Uninstall circumvented with NO_INSTALL
else
DestTool = $(DESTDIR)$(PROJ_bindir)/$(TOOLEXENAME)

install-local:: $(DestTool)

$(DestTool): $(ToolBuildPath) $(DESTDIR)$(PROJ_bindir)
	$(Echo) Installing $(BuildMode) $(DestTool)
	$(Verb) $(ProgInstall) $(ToolBuildPath) $(DestTool)

uninstall-local::
	$(Echo) Uninstalling $(BuildMode) $(DestTool)
	-$(Verb) $(RM) -f $(DestTool)

# TOOLALIAS install.
ifdef TOOLALIAS
DestToolAlias = $(DESTDIR)$(PROJ_bindir)/$(TOOLALIAS)$(EXEEXT)

install-local:: $(DestToolAlias)

$(DestToolAlias): $(DestTool) $(PROJ_bindir)
	$(Echo) Installing $(BuildMode) $(DestToolAlias)
	$(Verb) $(RM) -f $(DestToolAlias)
	$(Verb) $(AliasTool) $(TOOLEXENAME) $(DestToolAlias)

uninstall-local::
	$(Echo) Uninstalling $(BuildMode) $(DestToolAlias)
	-$(Verb) $(RM) -f $(DestToolAlias)
endif

endif
endif

###############################################################################
# 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"
ifeq ($(HOST_OS),HP-UX)
  DISABLE_AUTO_DEPENDENCIES=1
endif

# Provide rule sets for when dependency generation is enabled
ifndef DISABLE_AUTO_DEPENDENCIES

#---------------------------------------------------------
# Create .o files in the ObjDir directory from the .cpp and .c files...
#---------------------------------------------------------

DEPEND_OPTIONS = -MMD -MP -MF "$(ObjDir)/$*.d.tmp" \
         -MT "$(ObjDir)/$*.o" -MT "$(ObjDir)/$*.d"

# 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

$(ObjDir)/%.o: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES) $(PROJ_SRC_DIR)/Makefile
	$(Echo) "Compiling $*.cpp for $(BuildMode) build" $(PIC_FLAG)
	$(Verb) if $(Compile.CXX) $(DEPEND_OPTIONS) $< -o $(ObjDir)/$*.o ; \
	        $(DEPEND_MOVEFILE)

$(ObjDir)/%.o: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) $(PROJ_SRC_DIR)/Makefile
	$(Echo) "Compiling $*.cc for $(BuildMode) build" $(PIC_FLAG)
	$(Verb) if $(Compile.CXX) $(DEPEND_OPTIONS) $< -o $(ObjDir)/$*.o ; \
	        $(DEPEND_MOVEFILE)

$(ObjDir)/%.o: %.c $(ObjDir)/.dir $(BUILT_SOURCES) $(PROJ_SRC_DIR)/Makefile
	$(Echo) "Compiling $*.c for $(BuildMode) build" $(PIC_FLAG)
	$(Verb) if $(Compile.C) $(DEPEND_OPTIONS) $< -o $(ObjDir)/$*.o ; \
	        $(DEPEND_MOVEFILE)

#---------------------------------------------------------
# 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) $(LLVMCXX)
	$(Echo) "Compiling $*.cpp for $(BuildMode) build (bytecode)"
	$(Verb) if $(BCCompile.CXX) $(BC_DEPEND_OPTIONS) \
                              $< -o $(ObjDir)/$*.ll -S -emit-llvm ; \
	        $(BC_DEPEND_MOVEFILE)

$(ObjDir)/%.ll: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMCXX)
	$(Echo) "Compiling $*.cc for $(BuildMode) build (bytecode)"
	$(Verb) if $(BCCompile.CXX) $(BC_DEPEND_OPTIONS) \
                              $< -o $(ObjDir)/$*.ll -S -emit-llvm ; \
	        $(BC_DEPEND_MOVEFILE)

$(ObjDir)/%.ll: %.c $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMCC)
	$(Echo) "Compiling $*.c for $(BuildMode) build (bytecode)"
	$(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

$(ObjDir)/%.o: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES)
	$(Echo) "Compiling $*.cpp for $(BuildMode) build" $(PIC_FLAG)
	$(Compile.CXX) $< -o $@

$(ObjDir)/%.o: %.cc $(ObjDir)/.dir $(BUILT_SOURCES)
	$(Echo) "Compiling $*.cc for $(BuildMode) build" $(PIC_FLAG)
	$(Compile.CXX) $< -o $@

$(ObjDir)/%.o: %.c $(ObjDir)/.dir $(BUILT_SOURCES)
	$(Echo) "Compiling $*.c for $(BuildMode) build" $(PIC_FLAG)
	$(Compile.C) $< -o $@

$(ObjDir)/%.ll: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMCXX)
	$(Echo) "Compiling $*.cpp for $(BuildMode) build (bytecode)"
	$(BCCompile.CXX) $< -o $@ -S -emit-llvm

$(ObjDir)/%.ll: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMCXX)
	$(Echo) "Compiling $*.cc for $(BuildMode) build (bytecode)"
	$(BCCompile.CXX) $< -o $@ -S -emit-llvm

$(ObjDir)/%.ll: %.c $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMCC)
	$(Echo) "Compiling $*.c for $(BuildMode) build (bytecode)"
	$(BCCompile.C) $< -o $@ -S -emit-llvm

endif


## Rules for building preprocessed (.i/.ii) outputs.
$(BuildMode)/%.ii: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES)
	$(Echo) "Compiling $*.cpp for $(BuildMode) build to .ii file"
	$(Verb) $(Preprocess.CXX) $< -o $@

$(BuildMode)/%.ii: %.cc $(ObjDir)/.dir $(BUILT_SOURCES)
	$(Echo) "Compiling $*.cc for $(BuildMode) build to .ii file"
	$(Verb) $(Preprocess.CXX) $< -o $@

$(BuildMode)/%.i: %.c $(ObjDir)/.dir $(BUILT_SOURCES)
	$(Echo) "Compiling $*.c for $(BuildMode) build to .i file"
	$(Verb) $(Preprocess.C) $< -o $@


$(ObjDir)/%.s: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES)
	$(Echo) "Compiling $*.cpp to asm for $(BuildMode) build" $(PIC_FLAG)
	$(Compile.CXX) $< -o $@ -S

$(ObjDir)/%.s: %.cc $(ObjDir)/.dir $(BUILT_SOURCES)
	$(Echo) "Compiling $*.cc to asm for $(BuildMode) build" $(PIC_FLAG)
	$(Compile.CXX) $< -o $@ -S

$(ObjDir)/%.s: %.c $(ObjDir)/.dir $(BUILT_SOURCES)
	$(Echo) "Compiling $*.c to asm for $(BuildMode) build" $(PIC_FLAG)
	$(Compile.C) $< -o $@ -S


# make the C and C++ compilers strip debug info out of bytecode libraries.
ifdef DEBUG_RUNTIME
$(ObjectsBC): $(ObjDir)/%.bc: $(ObjDir)/%.ll $(LOPT)
	$(Echo) "Compiling $*.ll to $*.bc for $(BuildMode) build (bytecode)"
	$(Verb) $(LOPT) $< -std-compile-opts -o $@
else
$(ObjectsBC): $(ObjDir)/%.bc: $(ObjDir)/%.ll $(LOPT)
	$(Echo) "Compiling $*.ll to $*.bc for $(BuildMode) build (bytecode)"
	$(Verb) $(LOPT) $< -std-compile-opts -strip-debug -o $@
endif


#---------------------------------------------------------
# Provide rule to build .bc files from .ll sources,
# regardless of dependencies
#---------------------------------------------------------
$(ObjDir)/%.bc: %.ll $(ObjDir)/.dir $(LLVMAS)
	$(Echo) "Compiling $*.ll for $(BuildMode) build"
	$(Verb) $(LLVMAS) $< -f -o $@

###############################################################################
# TABLEGEN: Provide rules for running tblgen to produce *.inc files
###############################################################################

ifdef TARGET
TABLEGEN_INC_FILES_COMMON = 1
endif

ifdef LLVMC_BUILD_AUTOGENERATED_INC
TABLEGEN_INC_FILES_COMMON = 1
endif

ifdef TABLEGEN_INC_FILES_COMMON

INCFiles := $(filter %.inc,$(BUILT_SOURCES))
INCTMPFiles := $(INCFiles:%=$(ObjDir)/%.tmp)
.PRECIOUS: $(INCTMPFiles) $(INCFiles)

# 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 regenerated, 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) $< $@

endif # TABLEGEN_INC_FILES_COMMON

ifdef TARGET

TDFiles := $(strip $(wildcard $(PROJ_SRC_DIR)/*.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)

# All of these files depend on tblgen and the .td files.
$(INCTMPFiles) : $(TBLGEN) $(TDFiles)

$(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 $(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 $(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 $(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 $(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 $(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 $(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 $(call SYSPATH, $@) $<

$(TARGET:%=$(ObjDir)/%GenAsmMatcher.inc.tmp): \
$(ObjDir)/%GenAsmMatcher.inc.tmp : %.td $(ObjDir)/.dir
	$(Echo) "Building $(<F) assembly matcher with tblgen"
	$(Verb) $(TableGen) -gen-asm-matcher -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 $(call SYSPATH, $@) $<

$(TARGET:%=$(ObjDir)/%GenDAGISel.inc.tmp): \
$(ObjDir)/%GenDAGISel.inc.tmp : %.td $(ObjDir)/.dir
	$(Echo) "Building $(<F) DAG instruction selector implementation with tblgen"
	$(Verb) $(TableGen) -gen-dag-isel -o $(call SYSPATH, $@) $<

$(TARGET:%=$(ObjDir)/%GenDisassemblerTables.inc.tmp): \
$(ObjDir)/%GenDisassemblerTables.inc.tmp : %.td $(ObjDir)/.dir
	$(Echo) "Building $(<F) disassembly tables with tblgen"
	$(Verb) $(TableGen) -gen-disassembler -o $(call SYSPATH, $@) $<

$(TARGET:%=$(ObjDir)/%GenEDInfo.inc.tmp): \
$(ObjDir)/%GenEDInfo.inc.tmp : %.td $(ObjDir)/.dir
	$(Echo) "Building $(<F) enhanced disassembly information with tblgen"
	$(Verb) $(TableGen) -gen-enhanced-disassembly-info -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 $(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 $(call SYSPATH, $@) $<

$(TARGET:%=$(ObjDir)/%GenIntrinsics.inc.tmp): \
$(ObjDir)/%GenIntrinsics.inc.tmp : %.td $(ObjDir)/.dir
	$(Echo) "Building $(<F) intrinsics information with tblgen"
	$(Verb) $(TableGen) -gen-tgt-intrinsic -o $(call SYSPATH, $@) $<

clean-local::
	-$(Verb) $(RM) -f $(INCFiles)

endif # TARGET

ifdef LLVMC_BUILD_AUTOGENERATED_INC

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))

$(ObjDir)/AutoGenerated.inc.tmp: $(LLVMCPluginSrc) $(ObjDir)/.dir \
				$(TBLGEN) $(TD_COMMON)
	$(Echo) "Building LLVMC configuration library with tblgen"
	$(Verb) $(TableGen) -gen-llvmc -o $(call SYSPATH, $@) $<

endif # LLVMC_BUILD_AUTOGENERATED_INC

###############################################################################
# OTHER RULES: Other rules needed
###############################################################################

# To create postscript files from dot files...
ifneq ($(DOT),false)
%.ps: %.dot
	$(DOT) -Tps < $< > $@
else
%.ps: %.dot
	$(Echo) "Cannot build $@: The program dot is not installed"
endif

# This rules ensures that header files that are removed still have a rule for
# which they can be "generated."  This allows make to ignore them and
# reproduce the dependency lists.
%.h:: ;
%.hpp:: ;

# Define clean-local to clean the current directory. Note that this uses a
# very conservative approach ensuring that empty variables do not cause
# errors or disastrous removal.
clean-local::
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
	-$(Verb) $(RM) -f *$(SHLIBEXT)
endif

clean-all-local::
	-$(Verb) $(RM) -rf Debug Release Profile


###############################################################################
# DEPENDENCIES: Include the dependency files if we should
###############################################################################
ifndef DISABLE_AUTO_DEPENDENCIES

# If its not one of the cleaning targets
ifndef IS_CLEANING_TARGET

# Get the list of dependency files
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) ""

endif

endif

###############################################################################
# CHECK: Running the test suite
###############################################################################

check::
	$(Verb) if test -d "$(PROJ_OBJ_ROOT)/test" ; then \
	  if test -f "$(PROJ_OBJ_ROOT)/test/Makefile" ; then \
	    $(EchoCmd) Running test suite ; \
	    $(MAKE) -C $(PROJ_OBJ_ROOT)/test check-local \
	      TESTSUITE=$(TESTSUITE) ; \
	  else \
	    $(EchoCmd) No Makefile in test directory ; \
	  fi ; \
	else \
	  $(EchoCmd) No test directory ; \
	fi

check-lit::
	$(Verb) if test -d "$(PROJ_OBJ_ROOT)/test" ; then \
	  if test -f "$(PROJ_OBJ_ROOT)/test/Makefile" ; then \
	    $(EchoCmd) Running test suite ; \
	    $(MAKE) -C $(PROJ_OBJ_ROOT)/test check-local-lit ; \
	  else \
	    $(EchoCmd) No Makefile in test directory ; \
	  fi ; \
	else \
	  $(EchoCmd) No test directory ; \
	fi

check-all::
	$(Verb) if test -d "$(PROJ_OBJ_ROOT)/test" ; then \
	  if test -f "$(PROJ_OBJ_ROOT)/test/Makefile" ; then \
	    $(EchoCmd) Running test suite ; \
	    $(MAKE) -C $(PROJ_OBJ_ROOT)/test check-local-all ; \
	  else \
	    $(EchoCmd) No Makefile in test directory ; \
	  fi ; \
	else \
	  $(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 unitcheck; \
	  else \
	    $(EchoCmd) No Makefile in unittests directory ; \
	  fi ; \
	else \
	  $(EchoCmd) No unittests directory ; \
	fi

###############################################################################
# DISTRIBUTION: Handle construction of a distribution tarball
###############################################################################

#------------------------------------------------------------------------
# Define distribution related variables
#------------------------------------------------------------------------
DistName    := $(PROJECT_NAME)-$(PROJ_VERSION)
DistDir     := $(PROJ_OBJ_ROOT)/$(DistName)
TopDistDir  := $(PROJ_OBJ_ROOT)/$(DistName)
DistTarGZip := $(PROJ_OBJ_ROOT)/$(DistName).tar.gz
DistZip     := $(PROJ_OBJ_ROOT)/$(DistName).zip
DistTarBZ2  := $(PROJ_OBJ_ROOT)/$(DistName).tar.bz2
DistAlways  := CREDITS.TXT LICENSE.TXT README.txt README AUTHORS COPYING \
	       ChangeLog INSTALL NEWS Makefile Makefile.common Makefile.rules \
	       Makefile.config.in configure autoconf
DistOther   := $(notdir $(wildcard \
               $(PROJ_SRC_DIR)/*.h \
               $(PROJ_SRC_DIR)/*.td \
               $(PROJ_SRC_DIR)/*.def \
               $(PROJ_SRC_DIR)/*.ll \
               $(PROJ_SRC_DIR)/*.in))
DistSubDirs := $(SubDirs)
DistSources  = $(Sources) $(EXTRA_DIST)
DistFiles    = $(DistAlways) $(DistSources) $(DistOther)

#------------------------------------------------------------------------
# We MUST build distribution with OBJ_DIR != SRC_DIR
#------------------------------------------------------------------------
ifeq ($(PROJ_SRC_DIR),$(PROJ_OBJ_DIR))
dist dist-check dist-clean dist-gzip dist-bzip2 dist-zip ::
	$(Echo) ERROR: Target $@ only available with OBJ_DIR != SRC_DIR

else

#------------------------------------------------------------------------
# Prevent attempt to run dist targets from anywhere but the top level
#------------------------------------------------------------------------
ifneq ($(LEVEL),.)
dist dist-check dist-clean dist-gzip dist-bzip2 dist-zip ::
	$(Echo) ERROR: You must run $@ from $(PROJ_OBJ_ROOT)
else

#------------------------------------------------------------------------
# Provide the top level targets
#------------------------------------------------------------------------

dist-gzip:: $(DistTarGZip)

$(DistTarGZip) : $(TopDistDir)/.makedistdir
	$(Echo) Packing gzipped distribution tar file.
	$(Verb) cd $(PROJ_OBJ_ROOT) ; $(TAR) chf - "$(DistName)" | \
	  $(GZIP) -c > "$(DistTarGZip)"

dist-bzip2:: $(DistTarBZ2)

$(DistTarBZ2) : $(TopDistDir)/.makedistdir
	$(Echo) Packing bzipped distribution tar file.
	$(Verb) cd $(PROJ_OBJ_ROOT) ; $(TAR) chf - $(DistName) | \
	  $(BZIP2) -c >$(DistTarBZ2)

dist-zip:: $(DistZip)

$(DistZip) : $(TopDistDir)/.makedistdir
	$(Echo) Packing zipped distribution file.
	$(Verb) rm -f $(DistZip)
	$(Verb) cd $(PROJ_OBJ_ROOT) ; $(ZIP) -rq $(DistZip) $(DistName)

dist :: $(DistTarGZip) $(DistTarBZ2) $(DistZip)
	$(Echo) ===== DISTRIBUTION PACKAGING SUCESSFUL =====

DistCheckDir := $(PROJ_OBJ_ROOT)/_distcheckdir

dist-check:: $(DistTarGZip)
	$(Echo) Checking distribution tar file.
	$(Verb) if test -d $(DistCheckDir) ; then \
	  $(RM) -rf $(DistCheckDir) ; \
	fi
	$(Verb) $(MKDIR) $(DistCheckDir)
	$(Verb) cd $(DistCheckDir) && \
	  $(MKDIR) $(DistCheckDir)/build && \
	  $(MKDIR) $(DistCheckDir)/install && \
	  gunzip -c $(DistTarGZip) | $(TAR) xf - && \
	  cd build && \
	  ../$(DistName)/configure --prefix="$(DistCheckDir)/install" \
	    --srcdir=../$(DistName) $(DIST_CHECK_CONFIG_OPTIONS) && \
	  $(MAKE) all && \
	  $(MAKE) check && \
	  $(MAKE) unittests && \
	  $(MAKE) install && \
	  $(MAKE) uninstall && \
	  $(MAKE) dist-clean && \
	  $(EchoCmd) ===== $(DistTarGZip) Ready For Distribution =====

dist-clean::
	$(Echo) Cleaning distribution files
	-$(Verb) $(RM) -rf $(DistTarGZip) $(DistTarBZ2) $(DistZip) $(DistName) \
	  $(DistCheckDir)

endif

#------------------------------------------------------------------------
# Provide the recursive distdir target for building the distribution directory
#------------------------------------------------------------------------
distdir: $(DistDir)/.makedistdir
$(DistDir)/.makedistdir: $(DistSources)
	$(Verb) if test "$(DistDir)" = "$(TopDistDir)" ; then \
	  if test -d "$(DistDir)" ; then \
	    find $(DistDir) -type d ! -perm -200 -exec chmod u+w {} ';'  || \
	      exit 1 ; \
	  fi ; \
	  $(EchoCmd) Removing old $(DistDir) ; \
	  $(RM) -rf $(DistDir); \
	  $(EchoCmd) Making 'all' to verify build ; \
	  $(MAKE) ENABLE_OPTIMIZED=1 all ; \
	fi
	$(Echo) Building Distribution Directory $(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 \
	  case "$$file" in \
	    $(PROJ_SRC_DIR)/*) \
	      file=`echo "$$file" | sed "s#^$$srcdirstrip/##"` \
	      ;; \
	    $(PROJ_SRC_ROOT)/*) \
	      file=`echo "$$file" | \
		sed "s#^$$srcrootstrip/##"` \
	      ;; \
	  esac; \
	  if test -f "$(PROJ_SRC_DIR)/$$file" || \
	     test -d "$(PROJ_SRC_DIR)/$$file" ; then \
	    from_dir="$(PROJ_SRC_DIR)" ; \
	  elif test -f "$$file" || test -d "$$file" ; then \
	    from_dir=. ; \
	  fi ; \
	  to_dir=`echo "$$file" | sed -e 's#/[^/]*$$##'` ; \
	  if test "$$to_dir" != "$$file" && test "$$to_dir" != "."; then \
	    to_dir="$(DistDir)/$$dir"; \
	    $(MKDIR) "$$to_dir" ; \
	  else \
	    to_dir="$(DistDir)"; \
	  fi; \
	  mid_dir=`echo "$$file" | sed -n -e 's#^\(.*\)/[^/]*$$#\1#p'`; \
	  if test -n "$$mid_dir" ; then \
            $(MKDIR) "$$to_dir/$$mid_dir" || exit 1; \
          fi ; \
	  if test -d "$$from_dir/$$file"; then \
	    if test -d "$(PROJ_SRC_DIR)/$$file" && \
	       test "$$from_dir" != "$(PROJ_SRC_DIR)" ; then \
	       cd $(PROJ_SRC_DIR) ; \
	       $(TAR) cf - $$file --exclude .svn --exclude CVS | \
	         ( cd $$to_dir ; $(TAR) xf - ) ; \
	       cd $(PROJ_OBJ_DIR) ; \
	    else \
	       cd $$from_dir ; \
	       $(TAR) cf - $$file --exclude .svn --exclude CVS | \
	         ( cd $$to_dir ; $(TAR) xf - ) ; \
	       cd $(PROJ_OBJ_DIR) ; \
	    fi; \
	  elif test -f "$$from_dir/$$file" ; then \
	    $(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; \
	  elif echo "$(DistAlways)" | grep -v "$$file" >/dev/null ; then \
	    $(EchoCmd) "===== WARNING: Distribution Source " \
	      "$$from_dir/$$file Not Found!" ; \
	  elif test "$(Verb)" != '@' ; then \
	    $(EchoCmd) "Skipping non-existent $$from_dir/$$file" ; \
	  fi; \
	done
	$(Verb) for subdir in $(DistSubDirs) ; do \
	  if test "$$subdir" \!= "." ; then \
	    new_distdir="$(DistDir)/$$subdir" ; \
	    test -d "$$new_distdir" || $(MKDIR) "$$new_distdir" || exit 1; \
	    ( cd $$subdir && $(MAKE) ENABLE_OPTIMIZED=1 \
	      DistDir="$$new_distdir" distdir ) || exit 1; \
	  fi; \
	done
	$(Verb) if test "$(DistDir)" = "$(TopDistDir)" ; then \
	  $(EchoCmd) Eliminating CVS/.svn directories from distribution ; \
	  $(RM) -rf `find $(TopDistDir) -type d \( -name CVS -o \
                                  -name .svn \) -print` ;\
	  $(MAKE) dist-hook ; \
	  $(FIND) $(TopDistDir) -type d ! -perm -777 -exec chmod a+rwx {} \; \
	    -o ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; \
	    -o ! -type d ! -perm -400 -exec chmod a+r {} \; \
	    -o ! -type d ! -perm -444 -exec \
	      $(SHELL) $(INSTALL_SH) -c -m a+r {} {} \; \
	    || chmod -R a+r $(DistDir) ; \
	fi

# This is invoked by distdir target, define it as a no-op to avoid errors if not
# defined by user.
dist-hook::

endif

###############################################################################
# TOP LEVEL - targets only to apply at the top level directory
###############################################################################

ifeq ($(LEVEL),.)

#------------------------------------------------------------------------
# Install support for the project's include files:
#------------------------------------------------------------------------
ifdef NO_INSTALL
install-local::
	$(Echo) Install circumvented with NO_INSTALL
uninstall-local::
	$(Echo) Uninstall circumvented with NO_INSTALL
else
install-local::
	$(Echo) Installing include files
	$(Verb) $(MKDIR) $(DESTDIR)$(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 '.#*' -o -name '*.in' ')' -print | grep -v CVS | \
	      grep -v .svn` ; do \
	    instdir=`dirname "$(DESTDIR)$(PROJ_includedir)/$$hdr"` ; \
	    if test \! -d "$$instdir" ; then \
	      $(EchoCmd) Making install directory $$instdir ; \
	      $(MKDIR) $$instdir ;\
	    fi ; \
	    $(DataInstall) $$hdr $(DESTDIR)$(PROJ_includedir)/$$hdr ; \
	  done ; \
	fi
ifneq ($(PROJ_SRC_ROOT),$(PROJ_OBJ_ROOT))
	$(Verb) if test -d "$(PROJ_OBJ_ROOT)/include" ; then \
	  cd $(PROJ_OBJ_ROOT)/include && \
	  for hdr in `find . -type f -print | grep -v CVS` ; do \
	    $(DataInstall) $$hdr $(DESTDIR)$(PROJ_includedir)/$$hdr ; \
	  done ; \
	fi
endif

uninstall-local::
	$(Echo) Uninstalling include files
	$(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 '.#*' \
        -o -name '*.in' ')' -print ')' | \
        grep -v CVS | sed 's#^#$(DESTDIR)$(PROJ_includedir)/#'` ; \
	  cd $(PROJ_SRC_ROOT)/include && \
	    $(RM) -f `find . -path '*/Internal' -prune -o '(' -type f -name '*.in' \
      -print ')' | sed 's#\.in$$##;s#^#$(DESTDIR)$(PROJ_includedir)/#'` ; \
	fi
endif
endif

check-line-length:
	@echo searching for overlength lines in files: $(Sources)
	@echo
	@echo
	egrep -n '.{81}' $(Sources) /dev/null

check-for-tabs:
	@echo searching for tabs in files: $(Sources)
	@echo
	@echo
	egrep -n '	' $(Sources) /dev/null

check-footprint:
	@ls -l $(LibDir) | awk '\
	  BEGIN { sum = 0; } \
	        { sum += $$5; } \
	  END   { printf("Libraries: %6.3f MBytes\n", sum/(1024.0*1024.0)); }'
	@ls -l $(ToolDir) | awk '\
	  BEGIN { sum = 0; } \
	        { sum += $$5; } \
	  END   { printf("Programs:  %6.3f MBytes\n", sum/(1024.0*1024.0)); }'
#------------------------------------------------------------------------
# Print out the directories used for building
#------------------------------------------------------------------------
printvars::
	$(Echo) "BuildMode    : " '$(BuildMode)'
	$(Echo) "PROJ_SRC_ROOT: " '$(PROJ_SRC_ROOT)'
	$(Echo) "PROJ_SRC_DIR : " '$(PROJ_SRC_DIR)'
	$(Echo) "PROJ_OBJ_ROOT: " '$(PROJ_OBJ_ROOT)'
	$(Echo) "PROJ_OBJ_DIR : " '$(PROJ_OBJ_DIR)'
	$(Echo) "LLVM_SRC_ROOT: " '$(LLVM_SRC_ROOT)'
	$(Echo) "LLVM_OBJ_ROOT: " '$(LLVM_OBJ_ROOT)'
	$(Echo) "PROJ_prefix  : " '$(PROJ_prefix)'
	$(Echo) "PROJ_bindir  : " '$(PROJ_bindir)'
	$(Echo) "PROJ_libdir  : " '$(PROJ_libdir)'
	$(Echo) "PROJ_etcdir  : " '$(PROJ_etcdir)'
	$(Echo) "PROJ_includedir  : " '$(PROJ_includedir)'
	$(Echo) "UserTargets  : " '$(UserTargets)'
	$(Echo) "ObjMakefiles : " '$(ObjMakefiles)'
	$(Echo) "SrcMakefiles : " '$(SrcMakefiles)'
	$(Echo) "ObjDir       : " '$(ObjDir)'
	$(Echo) "LibDir       : " '$(LibDir)'
	$(Echo) "ToolDir      : " '$(ToolDir)'
	$(Echo) "ExmplDir     : " '$(ExmplDir)'
	$(Echo) "Sources      : " '$(Sources)'
	$(Echo) "TDFiles      : " '$(TDFiles)'
	$(Echo) "INCFiles     : " '$(INCFiles)'
	$(Echo) "INCTMPFiles  : " '$(INCTMPFiles)'
	$(Echo) "PreConditions: " '$(PreConditions)'
	$(Echo) "Compile.CXX  : " '$(Compile.CXX)'
	$(Echo) "Compile.C    : " '$(Compile.C)'
	$(Echo) "Archive      : " '$(Archive)'
	$(Echo) "YaccFiles    : " '$(YaccFiles)'
	$(Echo) "LexFiles     : " '$(LexFiles)'
	$(Echo) "Module       : " '$(Module)'
	$(Echo) "FilesToConfig: " '$(FilesToConfigPATH)'
	$(Echo) "SubDirs      : " '$(SubDirs)'
	$(Echo) "ProjLibsPaths: " '$(ProjLibsPaths)'
	$(Echo) "ProjLibsOptions: " '$(ProjLibsOptions)'

###
# Debugging

# General debugging rule, use 'make dbg-print-XXX' to print the
# definition, value and origin of XXX.
make-print-%:
	$(error PRINT: $(value $*) = "$($*)" (from $(origin $*)))
