X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=Makefile.rules;h=23ffe3ea9609f9fdb9112bf20b9576290eb08a77;hb=3b00162fa1574e4aab6df15ef757bb36b8d4b958;hp=1dc329d046fa6c100907f5822fadb4a454d3c930;hpb=1dace48f538d44156cdb71834e718b9ad93d2711;p=oota-llvm.git diff --git a/Makefile.rules b/Makefile.rules index 1dc329d046f..23ffe3ea960 100644 --- a/Makefile.rules +++ b/Makefile.rules @@ -229,43 +229,46 @@ endif CPP.Defines := # 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 +ifndef OPTIMIZE_OPTION + ifneq ($(OS),MingW) + OPTIMIZE_OPTION := -O3 + else + OPTIMIZE_OPTION := -O2 + endif endif -ifdef ENABLE_PROFILING - BuildMode := Profile - CXX.Flags += $(OPTIMIZE_OPTION) -pg -g - C.Flags += $(OPTIMIZE_OPTION) -pg -g - LD.Flags += $(OPTIMIZE_OPTION) -pg -g - KEEP_SYMBOLS := 1 -else - ifeq ($(ENABLE_OPTIMIZED),1) - BuildMode := Release - # Don't use -fomit-frame-pointer on Darwin or FreeBSD. - ifneq ($(OS),FreeBSD) - ifneq ($(OS),Darwin) - OmitFramePointer := -fomit-frame-pointer - endif - endif +ifeq ($(ENABLE_OPTIMIZED),1) + BuildMode := Release + # Don't use -fomit-frame-pointer on Darwin or FreeBSD. + ifneq ($(OS),FreeBSD) + ifneq ($(OS),Darwin) + OmitFramePointer := -fomit-frame-pointer + endif + endif - # Darwin requires -fstrict-aliasing to be explicitly enabled. - ifeq ($(OS),Darwin) - EXTRA_OPTIONS += -fstrict-aliasing -Wstrict-aliasing - endif + # Darwin requires -fstrict-aliasing to be explicitly enabled. + # Avoid -fstrict-aliasing on Darwin for now, there are unresolved issues + # with -fstrict-aliasing and ipa-type-escape radr://6756684 + #ifeq ($(OS),Darwin) + # EXTRA_OPTIONS += -fstrict-aliasing -Wstrict-aliasing + #endif + CXX.Flags += $(OPTIMIZE_OPTION) $(OmitFramePointer) + C.Flags += $(OPTIMIZE_OPTION) $(OmitFramePointer) + LD.Flags += $(OPTIMIZE_OPTION) +else + BuildMode := Debug + CXX.Flags += -g + C.Flags += -g + LD.Flags += -g + KEEP_SYMBOLS := 1 +endif - CXX.Flags += $(OPTIMIZE_OPTION) $(OmitFramePointer) - C.Flags += $(OPTIMIZE_OPTION) $(OmitFramePointer) - LD.Flags += $(OPTIMIZE_OPTION) - else - BuildMode := Debug - CXX.Flags += -g - C.Flags += -g - LD.Flags += -g - KEEP_SYMBOLS := 1 - endif +ifeq ($(ENABLE_PROFILING),1) + BuildMode := $(BuildMode)+Profile + CXX.Flags := $(filter-out -fomit-frame-pointer,$(CXX.Flags)) -pg -g + C.Flags := $(filter-out -fomit-frame-pointer,$(C.Flags)) -pg -g + LD.Flags := $(filter-out -fomit-frame-pointer,$(LD.Flags)) -pg -g + KEEP_SYMBOLS := 1 endif #ifeq ($(ENABLE_VISIBILITY_INLINES_HIDDEN),1) @@ -282,9 +285,18 @@ ifndef REQUIRES_RTTI # CXX.Flags += -fno-rtti endif +ifdef ENABLE_COVERAGE + BuildMode := $(BuildMode)+Coverage + # These only go to .NoRelink because otherwise we will end up + # linking -lgcov into the .o libraries that get built. + CXX.Flags.NoRelink += -ftest-coverage -fprofile-arcs + C.Flags.NoRelink += -ftest-coverage -fprofile-arcs +endif + # If DISABLE_ASSERTIONS=1 is specified (make command line or configured), # then disable assertions by defining the appropriate preprocessor symbols. ifdef DISABLE_ASSERTIONS + # Indicate that assertions are turned off using a minus sign BuildMode := $(BuildMode)-Asserts CPP.Defines += -DNDEBUG else @@ -326,6 +338,11 @@ ifeq ($(ENABLE_PIC),1) C.Flags += -fPIC endif endif +else + ifeq ($(OS),Darwin) + CXX.Flags += -mdynamic-no-pic + C.Flags += -mdynamic-no-pic + endif endif CXX.Flags += $(CXXFLAGS) -Woverloaded-virtual @@ -349,6 +366,21 @@ ifeq ($(ARCH),Alpha) LD.Flags += -Wl,--no-relax endif +ifeq ($(OS),MingW) + ifeq ($(LLVM_CROSS_COMPILING),1) + # Work around http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=525016 + ifdef TOOLNAME + LD.Flags += -Wl,--allow-multiple-definition + endif + endif +endif + +ifdef ENABLE_EXPENSIVE_CHECKS + # GNU libstdc++ uses RTTI if you define _GLIBCXX_DEBUG, which we did above. + # See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40160 + CXX.Flags := $(filter-out -fno-rtti,$(CXX.Flags)) +endif + #-------------------------------------------------------------------- # Directory locations #-------------------------------------------------------------------- @@ -405,13 +437,9 @@ ifndef LUPGRADE LUPGRADE := $(LLVMToolDir)/llvm-upgrade$(EXEEXT) endif ifeq ($(LLVMGCC_MAJVERS),3) -UPGRADE_MSG = $(Echo) "Upgrading $(1) assembly to latest." -UPGRADE_LL = $(Verb)$(LUPGRADE) $(1) -o $(1).up.tmp -f ; $(MV) $(1).up.tmp $(1) LLVMGCCWITHPATH := PATH="$(LLVMToolDir):$(PATH)" $(LLVMGCC) LLVMGXXWITHPATH := PATH="$(LLVMToolDir):$(PATH)" $(LLVMGXX) else -UPGRADE_MSG = -UPGRADE_LL = LLVMGCCWITHPATH := $(LLVMGCC) LLVMGXXWITHPATH := $(LLVMGXX) endif @@ -420,6 +448,26 @@ endif # Adjust to user's request #-------------------------------------------------------------------- +ifeq ($(OS),Darwin) + DARWIN_VERSION := `sw_vers -productVersion` + # Strip a number like 10.4.7 to 10.4 + DARWIN_VERSION := $(shell echo $(DARWIN_VERSION)| sed -E 's/(10.[0-9]).*/\1/') + # Get "4" out of 10.4 for later pieces in the makefile. + DARWIN_MAJVERS := $(shell echo $(DARWIN_VERSION)| sed -E 's/10.([0-9]).*/\1/') + + SharedLinkOptions=-Wl,-flat_namespace -Wl,-undefined -Wl,suppress \ + -dynamiclib -mmacosx-version-min=$(DARWIN_VERSION) + TargetCommonOpts += -mmacosx-version-min=$(DARWIN_VERSION) +else + ifeq ($(OS),Cygwin) + SharedLinkOptions=-shared -nostdlib -Wl,--export-all-symbols \ + -Wl,--enable-auto-import -Wl,--enable-auto-image-base \ + -Wl,--enable-runtime-pseudo-relocs + else + SharedLinkOptions=-shared + endif +endif + # Adjust LD.Flags depending on the kind of library that is to be built. Note # that if LOADABLE_MODULE is specified then the resulting shared library can # be opened with dlopen. @@ -428,8 +476,10 @@ ifdef LOADABLE_MODULE endif ifdef SHARED_LIBRARY +ifneq ($(DARWIN_MAJVERS),4) LD.Flags += $(RPATH) -Wl,$(LibDir) endif +endif ifdef TOOL_VERBOSE C.Flags += -v @@ -456,35 +506,25 @@ endif # Adjust linker flags for building an executable ifneq ($(OS),Darwin) +ifneq ($(DARWIN_MAJVERS),4) ifdef TOOLNAME ifdef EXAMPLE_TOOL - LD.Flags += $(RPATH) -Wl,$(ExmplDir) -export-dynamic + LD.Flags += $(RPATH) -Wl,$(ExmplDir) $(RDYNAMIC) else - LD.Flags += $(RPATH) -Wl,$(ToolDir) -export-dynamic + LD.Flags += $(RPATH) -Wl,$(ToolDir) $(RDYNAMIC) endif endif endif - -ifeq ($(OS),Darwin) - DARWIN_VERSION := `sw_vers -productVersion` - SharedLinkOptions=-Wl,-flat_namespace -Wl,-undefined -Wl,suppress -bundle \ - -mmacosx-version-min=$(DARWIN_VERSION) - CompileCommonOpts += -mmacosx-version-min=$(DARWIN_VERSION) -else - ifeq ($(OS),Cygwin) - SharedLinkOptions=-shared -nostdlib -Wl,--export-all-symbols \ - -Wl,--enable-auto-import -Wl,--enable-auto-image-base \ - -Wl,--enable-runtime-pseudo-relocs - else - SharedLinkOptions=-shared - endif endif #---------------------------------------------------------- # Options To Invoke Tools #---------------------------------------------------------- -CompileCommonOpts += -pedantic -Wall -W -Wwrite-strings -Wno-long-long \ +ifndef NO_PEDANTIC +CompileCommonOpts += -pedantic +endif +CompileCommonOpts += -Wall -W -Wwrite-strings -Wno-long-long \ -Wunused -Wno-unused-parameter $(EXTRA_OPTIONS) ifeq ($(OS),HP-UX) @@ -516,6 +556,16 @@ ifdef UNIVERSAL # Building universal cannot compute dependencies automatically. DISABLE_AUTO_DEPENDENCIES=1 +else + ifeq ($(OS),Darwin) + ifeq ($(ARCH),x86_64) + TargetCommonOpts = -m64 + else + ifeq ($(ARCH),x86) + TargetCommonOpts = -m32 + endif + endif + endif endif ifeq ($(OS),SunOS) @@ -531,29 +581,37 @@ CPP.Flags += $(sort -I$(PROJ_OBJ_DIR) -I$(PROJ_SRC_DIR) \ $(LLVM_OBJ_ROOT) $(LLVM_SRC_ROOT))) \ $(CPP.BaseFlags) - ifeq ($(BUILD_COMPONENT), 1) - Compile.C = $(BUILD_CC) $(CPP.Flags) $(C.Flags) $(CompileCommonOpts) -c - Compile.CXX = $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) -c - Preprocess.CXX= $(BUILD_CXX) $(CPP.Flags) $(CompileCommonOpts) $(CXX.Flags) -E - Link = $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) \ - $(LD.Flags) $(Strip) - Relink = $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) \ - $(Relink.Flags) +ifeq ($(BUILD_COMPONENT), 1) + Compile.C = $(BUILD_CC) $(CPP.Flags) $(C.Flags) $(C.Flags.NoRelink) \ + $(TargetCommonOpts) $(CompileCommonOpts) -c + Compile.CXX = $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(CXX.Flags.NoRelink) \ + $(TargetCommonOpts) $(CompileCommonOpts) -c + Preprocess.CXX= $(BUILD_CXX) $(CPP.Flags) $(TargetCommonOpts) \ + $(CompileCommonOpts) $(CXX.Flags) $(CXX.Flags.NoRelink) -E + Link = $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(CXX.Flags.NoRelink) \ + $(TargetCommonOpts) $(CompileCommonOpts) $(LD.Flags) $(Strip) + Relink = $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(TargetCommonOpts) \ + $(CompileCommonOpts) $(Relink.Flags) else - Compile.C = $(CC) $(CPP.Flags) $(C.Flags) $(CompileCommonOpts) -c - Compile.CXX = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) -c - Preprocess.CXX= $(CXX) $(CPP.Flags) $(CompileCommonOpts) $(CXX.Flags) -E - Link = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) \ - $(LD.Flags) $(Strip) - Relink = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) \ - $(Relink.Flags) -endif - -BCCompile.C = $(LLVMGCCWITHPATH) $(CPP.Flags) $(C.Flags) $(CompileCommonOpts) -Preprocess.C = $(CC) $(CPP.Flags) $(C.Flags) $(CompileCommonOpts) -E + Compile.C = $(CC) $(CPP.Flags) $(C.Flags) $(C.Flags.NoRelink) \ + $(TargetCommonOpts) $(CompileCommonOpts) -c + Compile.CXX = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CXX.Flags.NoRelink) \ + $(TargetCommonOpts) $(CompileCommonOpts) -c + Preprocess.CXX= $(CXX) $(CPP.Flags) $(TargetCommonOpts) \ + $(CompileCommonOpts) $(CXX.Flags) $(CXX.Flags.NoRelink) -E + Link = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CXX.Flags.NoRelink) \ + $(TargetCommonOpts) $(CompileCommonOpts) $(LD.Flags) $(Strip) + Relink = $(CXX) $(CPP.Flags) $(CXX.Flags) $(TargetCommonOpts) \ + $(CompileCommonOpts) $(Relink.Flags) +endif + +BCCompile.C = $(LLVMGCCWITHPATH) $(CPP.Flags) $(C.Flags) \ + $(TargetCommonOpts) $(CompileCommonOpts) +Preprocess.C = $(CC) $(CPP.Flags) $(C.Flags) \ + $(TargetCommonOpts) $(CompileCommonOpts) -E BCCompile.CXX = $(LLVMGXXWITHPATH) $(CPP.Flags) $(CXX.Flags) \ - $(CompileCommonOpts) + $(TargetCommonOpts) $(CompileCommonOpts) ProgInstall = $(INSTALL) $(Install.StripFlag) -m 0755 ScriptInstall = $(INSTALL) -m 0755 @@ -784,8 +842,8 @@ $(LLVM_CONFIG): $(ToolDir)/$(strip $(TOOLNAME))$(EXEEXT): $(LLVM_CONFIG) -ProjLibsOptions += $(shell $(LLVM_CONFIG) --libs $(LINK_COMPONENTS)) -ProjLibsPaths += $(LLVM_CONFIG) \ +LLVMLibsOptions += $(shell $(LLVM_CONFIG) --libs $(LINK_COMPONENTS)) +LLVMLibsPaths += $(LLVM_CONFIG) \ $(shell $(LLVM_CONFIG) --libfiles $(LINK_COMPONENTS)) endif endif @@ -966,7 +1024,7 @@ else BytecodeDestDir := $(PROJ_libdir) endif -DestBytecodeLib = $(BytecodeDestDir)/lib$(LIBRARYNAME).a +DestBytecodeLib = $(BytecodeDestDir)/lib$(LIBRARYNAME).bca install-bytecode-local:: $(DestBytecodeLib) @@ -1103,8 +1161,12 @@ endif # startup time by 4x on darwin in some cases. ifdef TOOL_NO_EXPORTS ifeq ($(OS),Darwin) + +# Tiger tools don't support this. +ifneq ($(DARWIN_MAJVERS),4) LD.Flags += -Wl,-exported_symbol -Wl,_main endif +endif ifeq ($(OS), $(filter $(OS), Linux NetBSD FreeBSD)) LD.Flags += -Wl,--version-script=$(LLVM_SRC_ROOT)/autoconf/ExportMap.map @@ -1174,8 +1236,8 @@ ifndef DISABLE_AUTO_DEPENDENCIES DEPEND_OPTIONS = -MMD -MP -MF "$(ObjDir)/$*.d.tmp" \ -MT "$(ObjDir)/$*.o" -MT "$(ObjDir)/$*.d" -# If the build succeeded, move the dependency file over. If it failed, put an -# empty file there. +# If the build succeeded, move the dependency file over, otherwise +# remove it. DEPEND_MOVEFILE = then $(MV) -f "$(ObjDir)/$*.d.tmp" "$(ObjDir)/$*.d"; \ else $(RM) "$(ObjDir)/$*.d.tmp"; exit 1; fi @@ -1198,32 +1260,31 @@ $(ObjDir)/%.o: %.c $(ObjDir)/.dir $(BUILT_SOURCES) # Create .bc files in the ObjDir directory from .cpp .cc and .c files... #--------------------------------------------------------- +BC_DEPEND_OPTIONS = -MMD -MP -MF "$(ObjDir)/$*.bc.d.tmp" \ + -MT "$(ObjDir)/$*.ll" -MT "$(ObjDir)/$*.bc.d" + +# If the build succeeded, move the dependency file over, otherwise +# remove it. +BC_DEPEND_MOVEFILE = then $(MV) -f "$(ObjDir)/$*.bc.d.tmp" "$(ObjDir)/$*.bc.d"; \ + else $(RM) "$(ObjDir)/$*.bc.d.tmp"; exit 1; fi + $(ObjDir)/%.ll: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMGXX) $(Echo) "Compiling $*.cpp for $(BuildMode) build (bytecode)" - $(Verb) if $(BCCompile.CXX) -MD -MT $@ -MP -MF "$(ObjDir)/$*.BCCXXd" \ - $< -o $@ -S -emit-llvm ; \ - then $(MV) -f "$(ObjDir)/$*.BCCXXd" "$(ObjDir)/$*.d"; \ - else $(RM) -f "$(ObjDir)/$*.BCCXXd"; exit 1; fi - $(call UPGRADE_MSG,$@) - $(call UPGRADE_LL,$@) + $(Verb) if $(BCCompile.CXX) $(BC_DEPEND_OPTIONS) \ + $< -o $(ObjDir)/$*.ll -S -emit-llvm ; \ + $(BC_DEPEND_MOVEFILE) $(ObjDir)/%.ll: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMGXX) $(Echo) "Compiling $*.cc for $(BuildMode) build (bytecode)" - $(Verb) if $(BCCompile.CXX) -MD -MT $@ -MP -MF "$(ObjDir)/$*.BCCXXd" \ - $< -o $@ -S -emit-llvm ; \ - then $(MV) -f "$(ObjDir)/$*.BCCXXd" "$(ObjDir)/$*.d"; \ - else $(RM) -f "$(ObjDir)/$*.BCCXXd"; exit 1; fi - $(call UPGRADE_MSG,$@) - $(call UPGRADE_LL,$@) + $(Verb) if $(BCCompile.CXX) $(BC_DEPEND_OPTIONS) \ + $< -o $(ObjDir)/$*.ll -S -emit-llvm ; \ + $(BC_DEPEND_MOVEFILE) $(ObjDir)/%.ll: %.c $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMGCC) $(Echo) "Compiling $*.c for $(BuildMode) build (bytecode)" - $(Verb) if $(BCCompile.C) -MD -MT $@ -MP -MF "$(ObjDir)/$*.BCCd" \ - $< -o $@ -S -emit-llvm ; \ - then $(MV) -f "$(ObjDir)/$*.BCCd" "$(ObjDir)/$*.d"; \ - else $(RM) -f "$(ObjDir)/$*.BCCd"; exit 1; fi - $(call UPGRADE_MSG,$@) - $(call UPGRADE_LL,$@) + $(Verb) if $(BCCompile.C) $(BC_DEPEND_OPTIONS) \ + $< -o $(ObjDir)/$*.ll -S -emit-llvm ; \ + $(BC_DEPEND_MOVEFILE) # Provide alternate rule sets if dependencies are disabled else @@ -1243,20 +1304,14 @@ $(ObjDir)/%.o: %.c $(ObjDir)/.dir $(BUILT_SOURCES) $(ObjDir)/%.ll: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMGXX) $(Echo) "Compiling $*.cpp for $(BuildMode) build (bytecode)" $(BCCompile.CXX) $< -o $@ -S -emit-llvm - $(call UPGRADE_MSG,$@) - $(call UPGRADE_LL,$@) $(ObjDir)/%.ll: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMGXX) $(Echo) "Compiling $*.cc for $(BuildMode) build (bytecode)" $(BCCompile.CXX) $< -o $@ -S -emit-llvm - $(call UPGRADE_MSG,$@) - $(call UPGRADE_LL,$@) $(ObjDir)/%.ll: %.c $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMGCC) $(Echo) "Compiling $*.c for $(BuildMode) build (bytecode)" $(BCCompile.C) $< -o $@ -S -emit-llvm - $(call UPGRADE_MSG,@) - $(call UPGRADE_LL,@) endif @@ -1327,9 +1382,6 @@ INCFiles := $(filter %.inc,$(BUILT_SOURCES)) INCTMPFiles := $(INCFiles:%=$(ObjDir)/%.tmp) .PRECIOUS: $(INCTMPFiles) $(INCFiles) -# All of these files depend on tblgen and the .td files. -$(INCTMPFiles) : $(TBLGEN) $(TDFiles) - # INCFiles rule: All of the tblgen generated files are emitted to # $(ObjDir)/%.inc.tmp, instead of emitting them directly to %.inc. This allows # us to only "touch" the real file if the contents of it change. IOW, if @@ -1351,6 +1403,9 @@ TDFiles := $(strip $(wildcard $(PROJ_SRC_DIR)/*.td) \ $(LLVM_SRC_ROOT)/include/llvm/CodeGen/ValueTypes.td) \ $(wildcard $(LLVM_SRC_ROOT)/include/llvm/Intrinsics*.td) +# All of these files depend on tblgen and the .td files. +$(INCTMPFiles) : $(TBLGEN) $(TDFiles) + $(TARGET:%=$(ObjDir)/%GenRegisterNames.inc.tmp): \ $(ObjDir)/%GenRegisterNames.inc.tmp : %.td $(ObjDir)/.dir $(Echo) "Building $(