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 := $(OPTIMIZE_OPTION) -pg
- C.Flags := $(OPTIMIZE_OPTION) -pg
- LD.Flags := $(OPTIMIZE_OPTION) -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)
- # Don't use -fomit-frame-pointer on Darwin, it breaks backtraces.
ifneq ($(OS),Darwin)
OmitFramePointer := -fomit-frame-pointer
endif
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)
BuildMode := Debug
CXX.Flags := -g
C.Flags := -g
- LD.Flags := -g
+ LD.Flags := -g
KEEP_SYMBOLS := 1
endif
endif
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
#--------------------------------------------------------------------
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)
# 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
#----------------------------------------------------------
CompileCommonOpts := -Wall -W -Wwrite-strings -Wno-unused -Wno-long-long \
- -pedantic
+ -pedantic $(EXTRA_OPTIONS)
ifeq ($(OS),HP-UX)
CompileCommonOpts := -D_REENTRANT -D_HPUX_SOURCE
# 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 compatibility issue.
-ifeq ($(OS),Darwin)
- CXX.Flags += -fno-use-cxa-atexit
+ # Building universal cannot compute dependencies automatically.
+ DISABLE_AUTO_DEPENDENCIES=1
endif
LD.Flags += -L$(LibDir) -L$(LLVMLibDir)
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) \
- $(CXX.Flags) $(CompileCommonOpts) $(LD.Flags) $(Strip)
-Relink = $(LIBTOOL) $(LibTool.Flags) --mode=link $(CXX) $(CPP.Flags) \
- $(CXX.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
SubDirs :=
ifdef DIRS
SubDirs += $(DIRS)
+
+ifneq ($(PROJ_SRC_ROOT),$(PROJ_OBJ_ROOT))
$(RecursiveTargets)::
$(Verb) for dir in $(DIRS); do \
if [ ! -f $$dir/Makefile ]; then \
fi; \
($(MAKE) -C $$dir $@ ) || exit 1; \
done
+else
+$(RecursiveTargets)::
+ $(Verb) for dir in $(DIRS); do \
+ ($(MAKE) -C $$dir $@ ) || exit 1; \
+ done
+endif
+
endif
#---------------------------------------------------------
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\
($(MAKE) -C$$dir $@ ) || exit 1; \
fi \
done
+else
+$(RecursiveTargets)::
+ $(Verb) for dir in $(OPTIONAL_DIRS); do \
+ ($(MAKE) -C$$dir $@ ) || exit 1; \
+ done
+endif
endif
#---------------------------------------------------------
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
# 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
# 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
# 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 \
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
$(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)),)
$(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)
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...
#---------------------------------------------------------
# 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)"
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)