X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=Makefile.rules;h=a3b57e1110aff36f8e3d9727e8a71360cfc8171a;hp=a524f0b9f193f3618e9a30e70ce4aa133118cdba;hb=5af06f62ea16df92f9968700fb755db5260feca9;hpb=33ad24a096aa3b16b7ca64ae86edc4d7c3e913a0 diff --git a/Makefile.rules b/Makefile.rules index a524f0b9f19..a3b57e1110a 100644 --- a/Makefile.rules +++ b/Makefile.rules @@ -1,4 +1,11 @@ -#===-- Makefile.common - Common make rules for LLVM -------*- makefile -*--==== +#===-- Makefile.rules - Common make rules for LLVM -------*- makefile -*--==== +# +# The LLVM Compiler Infrastructure +# +# This file was developed by the LLVM research group and 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. @@ -48,91 +55,9 @@ #===-----------------------------------------------------------------------==== # -# Configuration file to set paths specific to local installation of LLVM -# -ifdef LLVM_SRC_ROOT -include $(LLVM_SRC_ROOT)/Makefile.config -else -include $(LEVEL)/Makefile.config -endif - -########################################################################### -# 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. +# Set the VPATH so that we can find source files. # -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 object directory. -# -ifndef LLVM_OBJ_ROOT -ifdef LLVM_SRC_ROOT -LLVM_OBJ_ROOT := $(shell cd $(BUILD_OBJ_DIR); cd $(LLVM_SRC_ROOT); pwd) -else -LLVM_OBJ_ROOT := $(shell cd $(BUILD_OBJ_ROOT); pwd) -endif -endif - -# -# Set the LLVM source directory. -# It is typically the root directory of what we're compiling now. -# -ifndef LLVM_SRC_ROOT -LLVM_SRC_ROOT := $(BUILD_SRC_ROOT) -endif +VPATH=$(SourceDir) ########################################################################### # Default Targets: @@ -140,6 +65,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 @@ -165,13 +93,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: @@ -181,7 +108,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 # @@ -240,7 +167,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 @@ -282,7 +209,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 @@ -332,7 +259,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 ########################################################################### @@ -343,7 +270,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 @@ -351,17 +288,20 @@ STRIP = $(PLATFORMSTRIPOPTS) STRIP_WARN_MSG = "(without symbols)" endif -# Allow gnu extensions... +# Allow GNU extensions: CPPFLAGS += -D_GNU_SOURCE +# Pull in limit macros from stdint.h, even in C++: +CPPFLAGS += -D__STDC_LIMIT_MACROS -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 @@ -388,6 +328,16 @@ 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} --mode=link $(CXX) @@ -416,23 +366,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)) @@ -444,7 +395,7 @@ RObjectsG := $(addprefix $(BUILD_OBJ_DIR)/Debug/,$(RObjs)) ifdef DIRS all install clean test bytecode :: $(VERB) for dir in ${DIRS}; do \ - (cd $$dir; $(MAKE) $@) || exit 1; \ + ($(MAKE) -C $$dir $@) || exit 1; \ done endif @@ -457,7 +408,7 @@ test :: $(addsuffix /.maketest , $(PARALLEL_DIRS)) bytecode :: $(addsuffix /.makebytecode, $(PARALLEL_DIRS)) %/.makeall %/.makeinstall %/.makeclean %/.maketest %/.makebytecode: - $(VERB) cd $(@D); $(MAKE) $(subst $(@D)/.make,,$@) + $(VERB) $(MAKE) -C $(@D) $(subst $(@D)/.make,,$@) endif # Handle directories that may or may not exist @@ -466,7 +417,7 @@ all install clean test bytecode :: $(VERB) for dir in ${OPTIONAL_DIRS}; do \ if [ -d $$dir ]; \ then\ - (cd $$dir; $(MAKE) $@) || exit 1; \ + ($(MAKE) -C$$dir $@) || exit 1; \ fi \ done endif @@ -519,7 +470,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? @@ -536,53 +487,64 @@ endif # Rules for building libraries #-------------------------------------------------------------------- -LinkBCLib := $(LLVMGCC) -shared +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 ======= + @${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 ======= + @${ECHO} Linking $(LIBRARYNAME) dynamic release library $(VERB) $(Link) -o $*.la $(ObjectsO) $(LibSubDirs) $(LibLinkOpts) $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $*.la $(DESTLIBCURRENT) + @${ECHO} ======= Finished building $(LIBRARYNAME) dynamic release library ======= $(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) + @${ECHO} ======= Finished building $(LIBRARYNAME) dynamic profile library ======= $(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) + @${ECHO} ======= Finished building $(LIBRARYNAME) dynamic debug library ======= # # 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 + @${ECHO} Finished building $(LIBRARYNAME) archive release library ======= $(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 + @${ECHO} ======= Finished building $(LIBRARYNAME) archive profile library ======= $(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 + @${ECHO} ======= Finished building $(LIBRARYNAME) archive debug library ======= # @@ -600,15 +562,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 @@ -617,9 +579,9 @@ endif # Create a TAGS database for emacs #------------------------------------------------------------------------ -ifdef ETAGS +ifneq ($(ETAGS),false) ifeq ($(LEVEL), .) -SRCDIRS := $(wildcard include lib tools) +SRCDIRS := $(wildcard $(SourceDir)/include $(SourceDir)/lib $(SourceDir)/tools) tags: $(ETAGS) -l c++ `find $(SRCDIRS) -name '*.cpp' -o -name '*.h'` @@ -693,60 +655,63 @@ 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) + @${ECHO} ======= Finished building $(TOOLNAME) debug executable $(STRIP_WARN_MSG) ======= $(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) + @${ECHO} ======= Finished building $(TOOLNAME) release executable ======= $(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) + @${ECHO} ======= Finished building $(TOOLNAME) profile executable ======= 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 $(LLVMAS) - @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 $@ @@ -768,7 +733,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/' | \ @@ -783,8 +748,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 `basename $<`" + $(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... @@ -796,7 +761,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 @@ -804,11 +769,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) @@ -823,18 +795,32 @@ ifndef DISABLE_AUTO_DEPENDENCIES # If dependencies were generated for the file that included this file, # 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... -$(BUILD_OBJ_DIR)/Depend/%.d: $(SourceDir)%.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' > $@ - $(VERB) $(Depend) $< | $(SED) 's|$*.o: $*.cpp||' | $(SED) 's|[^\]$$|&::|' >> $@ +$(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... -$(BUILD_OBJ_DIR)/Depend/%.d: $(SourceDir)%.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' > $@ - $(VERB) $(Depend) $< | $(SED) 's|$*.o: $*.c||' | $(SED) 's|[^\]$$|&::|' >> $@ +$(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 + +# If the Makefile in the source tree has been updated, copy it over into the +# build tree. +Makefile :: $(BUILD_SRC_DIR)/Makefile + @${ECHO} "===== Updating Makefile from source dir: `dirname $<` =====" + cp -f $< $@ # # Include dependencies generated from C/C++ source files, but not if we @@ -842,9 +828,7 @@ $(BUILD_OBJ_DIR)/Depend/%.d: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Depend/.dir # ifneq ($(MAKECMDGOALS),clean) ifneq ($(MAKECMDGOALS),distclean) -ifneq ($(SourceDepend),) --include $(SourceDepend) -endif +-include /dev/null $(SourceDepend) endif endif