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

#
# 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 := $(shell cd $(BUILD_OBJ_DIR); cd $(LLVM_SRC_ROOT); pwd)
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

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

###########################################################################
# 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
.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/Bytecode
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_SRC_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)/as


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

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)

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

#
# Libtool Objects
#
Srcs := $(sort $(notdir $(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)/Bytecode/,$(addsuffix .bc, $(Srcs)))

#
# The real objects underlying the libtool objects
#
RObjs := $(sort $(patsubst Debug/%.o, %.o, $(addsuffix .o,$(notdir $(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
LinkBCLib += -Xlinker -disable-internalize
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 $@"
	$(VERB) $(Relink) -o $@ $(RObjectsO) $(LibSubDirs)

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

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

endif

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

ifdef ETAGS
ifeq ($(LEVEL), .)
SRCDIRS := $(wildcard include lib 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)/Bytecode/.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: $(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 $@

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

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

$(BUILD_OBJ_DIR)/Bytecode/%.bc: $(SourceDir)%.ll $(BUILD_OBJ_DIR)/Bytecode/.dir $(LLVMAS)
	@echo "Compiling $< 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 Flex\'ing $<...
	$(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 Bison\'ing $<...
	$(VERB) $(BISON) -v -d -p $(<:%Parser.y=%) $*.y
	$(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...
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
	$(VERB) $(RM) -rf $(BUILD_OBJ_DIR)/Profile $(BUILD_OBJ_DIR)/Depend
	$(VERB) $(RM) -rf $(BUILD_OBJ_DIR)/Bytecode
	$(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.
###########################################################################

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

# Create dependencies for the *.cpp files...
$(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' > $@
	$(VERB) $(Depend) $< | $(SED) 's|$*.o: $*.cpp||' | $(SED) 's|[^\]$$|&::|' >> $@

# Create dependencies for the *.c files...
$(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' > $@
	$(VERB) $(Depend) $< | $(SED) 's|$*.o: $*.c||' | $(SED) 's|[^\]$$|&::|' >> $@

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

cleandeps::
	$(VERB) rm -f $(SourceDepend)

