#===-- 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 $(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
%.burm.cpp: Debug/%.burg 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 $(Source))))
ifneq ($(SourceDepend),)
include $(SourceDepend)
endif
