X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=Makefile.rules;h=27effd7f52458ff465fcf4fa274870f04d574caa;hb=e9d3c6b919570121d11bbc88cd03dea8b9a23837;hp=2e85e70138168b04bacf9fe5b9484f15353526e3;hpb=98892653e54a6382e0d79bb64b537906a435f23a;p=oota-llvm.git diff --git a/Makefile.rules b/Makefile.rules index 2e85e701381..27effd7f524 100644 --- a/Makefile.rules +++ b/Makefile.rules @@ -1,9 +1,9 @@ -#===-- Makefile.common - Common make rules for LLVM -------*- makefile -*--==== +#===-- Makefile.rules - 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. +# 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: @@ -32,9 +32,6 @@ # # 6. LLVM_SRC_ROOT - If specified, points to the top of the LLVM source tree. # -# 7. LLVM_OBJ_ROOT - If specified, points to the top directory where LLVM -# object files are placed. -# # 8. BUILD_SRC_DIR - The directory which contains the current set of Makefiles # and usually the source code too (unless SourceDir is set). # @@ -46,89 +43,14 @@ # placed. # # For building, -# LLVM, LLVM_SRC_ROOT = BUILD_SRC_ROOT, and -# LLVM_OBJ_ROOT = BUILD_OBJ_ROOT. +# 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. +# Set the VPATH so that we can find source files. # -ifndef LLVM_SRC_ROOT -LLVM_SRC_ROOT := $(BUILD_SRC_ROOT) -endif - -# -# Set the LLVM object directory. -# -ifndef LLVM_OBJ_ROOT -LLVM_OBJ_ROOT := $(BUILD_OBJ_ROOT) -endif +VPATH=$(SourceDir) ########################################################################### # Default Targets: @@ -136,6 +58,9 @@ endif # 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 @@ -161,13 +86,12 @@ 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) + @${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: @@ -177,7 +101,7 @@ prdirs:: ########################################################################### .SUFFIXES: .SUFFIXES: .c .cpp .h .hpp .y .l -.SUFFIXES: .lo .o .a .so .bc +.SUFFIXES: .lo .o .a .so .bc .td .SUFFIXES: .ps .dot .d # @@ -186,7 +110,7 @@ prdirs:: # which are marked as Phony. # .PHONY: all dynamic bytecodelib bytecodelib-install -.PHONY: clean cleandeps distclean install test bytecode prdirs +.PHONY: clean distclean install test bytecode prdirs ########################################################################### # Miscellaneous paths and commands: @@ -236,7 +160,7 @@ endif DESTLIBDEBUG := $(BUILD_OBJ_ROOT)/lib/Debug DESTLIBRELEASE := $(BUILD_OBJ_ROOT)/lib/Release DESTLIBPROFILE := $(BUILD_OBJ_ROOT)/lib/Profile -DESTLIBBYTECODE := $(BUILD_OBJ_ROOT)/lib/Bytecode +DESTLIBBYTECODE := $(BUILD_OBJ_ROOT)/lib/BytecodeLibs DESTLIBCURRENT := $(BUILD_OBJ_ROOT)/lib/$(CONFIGURATION) # LLVM libraries used for linking @@ -278,7 +202,7 @@ PROJTOOLCURRENT := $(BUILD_OBJ_ROOT)/tools/$(CONFIGURATION) # # Libtool is found in the current directory. # -LIBTOOL := $(LLVM_SRC_ROOT)/mklib +LIBTOOL := $(LLVM_OBJ_ROOT)/mklib # # If we're not building a shared library, use the disable-shared tag with @@ -328,7 +252,7 @@ LCC1XX := $(LLVMGCCDIR)/libexec/gcc/$(LLVMGCCARCH)/cc1plus # Some of the compiled LLVM tools which are used for compilation of runtime # libraries. # -LLVMAS := $(LLVMTOOLCURRENT)/as +LLVMAS := $(LLVMTOOLCURRENT)/llvm-as ########################################################################### @@ -339,7 +263,17 @@ LLVMAS := $(LLVMTOOLCURRENT)/as # 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 +# BUILD_OBJ_DIR : Files local to the particular object directory +# (locallly generated header files). +# BUILD_SRC_DIR : Files local to the particular source directory. +# BUILD_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$(BUILD_OBJ_DIR) -I$(BUILD_SRC_DIR) -I$(LLVM_OBJ_ROOT)/include \ + -I$(BUILD_SRC_ROOT)/include -I$(LEVEL)/include \ + -I$(LLVM_SRC_ROOT)/include # By default, strip symbol information from executable ifndef KEEP_SYMBOLS @@ -350,14 +284,15 @@ 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 +CompileWarnings := -Wall -W -Wwrite-strings -Wno-unused +CompileCommonOpts := $(CompileWarnings) -fshort-enums +CompileOptimizeOpts := -O3 -DNDEBUG -finline-functions # # Compile commands with libtool. # Compile := $(LIBTOOL) --mode=compile $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(CompileCommonOpts) -CompileC := $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CCFLAGS) $(CompileCommonOpts) +CompileC := $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(CompileCommonOpts) # Compile a cpp file, don't link... CompileG := $(Compile) -g -D_DEBUG @@ -398,7 +333,7 @@ ifdef TOOLNAME Link += -rpath $(DESTTOOLCURRENT) endif -# Create dependancy file from CPP file, send to stdout. +# Create dependency file from CPP file, send to stdout. Depend := $(CXX) -MM -I$(LEVEL)/include $(CPPFLAGS) DependC := $(CC) -MM -I$(LEVEL)/include $(CPPFLAGS) @@ -412,23 +347,24 @@ AR = ${AR_PATH} cq # The local Makefile can list other Source files via ExtraSource = ... # ifndef Source -Source := $(ExtraSource) $(wildcard *.cpp *.c *.y *.l) +Source := $(notdir $(ExtraSource) $(wildcard $(SourceDir)/*.cpp \ + $(SourceDir)/*.c $(SourceDir)/*.y $(SourceDir)/*.l)) endif # # Libtool Objects # -Srcs := $(sort $(notdir $(basename $(Source)))) +Srcs := $(sort $(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))) +ObjectsBC := $(addprefix $(BUILD_OBJ_DIR)/BytecodeObj/,$(addsuffix .bc, $(Srcs))) # # The real objects underlying the libtool objects # -RObjs := $(sort $(patsubst Debug/%.o, %.o, $(addsuffix .o,$(notdir $(basename $(Source)))))) +RObjs := $(sort $(patsubst Debug/%.o, %.o, $(addsuffix .o,$(basename $(Source))))) RObjectsO := $(addprefix $(BUILD_OBJ_DIR)/Release/,$(RObjs)) RObjectsP := $(addprefix $(BUILD_OBJ_DIR)/Profile/,$(RObjs)) RObjectsG := $(addprefix $(BUILD_OBJ_DIR)/Debug/,$(RObjs)) @@ -438,7 +374,7 @@ RObjectsG := $(addprefix $(BUILD_OBJ_DIR)/Debug/,$(RObjs)) #--------------------------------------------------------- ifdef DIRS -all install clean cleandeps test bytecode :: +all install clean test bytecode :: $(VERB) for dir in ${DIRS}; do \ (cd $$dir; $(MAKE) $@) || exit 1; \ done @@ -449,18 +385,16 @@ ifdef PARALLEL_DIRS all :: $(addsuffix /.makeall , $(PARALLEL_DIRS)) install :: $(addsuffix /.makeinstall , $(PARALLEL_DIRS)) clean :: $(addsuffix /.makeclean , $(PARALLEL_DIRS)) -cleandeps:: $(addsuffix /.makecleandeps, $(PARALLEL_DIRS)) test :: $(addsuffix /.maketest , $(PARALLEL_DIRS)) bytecode :: $(addsuffix /.makebytecode, $(PARALLEL_DIRS)) -%/.makeall %/.makeinstall %/.makeclean %/.makecleandeps %/.maketest \ - %/.makebytecode: +%/.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 cleandeps test bytecode :: +all install clean test bytecode :: $(VERB) for dir in ${OPTIONAL_DIRS}; do \ if [ -d $$dir ]; \ then\ @@ -517,7 +451,7 @@ bytecodelib:: $(LIBNAME_BC) bytecodelib-install:: $(LLVMGCCDIR)/bytecode-libs/lib$(LIBRARYNAME).bc $(LLVMGCCDIR)/bytecode-libs/lib$(LIBRARYNAME).bc: $(LIBNAME_BC) - @echo ======= Installing $(LIBRARYNAME) bytecode library ======= + @${ECHO} ======= Installing $(LIBRARYNAME) bytecode library ======= cp $< $@ # Does the library want a .o version built? @@ -538,29 +472,33 @@ LinkBCLib := $(LLVMGCC) -shared 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 ======= + @${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 ======= + @${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 ======= + @${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 ======= + @${ECHO} ======= Linking $(LIBRARYNAME) dynamic debug library ======= $(VERB) $(Link) -o $*.la $(ObjectsG) $(LibSubDirs) $(LibLinkOpts) $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $*.la $(DESTLIBCURRENT) @@ -568,17 +506,17 @@ $(LIBNAME_G): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir # Rules for building static archive libraries. # $(LIBNAME_AO): $(ObjectsO) $(LibSubDirs) $(DESTLIBRELEASE)/.dir - @echo ======= Linking $(LIBRARYNAME) archive release library ======= + @${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 ======= + @${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 ======= + @${ECHO} ======= Linking $(LIBRARYNAME) archive debug library ======= @$(RM) -f $@ $(VERB) $(Link) -g $(STRIP) -o $@ $(ObjectsG) $(LibSubDirs) -static @@ -598,15 +536,15 @@ $(LIBNAME_AG): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir # I think that is safe. # $(LIBNAME_OBJO): $(ObjectsO) $(LibSubDirs) $(DESTLIBRELEASE)/.dir - @echo "Linking $@" + @${ECHO} "Linking `basename $@`" $(VERB) $(Relink) -o $@ $(RObjectsO) $(LibSubDirs) $(LIBNAME_OBJP): $(ObjectsP) $(LibSubDirs) $(DESTLIBPROFILE)/.dir - @echo "Linking $@" + @${ECHO} "Linking `basename $@`" $(VERB) $(Relink) -o $@ $(RObjectsP) $(LibSubDirs) $(LIBNAME_OBJG): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir - @echo "Linking $@" + @${ECHO} "Linking `basename $@`" $(VERB) $(Relink) -o $@ $(RObjectsG) $(LibSubDirs) endif @@ -615,10 +553,12 @@ endif # Create a TAGS database for emacs #------------------------------------------------------------------------ -ifdef ETAGS +ifneq ($(ETAGS),false) ifeq ($(LEVEL), .) +SRCDIRS := $(wildcard $(SourceDir)/include $(SourceDir)/lib $(SourceDir)/tools) + tags: - $(ETAGS) -l c++ `find include lib tools -name '*.cpp' -o -name '*.h'` + $(ETAGS) -l c++ `find $(SRCDIRS) -name '*.cpp' -o -name '*.h'` all:: tags endif else @@ -689,15 +629,15 @@ clean:: $(VERB) $(RM) -f $(TOOLEXENAMES) $(TOOLEXENAME_G): $(ObjectsG) $(USED_LIB_PATHS_G) $(DESTTOOLDEBUG)/.dir - @echo ======= Linking $(TOOLNAME) debug executable $(STRIP_WARN_MSG) ======= + @${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 ======= + @${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 ======= + @${ECHO} ======= Linking $(TOOLNAME) profile executable ======= $(VERB) $(LinkP) -o $@ $(ObjectsP) $(LIB_OPTS_P) $(LINK_OPTS) $(LIBS) endif @@ -705,44 +645,44 @@ endif #--------------------------------------------------------- -.PRECIOUS: $(BUILD_OBJ_DIR)/Depend/.dir $(BUILD_OBJ_DIR)/Bytecode/.dir +.PRECIOUS: $(BUILD_OBJ_DIR)/Depend/.dir $(BUILD_OBJ_DIR)/BytecodeObj/.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 $<" +$(BUILD_OBJ_DIR)/Release/%.lo: %.cpp $(BUILD_OBJ_DIR)/Release/.dir + @${ECHO} "Compiling `basename $<`" $(VERB) $(CompileO) $< -o $@ -$(BUILD_OBJ_DIR)/Release/%.lo: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Release/.dir - @echo "Compiling $<" +$(BUILD_OBJ_DIR)/Release/%.lo: %.c $(BUILD_OBJ_DIR)/Release/.dir + @${ECHO} "Compiling `basename $<`" $(VERB) $(CompileCO) $< -o $@ -$(BUILD_OBJ_DIR)/Profile/%.lo: $(SourceDir)%.cpp $(BUILD_OBJ_DIR)/Profile/.dir - @echo "Compiling $<" +$(BUILD_OBJ_DIR)/Profile/%.lo: %.cpp $(BUILD_OBJ_DIR)/Profile/.dir + @${ECHO} "Compiling `basename $<`" $(VERB) $(CompileP) $< -o $@ -$(BUILD_OBJ_DIR)/Profile/%.lo: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Profile/.dir - @echo "Compiling $<" +$(BUILD_OBJ_DIR)/Profile/%.lo: %.c $(BUILD_OBJ_DIR)/Profile/.dir + @${ECHO} "Compiling `basename $<`" $(VERB) $(CompileCP) $< -o $@ -$(BUILD_OBJ_DIR)/Debug/%.lo: $(SourceDir)%.cpp $(BUILD_OBJ_DIR)/Debug/.dir - @echo "Compiling $<" +$(BUILD_OBJ_DIR)/Debug/%.lo: %.cpp $(BUILD_OBJ_DIR)/Debug/.dir + @${ECHO} "Compiling `basename $<`" $(VERB) $(CompileG) $< -o $@ -$(BUILD_OBJ_DIR)/Debug/%.lo: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Debug/.dir - @echo "Compiling $<" +$(BUILD_OBJ_DIR)/Debug/%.lo: %.c $(BUILD_OBJ_DIR)/Debug/.dir + @${ECHO} "Compiling `basename $<`" $(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)/BytecodeObj/%.bc: %.cpp $(BUILD_OBJ_DIR)/BytecodeObj/.dir $(LCC1XX) + @${ECHO} "Compiling `basename $<` to bytecode" + $(VERB) $(LLVMGXX) $(CompileWarnings) $(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)/BytecodeObj/%.bc: %.c $(BUILD_OBJ_DIR)/BytecodeObj/.dir $(LCC1) + @${ECHO} "Compiling `basename $<` to bytecode" + $(VERB) $(LLVMGCC) $(CompileWarnings) $(CPPFLAGS) -c $< -o $@ -$(BUILD_OBJ_DIR)/Bytecode/%.bc: $(SourceDir)%.ll $(BUILD_OBJ_DIR)/Bytecode/.dir $(LCC1) - @echo "Compiling $< to bytecode" +$(BUILD_OBJ_DIR)/BytecodeObj/%.bc: %.ll $(BUILD_OBJ_DIR)/BytecodeObj/.dir $(LLVMAS) + @${ECHO} "Compiling `basename $<` to bytecode" $(VERB) $(LLVMAS) $< -f -o $@ @@ -764,7 +704,7 @@ YACC_OUTPUT = $(addprefix $(YACC_FILES:%.y=%), .h .cpp .output) # FIXME. (f.e. char Buffer[10000] ) # %.cpp: %.l - @echo Flex\'ing $<... + @${ECHO} Flexing $< $(VERB) $(FLEX) -t $< | \ $(SED) '/^find_rule/d' | \ $(SED) 's/void yyunput/inline void yyunput/' | \ @@ -779,8 +719,8 @@ YACC_OUTPUT = $(addprefix $(YACC_FILES:%.y=%), .h .cpp .output) %.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 + @${ECHO} Bisoning $< + $(VERB) $(BISON) -v -d -p $( /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... @@ -792,7 +732,7 @@ YACC_OUTPUT = $(addprefix $(YACC_FILES:%.y=%), .h .cpp .output) @$(DATE) > $@ # To create postscript files from dot files... -ifdef DOT +ifneq ($(DOT),false) %.ps: %.dot ${DOT} -Tps < $< > $@ else @@ -800,11 +740,18 @@ else ${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 $(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) -rf $(BUILD_OBJ_DIR)/BytecodeObj $(VERB) $(RM) -f core core.[0-9][0-9]* *.o *.d *.so *~ *.flc $(VERB) $(RM) -f $(LEX_OUTPUT) $(YACC_OUTPUT) @@ -814,36 +761,40 @@ clean:: # from C/C++ source files. ########################################################################### +ifndef DISABLE_AUTO_DEPENDENCIES + # If dependencies were generated for the file that included this file, -# include the dependancies now... +# include the dependencies now... # -SourceBaseNames := $(basename $(notdir $(filter-out Debug/%, $(Source)))) +SourceBaseNames := $(basename $(Source)) SourceDepend := $(SourceBaseNames:%=$(BUILD_OBJ_DIR)/Depend/%.d) # Create dependencies for the *.cpp files... -#$(SourceDepend): \x -$(BUILD_OBJ_DIR)/Depend/%.d: $(SourceDir)%.cpp $(BUILD_OBJ_DIR)/Depend/.dir +$(BUILD_OBJ_DIR)/Depend/%.d: %.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' > $@ # Create dependencies for the *.c files... -#$(SourceDepend): \x -$(BUILD_OBJ_DIR)/Depend/%.d: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Depend/.dir +$(BUILD_OBJ_DIR)/Depend/%.d: %.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' > $@ +# +# 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 + # # 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 ($(MAKECMDGOALS),cleandeps) -ifneq ($(SourceDepend),) --include $(SourceDepend) +-include /dev/null $(SourceDepend) endif endif -endif -endif - -cleandeps:: - $(VERB) rm -f $(SourceDepend) +endif # ifndef DISABLE_AUTO_DEPENDENCIES