Newer
Older
#===-- 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. PROJ_COMPILE - If set to 1, then this makefile can also be used to
# compile other projects using llvm. Note if this option is set then the
# following *must* hold
# PROJLEVEL should be set to the top of the source directory for the
# project files
# LEVEL should be set to the top of LLVM source tree
# LLVM_LIB_DIR should be set to the top of the LLVM build tree
#
#
#===-----------------------------------------------------------------------====
# Configuration file to set paths specific to local installation of LLVM
#
include $(LEVEL)/Makefile.config
# Figure out how to do platform specific stuff on this platform. This is really
# gross and should be autoconfiscated (automake actually), but should hopefully
# work on Linux and solaris (SunOS).
#
UNAME := $(shell uname)
include $(LEVEL)/Makefile.$(UNAME)
Chris Lattner
committed
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 ::
# Figure out which directory to build stuff into. We want to build into the
# /shared directory by default because it is guaranteed to be local to the
# current machine.
#
ifeq ($(LLVM_OBJ_DIR),.)
BUILD_ROOT = $(LLVM_OBJ_DIR)
ifdef PROJ_COMPILE
BUILD_ROOT_TOP = $(PROJLEVEL)
else
BUILD_ROOT_TOP = $(LEVEL)
BUILD_ROOT := $(LLVM_OBJ_DIR)$(patsubst $(HOME)%,%,$(shell pwd))
# Calculate the BUILD_ROOT_TOP variable, which is the top of the llvm/ tree.
# Note that although this is just equal to $(BUILD_ROOT)/$(LEVEL), we cannot use
# this expression because some of the directories on the source tree may not
# exist in the build tree (for example the test/ heirarchy). Thus we evaluate
# the directory to eliminate the ../'s
#
TOP_DIRECTORY := $(shell cd $(PROJLEVEL); pwd)
BUILD_ROOT_TOP := $(LLVM_OBJ_DIR)$(patsubst $(HOME)%,%,$(TOP_DIRECTORY))
#--------------------------------------------------------------------
# Variables derived from configuration options...
#--------------------------------------------------------------------
#BinInstDir=/usr/local/bin
#LibInstDir=/usr/local/lib/xxx
PURIFY := $(PURIFY) -cache-dir="$(BUILD_ROOT_TOP)/../purifycache" -chain-length="30" -messages=all
Chris Lattner
committed
ifdef ENABLE_PROFILING
ENABLE_OPTIMIZED = 1
CONFIGURATION := Profile
else
ifdef ENABLE_OPTIMIZED
CONFIGURATION := Release
else
CONFIGURATION := Debug
endif
endif
# Shorthand for commonly accessed directories
# DESTLIBXYZ indicates destination for the libraries built
DESTLIBDEBUG := $(BUILD_ROOT_TOP)/lib/Debug
DESTLIBRELEASE := $(BUILD_ROOT_TOP)/lib/Release
DESTLIBPROFILE := $(BUILD_ROOT_TOP)/lib/Profile
DESTLIBCURRENT := $(BUILD_ROOT_TOP)/lib/$(CONFIGURATION)
ifdef PROJ_COMPILE
#get the llvm libraries from LLVM_LIB_DIR
LLVMLIBDEBUGSOURCE := $(LLVM_LIB_DIR)/lib/Debug
LLVMLIBRELEASESOURCE := $(LLVM_LIB_DIR)/lib/Release
LLVMLIBPROFILESOURCE := $(LLVM_LIB_DIR)/lib/Profile
LLVMLIBCURRENTSOURCE := $(LLVM_LIB_DIR)/lib/$(CONFIGURATION)
PROJLIBDEBUGSOURCE := $(BUILD_ROOT_TOP)/lib/Debug
PROJLIBRELEASESOURCE := $(BUILD_ROOT_TOP)/lib/Release
PROJLIBPROFILESOURCE := $(BUILD_ROOT_TOP)/lib/Profile
PROJLIBCURRENTSOURCE := $(BUILD_ROOT_TOP)/lib/$(CONFIGURATION)
else
#when we are building llvm, destination is same as source
LLVMLIBDEBUGSOURCE := $(BUILD_ROOT_TOP)/lib/Debug
LLVMLIBRELEASESOURCE := $(BUILD_ROOT_TOP)/lib/Release
LLVMLIBPROFILESOURCE := $(BUILD_ROOT_TOP)/lib/Profile
LLVMLIBCURRENTSOURCE := $(BUILD_ROOT_TOP)/lib/$(CONFIGURATION)
endif
Chris Lattner
committed
TOOLDEBUG := $(BUILD_ROOT_TOP)/tools/Debug
TOOLRELEASE := $(BUILD_ROOT_TOP)/tools/Release
Vikram S. Adve
committed
TOOLPROFILE := $(BUILD_ROOT_TOP)/tools/Profile
Chris Lattner
committed
TOOLCURRENT := $(BUILD_ROOT_TOP)/tools/$(CONFIGURATION)
# Verbosity levels
Chris Lattner
committed
ifndef VERBOSE
VERB := @
endif
#---------------------------------------------------------
# Compilation options...
#---------------------------------------------------------
# Special tools used while building the LLVM tree. Burg is built as part of the
# utils directory.
#
Chris Lattner
committed
BURG := $(TOOLCURRENT)/burg
RunBurg := $(BURG) $(BURG_OPTS)
TBLGEN := $(TOOLCURRENT)/tblgen
Vikram S. Adve
committed
# This automatically enables optimized builds.
Chris Lattner
committed
ifdef ENABLE_PROFILING
Vikram S. Adve
committed
PROFILE = -pg
Chris Lattner
committed
endif
#if PROJDIR is defined then we include project include directory
PROJ_INCLUDE = $(TOP_DIRECTORY)/include
# By default, strip symbol information from executable
Chris Lattner
committed
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 -I$(PROJ_INCLUDE)
CompileOptimizeOpts := -O3 -DNDEBUG -finline-functions -fshort-enums
Compile := $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(CompileCommonOpts)
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...
CompileC := $(CC) -c $(CPPFLAGS) $(CCFLAGS) $(CompileCommonOpts)
CompileCG := $(CompileC) -g -D_DEBUG
CompileCO := $(CompileC) $(CompileOptimizeOpts) -fomit-frame-pointer
CompileCP := $(CompileC) $(CompileOptimizeOpts) $(PROFILE)
ifdef ENABLE_PURIFY # To enable purify, build with 'gmake ENABLE_PURIFY=1'
Vikram S. Adve
committed
Link := $(PURIFY) $(CXX) -static
else
Vikram S. Adve
committed
Link := $(CXX)
endif
# include both projlib source and llvmlib source
LinkG := $(Link) -g -L$(PROJLIBDEBUGSOURCE) -L$(LLVMLIBDEBUGSOURCE) $(STRIP)
LinkO := $(Link) -O3 -L$(PROJLIBRELEASESOURCE) -L$(LLVMLIBRELEASESOURCE)
LinkP := $(Link) -O3 -L$(PROJLIBPROFILESOURCE) -L$(LLVMLIBPROFILESOURCE) $(PROFILE)
else
LinkG := $(Link) -g -L$(LLVMLIBDEBUGSOURCE) $(STRIP)
LinkO := $(Link) -O3 -L$(LLVMLIBRELEASESOURCE)
LinkP := $(Link) -O3 -L$(LLVMLIBPROFILESOURCE) $(PROFILE)
endif
# Create one .o file from a bunch of .o files...
Relink = ld -r
# MakeSO - Create a .so file from a .o files...
Vikram S. Adve
committed
MakeSO := $(CXX) $(MakeSharedObjectOption)
MakeSOO := $(MakeSO) -O3
Vikram S. Adve
committed
MakeSOP := $(MakeSOO) $(PROFILE)
# Create dependancy file from CPP file, send to stdout.
Depend := $(CXX) -MM -I$(LEVEL)/include -I$(PROJ_INCLUDE) $(CPPFLAGS)
DependC := $(CC) -MM -I$(LEVEL)/include -I$(PROJ_INCLUDE) $(CPPFLAGS)
# Archive a bunch of .o files into a .a file...
AR = ar 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)
Objs := $(sort $(patsubst Debug/%.o, %.o, $(addsuffix .o,$(notdir $(basename $(Source))))))
Vikram S. Adve
committed
ObjectsO := $(addprefix $(BUILD_ROOT)/Release/,$(Objs))
ObjectsP := $(addprefix $(BUILD_ROOT)/Profile/,$(Objs))
ObjectsG := $(addprefix $(BUILD_ROOT)/Debug/,$(Objs))
#---------------------------------------------------------
# Handle the DIRS and PARALLEL_DIRS options
#---------------------------------------------------------
$(VERB) for dir in ${DIRS}; do \
(cd $$dir; $(MAKE) $@) || exit 1; \
done
# 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))
%/.makeall %/.makeinstall %/.makeclean %/.maketest:
$(VERB) 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 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.
# 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
Chris Lattner
committed
# dynamic target builds a shared object version of the library...
dynamic:: $(DESTLIBCURRENT)/lib$(LIBRARYNAME).so
Chris Lattner
committed
# Does the library want a .o version built?
all:: $(DESTLIBCURRENT)/$(LIBRARYNAME).o
Chris Lattner
committed
# Does the library want an archive version built?
ifdef BUILD_ARCHIVE
all:: $(DESTLIBCURRENT)/lib$(LIBRARYNAME).a
$(LIBNAME_O): $(ObjectsO) $(LibSubDirs) $(DESTLIBRELEASE)/.dir
@echo ======= Linking $(LIBRARYNAME) release library =======
$(VERB) $(MakeSOO) -o $@ $(ObjectsO) $(LibSubDirs) $(LibLinkOpts)
$(LIBNAME_P): $(ObjectsP) $(LibSubDirs) $(DESTLIBPROFILE)/.dir
Vikram S. Adve
committed
@echo ======= Linking $(LIBRARYNAME) profile library =======
$(VERB) $(MakeSOP) -o $@ $(ObjectsP) $(LibSubDirs) $(LibLinkOpts)
$(LIBNAME_G): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir
@echo ======= Linking $(LIBRARYNAME) debug library =======
$(VERB) $(MakeSO) -g -o $@ $(ObjectsG) $(LibSubDirs) $(LibLinkOpts)
$(LIBNAME_AO): $(ObjectsO) $(LibSubDirs) $(DESTLIBRELEASE)/.dir
@echo ======= Linking $(LIBRARYNAME) release library =======
@rm -f $@
$(VERB) $(AR) $@ $(ObjectsO) $(LibSubDirs)
$(LIBNAME_AP): $(ObjectsP) $(LibSubDirs) $(DESTLIBPROFILE)/.dir
Vikram S. Adve
committed
@echo ======= Linking $(LIBRARYNAME) profile library =======
@rm -f $@
$(VERB) $(AR) $@ $(ObjectsP) $(LibSubDirs)
$(LIBNAME_AG): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir
@echo ======= Linking $(LIBRARYNAME) debug library =======
@rm -f $@
$(VERB) $(AR) $@ $(ObjectsG) $(LibSubDirs)
$(LIBNAME_OBJO): $(ObjectsO) $(LibSubDirs) $(DESTLIBRELEASE)/.dir
@echo "Linking $@"
$(VERB) $(Relink) -o $@ $(ObjectsO) $(LibSubDirs)
$(LIBNAME_OBJP): $(ObjectsP) $(LibSubDirs) $(DESTLIBPROFILE)/.dir
Vikram S. Adve
committed
@echo "Linking $@"
$(VERB) $(Relink) -o $@ $(ObjectsP) $(LibSubDirs)
$(LIBNAME_OBJG): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir
@echo "Linking $@"
$(VERB) $(Relink) -o $@ $(ObjectsG) $(LibSubDirs)
#------------------------------------------------------------------------
# Create a TAGS database for emacs
#------------------------------------------------------------------------
Chris Lattner
committed
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 := $(BUILD_ROOT_TOP)/tools/Debug/$(TOOLNAME)
TOOLEXENAME_O := $(BUILD_ROOT_TOP)/tools/Release/$(TOOLNAME)
Vikram S. Adve
committed
TOOLEXENAME_P := $(BUILD_ROOT_TOP)/tools/Profile/$(TOOLNAME)
Chris Lattner
committed
TOOLEXENAMES := $(BUILD_ROOT_TOP)/tools/$(CONFIGURATION)/$(TOOLNAME)
# USED_LIBS_OPTIONS - Compute the options line that add -llib1 -llib2, etc.
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
ifdef PROJ_COMPILE
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_P)
LIB_OPTS_P := $(LLVM_LIBS_OPTIONS_P) $(PROJ_LIBS_OPTIONS_P)
else
LLVM_LIBS_OPTIONS := $(patsubst %.a.o, -l%, $(addsuffix .o, $(USEDLIBS)))
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)
LIB_OPTS_O := $(LLVM_LIBS_OPTIONS_O)
LIB_OPTS_P := $(LLVM_LIBS_OPTIONS_P)
endif
# 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 $(DESTLIBDEBUG)/, $(STATICUSEDLIBS))
USED_LIB_PATHS_O := $(addprefix $(DESTLIBRELEASE)/, $(STATICUSEDLIBS))
USED_LIB_PATHS_P := $(addprefix $(DESTLIBPROFILE)/, $(STATICUSEDLIBS))
LINK_OPTS := $(TOOLLINKOPTS) $(PLATFORMLINKOPTS)
# 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))
$(VERB) rm -f $(TOOLEXENAMES)
$(TOOLEXENAME_G): $(ObjectsG) $(USED_LIB_PATHS_G) $(TOOLDEBUG)/.dir
@echo ======= Linking $(TOOLNAME) debug executable $(STRIP_WARN_MSG)=======
$(VERB) $(LinkG) -o $@ $(ObjectsG) $(LIB_OPTS_G) $(LINK_OPTS)
$(TOOLEXENAME_O): $(ObjectsO) $(USED_LIB_PATHS_O) $(TOOLRELEASE)/.dir
@echo ======= Linking $(TOOLNAME) release executable =======
$(VERB) $(LinkO) -o $@ $(ObjectsO) $(LIB_OPTS_O) $(LINK_OPTS)
$(TOOLEXENAME_P): $(ObjectsP) $(USED_LIB_PATHS_P) $(TOOLPROFILE)/.dir
Vikram S. Adve
committed
@echo ======= Linking $(TOOLNAME) profile executable =======
$(VERB) $(LinkP) -o $@ $(ObjectsP) $(LIB_OPTS_P) $(LINK_OPTS)
Vikram S. Adve
committed
endif
#---------------------------------------------------------
.PRECIOUS: $(BUILD_ROOT)/Depend/.dir
.PRECIOUS: $(BUILD_ROOT)/Debug/.dir $(BUILD_ROOT)/Release/.dir
# Create .o files in the ObjectFiles directory from the .cpp and .c files...
$(BUILD_ROOT)/Release/%.o: $(SourceDir)%.cpp $(BUILD_ROOT)/Release/.dir
@echo "Compiling $<"
$(VERB) $(CompileO) $< -o $@
$(BUILD_ROOT)/Release/%.o: $(SourceDir)%.c $(BUILD_ROOT)/Release/.dir
$(BUILD_ROOT)/Profile/%.o: $(SourceDir)%.cpp $(BUILD_ROOT)/Profile/.dir
Vikram S. Adve
committed
@echo "Compiling $<"
$(VERB) $(CompileP) $< -o $@
$(BUILD_ROOT)/Profile/%.o: $(SourceDir)%.c $(BUILD_ROOT)/Profile/.dir
@echo "Compiling $<"
$(VERB) $(CompileCP) $< -o $@
$(BUILD_ROOT)/Debug/%.o: $(SourceDir)%.cpp $(BUILD_ROOT)/Debug/.dir
@echo "Compiling $<"
$(VERB) $(CompileG) $< -o $@
$(BUILD_ROOT)/Debug/%.o: $(SourceDir)%.c $(BUILD_ROOT)/Debug/.dir
#
# 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]; )
#
$(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)/' > $@
%.c: %.y # Cancel built-in rules for yacc
%.h: %.y # Cancel built-in rules for yacc
@echo Bison\'ing $<...
$(VERB) $(BISON) -v -d -p $(<:%Parser.y=%) $*.y
$(VERB) mv -f $*.tab.c $*.cpp
$(VERB) mv -f $*.tab.h $*.h
$(VERB) mkdir -p $*
# To create postscript files from dot files...
%.ps: %.dot
dot -Tps < $< > $@
Vikram S. Adve
committed
$(VERB) rm -rf $(BUILD_ROOT)/Debug $(BUILD_ROOT)/Release $(BUILD_ROOT)/Profile $(BUILD_ROOT)/Depend
$(VERB) rm -f core core.[0-9][0-9]* *.o *.d *.so *~ *.flc
$(VERB) rm -f $(LEX_OUTPUT) $(YACC_OUTPUT)
# If dependencies were generated for the file that included this file,
SourceBaseNames := $(basename $(notdir $(filter-out Debug/%, $(Source))))
SourceDepend := $(SourceBaseNames:%=$(BUILD_ROOT)/Depend/%.d)
# Create dependencies for the *.cpp files...
#$(SourceDepend): \x
$(BUILD_ROOT)/Depend/%.d: $(SourceDir)%.cpp $(BUILD_ROOT)/Depend/.dir
$(VERB) $(Depend) $< | sed 's|$*\.o *|$(BUILD_ROOT)/Release/& $(BUILD_ROOT)/Profile/& $(BUILD_ROOT)/Debug/& $(BUILD_ROOT)/Depend/$(@F)|g' > $@
# Create dependencies for the *.c files...
#$(SourceDepend): \x
$(BUILD_ROOT)/Depend/%.d: $(SourceDir)%.c $(BUILD_ROOT)/Depend/.dir
$(VERB) $(DependC) $< | sed 's|$*\.o *|Release/& Profile/& Debug/& Depend/$(@F)|g' > $@
-include $(SourceDepend)