X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=Makefile.rules;h=48dfe35bf72eb04eb2419934bef688fed40b4b45;hb=fa3711a0f894a67ad0e022f4a638b53ed3036784;hp=0787891f7a435c2775c169a53cc836b908013e96;hpb=4b6e5d11987914c4021dbfed37d6bf2026b78cd8;p=oota-llvm.git diff --git a/Makefile.rules b/Makefile.rules index 0787891f7a4..48dfe35bf72 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. @@ -58,6 +65,9 @@ VPATH=$(SourceDir) # 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 @@ -83,12 +93,12 @@ bytecode:: # Print out the directories used for building prdirs:: - @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: @@ -278,8 +288,10 @@ 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 CompileWarnings := -Wall -W -Wwrite-strings -Wno-unused CompileCommonOpts := $(CompileWarnings) -fshort-enums @@ -316,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) @@ -373,7 +395,12 @@ 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; \ + if [ ! -f $$dir/Makefile ]; \ + then \ + $(MKDIR) $$dir; \ + cp $(SourceDir)/$$dir/Makefile $$dir/Makefile; \ + fi; \ + ($(MAKE) -C $$dir $@) || exit 1; \ done endif @@ -386,16 +413,26 @@ test :: $(addsuffix /.maketest , $(PARALLEL_DIRS)) bytecode :: $(addsuffix /.makebytecode, $(PARALLEL_DIRS)) %/.makeall %/.makeinstall %/.makeclean %/.maketest %/.makebytecode: - $(VERB) cd $(@D); $(MAKE) $(subst $(@D)/.make,,$@) + $(VERB) if [ ! -f $(@D)/Makefile ]; \ + then \ + $(MKDIR) $(@D); \ + cp $(SourceDir)/$(@D)/Makefile $(@D)/Makefile; \ + fi; \ + $(MAKE) -C $(@D) $(subst $(@D)/.make,,$@) endif # Handle directories that may or may not exist ifdef OPTIONAL_DIRS all install clean test bytecode :: $(VERB) for dir in ${OPTIONAL_DIRS}; do \ - if [ -d $$dir ]; \ + if [ -d $(SourceDir)/$$dir ]; \ then\ - (cd $$dir; $(MAKE) $@) || exit 1; \ + if [ ! -f $$dir/Makefile ]; \ + then \ + $(MKDIR) $$dir; \ + cp $(SourceDir)/$$dir/Makefile $$dir/Makefile; \ + fi; \ + ($(MAKE) -C$$dir $@) || exit 1; \ fi \ done endif @@ -448,7 +485,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? @@ -465,7 +502,7 @@ 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 @@ -479,43 +516,50 @@ 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 ======= # @@ -533,15 +577,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 @@ -550,7 +594,7 @@ endif # Create a TAGS database for emacs #------------------------------------------------------------------------ -ifdef ETAGS +ifneq ($(ETAGS),false) ifeq ($(LEVEL), .) SRCDIRS := $(wildcard $(SourceDir)/include $(SourceDir)/lib $(SourceDir)/tools) @@ -626,16 +670,19 @@ 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 @@ -647,39 +694,39 @@ endif # Create .lo files in the ObjectFiles directory from the .cpp and .c files... $(BUILD_OBJ_DIR)/Release/%.lo: %.cpp $(BUILD_OBJ_DIR)/Release/.dir - @echo "Compiling $<" + @${ECHO} "Compiling `basename $<`" $(VERB) $(CompileO) $< -o $@ $(BUILD_OBJ_DIR)/Release/%.lo: %.c $(BUILD_OBJ_DIR)/Release/.dir - @echo "Compiling $<" + @${ECHO} "Compiling `basename $<`" $(VERB) $(CompileCO) $< -o $@ $(BUILD_OBJ_DIR)/Profile/%.lo: %.cpp $(BUILD_OBJ_DIR)/Profile/.dir - @echo "Compiling $<" + @${ECHO} "Compiling `basename $<`" $(VERB) $(CompileP) $< -o $@ $(BUILD_OBJ_DIR)/Profile/%.lo: %.c $(BUILD_OBJ_DIR)/Profile/.dir - @echo "Compiling $<" + @${ECHO} "Compiling `basename $<`" $(VERB) $(CompileCP) $< -o $@ $(BUILD_OBJ_DIR)/Debug/%.lo: %.cpp $(BUILD_OBJ_DIR)/Debug/.dir - @echo "Compiling $<" + @${ECHO} "Compiling `basename $<`" $(VERB) $(CompileG) $< -o $@ $(BUILD_OBJ_DIR)/Debug/%.lo: %.c $(BUILD_OBJ_DIR)/Debug/.dir - @echo "Compiling $<" + @${ECHO} "Compiling `basename $<`" $(VERB) $(CompileCG) $< -o $@ $(BUILD_OBJ_DIR)/BytecodeObj/%.bc: %.cpp $(BUILD_OBJ_DIR)/BytecodeObj/.dir $(LCC1XX) - @echo "Compiling $< to bytecode" + @${ECHO} "Compiling `basename $<` to bytecode" $(VERB) $(LLVMGXX) $(CompileWarnings) $(CPPFLAGS) -c $< -o $@ $(BUILD_OBJ_DIR)/BytecodeObj/%.bc: %.c $(BUILD_OBJ_DIR)/BytecodeObj/.dir $(LCC1) - @echo "Compiling $< to bytecode" + @${ECHO} "Compiling `basename $<` to bytecode" $(VERB) $(LLVMGCC) $(CompileWarnings) $(CPPFLAGS) -c $< -o $@ $(BUILD_OBJ_DIR)/BytecodeObj/%.bc: %.ll $(BUILD_OBJ_DIR)/BytecodeObj/.dir $(LLVMAS) - @echo "Compiling $< to bytecode" + @${ECHO} "Compiling `basename $<` to bytecode" $(VERB) $(LLVMAS) $< -f -o $@ @@ -701,7 +748,7 @@ YACC_OUTPUT = $(addprefix $(YACC_FILES:%.y=%), .h .cpp .output) # FIXME. (f.e. char Buffer[10000] ) # %.cpp: %.l - @echo Flexing $< + @${ECHO} Flexing $< $(VERB) $(FLEX) -t $< | \ $(SED) '/^find_rule/d' | \ $(SED) 's/void yyunput/inline void yyunput/' | \ @@ -716,7 +763,7 @@ 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 Bisoning $< + @${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 @@ -729,7 +776,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 @@ -768,11 +815,28 @@ SourceDepend := $(SourceBaseNames:%=$(BUILD_OBJ_DIR)/Depend/%.d) # Create dependencies for the *.cpp files... $(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' > $@ + $(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: %.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) $(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 $<` =====" + $(MKDIR) $(@D) + cp -f $< $@ # # Include dependencies generated from C/C++ source files, but not if we