#===-- 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
all::$(LLVM_OBJ_ROOT)/config.status

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

BURG_OPTS = -I

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

# If ENABLE_ASSERTIONS=1 is specified (make command line or configured),
# then adjust the CONFIGURATION name appropriately (to match LLVM makefiles)
ifdef DISABLE_ASSERTIONS
  CONFIGURATION := $(CONFIGURATION)-Asserts
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    := $(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

###########################################################################
# 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$(EXEEXT)
RunBurg    := $(BURG) $(BURG_OPTS)
TBLGEN     := $(LLVMTOOLCURRENT)/tblgen$(EXEEXT)
LLVMLDPROG := $(LLVMTOOLCURRENT)/llvm-ld$(EXEEXT)

#--------------------------------------------------------------------------
# The LLVM GCC front-end in C and C++ flavors
#
ifeq ($(LLVMGCC_MAJVERS),3)
LLVMGCC := PATH="$(LLVMTOOLCURRENT):$(PATH)" $(LLVMGCC)
LLVMGXX := PATH="$(LLVMTOOLCURRENT):$(PATH)" $(LLVMGXX)
endif

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

LLVMAS  := $(LLVMTOOLCURRENT)/llvm-as$(EXEEXT)
# Find the location of the platform specific LLVM GCC libraries
LLVMGCCLIBDIR=$(LLVMGCCDIR)/lib/gcc/$(LLVMGCCARCH) 
# LLVM Tool Definitions (LLVMGCC, LLVMGXX, LLVMAS are provided by
# Makefile.rules) 
LLI       = $(LLVMTOOLCURRENT)/lli$(EXEEXT)
LLC       = $(LLVMTOOLCURRENT)/llc$(EXEEXT)
LLVMLD    = $(LLVMLDPROG) -L$(LLVMGCCLIBDIR) -L$(LLVMGCCDIR)/lib
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
LLVMC     = $(LLVMTOOLCURRENT)/llvmc$(EXEEXT)
LUPGRADE  = $(LLVMTOOLCURRENT)/llvm-upgrade$(EXEEXT)
ifeq ($(LLVMGCC_MAJVERS),3)
UPGRADE_LL= $(LUPGRADE) $(1) -o $(1).up.tmp -f ; $(MV) $(1).up.tmp $(1)
else
UPGRADE_LL=
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$(LLVM_OBJ_ROOT)/include \
            -I$(PROJ_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
# 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 -O0 and optimize with
# opt and llvm-ld.
ifdef DISABLE_LTO
LOPTFLAGS := $(OPTFLAGS)
else
LOPTFLAGS := -O0
endif


ifeq ($(OS),Darwin)
ifndef TARGET_FLAGS
TARGET_FLAGS := -mdynamic-no-pic -fomit-frame-pointer
endif
endif

ifeq ($(OS),Linux)
ifeq ($(ARCH),x86)
CPPFLAGS += -D__NO_MATH_INLINES
endif
endif

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

ifdef EXTRA_OPTIONS
TARGET_FLAGS += $(EXTRA_OPTIONS)
endif

ifdef SMALL_PROBLEM_SIZE
CPPFLAGS += -DSMALL_PROBLEM_SIZE
endif

ifdef DISABLE_LTO
EXTRA_LOPT_OPTIONS += -disable-opt -disable-inlining
EXTRA_LINKTIME_OPT_FLAGS += -disable-opt -disable-inlining
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) -O3 -L$(PROJLIBRELEASESOURCE) -L$(LLVMLIBRELEASESOURCE)
LinkP    := $(Link) -O3 -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))
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 test bytecode 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))
clean    :: $(addsuffix /.makeclean   , $(PARALLEL_DIRS))
test     :: $(addsuffix /.maketest    , $(PARALLEL_DIRS))
bytecode :: $(addsuffix /.makebytecode, $(PARALLEL_DIRS))
stripped-bytecode :: $(addsuffix /.makestripped-bytecode, $(PARALLEL_DIRS))
install-bytecode :: $(addsuffix /.makeinstall-bytecode, $(PARALLEL_DIRS))

%/.makeall %/.makeinstall %/.makeclean %/.maketest %/.makebytecode %/.makestripped-bytecode %/.makeinstall-bytecode:
	$(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 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 := $(LLVMGCC) -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

LCC1 := $(LLVMGCCLIBEXEC)/cc1
LCC1XX := $(LLVMGCCLIBEXEC)/cc1plus
LCOLLECT2 :=$(LLVMGCCLIBEXEC)/collect2 


#---------------------------------------------------------
.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
	@${ECHO} "Compiling `basename $<`"
	$(VERB) $(CompileO) $< -o $@

$(PROJ_OBJ_DIR)/Release/%.lo: %.c $(PROJ_OBJ_DIR)/Release/.dir
	@${ECHO} "Compiling `basename $<`"
	$(VERB) $(CompileCO) $< -o $@

$(PROJ_OBJ_DIR)/Profile/%.lo: %.cpp $(PROJ_OBJ_DIR)/Profile/.dir
	@${ECHO} "Compiling `basename $<`"
	$(VERB) $(CompileP) $< -o $@

$(PROJ_OBJ_DIR)/Profile/%.lo: %.c $(PROJ_OBJ_DIR)/Profile/.dir
	@${ECHO} "Compiling `basename $<`"
	$(VERB) $(CompileCP) $< -o $@

$(PROJ_OBJ_DIR)/Debug/%.lo: %.cpp $(PROJ_OBJ_DIR)/Debug/.dir
	@${ECHO} "Compiling `basename $<`"
	$(VERB) $(CompileG) $< -o $@

$(PROJ_OBJ_DIR)/Debug/%.lo: %.c $(PROJ_OBJ_DIR)/Debug/.dir 
	@${ECHO} "Compiling `basename $<`"
	$(VERB) $(CompileCG) $< -o $@

$(PROJ_OBJ_DIR)/BytecodeObj/%.bc: %.cpp $(PROJ_OBJ_DIR)/BytecodeObj/.dir $(LCC1XX)
	@${ECHO} "Compiling `basename $<` to bytecode"
	$(VERB) $(LLVMGXX) $(CPPFLAGS) -c $< -o $@

$(PROJ_OBJ_DIR)/BytecodeObj/%.bc: %.c $(PROJ_OBJ_DIR)/BytecodeObj/.dir $(LCC1)
	@${ECHO} "Compiling `basename $<` to bytecode"
	$(VERB) $(LLVMGCC) $(CPPFLAGS) -c $< -o $@

$(PROJ_OBJ_DIR)/BytecodeObj/%.bc: %.ll $(PROJ_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 `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.
#
$(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

# 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
