#===-- 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 dependancy info.
# These are platform dependant, so this is the file used to specify these
# system dependant 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.
#
# 7. LLVM_OBJ_ROOT - If specified, points to the top directory where LLVM
#    object files are placed.
#
# 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, and
# 	LLVM_OBJ_ROOT = BUILD_OBJ_ROOT.
#===-----------------------------------------------------------------------====

#
# Configuration file to set paths specific to local installation of LLVM
# 
include $(LEVEL)/Makefile.config

###########################################################################
# Directory Configuration
#	This section of the Makefile determines what is where.  To be
#	specific, there are several locations that need to be defined:
#
#	o LLVM_SRC_ROOT  : The root directory of the LLVM source code.
#	o LLVM_OBJ_ROOT  : The root directory containing the built LLVM code.
#
#	o BUILD_SRC_DIR  : The directory containing the code to build.
#	o BUILD_SRC_ROOT : The root directory of the code to build.
#
#	o BUILD_OBJ_DIR  : The directory in which compiled code will be placed.
#	o BUILD_OBJ_ROOT : The root directory in which compiled code is placed.
#
###########################################################################

#
# Set the source build directory.  That is almost always the current directory.
#
ifndef BUILD_SRC_DIR
BUILD_SRC_DIR = $(shell pwd)
endif

#
# Set the source root directory.
#
ifndef BUILD_SRC_ROOT
BUILD_SRC_ROOT = $(shell cd $(BUILD_SRC_DIR)/$(LEVEL); pwd)
endif

#
# Determine the path of the source tree relative from $HOME (the mythical
# home directory).
#
HOME_OBJ_ROOT := $(OBJ_ROOT)$(patsubst $(HOME)%,%,$(BUILD_SRC_ROOT))

#
# Set the object build directory.  Its location depends upon the source path
# and where object files should go.
#
ifndef BUILD_OBJ_DIR
ifeq ($(OBJ_ROOT),.)
BUILD_OBJ_DIR = $(BUILD_SRC_DIR)
else
BUILD_OBJ_DIR := $(HOME_OBJ_ROOT)$(patsubst $(BUILD_SRC_ROOT)%,%,$(BUILD_SRC_DIR))
endif
endif

#
# Set the root of the object directory.
#
ifndef BUILD_OBJ_ROOT
ifeq ($(OBJ_ROOT),.)
BUILD_OBJ_ROOT = $(BUILD_SRC_ROOT)
else
BUILD_OBJ_ROOT := $(HOME_OBJ_ROOT)
endif
endif

#
# Set the LLVM source directory.
# It is typically the root directory of what we're compiling now.
#
ifndef LLVM_SRC_ROOT
LLVM_SRC_ROOT = $(BUILD_SRC_ROOT)
endif

#
# Set the LLVM object directory.
#
ifndef LLVM_OBJ_ROOT
LLVM_OBJ_ROOT = $(BUILD_OBJ_ROOT)
endif

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

ifdef SHARED_LIBRARY
# if SHARED_LIBRARY is specified, the default is to build the dynamic lib
all:: dynamic
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 "Home Offset      : " $(HOME_OBJ_ROOT);
	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);

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

PURIFY := $(PURIFY) -cache-dir="$(BUILD_OBJ_ROOT)/../purifycache" -chain-length="30" -messages=all 

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

#
# Suffixes for library compilation rules
#
.SUFFIXES: .so

###########################################################################
# 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
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.
#
ifdef VERBOSE
LIBTOOL=$(LLVM_SRC_ROOT)/libtool
else
LIBTOOL=$(LLVM_SRC_ROOT)/libtool --silent
endif

#
# Verbosity levels
#
ifndef VERBOSE
VERB := @
endif

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

#--------------------------------------------------------------------------
# Special tools used while building the LLVM tree.  Burg is built as part
# of the utils directory.
#--------------------------------------------------------------------------
BURG    := $(LLVMTOOLCURRENT)/burg
RunBurg := $(BURG) $(BURG_OPTS)

TBLGEN  := $(LLVMTOOLCURRENT)/tblgen


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

#
# Include both the project headers and the LLVM headers for compilation and
# dependency computation.
#
CPPFLAGS += -I$(BUILD_SRC_ROOT)/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

# -Wno-unused-parameter
CompileCommonOpts := -Wall -W  -Wwrite-strings -Wno-unused -I$(LEVEL)/include
CompileOptimizeOpts := -O3 -DNDEBUG -finline-functions -fshort-enums

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

#
# Add the LLVM specific "-only-static" option so that we only compile .o files
# once when not building a shared library.
#
# For shared libraries, we will end up building twice, but that doesn't happen
# very often, so we'll let it go.
#
ifndef SHARED_LIBRARY
Compile  := $(Compile)  -only-static
CompileC := $(CompileC) -only-static
endif

# 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).
#
ifdef ENABLE_PURIFY # To enable purify, build with 'gmake ENABLE_PURIFY=1'
Link     := $(PURIFY) $(LIBTOOL) --mode=link $(CXX) -static
else
Link     := $(LIBTOOL) --mode=link $(CXX)
endif

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

# MakeSO - Create a .so file from a .o files...
#MakeSO   := $(LIBTOOL) --mode=link $(CXX) $(MakeSharedObjectOption)
#MakeSOO  := $(MakeSO) -O3
#MakeSOP  := $(MakeSOO) $(PROFILE)

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

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

# Create dependancy 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  := $(ExtraSource) $(wildcard *.cpp *.c *.y *.l)
endif

Objs := $(sort $(patsubst Debug/%.lo, %.lo, $(addsuffix .lo,$(notdir $(basename $(Source))))))
ObjectsO := $(addprefix $(BUILD_OBJ_DIR)/Release/,$(Objs))
ObjectsP := $(addprefix $(BUILD_OBJ_DIR)/Profile/,$(Objs))
ObjectsG := $(addprefix $(BUILD_OBJ_DIR)/Debug/,$(Objs))

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

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

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

#
# 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.
#
$(LIBNAME_OBJO): $(ObjectsO) $(LibSubDirs) $(DESTLIBRELEASE)/.dir
	@echo "Linking $@"
	$(VERB) $(Relink) -o $@ $(ObjectsO) $(LibSubDirs)

$(LIBNAME_OBJP): $(ObjectsP) $(LibSubDirs) $(DESTLIBPROFILE)/.dir
	@echo "Linking $@"
	$(VERB) $(Relink) -o $@ $(ObjectsP) $(LibSubDirs)

$(LIBNAME_OBJG): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir
	@echo "Linking $@"
	$(VERB) $(Relink) -o $@ $(ObjectsG) $(LibSubDirs)

endif

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

ifdef ETAGS
ifeq ($(LEVEL), .)
tags:
	$(ETAGS) -l c++ `find include lib tools -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))
#LINK_OPTS        := $(TOOLLINKOPTS) $(PLATFORMLINKOPTS)

#
# 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
.PRECIOUS: $(BUILD_OBJ_DIR)/Debug/.dir $(BUILD_OBJ_DIR)/Release/.dir

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

#$(BUILD_OBJ_DIR)/Release/%.o: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Release/.dir
	#$(VERB) $(CompileCO) $< -o $@

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

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

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

#$(BUILD_OBJ_DIR)/Debug/%.o: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Debug/.dir 
	#$(VERB) $(CompileCG) $< -o $@

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

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

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

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

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

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

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

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

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

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

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

$(BUILD_OBJ_DIR)/Debug/%.lo: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Debug/.dir 
	$(VERB) $(CompileCG) $< -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
	$(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)/' > $@

# 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 Bison\'ing $<...
	$(VERB) $(BISON) -v -d -p $(<:%Parser.y=%) $*.y
	$(VERB) ${MV} -f $*.tab.c $*.cpp
	$(VERB) ${MV} -f $*.tab.h $*.h

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

# To create postscript files from dot files...
ifdef DOT
%.ps: %.dot
	${DOT} -Tps < $< > $@
else
%.ps: %.dot
	${ECHO} "Cannot build $@: The program dot is not installed"
endif

# 'make clean' nukes the tree
clean::
	$(VERB) $(RM) -rf $(BUILD_OBJ_DIR)/Debug $(BUILD_OBJ_DIR)/Release $(BUILD_OBJ_DIR)/Profile $(BUILD_OBJ_DIR)/Depend
	$(VERB) $(RM) -f core core.[0-9][0-9]* *.o *.d *.so *~ *.flc
	$(VERB) $(RM) -f $(LEX_OUTPUT) $(YACC_OUTPUT)

distclean:: clean
	$(VERB) (cd $(LLVM_SRC_ROOT); $(RM) -rf $(LEVEL)/Makefile.config \
	            $(LEVEL)/include/Config/config.h \
	            $(LEVEL)/autom4te.cache \
	            $(LEVEL)/config.log)

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

# If dependencies were generated for the file that included this file,
# include the dependancies now...
#
SourceBaseNames := $(basename $(notdir $(filter-out Debug/%, $(Source))))
SourceDepend := $(SourceBaseNames:%=$(BUILD_OBJ_DIR)/Depend/%.d)

#
# Depend target:
#	This allows a user to manually ask for an update in the dependencies
#
depend: $(SourceDepend)


# Create dependencies for the *.cpp files...
#$(SourceDepend): \x
$(BUILD_OBJ_DIR)/Depend/%.d: $(SourceDir)%.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...
#$(SourceDepend): \x
$(BUILD_OBJ_DIR)/Depend/%.d: $(SourceDir)%.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' > $@

#
# 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 ($(SourceDepend),)
-include $(SourceDepend)
endif
endif
