#===-- 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 may be set by setting incoming variables:
#
# 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.
#
# 3. 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
#
#===-----------------------------------------------------------------------====

# These are options that can either be enabled here, or can be enabled on the
# make command line (make ENABLE_PROFILING=1)
#
#ENABLE_PROFILING = 1
#ENABLE_PURIFY    = 1
#ENABLE_OPTIMIZED = 1

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

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

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

#--------------------------------------------------------------------
# Installation configuration options... 
#--------------------------------------------------------------------

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

BURG = /home/vadve/vadve/Research/DynOpt/Burg/burg
BURG_OPTS = -I


PURIFY = /usr/dcs/applications/purify/bin/purify -cache-dir="$(HOME)/purifycache" -chain-length="30" -messages=all 

# Shorthand for commonly accessed directories
LIBDEBUG    = $(LEVEL)/lib/Debug
LIBRELEASE  = $(LEVEL)/lib/Release
TOOLDEBUG   = $(LEVEL)/tools/Debug
TOOLRELEASE = $(LEVEL)/tools/Release

#---------------------------------------------------------
# Compilation options...
#---------------------------------------------------------

# Special tools used while building
RunBurg  = $(BURG) $(BURG_OPTS)

# Enable this for profiling support with 'gprof'
ifdef ENABLE_PROFILING
PROFILE = -pg
else
PROFILE =
endif

# TODO: Get rid of exceptions! : -fno-exceptions -fno-rtti
# -Wno-unused-parameter
CompileCommonOpts = $(PROFILE) -Wall -W  -Wwrite-strings -Wno-unused -I$(LEVEL)/include

# Compile a file, don't link...
Compile  = $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(CompileCommonOpts) $(PROFILE)
CompileG = $(Compile) -g  -D_DEBUG
CompileO = $(Compile) -O3 -DNDEBUG -finline-functions -felide-constructors -fnonnull-objects -freg-struct-return -fshort-enums

# Link final executable

# To enable purify, do it here:
ifdef ENABLE_PURIFY
Link     = $(PURIFY) $(CXX) $(Prof) -static
else
Link     = LD_RUN_PATH=/usr/dcs/software/evaluation/encap/gcc-3.0.4/lib $(CXX) $(PROFILE)
endif
LinkG    = $(Link) -g  -L $(LIBDEBUG)
LinkO    = $(Link) -O3 -L $(LIBRELEASE)

# Create a .so file from a .o files...
#MakeSO   = $(CXX) -shared $(Prof)
MakeSO   = $(CXX) -G $(Prof)
MakeSOO  = $(MakeSO) -O3

# Create one .o file from a bunch of .o files...
Relink = ld -r

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

# Archive a bunch of .o files into a .a file...
AR       = ar cq 
MakeLib   = $(AR)

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

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

Objs := $(sort $(patsubst Debug/%.o, %.o, $(addsuffix .o,$(basename $(Source)))))
ObjectsO = $(addprefix Release/,$(Objs))
ObjectsG = $(addprefix Debug/,$(Objs))


#---------------------------------------------------------
# Handle the DIRS option
#---------------------------------------------------------

ifdef DIRS  # Only do this if we're using DIRS!

all     :: $(addsuffix /.makeall    , $(DIRS))
install :: $(addsuffix /.makeinstall, $(DIRS))
clean   :: $(addsuffix /.makeclean  , $(DIRS))

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

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

LIBNAME_O    := $(LIBRELEASE)/lib$(LIBRARYNAME).so
LIBNAME_G    := $(LIBDEBUG)/lib$(LIBRARYNAME).so
LIBNAME_AO   := $(LIBRELEASE)/lib$(LIBRARYNAME).a
LIBNAME_AG   := $(LIBDEBUG)/lib$(LIBRARYNAME).a
LIBNAME_OBJO := $(LIBRELEASE)/$(LIBRARYNAME).o
LIBNAME_OBJG := $(LIBDEBUG)/$(LIBRARYNAME).o

BUILD_LIBNAME_G := $(LIBNAME_G)
ifndef DONT_BUILD_RELINKED
BUILD_LIBNAME_OBJG := $(LIBNAME_OBJG)
endif
ifdef BUILD_ARCHIVE
BUILD_LIBNAME_AG := $(LIBNAME_AG)
endif

# If optimized builds are enabled...
ifdef ENABLE_OPTIMIZED
BUILD_LIBNAME_O  := $(LIBNAME_O)
ifndef DONT_BUILD_RELINKED
BUILD_LIBNAME_OBJO := $(LIBNAME_OBJO)
endif
ifdef BUILD_ARCHIVE
BUILD_LIBNAME_AO := $(LIBNAME_AO)
endif
endif

all:: $(BUILD_LIBNAME_AG) $(BUILD_LIBNAME_OBJG)      # Debug
all:: $(BUILD_LIBNAME_AO) $(BUILD_LIBNAME_OBJO)      # Release
dynamic:: $(BUILD_LIBNAME_G) $(BUILD_LIBNAME_O)      # .so files

$(LIBNAME_O): $(ObjectsO) $(LibSubDirs) $(LIBRELEASE)/.dir Depend/.dir
	@echo ======= Linking $(LIBRARYNAME) release library =======
	$(MakeSOO) -o $@ $(ObjectsO) $(LibSubDirs) $(LibLinkOpts)

$(LIBNAME_G): $(ObjectsG) $(LibSubDirs) $(LIBDEBUG)/.dir Depend/.dir
	@echo ======= Linking $(LIBRARYNAME) debug library =======
	$(MakeSO) -g -o $@ $(ObjectsG) $(LibSubDirs) $(LibLinkOpts)

$(LIBNAME_AO): $(ObjectsO) $(LibSubDirs) $(LIBRELEASE)/.dir Depend/.dir
	@echo ======= Linking $(LIBRARYNAME) release library =======
	@rm -f $@
	$(MakeLib) $@ $(ObjectsO) $(LibSubDirs)

$(LIBNAME_AG): $(ObjectsG) $(LibSubDirs) $(LIBDEBUG)/.dir Depend/.dir
	@echo ======= Linking $(LIBRARYNAME) debug library =======
	@rm -f $@
	$(MakeLib) $@ $(ObjectsG) $(LibSubDirs)

$(LIBNAME_OBJO): $(ObjectsO) $(LibSubDirs) $(LIBRELEASE)/.dir Depend/.dir
	$(Relink) -o $@ $(ObjectsO) $(LibSubDirs)

$(LIBNAME_OBJG): $(ObjectsG) $(LibSubDirs) $(LIBDEBUG)/.dir Depend/.dir
	$(Relink) -o $@ $(ObjectsG) $(LibSubDirs)

endif

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

ifeq ($(LEVEL), .)

tags:
	etags -l c++ `find include lib tools -name '*.cpp' -o -name '*.h'`

all:: tags

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 = $(LEVEL)/tools/Debug/$(TOOLNAME)
TOOLEXENAME_O = $(LEVEL)/tools/Release/$(TOOLNAME)
TOOLEXENAMES := $(TOOLEXENAME_G)
ifdef ENABLE_OPTIMIZED
TOOLEXENAMES += $(TOOLEXENAME_O)
endif

# USED_LIBS_OPTIONS - Compute the options line that add -llib1 -llib2, etc.
USED_LIBS_OPTIONS   := $(patsubst %.a.o, -l%, $(addsuffix .o, $(USEDLIBS)))
USED_LIBS_OPTIONS_G := $(patsubst %.o, $(LIBDEBUG)/%.o,  $(USED_LIBS_OPTIONS))
USED_LIBS_OPTIONS_O := $(patsubst %.o, $(LIBRELEASE)/%.o,$(USED_LIBS_OPTIONS))


# 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 seperately.
#
STATICUSEDLIBS   := $(patsubst %.a.o, lib%.a, $(addsuffix .o, $(USEDLIBS)))
USED_LIB_PATHS_G := $(addprefix $(LIBDEBUG)/, $(STATICUSEDLIBS))
USED_LIB_PATHS_O := $(addprefix $(LIBRELEASE)/, $(STATICUSEDLIBS))

all::   $(TOOLEXENAMES)
clean::
	rm -f $(TOOLEXENAMES)

$(TOOLEXENAME_G): $(ObjectsG) $(USED_LIB_PATHS_G) $(LEVEL)/tools/Debug/.dir
	$(LinkG) -o $@ $(ObjectsG) $(USED_LIBS_OPTIONS_G) $(TOOLLINKOPTS)

$(TOOLEXENAME_O): $(ObjectsO) $(USED_LIB_PATHS_O) $(LEVEL)/tools/Release/.dir
	$(LinkO) -o $@ $(ObjectsG) $(USED_LIBS_OPTIONS_O) $(TOOLLINKOPTS)

endif



#---------------------------------------------------------
.PRECIOUS: Depend/.dir Debug/.dir Release/.dir

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

# Create dependencies for the *.c files...
Depend/%.d: %.c Depend/.dir
	$(Depend) $< | sed 's|$*\.o *|Release/& Debug/& Depend/$(@F)|g' > $@

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

#Release/%.o: %.c Release/.dir Depend/.dir
#	$(CompileOC) $< -o $@

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

#Debug/%.o: %.c Debug/.dir Depend/.dir
#	$(CompileGC) $< -o $@

# Create a .cpp source file from a burg input file
#Debug/%.cpp: Debug/% Debug/.dir
#	$(RunBurg) $< -o $@

# Create a .cpp source file from a flex input file... this uses sed to cut down
# on the warnings emited by GCC...
%.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/' > $@

# Rule for building the bison parsers...

%.cpp %.h : %.y
	bison -v -d -p $(<:%Parser.y=%) $(basename $@).y
	mv -f $(basename $@).tab.c $(basename $@).cpp
	mv -f $(basename $@).tab.h $(basename $@).h

# To create the directories...
%/.dir:
	mkdir -p $(@D)
	@date > $@

# Clean does not remove the output files... just the temporaries
clean::
	rm -rf Debug Release Depend
	rm -f core *.o *.d *.so *~ *.flc

# If dependancies were generated for the file that included this file,
# include the dependancies now...
#
SourceDepend = $(addsuffix .d,$(addprefix Depend/,$(basename $(filter-out Debug/%, $(Source)))))
ifneq ($(SourceDepend),)
include $(SourceDepend)
endif
