X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=Makefile.rules;h=df8f63f6f1aa7ea4913e3b4ebdd4986fa298cbb9;hb=ca0dc56742986df05f9a7e0b425e2e798eaa2f92;hp=be173700ec089b950b2cad7defbe0da941802c92;hpb=197ab8787f2630051e66a46c636b6015bec2de0e;p=oota-llvm.git diff --git a/Makefile.rules b/Makefile.rules index be173700ec0..df8f63f6f1a 100644 --- a/Makefile.rules +++ b/Makefile.rules @@ -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 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 +# 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.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) @@ -1096,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 @@ -1120,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) @@ -1231,7 +1257,7 @@ $(PROJ_SRC_DIR)/%.cpp: $(PROJ_SRC_DIR)/%.l # source location and building them. $(LexFiles:%.l=$(PROJ_SRC_DIR)/%.cpp.cvs): \ $(PROJ_SRC_DIR)/%.cpp.cvs: $(PROJ_SRC_DIR)/%.cpp - $(Verb) $(CMP) -s $@ $< || \ + $(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) : \ @@ -1252,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 @@ -1263,12 +1291,22 @@ $(PROJ_SRC_DIR)/%.cpp $(PROJ_SRC_DIR)/%.h : $(PROJ_SRC_DIR)/%.y $(Verb) $(BISON) -v -d -p $(