#===-- 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.  This file defines common
# rules to do things like compile a .cpp file or generate dependency info.
# These are platform dependent, so this is the file used to specify these
# system dependent operations.
#
# The following functionality can be set by setting incoming variables.
# The variable $(LEVEL) *must* be set:
#
# 1. LEVEL - The level of the current subdirectory from the top of the 
#    MagicStats view.  This level should be expressed as a path, for 
#    example, ../.. for two levels deep.
#
# 2. DIRS - A list of subdirectories to be built.  Fake targets are set up
#    so that each of the targets "all", "install", and "clean" each build
#    the subdirectories before the local target.  DIRS are guaranteed to be
#    built in order.
#
# 3. PARALLEL_DIRS - A list of subdirectories to be built, but that may be
#    built in any order.  All DIRS are built in order before PARALLEL_DIRS are
#    built, which are then built in any order.
#
# 4. Source - If specified, this sets the source code filenames.  If this
#    is not set, it defaults to be all of the .cpp, .c, .y, and .l files 
#    in the current directory.  Also, if you want to build files in addition
#    to the local files, you can use the ExtraSource variable
#
# 5. SourceDir - If specified, this specifies a directory that the source files
#    are in, if they are not in the current directory.  This should include a
#    trailing / character.
#
# 6. LLVM_SRC_ROOT - If specified, points to the top of the LLVM source tree.
#
# 8. PROJ_SRC_DIR - The directory which contains the current set of Makefiles
#    and usually the source code too (unless SourceDir is set).
#
# 9. PROJ_SRC_ROOT - The root directory of the source code being compiled.
#
# 10. PROJ_OBJ_DIR - The directory where object code should be placed.
#
# 11. PROJ_OBJ_ROOT - The root directory for where object code should be
#     placed.
#
# For building,
# 	LLVM, LLVM_SRC_ROOT = PROJ_SRC_ROOT
#
#===-----------------------------------------------------------------------====

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

###########################################################################
# Default Targets:
#	The following targets are the standard top level targets for
#	building.
###########################################################################

# Ensure people re-run configure when it gets updated
ifeq ($(HAS_LLVM),1)
all::$(LLVM_OBJ_ROOT)/config.status
endif

ifdef SHARED_LIBRARY
# if SHARED_LIBRARY is specified, the default is to build the dynamic lib
all:: dynamic
install:: install-dynamic-library
endif

ifdef BYTECODE_LIBRARY
# if BYTECODE_LIBRARY is specified, the default is to build the bytecode lib
all:: bytecodelib
install:: install-bytecode-library
install-bytecode:: install-bytecode-library
endif

# Default Rule:  Make sure it's also a :: rule
all ::

# Default for install is to at least build everything...
install ::

# Default rule for build.  It ensures everything has a build rule
build::

# Default rule for test.  It ensures everything has a test rule
test::

# Default rule for building only bytecode.
bytecode::

# Default rule for installing only bytecode.
install-bytecode::

# Print out the directories used for building
prdirs::
	@${ECHO} "Build Source Root: " $(PROJ_SRC_ROOT)
	@${ECHO} "Build Source Dir : " $(PROJ_SRC_DIR)
	@${ECHO} "Build Object Root: " $(PROJ_OBJ_ROOT)
	@${ECHO} "Build Object Dir : " $(PROJ_OBJ_DIR)
	@${ECHO} "LLVM  Source Root: " $(LLVM_SRC_ROOT)
	@${ECHO} "LLVM  Object Root: " $(LLVM_OBJ_ROOT)
	@${ECHO} "CONFIGURATION    : " $(CONFIGURATION)

###########################################################################
# Suffixes and implicit rules:
#	Empty out the list of suffixes, generate a list that is only
#	used by this Makefile, and cancel useless implicit rules.   This
#	will hopefully speed up compilation a little bit.
###########################################################################
.SUFFIXES:
.SUFFIXES: .c .cpp .h .hpp .y .l
.SUFFIXES: .lo .o .a $(SHLIBEXT) .bc .td
.SUFFIXES: .ps .dot .d

#
# Mark all of these targets as phony.  This will hopefully speed up builds
# slightly since GNU Make will not try to find implicit rules for targets
# which are marked as Phony.
#
.PHONY: all dynamic bytecodelib install-bytecode-library
.PHONY: clean distclean install build test bytecode native prdirs dbg

###########################################################################
# Miscellaneous paths and commands:
#	This section defines various configuration macros, such as where
#	to find burg, tblgen, and libtool.
###########################################################################

#--------------------------------------------------------------------
# Variables derived from configuration options... 
#--------------------------------------------------------------------

ifeq ($(ENABLE_PROFILING),1)
  ENABLE_OPTIMIZED = 1
endif

ifeq ($(ENABLE_OPTIMIZED),1)
  CONFIGURATION := Release
  ifdef DEBUG_SYMBOLS
    CONFIGURATION := $(CONFIGURATION)+Debug
  endif
else
  CONFIGURATION := Debug
endif

ifeq ($(ENABLE_PROFILING),1)
  CONFIGURATION := $(CONFIGURATION)+Profile
endif

# We cleverly reversed the sense of this variable in r107758, support use of
# LLVM_RELEASE_IS_PLUS_ASSERTS to allow testing old LLVM revs. We can eliminate
# this when we kill the dependency on LLVM's Makefiles.
ifeq ($(LLVM_RELEASE_IS_PLUS_ASSERTS),1)

ifeq ($(DISABLE_ASSERTIONS),1)
  CONFIGURATION := $(CONFIGURATION)-Asserts
endif

else

# Unless DISABLE_ASSERTIONS=1 is specified (make command line or configured),
# adjust the CONFIGURATION name appropriately (to match LLVM makefiles)
ifneq ($(DISABLE_ASSERTIONS),1)
  CONFIGURATION := $(CONFIGURATION)+Asserts
endif

endif

# If ENABLE_EXPENSIVE_CHECKS=1 is specified (make command line or
# configured), then adjust the CONFIGURATION name appropriately
# (to match LLVM makefiles)
ifeq ($(ENABLE_EXPENSIVE_CHECKS),1)
  CONFIGURATION := $(CONFIGURATION)+Checks
endif

#
# Enable this for profiling support with 'gprof'
# This automatically enables optimized builds.
#
ifeq ($(ENABLE_PROFILING),1)
  PROFILE = -pg
endif

###########################################################################
# Library Locations:
#	These variables describe various library locations:
#
#	DEST* = Location of where libraries that are built will be placed.
#	LLVM* = Location of LLVM libraries used for linking.
#	PROJ* = Location of previously built libraries used for linking.
###########################################################################

# Libraries that are being built
DESTLIBDEBUG    := $(PROJ_OBJ_ROOT)/Debug/lib
DESTLIBRELEASE  := $(PROJ_OBJ_ROOT)/Release/lib
DESTLIBPROFILE  := $(PROJ_OBJ_ROOT)/Profile/lib
DESTLIBBYTECODE := $(PROJ_OBJ_ROOT)/BytecodeLibs/lib
DESTLIBCURRENT  := $(PROJ_OBJ_ROOT)/$(CONFIGURATION)/lib

# LLVM libraries used for linking
LLVMLIBDEBUGSOURCE    := $(LLVM_OBJ_ROOT)/Debug/lib
LLVMLIBRELEASESOURCE  := $(LLVM_OBJ_ROOT)/Release/lib
LLVMLIBPROFILESOURCE  := $(LLVM_OBJ_ROOT)/Profile/lib
LLVMLIBCURRENTSOURCE  := $(LLVM_OBJ_ROOT)/$(CONFIGURATION)/lib

# Libraries that were built that will now be used for linking
PROJLIBDEBUGSOURCE    := $(PROJ_OBJ_ROOT)/Debug/lib
PROJLIBRELEASESOURCE  := $(PROJ_OBJ_ROOT)/Release/lib
PROJLIBPROFILESOURCE  := $(PROJ_OBJ_ROOT)/Profile/lib
PROJLIBCURRENTSOURCE  := $(PROJ_OBJ_ROOT)/$(CONFIGURATION)/lib

###########################################################################
# Tool Locations
#	These variables describe various tool locations:
#
#	DEST* = Location of where tools that are built will be placed.
#	LLVM* = Location of LLVM tools used for building.
#	PROJ* = Location of previously built tools used for linking.
###########################################################################

DESTTOOLDEBUG   := $(PROJ_OBJ_ROOT)/Debug/bin
DESTTOOLRELEASE := $(PROJ_OBJ_ROOT)/Release/bin
DESTTOOLPROFILE := $(PROJ_OBJ_ROOT)/Profile/bin
DESTTOOLCURRENT := $(PROJ_OBJ_ROOT)/$(CONFIGURATION)/bin

LLVMTOOLDEBUG   := $(LLVM_OBJ_ROOT)/Debug/bin
LLVMTOOLRELEASE := $(LLVM_OBJ_ROOT)/Release/bin
LLVMTOOLPROFILE := $(LLVM_OBJ_ROOT)/Profile/bin
LLVMTOOLCURRENT := $(LLVM_OBJ_ROOT)/$(CONFIGURATION)/bin

PROJTOOLDEBUG   := $(PROJ_OBJ_ROOT)/Debug/bin
PROJTOOLRELEASE := $(PROJ_OBJ_ROOT)/Release/bin
PROJTOOLPROFILE := $(PROJ_OBJ_ROOT)/Profile/bin
PROJTOOLCURRENT := $(PROJ_OBJ_ROOT)/$(CONFIGURATION)/bin

#
# Libtool is found in the current directory.
#
LIBTOOL := $(LLVM_OBJ_ROOT)/mklib

#
# If we're not building a shared library, use the disable-shared tag with
# libtool.  This will disable the building of objects for shared libraries and
# only generate static library objects.
#
# For dynamic libraries, we'll take the performance hit for now, since we
# almost never build them.
#
# This should speed up compilation and require no modifications to future
# versions of libtool.
#
ifndef SHARED_LIBRARY
LIBTOOL += --tag=disable-shared
endif

#
# Verbosity levels
#
ifndef VERBOSE
VERB := @
LIBTOOL += --silent
endif

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

# FIXME: We shouldn't need to duplicate this from LLVM's Makefile.rules.

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 := $(LLVMTOOLCURRENT)/clang
        LLVMCXX := $(LLVMTOOLCURRENT)/clang++
      endif
    endif
  else
    # Compatibility with older LLVM checkouts.
    LLVMCC := $(LLVMGCC)
    LLVMCXX := $(LLVMGXX)
  endif
endif

###########################################################################
# Miscellaneous paths and commands (part deux):
#	This section defines various configuration macros, such as where
#	to find burg, tblgen, and libtool.
###########################################################################

#--------------------------------------------------------------------------
# The compiled LLVM tools
#

LLVMAS  := $(LLVMTOOLCURRENT)/llvm-as$(EXEEXT)
# LLVM Tool Definitions (LLVMGCC, LLVMGXX, LLVMAS are provided by
# Makefile.rules) 
LLI       = $(LLVMTOOLCURRENT)/lli$(EXEEXT)
LLC       = $(LLVMTOOLCURRENT)/llc$(EXEEXT)
LLVMLD    = $(LLVMTOOLCURRENT)/llvm-ld$(EXEEXT)
LDIS      = $(LLVMTOOLCURRENT)/llvm-dis$(EXEEXT)
LOPT      = $(LLVMTOOLCURRENT)/opt$(EXEEXT)
LLINK     = $(LLVMTOOLCURRENT)/llvm-link$(EXEEXT)
LPROF     = $(LLVMTOOLCURRENT)/llvm-prof$(EXEEXT)
LBUGPOINT = $(LLVMTOOLCURRENT)/bugpoint$(EXEEXT)
LFINDMISOPT= $(LLVM_SRC_ROOT)/utils/findmisopt

ifeq ($(HAS_LLVM),1)
FPCMP     = $(LLVMTOOLCURRENT)/fpcmp
else
FPCMP     = $(PROJ_OBJ_ROOT)/tools/fpcmp
endif

ifeq ($(HAS_LLVM),0)
# Not strictly related to HAS_LLVM, but otherwise in generally tools weren't
# being built.
TIMEIT        = $(PROJ_OBJ_ROOT)/tools/timeit
TIMEIT_TARGET = $(PROJ_OBJ_ROOT)/tools/timeit-target
endif

LCC := $(LLVMCC)
LCXX := $(LLVMCXX)

# FIXME: Fix these dependencies for Clang, and for overridden TARGET_LLVMGCC.
LCC_PROGRAMS :=
ifeq ($(LLVMCC_OPTION),llvm-gcc)
  LCC_PROGRAMS += $(LLVMCC1) $(LLVMCC1PLUS)
endif


###########################################################################
# Compile Time Flags
###########################################################################

#
# Include both the project headers and the LLVM headers for compilation and
# dependency computation.
#
# PROJ_OBJ_DIR          : Files local to the particular object directory
#                          (locallly generated header files).
# PROJ_SRC_DIR          : Files local to the particular source directory.
# PROJ_SRC_ROOT/include : Files global to the project.
# LLVM_OBJ_ROOT/include  : config.h files generated by autoconf
# LEVEL/include          : config.h files for the project
# LLVM_SRC_ROOT/include  : Files global to LLVM.
#
CPPFLAGS += -I$(PROJ_OBJ_DIR) -I$(PROJ_SRC_DIR) \
            -I$(PROJ_SRC_ROOT)/include -I$(LEVEL)/include
ifeq ($(HAS_LLVM),1)
CPPFLAGS += -I$(LLVM_OBJ_ROOT)/include -I$(LLVM_SRC_ROOT)/include
endif

# By default, strip symbol information from executable
ifndef KEEP_SYMBOLS
STRIP = $(PLATFORMSTRIPOPTS)
STRIP_WARN_MSG = "(without symbols)"
endif

# Allow GNU extensions:
CPPFLAGS += -D_GNU_SOURCE
# Pull in limit macros from stdint.h, even in C++:
CPPFLAGS += -D__STDC_LIMIT_MACROS
CPPFLAGS += -DNDEBUG

# Default optimization level:
OPTFLAGS := -O3

# If LTO is on, compile each .c .cpp file with -mllvm -disable-llvm-optzns.
# This is similar to -O0, except it just disables optimizations and doesn't
# change the behavior of the front-end. Optimization will be done separately
# with opt and llvm-ld.
ifdef DISABLE_LTO
LOPTFLAGS := $(OPTFLAGS)
else
LOPTFLAGS := $(OPTFLAGS) $(LLVMCC_DISABLEOPT_FLAGS)
endif

# Explicitly specify -m32 / -m64 so there is no mismatch between llvm-gcc
# default and system compiler default.
ifeq ($(ARCH),x86)
TEST_TARGET_FLAGS += -m32
endif

ifeq ($(ARCH),x86_64)
TEST_TARGET_FLAGS += -m64
endif

ifeq ($(ARCH),Alpha)
CPPFLAGS += -mieee
CFLAGS += -mieee
endif

# Set llc / lli optimization level
LLC_OPTFLAGS := $(OPTFLAGS)
LLI_OPTFLAGS := $(OPTFLAGS)

# gcc / llvm-gcc default is -fPIC -fno-omit-frame-pointer
# llc / lli default is equal to -mdynamic-no-pic -fomit-frame-pointer
ifdef PIC_CODEGEN
TARGET_LLCFLAGS += -relocation-model=pic -disable-fp-elim
TARGET_LLIFLAGS += -relocation-model=pic -disable-fp-elim
  ifeq ($(TARGET_OS),Darwin)
    TARGET_LLIFLAGS += -code-model=small
  endif
else
TEST_TARGET_FLAGS += -fomit-frame-pointer
  ifeq ($(TARGET_OS),Darwin)
  TEST_TARGET_FLAGS += -mdynamic-no-pic
  endif
endif

ifdef EXTRA_OPTIONS
TEST_TARGET_FLAGS += $(EXTRA_OPTIONS)
endif

ifdef SMALL_PROBLEM_SIZE
CPPFLAGS += -DSMALL_PROBLEM_SIZE
endif

ifdef DISABLE_LTO
EXTRA_LOPT_OPTIONS += -disable-opt
EXTRA_LINKTIME_OPT_FLAGS += -disable-opt
endif

#
# Compile commands with libtool.
#
Compile  := $(LIBTOOL) --tag=CXX --mode=compile $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(OPTFLAGS)
CompileC  := $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(OPTFLAGS)

# Compile a cpp file, don't link...
CompileG := $(Compile) -g  -D_DEBUG
CompileO := $(Compile) $(OPTFLAGS) -felide-constructors -fomit-frame-pointer
CompileP := $(Compile) $(OPTFLAGS) -felide-constructors $(PROFILE)

# Compile a c file, don't link...
CompileCG := $(CompileC) -g  -D_DEBUG
CompileCO := $(CompileC) $(OPTFLAGS) -fomit-frame-pointer
CompileCP := $(CompileC) $(OPTFLAGS) $(PROFILE)

###########################################################################
# Link Time Options
###########################################################################

#
# Link final executable
#	(Note that we always link with the C++ compiler).
#
Link     := $(LIBTOOL) --tag=CXX --mode=link $(CXX)

# link both projlib and llvmlib libraries
LinkG    := $(Link) -g -L$(PROJLIBDEBUGSOURCE)  -L$(LLVMLIBDEBUGSOURCE) $(STRIP)
LinkO    := $(Link) $(OPTFLAGS) -L$(PROJLIBRELEASESOURCE) -L$(LLVMLIBRELEASESOURCE)
LinkP    := $(Link) $(OPTFLAGS) -L$(PROJLIBPROFILESOURCE) -L$(LLVMLIBPROFILESOURCE) $(PROFILE)

# TOOLLINKOPTSB to pass options to the linker like library search path etc
# Note that this is different from TOOLLINKOPTS, these options
# are passed to the linker *before* the USEDLIBS options are passed.
# e.g. usage TOOLLINKOPTSB =  -L/home/xxx/lib
ifdef TOOLLINKOPTSB
LinkG    := $(LinkG) $(TOOLLINKOPTSB) 
LinkO    := $(LinkO) $(TOOLLINKOPTSB) 
LinkP    := $(LinkP) $(TOOLLINKOPTSB) 
endif

# Create one .o file from a bunch of .o files...
Relink := ${LIBTOOL} --tag=CXX --mode=link $(CXX)

#
# Configure where the item being compiled should go.
#
ifdef SHARED_LIBRARY
Link += -rpath $(DESTLIBCURRENT)
endif

ifdef TOOLNAME
Link += -rpath $(DESTTOOLCURRENT)
endif

# Create dependency file from CPP file, send to stdout.
Depend   := $(CXX) -MM -I$(LEVEL)/include $(CPPFLAGS) 
DependC  := $(CC)  -MM -I$(LEVEL)/include $(CPPFLAGS) 

# Archive a bunch of .o files into a .a file...
AR       = $(AR_PATH) cr

#----------------------------------------------------------

# Source includes all of the cpp files, and objects are derived from the
# source files...
# The local Makefile can list other Source files via ExtraSource = ...
# 
ifndef Source
Source  := $(notdir $(ExtraSource) $(wildcard $(SourceDir)/*.cpp \
                    $(SourceDir)/*.cc $(SourceDir)/*.c $(SourceDir)/*.y \
                    $(SourceDir)/*.l $(SourceDir)/*.m $(SourceDir)/*.mm))
endif

#
# Libtool Objects
#
Srcs := $(sort $(basename $(Source)))
ObjectsO  := $(Srcs:%=$(PROJ_OBJ_DIR)/Release/%.lo)
ObjectsP  := $(Srcs:%=$(PROJ_OBJ_DIR)/Profile/%.lo)
ObjectsG  := $(Srcs:%=$(PROJ_OBJ_DIR)/Debug/%.lo)
ObjectsBC := $(Srcs:%=$(PROJ_OBJ_DIR)/BytecodeObj/%.bc)

#
# The real objects underlying the libtool objects
#
RObjs := $(sort $(patsubst Debug/%.o, %.o, $(addsuffix .o,$(basename $(Source)))))
RObjectsO := $(addprefix $(PROJ_OBJ_DIR)/Release/,$(RObjs))
RObjectsP := $(addprefix $(PROJ_OBJ_DIR)/Profile/,$(RObjs))
RObjectsG := $(addprefix $(PROJ_OBJ_DIR)/Debug/,$(RObjs))

#---------------------------------------------------------
# Handle the DIRS and PARALLEL_DIRS options
#---------------------------------------------------------

ifdef DIRS
all install clean build test bytecode native stripped-bytecode install-bytecode::
	$(VERB) for dir in ${DIRS}; do \
		if [ ! -f $$dir/Makefile ]; \
		then \
			$(MKDIR) $$dir; \
			cp $(SourceDir)/$$dir/Makefile $$dir/Makefile; \
		fi; \
		($(MAKE) -C $$dir $@ $(MFLAGS)) || exit 1; \
	done
endif

# Handle PARALLEL_DIRS
ifdef PARALLEL_DIRS
all      :: $(addsuffix /.makeall     , $(PARALLEL_DIRS))
install  :: $(addsuffix /.makeinstall , $(PARALLEL_DIRS))
build    :: $(addsuffix /.makebuild   , $(PARALLEL_DIRS))
clean    :: $(addsuffix /.makeclean   , $(PARALLEL_DIRS))
test     :: $(addsuffix /.maketest    , $(PARALLEL_DIRS))
bytecode :: $(addsuffix /.makebytecode, $(PARALLEL_DIRS))
native   :: $(addsuffix /.makenative, $(PARALLEL_DIRS))
stripped-bytecode :: $(addsuffix /.makestripped-bytecode, $(PARALLEL_DIRS))
install-bytecode :: $(addsuffix /.makeinstall-bytecode, $(PARALLEL_DIRS))

%/.makeall %/.makeinstall %/.makeclean %/.makebuild %/.maketest %/.makebytecode \
%/.makestripped-bytecode %/.makeinstall-bytecode %/.makenative:
	$(VERB) if [ ! -f $(@D)/Makefile ]; \
	then \
		$(MKDIR) $(@D); \
		cp $(SourceDir)/$(@D)/Makefile $(@D)/Makefile; \
	fi; \
	$(MAKE) -C $(@D) $(subst $(@D)/.make,,$@) $(MFLAGS)
endif

# Handle directories that may or may not exist
ifdef OPTIONAL_DIRS
all install clean build test bytecode stripped-bytecode install-bytecode::
	$(VERB) for dir in ${OPTIONAL_DIRS}; do \
		if [ -d $(SourceDir)/$$dir ]; \
		then\
			if [ ! -f $$dir/Makefile ]; \
			then \
				$(MKDIR) $$dir; \
				cp $(SourceDir)/$$dir/Makefile $$dir/Makefile; \
			fi; \
			($(MAKE) -C$$dir $@ $(MFLAGS)) || exit 1; \
		fi \
	done
endif

#---------------------------------------------------------
# Handle the CONFIG_FILES options
#---------------------------------------------------------
ifdef CONFIG_FILES
install:: install-config-files

$(sysconfdir):
	$(MKDIR) $(sysconfdir)

install-config-files: $(sysconfdir) $(CONFIG_FILES)
	$(VERB)$(ECHO) Installing Configuration Files To $(sysconfdir)
	$(VERB)for file in $(CONFIG_FILES); do \
		$(INSTALL) $(SourceDir)/$${file} $(sysconfdir) ; \
	done
endif

###########################################################################
# Library Build Rules:
#
#---------------------------------------------------------
# Handle the LIBRARYNAME option - used when building libs...
#---------------------------------------------------------
#
#  When libraries are built, they are allowed to optionally define the
#  DONT_BUILD_RELINKED make variable, which, when defined, prevents a .o file
#  from being built for the library. This .o files may then be linked to by a
#  tool if the tool does not need (or want) the semantics a .a file provides
#  (linking in only object files that are "needed").  If a library is never to
#  be used in this way, it is better to define DONT_BUILD_RELINKED, and define
#  BUILD_ARCHIVE instead.
#
###########################################################################

# Install rule for making bytecode library directory if it does not exist.
# Trigger this by making libraries that need to be installed here depend on it.
$(DESTDIR)$(bytecode_libdir):
	$(MKDIR) $@

ifdef LIBRARYNAME

# Make sure there isn't any extranous whitespace on the LIBRARYNAME option
LIBRARYNAME := $(strip $(LIBRARYNAME))

LIBNAME_O    := $(DESTLIBRELEASE)/lib$(LIBRARYNAME).la
LIBNAME_P    := $(DESTLIBPROFILE)/lib$(LIBRARYNAME).la
LIBNAME_G    := $(DESTLIBDEBUG)/lib$(LIBRARYNAME).la
LIBNAME_CUR  := $(DESTLIBCURRENT)/lib$(LIBRARYNAME).la
LIBNAME_AO   := $(DESTLIBRELEASE)/lib$(LIBRARYNAME).a
LIBNAME_AP   := $(DESTLIBPROFILE)/lib$(LIBRARYNAME).a
LIBNAME_AG   := $(DESTLIBDEBUG)/lib$(LIBRARYNAME).a
LIBNAME_ACUR := $(DESTLIBCURRENT)/lib$(LIBRARYNAME).a
LIBNAME_OBJO := $(DESTLIBRELEASE)/$(LIBRARYNAME).o
LIBNAME_OBJP := $(DESTLIBPROFILE)/$(LIBRARYNAME).o
LIBNAME_OBJG := $(DESTLIBDEBUG)/$(LIBRARYNAME).o
LIBNAME_OBJCUR := $(DESTLIBCURRENT)/$(LIBRARYNAME).o
LIBNAME_BC   := $(DESTLIBBYTECODE)/lib$(LIBRARYNAME).bc


#--------------------------------------------------------------------
# Library Targets
#	Modify the top level targets to build the desired libraries.
#--------------------------------------------------------------------

# dynamic target builds a shared object version of the library...
dynamic:: $(LIBNAME_CUR)
bytecodelib:: $(LIBNAME_BC)
install-bytecode-library:: $(DESTDIR)$(bytecode_libdir)/lib$(LIBRARYNAME).bc

$(DESTDIR)$(bytecode_libdir)/lib$(LIBRARYNAME).bc: $(LIBNAME_BC) $(DESTDIR)$(bytecode_libdir)
	@${ECHO} ======= Installing $(LIBRARYNAME) bytecode library =======
	$(VERB)cp $< $@

# Does the library want a .o version built?
ifndef DONT_BUILD_RELINKED
all:: $(LIBNAME_OBJCUR)
install:: install-single-object-library
endif

# Does the library want an archive version built?
ifdef BUILD_ARCHIVE
all:: $(LIBNAME_ACUR)
install:: install-archive-library
endif

#--------------------------------------------------------------------
# Rules for building libraries
#--------------------------------------------------------------------

LinkBCLib := $(LCC) -shared -nostdlib
ifdef EXPORTED_SYMBOL_LIST
LinkBCLib += -Xlinker -internalize-public-api-list=$(EXPORTED_SYMBOL_LIST)
else
  ifdef EXPORTED_SYMBOL_FILE
LinkBCLib += -Xlinker -internalize-public-api-file=$(EXPORTED_SYMBOL_FILE)
  else
LinkBCLib += -Xlinker -disable-internalize
  endif
endif


# Rule for building bytecode libraries.
$(LIBNAME_BC): $(ObjectsBC) $(LibSubDirs) $(DESTLIBBYTECODE)/.dir
	@${ECHO} Linking $(LIBRARYNAME) bytecode library
	$(VERB) $(LinkBCLib) -o $@ $(ObjectsBC) $(LibSubDirs) $(LibLinkOpts)
	@${ECHO} ======= Finished building $(LIBRARYNAME) bytecode library =======
#
# Rules for building dynamically linked libraries.
#
$(LIBNAME_O): $(ObjectsO) $(LibSubDirs) $(DESTLIBRELEASE)/.dir
	@${ECHO} Linking $(LIBRARYNAME) dynamic release library
	$(VERB) $(Link) -o $@ $(ObjectsO) $(LibSubDirs) $(LibLinkOpts)
	$(VERB) $(LIBTOOL) --mode=install $(INSTALL) $@ $(DESTLIBCURRENT)
	@${ECHO} ======= Finished building $(LIBRARYNAME) dynamic release library =======

$(LIBNAME_P): $(ObjectsP) $(LibSubDirs) $(DESTLIBPROFILE)/.dir
	@${ECHO} Linking $(LIBRARYNAME) dynamic profile library
	$(VERB) $(Link) -o $@ $(ObjectsP) $(LibSubDirs) $(LibLinkOpts)
	$(VERB) $(LIBTOOL) --mode=install $(INSTALL) $@ $(DESTLIBCURRENT)
	@${ECHO} ======= Finished building $(LIBRARYNAME) dynamic profile library =======

$(LIBNAME_G): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir
	@${ECHO} Linking $(LIBRARYNAME) dynamic debug library
	$(VERB) $(Link) -o $@ $(ObjectsG) $(LibSubDirs) $(LibLinkOpts)
	$(VERB) $(LIBTOOL) --mode=install $(INSTALL) $@ $(DESTLIBCURRENT)
	@${ECHO} ======= Finished building $(LIBRARYNAME) dynamic debug library =======

install-dynamic-library: $(LIBNAME_CUR)
	$(MKDIR) $(DESTDIR)$(libdir)
	$(VERB) $(LIBTOOL) --mode=install $(INSTALL) $(LIBNAME_CUR) $(DESTDIR)$(libdir)/lib$(LIBRARYNAME)$(SHLIBEXT)
	$(VERB) $(LIBTOOL) --finish $(DESTDIR)$(libdir)

#
# Rules for building static archive libraries.
#
$(LIBNAME_AO): $(ObjectsO) $(LibSubDirs) $(DESTLIBRELEASE)/.dir
	@${ECHO} Linking $(LIBRARYNAME) archive release library
	$(VERB)$(RM) -f $@
	$(VERB) $(Link) -03 -o $@ $(ObjectsO) $(LibSubDirs) -static
	@${ECHO} Finished building $(LIBRARYNAME) archive release library =======

$(LIBNAME_AP): $(ObjectsP) $(LibSubDirs) $(DESTLIBPROFILE)/.dir
	@${ECHO} Linking $(LIBRARYNAME) archive profile library
	@$(RM) -f $@
	$(VERB) $(Link) -03 $(PROFILE) -o $@ $(ObjectsP) $(LibSubDirs) -static
	@${ECHO} ======= Finished building $(LIBRARYNAME) archive profile library =======

$(LIBNAME_AG): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir
	@${ECHO} Linking $(LIBRARYNAME) archive debug library
	@$(RM) -f $@
	$(VERB) $(Link) -g $(STRIP) -o $@ $(ObjectsG) $(LibSubDirs) -static
	@${ECHO} ======= Finished building $(LIBRARYNAME) archive debug library =======

install-archive-library: $(LIBNAME_ACUR)
	$(MKDIR) $(DESTDIR)$(libdir)
	$(VERB) $(LIBTOOL) --mode=install $(INSTALL) $(LIBNAME_ACUR) $(DESTDIR)$(libdir)/lib$(LIBRARYNAME).a

#
# Rules for building .o libraries.
#
#	JTC:
#	Note that for this special case, we specify the actual object files
#	instead of their libtool counterparts.  This is because libtool
#	doesn't want to generate a reloadable object file unless it is given
#	.o files explicitly.
#
#	Note that we're making an assumption here: If we build a .lo file,
#	its corresponding .o file will be placed in the same directory.
#
#	I think that is safe.
#
$(LIBNAME_OBJO): $(ObjectsO) $(LibSubDirs) $(DESTLIBRELEASE)/.dir
	@${ECHO} "Linking `basename $@`"
	$(VERB) $(Relink) -o $@ $(RObjectsO) $(LibSubDirs)

$(LIBNAME_OBJP): $(ObjectsP) $(LibSubDirs) $(DESTLIBPROFILE)/.dir
	@${ECHO} "Linking `basename $@`"
	$(VERB) $(Relink) -o $@ $(RObjectsP) $(LibSubDirs)

$(LIBNAME_OBJG): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir
	@${ECHO} "Linking `basename $@`"
	$(VERB) $(Relink) -o $@ $(RObjectsG) $(LibSubDirs)

install-single-object-library: $(LIBNAME_OBJCUR)
	$(MKDIR) $(DESTDIR)$(libdir)
	$(VERB) $(LIBTOOL) --mode=install $(INSTALL) $(LIBNAME_OBJCUR) $(DESTDIR)$(libdir)/$(LIBRARYNAME).o

endif

#------------------------------------------------------------------------
# Handle the TOOLNAME option - used when building tool executables...
#------------------------------------------------------------------------
#
# The TOOLNAME option should be used with a USEDLIBS variable that tells the
# libraries (and the order of the libs) that should be linked to the
# tool. USEDLIBS should contain a list of library names (some with .a extension)
# that are automatically linked in as .o files unless the .a suffix is added.
#
ifdef TOOLNAME

# Handle compression libraries automatically
ifeq ($(HAVE_BZIP2),1)
TOOLLINKOPTS += -lbz2
endif
ifeq ($(HAVE_ZLIB),1)
TOOLLINKOPTS += -lz
endif
# TOOLEXENAME* - These compute the output filenames to generate...
TOOLEXENAME_G := $(DESTTOOLDEBUG)/$(TOOLNAME)
TOOLEXENAME_O := $(DESTTOOLRELEASE)/$(TOOLNAME)
TOOLEXENAME_P := $(DESTTOOLPROFILE)/$(TOOLNAME)
TOOLEXENAMES  := $(DESTTOOLCURRENT)/$(TOOLNAME)

# USED_LIBS_OPTIONS - Compute the options line that add -llib1 -llib2, etc.
PROJ_LIBS_OPTIONS   := $(patsubst %.a.o, -l%, $(addsuffix .o, $(USEDLIBS)))
PROJ_LIBS_OPTIONS_G := $(patsubst %.o, $(PROJLIBDEBUGSOURCE)/%.o,  $(PROJ_LIBS_OPTIONS))
PROJ_LIBS_OPTIONS_O := $(patsubst %.o, $(PROJLIBRELEASESOURCE)/%.o,$(PROJ_LIBS_OPTIONS))
PROJ_LIBS_OPTIONS_P := $(patsubst %.o, $(PROJLIBPROFILESOURCE)/%.o,$(PROJ_LIBS_OPTIONS))

LLVM_LIBS_OPTIONS   := $(patsubst %.a.o, -l%, $(addsuffix .o, $(LLVMLIBS)))
LLVM_LIBS_OPTIONS_G := $(patsubst %.o, $(LLVMLIBDEBUGSOURCE)/%.o,  $(LLVM_LIBS_OPTIONS))
LLVM_LIBS_OPTIONS_O := $(patsubst %.o, $(LLVMLIBRELEASESOURCE)/%.o,$(LLVM_LIBS_OPTIONS))
LLVM_LIBS_OPTIONS_P := $(patsubst %.o, $(LLVMLIBPROFILESOURCE)/%.o,$(LLVM_LIBS_OPTIONS))

LIB_OPTS_G :=  $(LLVM_LIBS_OPTIONS_G) $(PROJ_LIBS_OPTIONS_G)
LIB_OPTS_O :=  $(LLVM_LIBS_OPTIONS_O) $(PROJ_LIBS_OPTIONS_O)
LIB_OPTS_P :=  $(LLVM_LIBS_OPTIONS_P) $(PROJ_LIBS_OPTIONS_P)

# USED_LIB_PATHS - Compute the path of the libraries used so that tools are
# rebuilt if libraries change.  This has to make sure to handle .a/.so and .o
# files separately.
#
STATICUSEDLIBS   := $(patsubst %.a.o, lib%.a, $(addsuffix .o, $(USEDLIBS)))
USED_LIB_PATHS_G := $(addprefix $(DESTLIBDEBUG)/, $(STATICUSEDLIBS))
USED_LIB_PATHS_O := $(addprefix $(DESTLIBRELEASE)/, $(STATICUSEDLIBS))
USED_LIB_PATHS_P := $(addprefix $(DESTLIBPROFILE)/, $(STATICUSEDLIBS))

LLVMSTATICUSEDLIBS   := $(patsubst %.a.o, lib%.a, $(addsuffix .o, $(LLVMLIBS)))
LLVM_LIB_PATHS_G := $(addprefix $(LLVMLIBDEBUGSOURCE)/, $(LLVMSTATICUSEDLIBS))
LLVM_LIB_PATHS_O := $(addprefix $(LLVMLIBRELEASESOURCE)/, $(LLVMSTATICUSEDLIBS))
LLVM_LIB_PATHS_P := $(addprefix $(LLVMLIBPROFILESOURCE)/, $(LLVMSTATICUSEDLIBS))

#
# Libtool link options:
#	Ensure that all binaries have their symbols exported so that they can
#	by dlsym'ed.
#
LINK_OPTS := -export-dynamic $(TOOLLINKOPTS)





# Tell make that we need to rebuild subdirectories before we can link the tool.
# This affects things like LLI which has library subdirectories.
$(USED_LIB_PATHS_G) $(USED_LIB_PATHS_O) $(USED_LIB_PATHS_P): \
        $(addsuffix /.makeall, $(PARALLEL_DIRS))

all::   $(TOOLEXENAMES)

clean::
	$(VERB) $(RM) -f $(TOOLEXENAMES)

$(TOOLEXENAME_G): $(ObjectsG) $(USED_LIB_PATHS_G) $(LLVM_LIB_PATHS_G) $(DESTTOOLDEBUG)/.dir
	@${ECHO} Linking $(TOOLNAME) debug executable $(STRIP_WARN_MSG)
	$(VERB) $(LinkG) -o $@ $(ObjectsG) $(LIB_OPTS_G) $(LINK_OPTS) $(LIBS)
	@${ECHO} ======= Finished building $(TOOLNAME) debug executable $(STRIP_WARN_MSG) =======

$(TOOLEXENAME_O): $(ObjectsO) $(USED_LIB_PATHS_O) $(LLVM_LIB_PATHS_O) $(DESTTOOLRELEASE)/.dir
	@${ECHO} Linking $(TOOLNAME) release executable
	$(VERB) $(LinkO) -o $@ $(ObjectsO) $(LIB_OPTS_O) $(LINK_OPTS) $(LIBS)
	@${ECHO} ======= Finished building $(TOOLNAME) release executable =======

$(TOOLEXENAME_P): $(ObjectsP) $(USED_LIB_PATHS_P) $(LLVM_LIB_PATHS_P) $(DESTTOOLPROFILE)/.dir
	@${ECHO} Linking $(TOOLNAME) profile executable
	$(VERB) $(LinkP) -o $@ $(ObjectsP) $(LIB_OPTS_P) $(LINK_OPTS) $(LIBS)
	@${ECHO} ======= Finished building $(TOOLNAME) profile executable =======

install:: $(TOOLEXENAMES)
	@${ECHO} Installing $(TOOLEXENAMES) to $(DESTDIR)$(bindir)
	$(VERB)$(MKDIR) $(DESTDIR)$(bindir)
	$(VERB)$(LIBTOOL) --mode=install $(INSTALL_PROGRAM) -c -m 0755 $(TOOLEXENAMES) $(DESTDIR)$(bindir)/$(TOOLNAME)

endif

#---------------------------------------------------------
.PRECIOUS: $(PROJ_OBJ_DIR)/Depend/.dir $(PROJ_OBJ_DIR)/BytecodeObj/.dir
.PRECIOUS: $(PROJ_OBJ_DIR)/Debug/.dir $(PROJ_OBJ_DIR)/Release/.dir
.PRECIOUS: $(PROJ_OBJ_DIR)/Profile/.dir

# Create .lo files in the ObjectFiles directory from the .cpp and .c files...
$(PROJ_OBJ_DIR)/Release/%.lo: %.cpp $(PROJ_OBJ_DIR)/Release/.dir
	$(CompileO) $< -o $@

$(PROJ_OBJ_DIR)/Release/%.lo: %.c $(PROJ_OBJ_DIR)/Release/.dir
	$(CompileCO) $< -o $@

$(PROJ_OBJ_DIR)/Profile/%.lo: %.cpp $(PROJ_OBJ_DIR)/Profile/.dir
	$(CompileP) $< -o $@

$(PROJ_OBJ_DIR)/Profile/%.lo: %.c $(PROJ_OBJ_DIR)/Profile/.dir
	$(CompileCP) $< -o $@

$(PROJ_OBJ_DIR)/Debug/%.lo: %.cpp $(PROJ_OBJ_DIR)/Debug/.dir
	$(CompileG) $< -o $@

$(PROJ_OBJ_DIR)/Debug/%.lo: %.c $(PROJ_OBJ_DIR)/Debug/.dir 
	$(CompileCG) $< -o $@

$(PROJ_OBJ_DIR)/BytecodeObj/%.bc: %.cpp $(PROJ_OBJ_DIR)/BytecodeObj/.dir $(LCC_PROGRAMS)
	$(LCXX) $(CPPFLAGS) -c $< -o $@

$(PROJ_OBJ_DIR)/BytecodeObj/%.bc: %.c $(PROJ_OBJ_DIR)/BytecodeObj/.dir $(LCC_PROGRAMS)
	$(LCC) $(CPPFLAGS) -c $< -o $@

$(PROJ_OBJ_DIR)/BytecodeObj/%.bc: %.ll $(PROJ_OBJ_DIR)/BytecodeObj/.dir $(LLVMAS)
	$(LLVMAS) $< -o $@


#
# Rules for building lex/yacc files
#
LEX_FILES   = $(filter %.l, $(Source))
LEX_OUTPUT  = $(LEX_FILES:%.l=%.cpp)
YACC_FILES  = $(filter %.y, $(Source))
YACC_OUTPUT = $(addprefix $(YACC_FILES:%.y=%), .h .cpp .output)
.PRECIOUS: $(LEX_OUTPUT) $(YACC_OUTPUT)

# Create a .cpp source file from a flex input file... this uses sed 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] )
#
%.cpp: %.l
	@${ECHO} Flexing $<
	$(VERB) $(FLEX) -t $< | \
          $(SED) '/^find_rule/d' | \
          $(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)/' \
              > $@.tmp
	$(VERB) cmp -s $@ $@.tmp > /dev/null || ${MV} -f $@.tmp $@
	@# remove the output of flex if it didn't get moved over...
	@rm -f $@.tmp

# Rule for building the bison parsers...
%.c: %.y     # Cancel built-in rules for yacc
%.h: %.y     # Cancel built-in rules for yacc
%.cpp %.h : %.y
	@${ECHO} "Bisoning `basename $<`"
	$(VERB) $(BISON) -v -d -p $(<F:%Parser.y=%) -o $*.tab.c  $<
	$(VERB) cmp -s $*.tab.c $*.cpp > /dev/null || ${MV} -f $*.tab.c $*.cpp
	$(VERB) cmp -s $*.tab.h $*.h   > /dev/null || ${MV} -f $*.tab.h $*.h
	@# If the files were not updated, don't leave them lying around...
	@rm -f $*.tab.c $*.tab.h

# To create the directories...
%/.dir:
	$(VERB) ${MKDIR} $* > /dev/null
	@$(DATE) > $@

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

# 'make clean' nukes the tree
clean::
	$(VERB) $(RM) -rf $(PROJ_OBJ_DIR)/Debug $(PROJ_OBJ_DIR)/Release
	$(VERB) $(RM) -rf $(PROJ_OBJ_DIR)/Profile $(PROJ_OBJ_DIR)/Depend
	$(VERB) $(RM) -rf $(PROJ_OBJ_DIR)/BytecodeObj
	$(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
	$(VERB) $(RM) -f $(LEX_OUTPUT) $(YACC_OUTPUT)

###########################################################################
# C/C++ Dependencies
#	Define variables and rules that generate header file dependencies
#	from C/C++ source files.
###########################################################################

ifndef DISABLE_AUTO_DEPENDENCIES

# If dependencies were generated for the file that included this file,
# include the dependencies now...
#
SourceBaseNames := $(basename $(Source))
SourceDepend := $(SourceBaseNames:%=$(PROJ_OBJ_DIR)/Depend/%.d)

# Create dependencies for the *.cpp files...
$(PROJ_OBJ_DIR)/Depend/%.d: %.cpp $(PROJ_OBJ_DIR)/Depend/.dir
	$(VERB) $(Depend) $< | $(SED) 's|\.o:|\.lo:|' | $(SED) 's|$*\.lo *|$(PROJ_OBJ_DIR)/Release/& $(PROJ_OBJ_DIR)/Profile/& $(PROJ_OBJ_DIR)/Debug/& $(PROJ_OBJ_DIR)/Depend/$(@F)|g' > $@

# Create dependencies for the *.c files...
$(PROJ_OBJ_DIR)/Depend/%.d: %.c $(PROJ_OBJ_DIR)/Depend/.dir
	$(VERB) $(DependC) -o $@ $< | $(SED) 's|\.o:|\.lo:|' | $(SED) 's|$*\.lo *|$(PROJ_OBJ_DIR)/Release/& $(PROJ_OBJ_DIR)/Profile/& $(PROJ_OBJ_DIR)/Debug/& $(PROJ_OBJ_DIR)/Depend/$(@F)|g' > $@

#
# Autoconf Dependencies.
#
ifeq ($(HAS_LLVM),1)
$(LLVM_OBJ_ROOT)/config.status:: $(LLVM_SRC_ROOT)/configure
	@${ECHO} "****************************************************************"
	@${ECHO} "   You need to re-run $(LLVM_SRC_ROOT)/configure"
	@${ECHO} "   in directory $(LLVM_OBJ_ROOT)"
	@${ECHO} "****************************************************************"
	$(VERB) exit 1
endif

# If the Makefile in the source tree has been updated, copy it over into the
# build tree.
Makefile :: $(PROJ_SRC_DIR)/Makefile
	@${ECHO} "===== Updating Makefile from source dir: `dirname $<` ====="
	$(MKDIR) $(@D)
	cp -f $< $@

#
# Include dependencies generated from C/C++ source files, but not if we
# are cleaning (this example taken from the GNU Make Manual).
#
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(MAKECMDGOALS),distclean)
-include /dev/null $(SourceDepend)
endif
endif

endif  # ifndef DISABLE_AUTO_DEPENDENCIES

###
# 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 $*)))
