X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=Makefile.rules;h=df8f63f6f1aa7ea4913e3b4ebdd4986fa298cbb9;hb=ca0dc56742986df05f9a7e0b425e2e798eaa2f92;hp=0ec0ce2938b8201ac7eb416ac5bfbed03d588b87;hpb=d25ad6108642655a6f81adfa4f6630e1b37de805;p=oota-llvm.git diff --git a/Makefile.rules b/Makefile.rules index 0ec0ce2938b..df8f63f6f1a 100644 --- a/Makefile.rules +++ b/Makefile.rules @@ -10,7 +10,7 @@ # This file is included by all of the LLVM makefiles. For details on how to use # it properly, please see the document MakefileGuide.html in the docs directory. # -#===-----------------------------------------------------------------------==== +#===-----------------------------------------------------------------------====# ################################################################################ # TARGETS: Define standard targets that can be invoked @@ -198,43 +198,63 @@ install-bytecode:: install-bytecode-local # Variables derived from configuration we are building #-------------------------------------------------------------------- +# OPTIMIZE_OPTION - The optimization level option we want to build LLVM with +# this can be overridden on the make command line. +ifneq ($(OS),MingW) + OPTIMIZE_OPTION := -O3 +else + OPTIMIZE_OPTION := -O2 +endif ifdef ENABLE_PROFILING BuildMode := Profile - CXX.Flags := -O3 -DNDEBUG -felide-constructors -finline-functions -pg - C.Flags := -O3 -DNDEBUG -pg - LD.Flags := -O3 -DNDEBUG -pg + CXX.Flags := $(OPTIMIZE_OPTION) -pg + C.Flags := $(OPTIMIZE_OPTION) -pg + LD.Flags := $(OPTIMIZE_OPTION) -pg else ifdef ENABLE_OPTIMIZED BuildMode := Release # Don't use -fomit-frame-pointer on FreeBSD ifneq ($(OS),FreeBSD) + # Don't use -fomit-frame-pointer on Darwin, it breaks backtraces. + ifneq ($(OS),Darwin) OmitFramePointer := -fomit-frame-pointer endif - CXX.Flags := -O3 -DNDEBUG -finline-functions -felide-constructors \ - $(OmitFramePointer) - C.Flags := -O3 -DNDEBUG $(OmitFramePointer) - LD.Flags := -O3 -DNDEBUG + endif + CXX.Flags := $(OPTIMIZE_OPTION) $(OmitFramePointer) + C.Flags := $(OPTIMIZE_OPTION) $(OmitFramePointer) + LD.Flags := $(OPTIMIZE_OPTION) else BuildMode := Debug - CXX.Flags := -g -D_DEBUG - C.Flags := -g -D_DEBUG - LD.Flags := -g -D_DEBUG + CXX.Flags := -g + C.Flags := -g + LD.Flags := -g KEEP_SYMBOLS := 1 endif endif -CXX.Flags += $(CXXFLAGS) -C.Flags += $(CFLAGS) -CPP.Flags += $(CPPFLAGS) -LD.Flags += $(LDFLAGS) -AR.Flags := cru +# If DISABLE_ASSERTIONS=1 is specified (make command line or configured), +# then disable assertions by defining the appropriate preprocessor symbols. +ifdef DISABLE_ASSERTIONS + BuildMode := $(BuildMode)-Asserts + CXX.Flags += -DNDEBUG + C.Flags += -DNDEBUG +else + CXX.Flags += -D_DEBUG + C.Flags += -D_DEBUG +endif + +CXX.Flags += $(CXXFLAGS) +C.Flags += $(CFLAGS) +CPP.BaseFlags += $(CPPFLAGS) +LD.Flags += $(LDFLAGS) +AR.Flags := cru LibTool.Flags := --tag=CXX #Make Floating point ieee complient on alpha ifeq ($(ARCH),Alpha) - CXX.Flags += -mieee - CPP.Flags += -mieee + CXX.Flags += -mieee + CPP.BaseFlags += -mieee endif #-------------------------------------------------------------------- @@ -260,9 +280,6 @@ endif ifndef LLVMAS LLVMAS := $(LLVMToolDir)/llvm-as$(EXEEXT) endif -ifndef BURG -BURG := $(LLVMToolDir)/burg$(EXEEXT) -endif ifndef TBLGEN TBLGEN := $(LLVMToolDir)/tblgen$(EXEEXT) endif @@ -344,19 +361,45 @@ endif # Options To Invoke Tools #---------------------------------------------------------- -CompileCommonOpts := -Wall -W -Wwrite-strings -Wno-unused +CompileCommonOpts := -Wall -W -Wwrite-strings -Wno-unused -Wno-long-long \ + -pedantic ifeq ($(OS),HP-UX) - CompileCommonOpts += -D_REENTRANT -D_HPUX_SOURCE + CompileCommonOpts := -D_REENTRANT -D_HPUX_SOURCE +endif + +# If we are building a universal binary on Mac OS/X, pass extra options. This +# is useful to people that want to link the LLVM libraries into their universal +# apps. The UNIVERSAL_SDK_PATH variable can optionally be specified as a path +# to the SDK to use. For Mac OS/X 10.4 Intel machines, the traditional one is: +# UNIVERSAL_SDK_PATH=/Developer/SDKs/MacOSX10.4u.sdk/ +ifdef UNIVERSAL + CompileCommonOpts += -arch i386 -arch ppc + Relink.Flags := -XCClinker -arch -XCClinker i386 -XCClinker -arch \ + -XCClinker ppc + ifdef UNIVERSAL_SDK_PATH + CompileCommonOpts += -isysroot $(UNIVERSAL_SDK_PATH) + Relink.Flags += -XCClinker -isysroot -XCClinker $(UNIVERSAL_SDK_PATH) + endif + + # Building universal cannot compute dependencies automatically. + DISABLE_AUTO_DEPENDENCIES=1 +endif + +# Temporary workaround for a Mac OSX compatibility issue. +ifeq ($(OS),Darwin) + CXX.Flags += -fno-use-cxa-atexit endif -LD.Flags += -L$(LibDir) -L$(LLVMLibDir) -CPP.Flags += -I$(PROJ_OBJ_DIR) -I$(PROJ_SRC_DIR) \ - -I$(PROJ_OBJ_ROOT)/include \ - -I$(PROJ_SRC_ROOT)/include \ - -I$(LLVM_OBJ_ROOT)/include \ - -I$(LLVM_SRC_ROOT)/include \ - -D_GNU_SOURCE -D__STDC_LIMIT_MACROS +LD.Flags += -L$(LibDir) -L$(LLVMLibDir) +CPP.BaseFlags += -D_GNU_SOURCE -D__STDC_LIMIT_MACROS +# All -I flags should go here, so that they don't confuse llvm-config. +CPP.Flags += -I$(PROJ_OBJ_DIR) -I$(PROJ_SRC_DIR) \ + -I$(PROJ_OBJ_ROOT)/include \ + -I$(PROJ_SRC_ROOT)/include \ + -I$(LLVM_OBJ_ROOT)/include \ + -I$(LLVM_SRC_ROOT)/include \ + $(CPP.BaseFlags) Compile.C = $(CC) $(CPP.Flags) $(CompileCommonOpts) -c $(C.Flags) LTCompile.C = $(LIBTOOL) $(LibTool.Flags) --mode=compile $(Compile.C) @@ -370,15 +413,16 @@ BCCompile.CXX = $(LLVMGXXWITHPATH) $(CPP.Flags) $(CompileCommonOpts) \ $(CXX.Flags) Preprocess.CXX= $(CXX) $(CPP.Flags) $(CompileCommonOpts) $(CXX.Flags) -E Link = $(LIBTOOL) $(LibTool.Flags) --mode=link $(CXX) $(CPP.Flags) \ - $(CompileCommonOpts) $(LD.Flags) $(Strip) + $(CXX.Flags) $(CompileCommonOpts) $(LD.Flags) $(Strip) Relink = $(LIBTOOL) $(LibTool.Flags) --mode=link $(CXX) $(CPP.Flags) \ - $(CompileCommonOpts) + $(CXX.Flags) $(CompileCommonOpts) $(Relink.Flags) LTInstall = $(LIBTOOL) $(LibTool.Flags) --mode=install $(INSTALL) \ $(Install.Flags) ProgInstall = $(INSTALL) $(Install.StripFlag) -m 0755 +ScriptInstall = $(INSTALL) -m 0755 DataInstall = $(INSTALL) -m 0644 -Burg = $(BURG) -I $(PROJ_SRC_DIR) -TableGen = $(TBLGEN) -I $(PROJ_SRC_DIR) +TableGen = $(TBLGEN) -I $(PROJ_SRC_DIR) -I$(PROJ_SRC_ROOT)/include \ + -I $(PROJ_SRC_ROOT)/lib/Target Archive = $(AR) $(AR.Flags) LArchive = $(LLVMToolDir)/llvm-ar rcsf ifdef RANLIB @@ -445,9 +489,7 @@ $(RecursiveTargets):: $(MKDIR) $$dir; \ $(CP) $(PROJ_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \ fi; \ - if [ ! -f $$dir/LLVM_DO_NOT_BUILD ]; then \ - ($(MAKE) -C $$dir $@ ) || exit 1; \ - fi ; \ + ($(MAKE) -C $$dir $@ ) || exit 1; \ done endif @@ -462,9 +504,7 @@ $(RecursiveTargets):: $(MKDIR) $$dir; \ $(CP) $(PROJ_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \ fi; \ - if [ ! -f $$dir/LLVM_DO_NOT_BUILD ]; then \ - ($(MAKE) -C $$dir $@ ) || exit 0; \ - fi ; \ + ($(MAKE) -C $$dir $@ ) || exit 0; \ done endif @@ -490,9 +530,7 @@ $(ParallelTargets) : $(MKDIR) $(@D); \ $(CP) $(PROJ_SRC_DIR)/$(@D)/Makefile $(@D)/Makefile; \ fi; \ - if [ ! -f $$dir/LLVM_DO_NOT_BUILD ]; then \ - $(MAKE) -C $(@D) $(subst $(@D)/.make,,$@) ; \ - fi + $(MAKE) -C $(@D) $(subst $(@D)/.make,,$@) ; endif #--------------------------------------------------------- @@ -510,9 +548,7 @@ $(RecursiveTargets):: $(MKDIR) $$dir; \ $(CP) $(PROJ_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \ fi; \ - if [ ! -f $$dir/LLVM_DO_NOT_BUILD ]; then \ - ($(MAKE) -C$$dir $@ ) || exit 1; \ - fi ; \ + ($(MAKE) -C$$dir $@ ) || exit 1; \ fi \ done endif @@ -551,6 +587,13 @@ endif # shorthand for a bunch of libraries that get the correct # JIT support for a library or a tool that runs JIT. #--------------------------------------------------------- +ifeq ($(firstword $(LLVMLIBS)),config) +LLVM_CONFIG := $(LLVM_SRC_ROOT)/utils/llvm-config/llvm-config +LLVMLIBS := $(shell $(LLVM_CONFIG) --libnames $(wordlist 2,9999,$(LLVMLIBS))) +LLVMLIBS := $(patsubst lib%.a,%.a,$(LLVMLIBS)) +LLVMLIBS := $(patsubst %.o,%,$(LLVMLIBS)) +endif + ifeq ($(LLVMLIBS),JIT) # Make sure we can get our own symbols in the tool @@ -571,21 +614,6 @@ ifdef ENABLE_X86_JIT JIT_LIBS += LLVMX86 LLVMSelectionDAG endif -# You can enable the SparcV9 JIT on a non-SparcV9 host by setting the flag -# ENABLE_SPARCV9_JIT on the make command line. If not, it will still be -# enabled automagically on an SparcV9 host. -ifeq ($(ARCH), Sparc) - ENABLE_SPARCV9_JIT = 1 -endif - -# What the Sparc JIT requires -ifdef ENABLE_SPARCV9_JIT - JIT_LIBS += LLVMSparcV9 LLVMSparcV9ModuloSched LLVMSparcV9InstrSched \ - LLVMSparcV9LiveVar LLVMInstrumentation.a \ - LLVMBCWriter LLVMTransforms.a LLVMipo.a LLVMipa.a \ - LLVMDataStructure LLVMSparcV9RegAlloc -endif - # You can enable the PowerPC JIT on a non-PowerPC host by setting the flag # ENABLE_PPC_JIT on the make command line. If not, it will still be # enabled automagically on an PowerPC host. @@ -611,7 +639,7 @@ ifdef ENABLE_ALPHA_JIT endif LLVMLIBS := $(JIT_LIBS) LLVMScalarOpts.a LLVMTransformUtils.a LLVMAnalysis.a \ - LLVMBCReader LLVMCore LLVMSupport.a LLVMTarget.a LLVMbzip2 \ + LLVMBCReader.a LLVMTarget.a LLVMCore.a LLVMSupport.a LLVMbzip2.a \ LLVMSystem.a $(PLATFORMLIBDL) endif @@ -621,11 +649,6 @@ endif # (defined by the user's project) and "LLVM" libs (defined # by the # LLVM project). #--------------------------------------------------------- -# Some versions of gcc on Alpha produce too many symbols, so use a .a file -ifeq ($(ARCH),Alpha) -USEDLIBS := $(subst LLVMCore, LLVMCore.a, $(USEDLIBS)) -LLVMLIBS := $(subst LLVMCore, LLVMCore.a, $(LLVMLIBS)) -endif ProjLibsOptions := $(patsubst %.a.o, -l%, $(addsuffix .o, $(USEDLIBS))) ProjLibsOptions := $(patsubst %.o, $(LibDir)/%.o, $(ProjLibsOptions)) @@ -654,7 +677,8 @@ $(warning Modules require llvm-gcc but no llvm-gcc is available ****) else Module := $(LibDir)/$(MODULE_NAME).bc -LinkModule := $(GCCLD) +LinkModule := $(GCCLD) -L$(CFERuntimeLibDir) + ifdef EXPORTED_SYMBOL_FILE LinkModule += -internalize-public-api-file=$(EXPORTED_SYMBOL_FILE) @@ -764,7 +788,8 @@ else all-local:: $(LibName.BCA) ifdef EXPORTED_SYMBOL_FILE -BCLinkLib = $(GCCLD) -internalize-public-api-file=$(EXPORTED_SYMBOL_FILE) +BCLinkLib = $(GCCLD) -L$(CFERuntimeLibDir) \ + -internalize-public-api-file=$(EXPORTED_SYMBOL_FILE) $(LibName.BCA): $(ObjectsBC) $(LibDir)/.dir $(GCCLD) \ $(LLVMToolDir)/llvm-ar @@ -929,7 +954,7 @@ endif $(ToolBuildPath): $(ObjectsO) $(ProjLibsPaths) $(LLVMLibsPaths) $(Echo) Linking $(BuildMode) executable $(TOOLNAME) $(StripWarnMsg) $(Verb) $(Link) -o $@ $(TOOLLINKOPTS) $(ObjectsO) $(ProjLibsOptions) \ - $(LLVMLibsOptions) $(ExtraLibs) $(TOOLLINKOPTSB) $(LIBS) + $(LLVMLibsOptions) $(ExtraLibs) $(TOOLLINKOPTSB) $(LIBS) $(Echo) ======= Finished Linking $(BuildMode) Executable $(TOOLNAME) \ $(StripWarnMsg) @@ -951,6 +976,11 @@ endif # Object Build Rules: Build object files based on sources ############################################################################### +# FIXME: This should be checking for "if not GCC or ICC", not for "if HP-UX" +ifeq ($(OS),HP-UX) + DISABLE_AUTO_DEPENDENCIES=1 +endif + # Provide rule sets for when dependency generation is enabled ifndef DISABLE_AUTO_DEPENDENCIES @@ -961,13 +991,13 @@ ifdef SHARED_LIBRARY $(ObjDir)/%.lo $(ObjDir)/%.o: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES) $(Echo) "Compiling $*.cpp for $(BuildMode) build (PIC)" - $(Verb) if $(LTCompile.CXX) -MD -MT $@ -MP -MF $(ObjDir)/$*.LACXXd $< -o $@ ; \ + $(Verb) if $(LTCompile.CXX) -MD -MT $@ -MP -MF $(ObjDir)/$*.LACXXd $< -o $@ ;\ then $(MV) -f "$(ObjDir)/$*.LACXXd" "$(ObjDir)/$*.d"; \ else $(RM) -f "$(ObjDir)/$*.LACXXd"; exit 1; fi $(ObjDir)/%.lo $(ObjDir)/%.o: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) $(Echo) "Compiling $*.cc for $(BuildMode) build (PIC)" - $(Verb) if $(LTCompile.CXX) -MD -MT $@ -MP -MF $(ObjDir)/$*.LACXXd $< -o $@ ; \ + $(Verb) if $(LTCompile.CXX) -MD -MT $@ -MP -MF $(ObjDir)/$*.LACXXd $< -o $@ ;\ then $(MV) -f "$(ObjDir)/$*.LACXXd" "$(ObjDir)/$*.d"; \ else $(RM) -f "$(ObjDir)/$*.LACXXd"; exit 1; fi @@ -1091,11 +1121,11 @@ endif ifdef DEBUG_RUNTIME $(ObjectsBC): $(ObjDir)/%.bc: $(ObjDir)/%.ll $(GCCAS) $(Echo) "Compiling $*.ll to $*.bc for $(BuildMode) build (bytecode)" - @$(GCCAS) $< -o $@ + $(Verb) $(GCCAS) $< -o $@ else $(ObjectsBC): $(ObjDir)/%.bc: $(ObjDir)/%.ll $(GCCAS) $(Echo) "Compiling $*.ll to $*.bc for $(BuildMode) build (bytecode)" - @$(GCCAS) -strip-debug $< -o $@ + $(Verb) $(GCCAS) -strip-debug $< -o $@ endif @@ -1115,7 +1145,8 @@ ifdef TARGET TDFiles := $(strip $(wildcard $(PROJ_SRC_DIR)/*.td) \ $(LLVM_SRC_ROOT)/lib/Target/Target.td \ - $(LLVM_SRC_ROOT)/lib/Target/TargetSelectionDAG.td) + $(LLVM_SRC_ROOT)/lib/Target/TargetSelectionDAG.td \ + $(LLVM_SRC_ROOT)/include/llvm/CodeGen/ValueTypes.td) INCFiles := $(filter %.inc,$(BUILT_SOURCES)) INCTMPFiles := $(INCFiles:%=$(ObjDir)/%.tmp) .PRECIOUS: $(INCTMPFiles) $(INCFiles) @@ -1204,6 +1235,8 @@ ifneq ($(LexFiles),) %.c: %.l %.cpp: %.l +all:: $(LexFiles:%.l=$(PROJ_SRC_DIR)/%.cpp.cvs) + # Note the extra sed filtering here, used 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 @@ -1217,10 +1250,18 @@ $(PROJ_SRC_DIR)/%.cpp: $(PROJ_SRC_DIR)/%.l $(SED) 's/void \*yy_flex_realloc/inline void *yy_flex_realloc/' | \ $(SED) 's/#define YY_BUF_SIZE 16384/#define YY_BUF_SIZE (16384*64)/' \ > $(PROJ_SRC_DIR)/$*.cpp - $(Echo) "*** DON'T FORGET TO CHECK IN $*.cpp (generated file)" - -LexObjs := $(patsubst %.l,$(ObjDir)/%.o,$(LexFiles)) -$(LexObjs): $(ObjDir)/%.o : $(PROJ_SRC_DIR)/%.cpp + +# IFF the .l file has changed since it was last checked into CVS, copy the .l +# file to .l.cvs and the generated .cpp file to .cpp.cvs. We use this mechanism +# so that people without flex can build LLVM by copying the .cvs files to the +# source location and building them. +$(LexFiles:%.l=$(PROJ_SRC_DIR)/%.cpp.cvs): \ +$(PROJ_SRC_DIR)/%.cpp.cvs: $(PROJ_SRC_DIR)/%.cpp + $(Verb) $(CMP) -s $(PROJ_SRC_DIR)/$*.l $(PROJ_SRC_DIR)/$*.l.cvs || \ + ($(CP) $< $@; $(CP) $(PROJ_SRC_DIR)/$*.l $(PROJ_SRC_DIR)/$*.l.cvs) + +$(LexFiles:%.l=$(ObjDir)/%.o) : \ +$(ObjDir)/%.o : $(PROJ_SRC_DIR)/%.cpp clean-local:: -$(Verb) $(RM) -f $(LexOutput) @@ -1237,6 +1278,8 @@ ifneq ($(YaccFiles),) .PRECIOUS: $(YaccOutput) +all:: $(YaccFiles:%.y=$(PROJ_SRC_DIR)/%.cpp.cvs) + # Cancel built-in rules for yacc %.c: %.y %.cpp: %.y @@ -1248,12 +1291,22 @@ $(PROJ_SRC_DIR)/%.cpp $(PROJ_SRC_DIR)/%.h : $(PROJ_SRC_DIR)/%.y $(Verb) $(BISON) -v -d -p $(