#===-- Makefile.common - Common make rules for LLVM -------*- makefile -*--====
#
# 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. BUILD_SRC_DIR - The directory which contains the current set of Makefiles
#    and usually the source code too (unless SourceDir is set).
#
# 9. BUILD_SRC_ROOT - The root directory of the source code being compiled.
#
# 10. BUILD_OBJ_DIR - The directory where object code should be placed.
#
# 11. BUILD_OBJ_ROOT - The root directory for where object code should be
#     placed.
#
# For building,
# 	LLVM, LLVM_SRC_ROOT = BUILD_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
all::$(LLVM_OBJ_ROOT)/config.status

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

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

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

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

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

# Default rule for building only bytecode.
bytecode::

# Print out the directories used for building
prdirs::
	@echo "Build Source Root: " $(BUILD_SRC_ROOT)
	@echo "Build Source Dir : " $(BUILD_SRC_DIR)
	@echo "Build Object Root: " $(BUILD_OBJ_ROOT)
	@echo "Build Object Dir : " $(BUILD_OBJ_DIR)
	@echo "LLVM  Source Root: " $(LLVM_SRC_ROOT)
	@echo "LLVM  Object Root: " $(LLVM_OBJ_ROOT)

###########################################################################
# 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 .so .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 bytecodelib-install
.PHONY: clean distclean install test bytecode prdirs

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

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

#BinInstDir=/usr/local/bin
#LibInstDir=/usr/local/lib/xxx
#DocInstDir=/usr/doc/xxx

BURG_OPTS = -I

ifdef ENABLE_PROFILING
  ENABLE_OPTIMIZED = 1
  CONFIGURATION := Profile
else
  ifdef ENABLE_OPTIMIZED
    CONFIGURATION := Release
  else
    CONFIGURATION := Debug
  endif
endif

#
# Enable this for profiling support with 'gprof'
# This automatically enables optimized builds.
#
ifdef ENABLE_PROFILING
  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    := $(BUILD_OBJ_ROOT)/lib/Debug
DESTLIBRELEASE  := $(BUILD_OBJ_ROOT)/lib/Release
DESTLIBPROFILE  := $(BUILD_OBJ_ROOT)/lib/Profile
DESTLIBBYTECODE := $(BUILD_OBJ_ROOT)/lib/BytecodeLibs
DESTLIBCURRENT  := $(BUILD_OBJ_ROOT)/lib/$(CONFIGURATION)

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

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

###########################################################################
# 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   := $(BUILD_OBJ_ROOT)/tools/Debug
DESTTOOLRELEASE := $(BUILD_OBJ_ROOT)/tools/Release
DESTTOOLPROFILE := $(BUILD_OBJ_ROOT)/tools/Profile
DESTTOOLCURRENT := $(BUILD_OBJ_ROOT)/tools/$(CONFIGURATION)

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

PROJTOOLDEBUG   := $(BUILD_OBJ_ROOT)/tools/Debug
PROJTOOLRELEASE := $(BUILD_OBJ_ROOT)/tools/Release
PROJTOOLPROFILE := $(BUILD_OBJ_ROOT)/tools/Profile
PROJTOOLCURRENT := $(BUILD_OBJ_ROOT)/tools/$(CONFIGURATION)

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

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

#--------------------------------------------------------------------------
# Utilities used while building the LLVM tree, which live in the utils dir
#
BURG    := $(LLVMTOOLCURRENT)/burg
RunBurg := $(BURG) $(BURG_OPTS)
TBLGEN  := $(LLVMTOOLCURRENT)/tblgen

#--------------------------------------------------------------------------
# The LLVM GCC front-end in C and C++ flavors
#
LLVMGCC := PATH=$(LLVMTOOLCURRENT):$(PATH) $(LLVMGCCDIR)/bin/gcc
LCC1    := $(LLVMGCCDIR)/libexec/gcc/$(LLVMGCCARCH)/cc1
LLVMGXX := PATH=$(LLVMTOOLCURRENT):$(PATH) $(LLVMGCCDIR)/bin/g++
LCC1XX  := $(LLVMGCCDIR)/libexec/gcc/$(LLVMGCCARCH)/cc1plus

#--------------------------------------------------------------------------
# Some of the compiled LLVM tools which are used for compilation of runtime
# libraries.
#
LLVMAS  := $(LLVMTOOLCURRENT)/llvm-as


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

#
# Include both the project headers and the LLVM headers for compilation and
# dependency computation.
#
# BUILD_OBJ_DIR          : Files local to the particular object directory
#                          (locallly generated header files).
# BUILD_SRC_DIR          : Files local to the particular source directory.
# BUILD_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$(BUILD_OBJ_DIR) -I$(BUILD_SRC_DIR) -I$(LLVM_OBJ_ROOT)/include \
            -I$(BUILD_SRC_ROOT)/include -I$(LEVEL)/include \
            -I$(LLVM_SRC_ROOT)/include

# 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

CompileWarnings  := -Wall -W  -Wwrite-strings -Wno-unused
CompileCommonOpts := $(CompileWarnings) -fshort-enums
CompileOptimizeOpts := -O3 -DNDEBUG -finline-functions

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

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

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

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

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

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

# Create one .o file from a bunch of .o files...
Relink := ${LIBTOOL} --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} cq 

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

# 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)/*.c $(SourceDir)/*.y $(SourceDir)/*.l))
endif

#
# Libtool Objects
#
Srcs := $(sort $(basename $(Source)))
Objs := $(addsuffix .lo, $(Srcs))
ObjectsO := $(addprefix $(BUILD_OBJ_DIR)/Release/,$(Objs))
ObjectsP := $(addprefix $(BUILD_OBJ_DIR)/Profile/,$(Objs))
ObjectsG := $(addprefix $(BUILD_OBJ_DIR)/Debug/,$(Objs))
ObjectsBC := $(addprefix $(BUILD_OBJ_DIR)/BytecodeObj/,$(addsuffix .bc, $(Srcs)))

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

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

ifdef DIRS
all install clean test bytecode ::
	$(VERB) for dir in ${DIRS}; do \
		(cd $$dir; $(MAKE) $@) || exit 1; \
	done
endif

# Handle PARALLEL_DIRS
ifdef PARALLEL_DIRS
all      :: $(addsuffix /.makeall     , $(PARALLEL_DIRS))
install  :: $(addsuffix /.makeinstall , $(PARALLEL_DIRS))
clean    :: $(addsuffix /.makeclean   , $(PARALLEL_DIRS))
test     :: $(addsuffix /.maketest    , $(PARALLEL_DIRS))
bytecode :: $(addsuffix /.makebytecode, $(PARALLEL_DIRS))

%/.makeall %/.makeinstall %/.makeclean %/.maketest %/.makebytecode:
	$(VERB) cd $(@D); $(MAKE) $(subst $(@D)/.make,,$@)
endif

# Handle directories that may or may not exist
ifdef OPTIONAL_DIRS
all install clean test bytecode ::
	$(VERB) for dir in ${OPTIONAL_DIRS}; do \
		if [ -d $$dir ]; \
		then\
			(cd $$dir; $(MAKE) $@) || exit 1; \
		fi \
	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.
#
#  Some libraries must be built as .a files (libscalar for example) because if
#  it's built as a .o file, then all of the constituent .o files in it will be
#  linked into tools (for example gccas) even if they only use one of the parts
#  of it.  For this reason, sometimes it's useful to use libraries as .a files.
###########################################################################

ifdef LIBRARYNAME

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

LIBNAME_O    := $(DESTLIBRELEASE)/lib$(LIBRARYNAME).so
LIBNAME_P    := $(DESTLIBPROFILE)/lib$(LIBRARYNAME).so
LIBNAME_G    := $(DESTLIBDEBUG)/lib$(LIBRARYNAME).so
LIBNAME_AO   := $(DESTLIBRELEASE)/lib$(LIBRARYNAME).a
LIBNAME_AP   := $(DESTLIBPROFILE)/lib$(LIBRARYNAME).a
LIBNAME_AG   := $(DESTLIBDEBUG)/lib$(LIBRARYNAME).a
LIBNAME_OBJO := $(DESTLIBRELEASE)/$(LIBRARYNAME).o
LIBNAME_OBJP := $(DESTLIBPROFILE)/$(LIBRARYNAME).o
LIBNAME_OBJG := $(DESTLIBDEBUG)/$(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:: $(DESTLIBCURRENT)/lib$(LIBRARYNAME).so
bytecodelib:: $(LIBNAME_BC)
bytecodelib-install:: $(LLVMGCCDIR)/bytecode-libs/lib$(LIBRARYNAME).bc

$(LLVMGCCDIR)/bytecode-libs/lib$(LIBRARYNAME).bc: $(LIBNAME_BC)
	@echo ======= Installing $(LIBRARYNAME) bytecode library =======
	cp $< $@

# Does the library want a .o version built?
ifndef DONT_BUILD_RELINKED
all:: $(DESTLIBCURRENT)/$(LIBRARYNAME).o
endif

# Does the library want an archive version built?
ifdef BUILD_ARCHIVE
all:: $(DESTLIBCURRENT)/lib$(LIBRARYNAME).a
endif

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

LinkBCLib := $(LLVMGCC) -shared
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)
#
# Rules for building dynamically linked libraries.
#
$(LIBNAME_O): $(ObjectsO) $(LibSubDirs) $(DESTLIBRELEASE)/.dir
	@echo ======= Linking $(LIBRARYNAME) dynamic release library =======
	$(VERB) $(Link) -o $*.la $(ObjectsO) $(LibSubDirs) $(LibLinkOpts)
	$(VERB) $(LIBTOOL) --mode=install $(INSTALL) $*.la $(DESTLIBCURRENT)

$(LIBNAME_P): $(ObjectsP) $(LibSubDirs) $(DESTLIBPROFILE)/.dir
	@echo ======= Linking $(LIBRARYNAME) dynamic profile library =======
	$(VERB) $(Link) -o $*.la $(ObjectsP) $(LibSubDirs) $(LibLinkOpts)
	$(VERB) $(LIBTOOL) --mode=install $(INSTALL) $*.la $(DESTLIBCURRENT)

$(LIBNAME_G): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir
	@echo ======= Linking $(LIBRARYNAME) dynamic debug library =======
	$(VERB) $(Link) -o $*.la $(ObjectsG) $(LibSubDirs) $(LibLinkOpts)
	$(VERB) $(LIBTOOL) --mode=install $(INSTALL) $*.la $(DESTLIBCURRENT)

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

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

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


#
# 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,
#	it's 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)

endif

#------------------------------------------------------------------------
# Create a TAGS database for emacs
#------------------------------------------------------------------------

ifneq ($(ETAGS),false)
ifeq ($(LEVEL), .)
SRCDIRS := $(wildcard $(SourceDir)/include $(SourceDir)/lib $(SourceDir)/tools)

tags:
	$(ETAGS) -l c++ `find $(SRCDIRS) -name '*.cpp' -o -name '*.h'`
all:: tags
endif
else
tags:
	${ECHO} "Cannot build $@: The program etags is not installed"
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

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

#
# 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) $(DESTTOOLDEBUG)/.dir
	@echo ======= Linking $(TOOLNAME) debug executable $(STRIP_WARN_MSG) =======
	$(VERB) $(LinkG) -o $@ $(ObjectsG) $(LIB_OPTS_G) $(LINK_OPTS) $(LIBS)

$(TOOLEXENAME_O): $(ObjectsO) $(USED_LIB_PATHS_O) $(DESTTOOLRELEASE)/.dir
	@echo ======= Linking $(TOOLNAME) release executable =======
	$(VERB) $(LinkO) -o $@ $(ObjectsO) $(LIB_OPTS_O) $(LINK_OPTS) $(LIBS)

$(TOOLEXENAME_P): $(ObjectsP) $(USED_LIB_PATHS_P) $(DESTTOOLPROFILE)/.dir
	@echo ======= Linking $(TOOLNAME) profile executable =======
	$(VERB) $(LinkP) -o $@ $(ObjectsP) $(LIB_OPTS_P) $(LINK_OPTS) $(LIBS)

endif



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

# Create .lo files in the ObjectFiles directory from the .cpp and .c files...
$(BUILD_OBJ_DIR)/Release/%.lo: %.cpp $(BUILD_OBJ_DIR)/Release/.dir
	@echo "Compiling `basename $<`"
	$(VERB) $(CompileO) $< -o $@

$(BUILD_OBJ_DIR)/Release/%.lo: %.c $(BUILD_OBJ_DIR)/Release/.dir
	@echo "Compiling `basename $<`"
	$(VERB) $(CompileCO) $< -o $@

$(BUILD_OBJ_DIR)/Profile/%.lo: %.cpp $(BUILD_OBJ_DIR)/Profile/.dir
	@echo "Compiling `basename $<`"
	$(VERB) $(CompileP) $< -o $@

$(BUILD_OBJ_DIR)/Profile/%.lo: %.c $(BUILD_OBJ_DIR)/Profile/.dir
	@echo "Compiling `basename $<`"
	$(VERB) $(CompileCP) $< -o $@

$(BUILD_OBJ_DIR)/Debug/%.lo: %.cpp $(BUILD_OBJ_DIR)/Debug/.dir
	@echo "Compiling `basename $<`"
	$(VERB) $(CompileG) $< -o $@

$(BUILD_OBJ_DIR)/Debug/%.lo: %.c $(BUILD_OBJ_DIR)/Debug/.dir 
	@echo "Compiling `basename $<`"
	$(VERB) $(CompileCG) $< -o $@

$(BUILD_OBJ_DIR)/BytecodeObj/%.bc: %.cpp $(BUILD_OBJ_DIR)/BytecodeObj/.dir $(LCC1XX)
	@echo "Compiling `basename $<` to bytecode"
	$(VERB) $(LLVMGXX) $(CompileWarnings) $(CPPFLAGS) -c $< -o $@

$(BUILD_OBJ_DIR)/BytecodeObj/%.bc: %.c $(BUILD_OBJ_DIR)/BytecodeObj/.dir $(LCC1)
	@echo "Compiling `basename $<` to bytecode"
	$(VERB) $(LLVMGCC) $(CompileWarnings) $(CPPFLAGS) -c $< -o $@

$(BUILD_OBJ_DIR)/BytecodeObj/%.bc: %.ll $(BUILD_OBJ_DIR)/BytecodeObj/.dir $(LLVMAS)
	@echo "Compiling `basename $<` to bytecode"
	$(VERB) $(LLVMAS) $< -f -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 $<
	$(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 $(BUILD_OBJ_DIR)/Debug $(BUILD_OBJ_DIR)/Release
	$(VERB) $(RM) -rf $(BUILD_OBJ_DIR)/Profile $(BUILD_OBJ_DIR)/Depend
	$(VERB) $(RM) -rf $(BUILD_OBJ_DIR)/BytecodeObj
	$(VERB) $(RM) -f core core.[0-9][0-9]* *.o *.d *.so *~ *.flc
	$(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:%=$(BUILD_OBJ_DIR)/Depend/%.d)

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

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

#
# Autoconf Dependencies.
#
$(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

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