X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=Makefile.rules;h=42c367a9499361bb0413c491d6389f697772f500;hp=203bccf763ad3bc0463bf80f7327ef0e0a6d0eeb;hb=422fa625d9bdc37ebba9fc8ce16f141ffa80fc58;hpb=ab519972fad1683c782b35d720480366ed4caf8d diff --git a/Makefile.rules b/Makefile.rules index 203bccf763a..42c367a9499 100644 --- a/Makefile.rules +++ b/Makefile.rules @@ -198,26 +198,47 @@ 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 + +# IF REQUIRES_EH=1 is specified then don't disable exceptions +#ifndef REQUIRES_EH +# CXX.Flags += -fno-exceptions +#endif + ifdef ENABLE_PROFILING BuildMode := Profile - CXX.Flags := -O3 -felide-constructors -finline-functions -pg - C.Flags := -O3 -pg - LD.Flags := -O3 -pg + CXX.Flags := $(OPTIMIZE_OPTION) -pg -g + C.Flags := $(OPTIMIZE_OPTION) -pg -g + LD.Flags := $(OPTIMIZE_OPTION) -pg -g else ifdef ENABLE_OPTIMIZED BuildMode := Release - # Don't use -fomit-frame-pointer on FreeBSD + # Don't use -fomit-frame-pointer on Darwin or FreeBSD. ifneq ($(OS),FreeBSD) + ifneq ($(OS),Darwin) OmitFramePointer := -fomit-frame-pointer endif - CXX.Flags := -O3 -finline-functions -felide-constructors $(OmitFramePointer) - C.Flags := -O3 $(OmitFramePointer) - LD.Flags := -O3 + endif + + # Darwin requires -fstrict-aliasing to be explicitly enabled. + ifeq ($(OS),Darwin) + EXTRA_OPTIONS += -fstrict-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 + LD.Flags := -g KEEP_SYMBOLS := 1 endif endif @@ -240,10 +261,10 @@ LD.Flags += $(LDFLAGS) AR.Flags := cru LibTool.Flags := --tag=CXX -#Make Floating point ieee complient on alpha +# Make Floating point IEEE compliant on Alpha. ifeq ($(ARCH),Alpha) - CXX.Flags += -mieee - CPP.BaseFlags += -mieee + CXX.Flags += -mieee -fPIC + CPP.BaseFlags += -mieee -fPIC endif #-------------------------------------------------------------------- @@ -270,7 +291,11 @@ ifndef LLVMAS LLVMAS := $(LLVMToolDir)/llvm-as$(EXEEXT) endif ifndef TBLGEN -TBLGEN := $(LLVMToolDir)/tblgen$(EXEEXT) + ifeq ($(LLVM_CROSS_COMPILING),1) + TBLGEN := $(LLVMToolDir)/tblgen$(BUILD_EXEEXT) + else + TBLGEN := $(LLVMToolDir)/tblgen$(EXEEXT) + endif endif ifndef GCCAS GCCAS := $(LLVMToolDir)/gccas$(EXEEXT) @@ -303,12 +328,17 @@ LLVMGXXWITHPATH := PATH="$(LLVMToolDir):$(PATH)" $(LLVMGXX) # Adjust LD.Flags and Libtool.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 +# shared library can be opened with dlopen. Also, LOADABLE_MODULE implies +# several other things so we force them to be defined/on. +ifdef LOADABLE_MODULE + SHARED_LIBRARY := 1 + DONT_BUILD_RELINKED := 1 + LINK_LIBS_IN_SHARED := 1 + LD.Flags += -module +endif + ifdef SHARED_LIBRARY LD.Flags += -rpath $(LibDir) - ifdef LOADABLE_MODULE - LD.Flags += -module - endif else LibTool.Flags += --tag=disable-shared endif @@ -350,28 +380,38 @@ endif # Options To Invoke Tools #---------------------------------------------------------- -CompileCommonOpts := -Wall -W -Wwrite-strings -Wno-unused +CompileCommonOpts := -Wall -W -Wwrite-strings -Wno-unused -Wno-long-long \ + -pedantic $(EXTRA_OPTIONS) ifeq ($(OS),HP-UX) 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. +# 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 following can be optionally specified: +# UNIVERSAL_SDK_PATH variable can 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/ +# UNIVERSAL_ARCH can be optionally specified to be a list of architectures +# to build for, e.g. UNIVERSAL_ARCH="i386 ppc ppc64". This defaults to +# i386/ppc only. ifdef UNIVERSAL - CompileCommonOpts += \ - -arch i386 -arch ppc -isysroot /Developer/SDKs/MACOSX10.4u.sdk/ - Relink.Flags := -XCClinker -arch -XCClinker i386 -XCClinker -arch \ - -XCClinker ppc -XCClinker \ - -isysroot -XCClinker /Developer/SDKs/MACOSX10.4u.sdk/ - DISABLE_AUTO_DEPENDENCIES=1 -endif + ifndef UNIVERSAL_ARCH + UNIVERSAL_ARCH := i386 ppc + endif + UNIVERSAL_ARCH_OPTIONS := $(UNIVERSAL_ARCH:%=-arch %) + CompileCommonOpts += $(UNIVERSAL_ARCH_OPTIONS) + Relink.Flags := $(UNIVERSAL_ARCH_OPTIONS:%=-XCClinker %) + ifdef UNIVERSAL_SDK_PATH + CompileCommonOpts += -isysroot $(UNIVERSAL_SDK_PATH) + Relink.Flags += -XCClinker -isysroot -XCClinker $(UNIVERSAL_SDK_PATH) + endif -# Temporary workaround for a Mac OSX / x86 compatibility issue. -ifeq ($(OS),Darwin) -ifeq ($(ARCH),x86) - CXX.Flags += -fno-use-cxa-atexit -endif + # Building universal cannot compute dependencies automatically. + DISABLE_AUTO_DEPENDENCIES=1 endif LD.Flags += -L$(LibDir) -L$(LLVMLibDir) @@ -395,16 +435,19 @@ LTCompile.CXX = $(LIBTOOL) $(LibTool.Flags) --mode=compile $(Compile.CXX) 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) -Relink = $(LIBTOOL) $(LibTool.Flags) --mode=link $(CXX) $(CPP.Flags) \ - $(CompileCommonOpts) $(Relink.Flags) +Link = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) \ + $(LD.Flags) $(Strip) +LTLink = $(LIBTOOL) $(LibTool.Flags) --mode=link $(Link) +Relink = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) \ + $(Relink.Flags) +LTRelink = $(LIBTOOL) $(LibTool.Flags) --mode=link $(Relink) LTInstall = $(LIBTOOL) $(LibTool.Flags) --mode=install $(INSTALL) \ $(Install.Flags) ProgInstall = $(INSTALL) $(Install.StripFlag) -m 0755 ScriptInstall = $(INSTALL) -m 0755 DataInstall = $(INSTALL) -m 0644 -TableGen = $(TBLGEN) -I $(PROJ_SRC_DIR) -I$(PROJ_SRC_ROOT)/include +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 @@ -465,18 +508,25 @@ $(PROJ_etcdir): $(PROJ_etcdir)/.dir SubDirs := ifdef DIRS SubDirs += $(DIRS) + +ifneq ($(PROJ_SRC_ROOT),$(PROJ_OBJ_ROOT)) $(RecursiveTargets):: $(Verb) for dir in $(DIRS); do \ if [ ! -f $$dir/Makefile ]; then \ $(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 +else +$(RecursiveTargets):: + $(Verb) for dir in $(DIRS); do \ + ($(MAKE) -C $$dir $@ ) || exit 1; \ done endif +endif + #--------------------------------------------------------- # Handle the EXPERIMENTAL_DIRS options ensuring success # after each directory is built. @@ -488,9 +538,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 @@ -516,9 +564,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 #--------------------------------------------------------- @@ -529,6 +575,7 @@ ifdef OPTIONAL_DIRS SubDirs += $(OPTIONAL_DIRS) +ifneq ($(PROJ_SRC_ROOT),$(PROJ_OBJ_ROOT)) $(RecursiveTargets):: $(Verb) for dir in $(OPTIONAL_DIRS); do \ if [ -d $(PROJ_SRC_DIR)/$$dir ]; then\ @@ -536,11 +583,15 @@ $(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 +else +$(RecursiveTargets):: + $(Verb) for dir in $(OPTIONAL_DIRS); do \ + ($(MAKE) -C$$dir $@ ) || exit 1; \ + done +endif endif #--------------------------------------------------------- @@ -590,7 +641,8 @@ ifeq ($(LLVMLIBS),JIT) Link += -dlopen self # Generic JIT libraries -JIT_LIBS := LLVMInterpreter LLVMJIT LLVMCodeGen LLVMExecutionEngine +JIT_LIBS := LLVMInterpreter LLVMJIT LLVMSelectionDAG.a LLVMCodeGen.a \ + LLVMExecutionEngine # You can enable the X86 JIT on a non-X86 host by setting the flag # ENABLE_X86_JIT on the make command line. If not, it will still be @@ -601,7 +653,7 @@ endif # What the X86 JIT requires ifdef ENABLE_X86_JIT - JIT_LIBS += LLVMX86 LLVMSelectionDAG + JIT_LIBS += LLVMX86 endif # You can enable the PowerPC JIT on a non-PowerPC host by setting the flag @@ -613,7 +665,7 @@ endif # What the PowerPC JIT requires ifdef ENABLE_PPC_JIT - JIT_LIBS += LLVMPowerPC LLVMSelectionDAG + JIT_LIBS += LLVMPowerPC endif # You can enable the Alpha JIT on a non-Alpha host by setting the flag @@ -625,11 +677,11 @@ endif # What the Alpha JIT requires ifdef ENABLE_ALPHA_JIT - JIT_LIBS += LLVMAlpha LLVMSelectionDAG + JIT_LIBS += LLVMAlpha endif LLVMLIBS := $(JIT_LIBS) LLVMScalarOpts.a LLVMTransformUtils.a LLVMAnalysis.a \ - LLVMBCReader LLVMTarget.a LLVMCore LLVMSupport.a LLVMbzip2 \ + LLVMBCReader.a LLVMTarget.a LLVMCore.a LLVMSupport.a LLVMbzip2.a \ LLVMSystem.a $(PLATFORMLIBDL) endif @@ -639,14 +691,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)) -CORE_IS_ARCHIVE := 1 -else -CORE_IS_ARCHIVE := 0 -endif ProjLibsOptions := $(patsubst %.a.o, -l%, $(addsuffix .o, $(USEDLIBS))) ProjLibsOptions := $(patsubst %.o, $(LibDir)/%.o, $(ProjLibsOptions)) @@ -740,15 +784,21 @@ ifdef SHARED_LIBRARY all-local:: $(LibName.LA) ifdef LINK_LIBS_IN_SHARED +ifdef LOADABLE_MODULE +SharedLibKindMessage := "Lodable Module" +else +SharedLibKindMessage := "Shared Library" +endif $(LibName.LA): $(ObjectsLO) $(LibDir)/.dir - $(Echo) Linking $(BuildMode) Shared Library $(LIBRARYNAME)$(SHLIBEXT) - $(Verb) $(Link) -o $@ $(ObjectsLO) \ - $(ProjLibsOptions) $(LLVMLibsOptions) + $(Echo) Linking $(BuildMode) $(SharedLibKindMessage) \ + $(LIBRARYNAME)$(SHLIBEXT) + $(Verb) $(LTLink) -o $@ $(ObjectsLO) $(ProjLibsOptions) \ + $(LLVMLibsOptions) $(Verb) $(LTInstall) $@ $(LibDir) else $(LibName.LA): $(ObjectsLO) $(LibDir)/.dir $(Echo) Linking $(BuildMode) Shared Library $(LIBRARYNAME)$(SHLIBEXT) - $(Verb) $(Link) -o $@ $(ObjectsLO) + $(Verb) $(LTLink) -o $@ $(ObjectsLO) $(Verb) $(LTInstall) $@ $(LibDir) endif @@ -786,7 +836,8 @@ else all-local:: $(LibName.BCA) ifdef EXPORTED_SYMBOL_FILE -BCLinkLib = $(GCCLD) -L$(CFERuntimeLibDir) -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 @@ -851,7 +902,7 @@ all-local:: $(LibName.O) $(LibName.O): $(ObjectsO) $(LibDir)/.dir $(Echo) Linking $(BuildMode) Object Library $(notdir $@) - $(Verb) $(Relink) -o $@ $(ObjectsO) + $(Verb) $(LTRelink) -o $@ $(ObjectsO) clean-local:: ifneq ($(strip $(LibName.O)),) @@ -950,7 +1001,7 @@ endif $(ToolBuildPath): $(ObjectsO) $(ProjLibsPaths) $(LLVMLibsPaths) $(Echo) Linking $(BuildMode) executable $(TOOLNAME) $(StripWarnMsg) - $(Verb) $(Link) -o $@ $(TOOLLINKOPTS) $(ObjectsO) $(ProjLibsOptions) \ + $(Verb) $(LTLink) -o $@ $(TOOLLINKOPTS) $(ObjectsO) $(ProjLibsOptions) \ $(LLVMLibsOptions) $(ExtraLibs) $(TOOLLINKOPTSB) $(LIBS) $(Echo) ======= Finished Linking $(BuildMode) Executable $(TOOLNAME) \ $(StripWarnMsg) @@ -978,71 +1029,40 @@ ifeq ($(OS),HP-UX) DISABLE_AUTO_DEPENDENCIES=1 endif +ifdef SHARED_LIBRARY +PIC_FLAG = "(PIC)" +MAYBE_PIC_Compile.CXX = $(LTCompile.CXX) +MAYBE_PIC_Compile.C = $(LTCompile.C) +else +MAYBE_PIC_Compile.CXX = $(Compile.CXX) +MAYBE_PIC_Compile.C = $(Compile.C) +endif + # Provide rule sets for when dependency generation is enabled ifndef DISABLE_AUTO_DEPENDENCIES #--------------------------------------------------------- # Create .lo files in the ObjDir directory from the .cpp and .c files... #--------------------------------------------------------- -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 $@ ;\ - then $(MV) -f "$(ObjDir)/$*.LACXXd" "$(ObjDir)/$*.d"; \ - else $(RM) -f "$(ObjDir)/$*.LACXXd"; exit 1; fi + $(Echo) "Compiling $*.cpp for $(BuildMode) build " $(PIC_FLAG) + $(Verb) if $(MAYBE_PIC_Compile.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 $@ ;\ + $(Echo) "Compiling $*.cc for $(BuildMode) build" $(PIC_FLAG) + $(Verb) if $(MAYBE_PIC_Compile.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: %.c $(ObjDir)/.dir $(BUILT_SOURCES) - $(Echo) "Compiling $*.c for $(BuildMode) build (PIC)" - $(Verb) if $(LTCompile.C) -MD -MT $@ -MP -MF $(ObjDir)/$*.LACd $< -o $@ ; \ + $(Echo) "Compiling $*.c for $(BuildMode) build" $(PIC_FLAG) + $(Verb) if $(MAYBE_PIC_Compile.C) -MD -MT $@ -MP -MF $(ObjDir)/$*.LACd $< -o $@ ; \ then $(MV) -f "$(ObjDir)/$*.LACd" "$(ObjDir)/$*.d"; \ else $(RM) -f "$(ObjDir)/$*.LACd"; exit 1; fi -#--------------------------------------------------------- -# Create .o files in the ObjDir directory from the .cpp and .c files... -#--------------------------------------------------------- -else - -$(ObjDir)/%.o: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES) - $(Echo) "Compiling $*.cpp for $(BuildMode) build" - $(Verb) if $(Compile.CXX) -MD -MT $@ -MP -MF $(ObjDir)/$*.CXXd $< -o $@ ; \ - then $(MV) -f "$(ObjDir)/$*.CXXd" "$(ObjDir)/$*.d"; \ - else $(RM) -f "$(ObjDir)/$*.CXXd"; exit 1; fi - -$(ObjDir)/%.o: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) - $(Echo) "Compiling $*.cc for $(BuildMode) build" - $(Verb) if $(Compile.CXX) -MD -MT $@ -MP -MF $(ObjDir)/$*.CXXd $< -o $@ ; \ - then $(MV) -f "$(ObjDir)/$*.CXXd" "$(ObjDir)/$*.d"; \ - else $(RM) -f "$(ObjDir)/$*.CXXd"; exit 1; fi - -$(ObjDir)/%.o: %.c $(ObjDir)/.dir $(BUILT_SOURCES) - $(Echo) "Compiling $*.c for $(BuildMode) build" - $(Verb) if $(Compile.C) -MD -MT $@ -MP -MF $(ObjDir)/$*.Cd $< -o $@ ; \ - then $(MV) -f "$(ObjDir)/$*.Cd" "$(ObjDir)/$*.d"; \ - else $(RM) -f "$(ObjDir)/$*.Cd"; exit 1; fi - -endif - -## Rules for building preprocessed (.i/.ii) outputs. -$(BuildMode)/%.ii: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES) - $(Echo) "Compiling $*.cpp for $(BuildMode) build to .ii file" - $(Verb) $(Preprocess.CXX) $< -o $@ - -$(BuildMode)/%.ii: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) - $(Echo) "Compiling $*.cc for $(BuildMode) build to .ii file" - $(Verb) $(Preprocess.CXX) $< -o $@ - - $(BuildMode)/%.i: %.c $(ObjDir)/.dir $(BUILT_SOURCES) - $(Echo) "Compiling $*.c for $(BuildMode) build to .i file" - $(Verb) $(Preprocess.C) $< -o $@ - - #--------------------------------------------------------- # Create .bc files in the ObjDir directory from .cpp .cc and .c files... #--------------------------------------------------------- @@ -1071,34 +1091,17 @@ $(ObjDir)/%.ll: %.c $(ObjDir)/.dir $(BUILT_SOURCES) # Provide alternate rule sets if dependencies are disabled else -ifdef SHARED_LIBRARY - $(ObjDir)/%.lo $(ObjDir)/%.o: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES) - $(Echo) "Compiling $*.cpp for $(BuildMode) build (PIC)" - $(LTCompile.CXX) $< -o $@ + $(Echo) "Compiling $*.cpp for $(BuildMode) build" $(PIC_FLAG) + $(MAYBE_PIC_Compile.CXX) $< -o $@ $(ObjDir)/%.lo $(ObjDir)/%.o: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) - $(Echo) "Compiling $*.cc for $(BuildMode) build (PIC)" - $(LTCompile.CXX) $< -o $@ + $(Echo) "Compiling $*.cc for $(BuildMode) build" $(PIC_FLAG) + $(MAYBE_PIC_Compile.CXX) $< -o $@ $(ObjDir)/%.lo $(ObjDir)/%.o: %.c $(ObjDir)/.dir $(BUILT_SOURCES) - $(Echo) "Compiling $*.c for $(BuildMode) build (PIC)" - $(LTCompile.C) $< -o $@ - -else - -$(ObjDir)/%.o: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES) - $(Echo) "Compiling $*.cpp for $(BuildMode) build" - $(Compile.CXX) $< -o $@ - -$(ObjDir)/%.o: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) - $(Echo) "Compiling $*.cc for $(BuildMode) build" - $(Compile.CXX) $< -o $@ - -$(ObjDir)/%.o: %.c $(ObjDir)/.dir $(BUILT_SOURCES) - $(Echo) "Compiling $*.c for $(BuildMode) build" - $(Compile.C) $< -o $@ -endif + $(Echo) "Compiling $*.c for $(BuildMode) build" $(PIC_FLAG) + $(MAYBE_PIC_Compile.C) $< -o $@ $(ObjDir)/%.ll: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES) $(Echo) "Compiling $*.cpp for $(BuildMode) build (bytecode)" @@ -1114,6 +1117,34 @@ $(ObjDir)/%.ll: %.c $(ObjDir)/.dir $(BUILT_SOURCES) endif + +## Rules for building preprocessed (.i/.ii) outputs. +$(BuildMode)/%.ii: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES) + $(Echo) "Compiling $*.cpp for $(BuildMode) build to .ii file" + $(Verb) $(Preprocess.CXX) $< -o $@ + +$(BuildMode)/%.ii: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) + $(Echo) "Compiling $*.cc for $(BuildMode) build to .ii file" + $(Verb) $(Preprocess.CXX) $< -o $@ + + $(BuildMode)/%.i: %.c $(ObjDir)/.dir $(BUILT_SOURCES) + $(Echo) "Compiling $*.c for $(BuildMode) build to .i file" + $(Verb) $(Preprocess.C) $< -o $@ + + +$(ObjDir)/%.s: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES) + $(Echo) "Compiling $*.cpp to asm for $(BuildMode) build" $(PIC_FLAG) + $(MAYBE_PIC_Compile.CXX) $< -o $@ -S + +$(ObjDir)/%.s: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) + $(Echo) "Compiling $*.cc to asm for $(BuildMode) build" $(PIC_FLAG) + $(MAYBE_PIC_Compile.CXX) $< -o $@ -S + +$(ObjDir)/%.s: %.c $(ObjDir)/.dir $(BUILT_SOURCES) + $(Echo) "Compiling $*.c to asm for $(BuildMode) build" $(PIC_FLAG) + $(MAYBE_PIC_Compile.C) $< -o $@ -S + + # make the C and C++ compilers strip debug info out of bytecode libraries. ifdef DEBUG_RUNTIME $(ObjectsBC): $(ObjDir)/%.bc: $(ObjDir)/%.ll $(GCCAS)