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
+# IF REQUIRES_EH=1 is specified then don't disable exceptions
+ifndef REQUIRES_EH
+ CXX.Flags += -fno-exceptions
+endif
+
# If DISABLE_ASSERTIONS=1 is specified (make command line or configured),
# then disable assertions by defining the appropriate preprocessor symbols.
ifdef DISABLE_ASSERTIONS
C.Flags += -D_DEBUG
endif
-CXX.Flags += $(CXXFLAGS)
+CXX.Flags += $(CXXFLAGS) -Woverloaded-virtual
C.Flags += $(CFLAGS)
CPP.BaseFlags += $(CPPFLAGS)
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
#--------------------------------------------------------------------
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
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.
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
# 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
+JIT_LIBS += LLVMTarget.a LLVMSelectionDAG.a LLVMCodeGen.a LLVMExecutionEngine
+
LLVMLIBS := $(JIT_LIBS) LLVMScalarOpts.a LLVMTransformUtils.a LLVMAnalysis.a \
- LLVMBCReader.a LLVMTarget.a LLVMCore.a LLVMSupport.a LLVMbzip2.a \
+ LLVMBCReader.a LLVMCore.a LLVMSupport.a LLVMbzip2.a \
LLVMSystem.a $(PLATFORMLIBDL)
endif
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)
# Rule for building the bison based parsers...
$(PROJ_SRC_DIR)/%.cpp $(PROJ_SRC_DIR)/%.h : $(PROJ_SRC_DIR)/%.y
+ifneq ($(BISON),)
$(Echo) "Bisoning $*.y"
$(Verb) $(BISON) -v -d -p $(<F:%Parser.y=%) -o $*.tab.c $<
$(Verb) $(MV) -f $*.tab.c $(PROJ_SRC_DIR)/$*.cpp
$(Verb) $(MV) -f $*.tab.h $(PROJ_SRC_DIR)/$*.h
+else
+ $(Echo) "Bison of $*.y SKIPPED -- bison not found"
+endif
# IFF the .y file has changed since it was last checked into CVS, copy the .y
# file to .y.cvs and the generated .cpp/.h file to .cpp.cvs/.h.cvs. We use this