Newer
Older
#===-- Makefile.rules - Common make rules for LLVM ---------*- Makefile -*--===#
#
# The LLVM Compiler Infrastructure
#
# This file was developed by the LLVM research group and is distributed under
# the University of Illinois Open Source License. See LICENSE.TXT for details.
#
#===------------------------------------------------------------------------===#
# This file is included by all of the LLVM makefiles. For details on how to use
# it properly, please see the document MakefileGuide.html in the docs directory.
#===-----------------------------------------------------------------------====
################################################################################
################################################################################
John Criswell
committed
#--------------------------------------------------------------------
# Define the various target sets
#--------------------------------------------------------------------
RecursiveTargets := all clean clean-all install uninstall install-bytecode
LocalTargets := all-local clean-local clean-all-local check-local \
install-local printvars uninstall-local \
install-bytecode-local
TopLevelTargets := check dist dist-check dist-clean tags dist-gzip dist-bzip2 \
dist-zip
UserTargets := $(RecursiveTargets) $(LocalTargets) $(TopLevelTargets)
InternalTargets := preconditions distdir dist-hook
################################################################################
################################################################################
#--------------------------------------------------------------------
# Set the VPATH so that we can find source files.
#--------------------------------------------------------------------
#--------------------------------------------------------------------
# Reset the list of suffixes we know how to build
#--------------------------------------------------------------------
.SUFFIXES:
Chris Lattner
committed
.SUFFIXES: .c .cpp .cc .h .hpp .y .l .lo .o .a .bc .td .ps .dot
.SUFFIXES: $(SHLIBEXT) $(SUFFIXES)
#--------------------------------------------------------------------
# Mark all of these targets as phony to avoid implicit rule search
#--------------------------------------------------------------------
.PHONY: $(UserTargets) $(InternalTargets)
#--------------------------------------------------------------------
# Make sure all the user-target rules are double colon rules and
# they are defined first.
#--------------------------------------------------------------------
$(UserTargets)::
################################################################################
# PRECONDITIONS: that which must be built/checked first
################################################################################
SrcMakefiles := $(filter %Makefile %Makefile.tests,\
$(wildcard $(PROJ_SRC_DIR)/Makefile*))
ObjMakefiles := $(subst $(PROJ_SRC_DIR),$(PROJ_OBJ_DIR),$(SrcMakefiles))
ConfigureScript := $(PROJ_SRC_ROOT)/configure
ConfigStatusScript := $(PROJ_OBJ_ROOT)/config.status
MakefileConfigIn := $(strip $(wildcard $(PROJ_SRC_ROOT)/Makefile.config.in))
MakefileCommonIn := $(strip $(wildcard $(PROJ_SRC_ROOT)/Makefile.common.in))
MakefileConfig := $(PROJ_OBJ_ROOT)/Makefile.config
MakefileCommon := $(PROJ_OBJ_ROOT)/Makefile.common
PreConditions := $(ConfigStatusScript) $(ObjMakefiles)
ifneq ($(MakefileCommonIn),)
PreConditions += $(MakefileCommon)
endif
ifneq ($(MakefileConfigIn),)
PreConditions += $(MakefileConfig)
endif
preconditions : $(PreConditions)
#------------------------------------------------------------------------
# Make sure the BUILT_SOURCES are built first
#------------------------------------------------------------------------
$(filter-out clean clean-local,$(UserTargets)):: $(BUILT_SOURCES)
-$(Verb) $(RM) -f $(BUILT_SOURCES)
spotless:
$(Verb) if test -x config.status ; then \
$(MKDIR) .spotless.save ; \
$(MV) config.status .spotless.save ; \
$(MV) mklib .spotless.save ; \
$(MV) projects .spotless.save ; \
$(RM) -rf * ; \
$(MV) .spotless.save/config.status . ; \
$(MV) .spotless.save/mklib . ; \
$(MV) .spotless.save/projects . ; \
$(RM) -rf .spotless.save ; \
$(EchoCmd) Rebuilding configuration of $(PROJ_OBJ_ROOT) ; \
$(ConfigStatusScript) --recheck $(ConfigureScriptFLAGS) && \
$(ConfigStatusScript) ; \
else \
$(EchoCmd) "make spotless" can only be run from $(PROJ_OBJ_ROOT); \
fi
endif
$(BUILT_SOURCES) : $(ObjMakefiles)
#------------------------------------------------------------------------
# Make sure we're not using a stale configuration
#------------------------------------------------------------------------
$(Echo) Reconfiguring $(PROJ_OBJ_ROOT)
$(Verb) cd $(PROJ_OBJ_ROOT) && \
if test -w $(PROJ_OBJ_ROOT)/config.cache ; then \
$(RM) $(PROJ_OBJ_ROOT)/config.cache ; \
$(ConfigStatusScript) --recheck $(ConfigureScriptFLAGS) && \
$(ConfigStatusScript)
.PRECIOUS: $(ConfigStatusScript)
$(ConfigStatusScript): $(ConfigureScript)
$(Echo) Reconfiguring with $<
$(Verb) cd $(PROJ_OBJ_ROOT) && \
if test -w $(PROJ_OBJ_ROOT)/config.cache ; then \
$(RM) $(PROJ_OBJ_ROOT)/config.cache ; \
$(ConfigStatusScript) --recheck $(ConfigureScriptFLAGS) && \
$(ConfigStatusScript)
#------------------------------------------------------------------------
# Make sure the configuration makefile is up to date
#------------------------------------------------------------------------
ifneq ($(MakefileConfigIn),)
$(MakefileConfig): $(MakefileConfigIn) $(ConfigStatusScript)
$(Echo) Regenerating $@
$(Verb) cd $(PROJ_OBJ_ROOT) ; $(ConfigStatusScript) Makefile.config
endif
ifneq ($(MakefileCommonIn),)
$(MakefileCommon): $(MakefileCommonIn) $(ConfigStatusScript)
$(Echo) Regenerating $@
$(Verb) cd $(PROJ_OBJ_ROOT) ; $(ConfigStatusScript) Makefile.common
endif
#------------------------------------------------------------------------
# If the Makefile in the source tree has been updated, copy it over into the
# build tree. But, only do this if the source and object makefiles differ
#------------------------------------------------------------------------
$(Echo) "Updating Makefile"
$(Verb) $(MKDIR) $(@D)
# Copy the Makefile.* files unless we're in the root directory which avoids
# the copying of Makefile.config.in or other things that should be explicitly
# taken care of.
@case '$?' in \
*Makefile.rules) ;; \
*.in) ;; \
*) $(Echo) "Updating $(@F)" ; \
$(MKDIR) $(@D) ; \
esac
#------------------------------------------------------------------------
# Set up the basic dependencies
#------------------------------------------------------------------------
$(UserTargets):: $(PreConditions)
clean-all:: clean-local clean-all-local
install:: install-local
uninstall:: uninstall-local
install-local:: all-local
install-bytecode:: install-bytecode-local
###############################################################################
# VARIABLES: Set up various variables based on configuration data
###############################################################################
#--------------------------------------------------------------------
#--------------------------------------------------------------------
Chris Lattner
committed
ifdef ENABLE_PROFILING
BuildMode := Profile
CXX.Flags := -O3 -DNDEBUG -felide-constructors -finline-functions -pg
C.Flags := -O3 -DNDEBUG -pg
LD.Flags := -O3 -DNDEBUG -pg
Chris Lattner
committed
else
ifdef ENABLE_OPTIMIZED
BuildMode := Release
# Don't use -fomit-frame-pointer on FreeBSD
ifneq ($(OS),FreeBSD)
OmitFramePointer := -fomit-frame-pointer
endif
CXX.Flags := -O3 -DNDEBUG -finline-functions -felide-constructors \
$(OmitFramePointer)
C.Flags := -O3 -DNDEBUG $(OmitFramePointer)
LD.Flags := -O3 -DNDEBUG
Chris Lattner
committed
else
BuildMode := Debug
CXX.Flags := -g -D_DEBUG
C.Flags := -g -D_DEBUG
LD.Flags := -g -D_DEBUG
KEEP_SYMBOLS := 1
Chris Lattner
committed
endif
endif
CXX.Flags += $(CXXFLAGS)
C.Flags += $(CFLAGS)
CPP.Flags += $(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
endif
#--------------------------------------------------------------------
# Directory locations
#--------------------------------------------------------------------
ObjDir := $(PROJ_OBJ_DIR)/$(BuildMode)
LibDir := $(PROJ_OBJ_ROOT)/$(BuildMode)/lib
ToolDir := $(PROJ_OBJ_ROOT)/$(BuildMode)/bin
ExmplDir := $(PROJ_OBJ_ROOT)/$(BuildMode)/examples
LLVMToolDir := $(LLVM_OBJ_ROOT)/$(BuildMode)/bin
LLVMExmplDir:= $(LLVM_OBJ_ROOT)/$(BuildMode)/examples
#--------------------------------------------------------------------
# Full Paths To Compiled Tools and Utilities
#--------------------------------------------------------------------
EchoCmd = $(ECHO) llvm[$(MAKELEVEL)]:
Echo = @$(EchoCmd)
ifndef LIBTOOL
LIBTOOL := $(LLVM_OBJ_ROOT)/mklib
endif
ifndef LLVMAS
LLVMAS := $(LLVMToolDir)/llvm-as$(EXEEXT)
endif
ifndef BURG
BURG := $(LLVMToolDir)/burg$(EXEEXT)
endif
ifndef TBLGEN
TBLGEN := $(LLVMToolDir)/tblgen$(EXEEXT)
endif
ifndef GCCAS
GCCAS := $(LLVMToolDir)/gccas$(EXEEXT)
endif
ifndef GCCLD
GCCLD := $(LLVMToolDir)/gccld$(EXEEXT)
endif
ifndef LDIS
LLVMDIS := $(LLVMToolDir)/llvm-dis$(EXEEXT)
endif
ifndef LLI
LLI := $(LLVMToolDir)/lli$(EXEEXT)
endif
ifndef LLC
LLC := $(LLVMToolDir)/llc$(EXEEXT)
endif
ifndef LBUGPOINT
LBUGPOINT := $(LLVMToolDir)/bugpoint$(EXEEXT)
endif
LLVMGCCWITHPATH := PATH="$(LLVMToolDir):$(PATH)" $(LLVMGCC)
LLVMGXXWITHPATH := PATH="$(LLVMToolDir):$(PATH)" $(LLVMGXX)
#--------------------------------------------------------------------
# Adjust to user's request
#--------------------------------------------------------------------
John Criswell
committed
# 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
ifdef SHARED_LIBRARY
LD.Flags += -rpath $(LibDir)
ifdef LOADABLE_MODULE
LD.Flags += -module
endif
else
LibTool.Flags += --tag=disable-shared
endif
ifdef TOOL_VERBOSE
C.Flags += -v
CXX.Flags += -v
LD.Flags += -v
VERBOSE := 1
endif
Chris Lattner
committed
ifndef VERBOSE
Verb := @
LibTool.Flags += --silent
AR.Flags += >/dev/null 2>/dev/null
ConfigureScriptFLAGS += >$(PROJ_OBJ_DIR)/configure.out 2>&1
ConfigureScriptFLAGS :=
endif
# By default, strip symbol information from executable
Chris Lattner
committed
ifndef KEEP_SYMBOLS
Strip := $(PLATFORMSTRIPOPTS)
StripWarnMsg := "(without symbols)"
Install.StripFlag += -s
endif
ifdef TOOLNAME
ifdef EXAMPLE_TOOL
LD.Flags += -rpath $(ExmplDir) -export-dynamic
else
LD.Flags += -rpath $(ToolDir) -export-dynamic
endif
#----------------------------------------------------------
# Options To Invoke Tools
#----------------------------------------------------------
CompileCommonOpts := -Wall -W -Wwrite-strings -Wno-unused
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
Compile.C = $(CC) $(CPP.Flags) $(CompileCommonOpts) -c $(C.Flags)
LTCompile.C = $(LIBTOOL) $(LibTool.Flags) --mode=compile $(Compile.C)
BCCompile.C = $(LLVMGCCWITHPATH) $(CPP.Flags) $(CompileCommonOpts) \
$(C.Flags) -c
Compile.CXX = $(CXX) $(CPP.Flags) $(CompileCommonOpts) $(CXX.Flags) -c
LTCompile.CXX = $(LIBTOOL) $(LibTool.Flags) --mode=compile $(Compile.CXX)
BCCompile.CXX = $(LLVMGXXWITHPATH) $(CPP.Flags) $(CompileCommonOpts) \
$(CXX.Flags) -c
Link = $(LIBTOOL) $(LibTool.Flags) --mode=link $(CXX) $(CPP.Flags) \
$(CompileCommonOpts) $(LD.Flags) $(Strip)
Relink = $(LIBTOOL) $(LibTool.Flags) --mode=link $(CXX) $(CPP.Flags) \
LTInstall = $(LIBTOOL) $(LibTool.Flags) --mode=install $(INSTALL) \
$(Install.Flags)
ProgInstall = $(INSTALL) $(Install.StripFlag) -m 0755
DataInstall = $(INSTALL) -m 0644
Burg = $(BURG) -I $(PROJ_SRC_DIR)
TableGen = $(TBLGEN) -I $(PROJ_SRC_DIR)
Archive = $(AR) $(AR.Flags)
ifdef RANLIB
else
endif
#----------------------------------------------------------
# Get the list of source files and compute object file
# names from them.
#----------------------------------------------------------
ifdef FAKE_SOURCES
Sources :=
FakeSources := $(FAKE_SOURCES)
ifdef BUILT_SOURCES
FakeSources += $(filter %.cpp %.c %.cc %.y %.l,$(BUILT_SOURCES))
endif
BaseNameSources := $(sort $(basename $(FakeSources)))
ObjectsO := $(BaseNameSources:%=$(ObjDir)/%.o)
ObjectsLO := $(BaseNameSources:%=$(ObjDir)/%.lo)
ObjectsBC := $(BaseNameSources:%=$(ObjDir)/%.bc)
else
Sources := $(notdir $(wildcard $(PROJ_SRC_DIR)/*.cpp \
$(PROJ_SRC_DIR)/*.cc $(PROJ_SRC_DIR)/*.c $(PROJ_SRC_DIR)/*.y \
$(PROJ_SRC_DIR)/*.l))
ifdef BUILT_SOURCES
Sources += $(filter %.cpp %.c %.cc %.y %.l,$(BUILT_SOURCES))
endif
BaseNameSources := $(sort $(basename $(Sources)))
ObjectsO := $(BaseNameSources:%=$(ObjDir)/%.o)
ObjectsLO := $(BaseNameSources:%=$(ObjDir)/%.lo)
ObjectsBC := $(BaseNameSources:%=$(ObjDir)/%.bc)
endif
###############################################################################
# DIRECTORIES: Handle recursive descent of directory structure
###############################################################################
#---------------------------------------------------------
# Provide rules to make install dirs. This must be early
# in the file so they get built before dependencies
#---------------------------------------------------------
$(PROJ_includedir):
$(Verb) $(MKDIR) $(PROJ_includedir)
# To create other directories, as needed, and timestamp their creation
%/.dir:
$(Verb) $(MKDIR) $* > /dev/null
.PRECIOUS: $(ObjDir)/.dir $(LibDir)/.dir $(ToolDir)/.dir $(ExmplDir)/.dir
.PRECIOUS: $(LLVMLibDir)/.dir $(LLVMToolDir)/.dir $(LLVMExmplDir)/.dir
#---------------------------------------------------------
#---------------------------------------------------------
SubDirs :=
SubDirs += $(DIRS)
$(RecursiveTargets)::
$(Verb) for dir in $(DIRS); do \
if [ ! -f $$dir/Makefile ]; then \
$(MKDIR) $$dir; \
fi; \
if [ ! -f $$dir/LLVM_DO_NOT_BUILD ]; then \
($(MAKE) -C $$dir $@ ) || exit 1; \
fi ; \
#---------------------------------------------------------
# Handle the EXPERIMENTAL_DIRS options ensuring success
# after each directory is built.
#---------------------------------------------------------
ifdef EXPERIMENTAL_DIRS
$(RecursiveTargets)::
$(Verb) for dir in $(EXPERIMENTAL_DIRS); do \
if [ ! -f $$dir/Makefile ]; then \
$(MKDIR) $$dir; \
if [ ! -f $$dir/LLVM_DO_NOT_BUILD ]; then \
($(MAKE) -C $$dir $@ ) || exit 0; \
fi ; \
done
endif
#---------------------------------------------------------
# Handle the PARALLEL_DIRS options for parallel construction
#---------------------------------------------------------
SubDirs += $(PARALLEL_DIRS)
# Unfortunately, this list must be maintained if new recursive targets are added
all :: $(addsuffix /.makeall ,$(PARALLEL_DIRS))
clean :: $(addsuffix /.makeclean ,$(PARALLEL_DIRS))
clean-all:: $(addsuffix /.makeclean-all,$(PARALLEL_DIRS))
install :: $(addsuffix /.makeinstall ,$(PARALLEL_DIRS))
uninstall:: $(addsuffix /.makeuninstall,$(PARALLEL_DIRS))
install-bytecode :: $(addsuffix /.makeinstall-bytecode,$(PARALLEL_DIRS))
ParallelTargets := $(foreach T,$(RecursiveTargets),%/.make$(T))
$(Verb) if [ ! -f $(@D)/Makefile ]; then \
$(MKDIR) $(@D); \
fi; \
if [ ! -f $$dir/LLVM_DO_NOT_BUILD ]; then \
$(MAKE) -C $(@D) $(subst $(@D)/.make,,$@) ; \
fi
#---------------------------------------------------------
# Handle the OPTIONAL_DIRS options for directores that may
# or may not exist.
#---------------------------------------------------------
John Criswell
committed
ifdef OPTIONAL_DIRS
SubDirs += $(OPTIONAL_DIRS)
$(RecursiveTargets)::
$(Verb) for dir in $(OPTIONAL_DIRS); do \
if [ ! -f $$dir/Makefile ]; then \
$(MKDIR) $$dir; \
fi; \
if [ ! -f $$dir/LLVM_DO_NOT_BUILD ]; then \
($(MAKE) -C$$dir $@ ) || exit 1; \
fi ; \
fi \
John Criswell
committed
done
endif
#---------------------------------------------------------
# Handle the CONFIG_FILES options
#---------------------------------------------------------
ifdef CONFIG_FILES
install-local:: $(PROJ_etcdir) $(CONFIG_FILES)
$(Echo) Installing Configuration Files To $(PROJ_etcdir)
$(Verb)for file in $(CONFIG_FILES); do \
else \
$(ECHO) Error: cannot find config file $${file}. ; \
fi \
done
uninstall-local::
$(Echo) Uninstalling Configuration Files From $(PROJ_etcdir)
$(Verb)for file in $(CONFIG_FILES); do \
endif
###############################################################################
# Library Build Rules: Four ways to build a library
###############################################################################
#---------------------------------------------------------
# Bytecode Module Targets:
# If the user set MODULE_NAME then they want to build a
# bytecode module from the sources. We compile all the
# sources and link it together into a single bytecode
# module.
#---------------------------------------------------------
ifdef MODULE_NAME
ifeq ($(strip $(LLVMGCC)),)
$(warning Modules require llvm-gcc but no llvm-gcc is available)
else
Module := $(LibDir)/$(MODULE_NAME).bc
ifdef EXPORTED_SYMBOL_FILE
LinkModule += -Xlinker -internalize-public-api-file=$(EXPORTED_SYMBOL_FILE)
endif
$(Module): $(BUILT_SOURCES) $(ObjectsBC) $(LibDir)/.dir $(GCCLD)
$(Echo) Building $(BuildMOde) Bytecode Module $(notdir $@)
$(Verb) $(LinkModule) -o $@ $(ObjectsBC)
all-local:: $(Module)
clean-local::
ifneq ($(strip $(Module)),)
-$(Verb) $(RM) -f $(Module)
endif
ifdef BYTECODE_DESTINATION
ModuleDestDir := $(BYTECODE_DESTINATION)
else
endif
DestModule := $(ModuleDestDir)/$(MODULE_NAME).bc
install-module:: $(DestModule)
install-local:: $(DestModule)
$(DestModule): $(ModuleDestDir) $(Module)
$(Echo) Installing $(BuildMode) Bytecode Module $(DestModule)
$(Verb) $(DataInstall) $(Module) $(DestModule)
uninstall-local::
$(Echo) Uninstalling $(BuildMode) Bytecode Module $(DestModule)
-$(Verb) $(RM) -f $(DestModule)
endif
# Make sure there isn't any extranous whitespace on the LIBRARYNAME option
LIBRARYNAME := $(strip $(LIBRARYNAME))
ifdef LOADABLE_MODULE
LibName.LA := $(LibDir)/$(LIBRARYNAME).la
else
LibName.LA := $(LibDir)/lib$(LIBRARYNAME).la
endif
LibName.A := $(LibDir)/lib$(LIBRARYNAME).a
LibName.O := $(LibDir)/$(LIBRARYNAME).o
#---------------------------------------------------------
# Shared Library Targets:
# If the user asked for a shared library to be built
# with the SHARED_LIBRARY variable, then we provide
# targets for building them.
#---------------------------------------------------------
ifdef SHARED_LIBRARY
all-local:: $(LibName.LA)
$(LibName.LA): $(ObjectsLO) $(LibDir)/.dir
$(Echo) Linking $(BuildMode) Shared Library $(LIBRARYNAME)$(SHLIBEXT)
$(Verb) $(Link) -o $@ $(ObjectsLO)
$(Verb) $(LTInstall) $@ $(LibDir)
ifneq ($(strip $(LibName.LA)),)
-$(Verb) $(RM) -f $(LibName.LA)
DestSharedLib = $(PROJ_libdir)/lib$(LIBRARYNAME)$(SHLIBEXT)
install-local:: $(DestSharedLib)
$(Echo) Installing $(BuildMode) Shared Library $(DestSharedLib)
$(Verb) $(LTInstall) $(LibName.LA) $(DestSharedLib)
uninstall-local::
$(Echo) Uninstalling $(BuildMode) Shared Library $(DestSharedLib)
#---------------------------------------------------------
# Bytecode Library Targets:
# If the user asked for a bytecode library to be built
# with the BYTECODE_LIBRARY variable, then we provide
# targets for building them.
#---------------------------------------------------------
ifdef BYTECODE_LIBRARY
ifeq ($(strip $(LLVMGCC)),)
$(warning Bytecode libraries require llvm-gcc which could not be found)
else
# make the C and C++ compilers strip debug info out of bytecode libraries.
BCCompile.C += -Wa,-strip-debug
BCCompile.CXX += -Wa,-strip-debug
$(LibName.BCA): $(ObjectsBC) $(LibDir)/.dir $(GCCLD) \
$(Echo) Building $(BuildMode) Bytecode Archive $(notdir $@) \
"(internalize)"
$(Verb) $(RM) -f $@
$(LibName.BCA): $(ObjectsBC) $(LibDir)/.dir \
$(Verb) $(RM) -f $@
ifneq ($(strip $(LibName.BCA)),)
-$(Verb) $(RM) -f $(LibName.BCA)
ifdef BYTECODE_DESTINATION
BytecodeDestDir := $(BYTECODE_DESTINATION)
else
endif
DestBytecodeLib = $(BytecodeDestDir)/lib$(LIBRARYNAME).a
install-bytecode-local:: $(DestBytecodeLib)
install-local:: $(DestBytecodeLib)
Vikram S. Adve
committed
$(DestBytecodeLib): $(BytecodeDestDir) $(LibName.BCA)
$(Echo) Installing $(BuildMode) Bytecode Archive $(DestBytecodeLib)
$(Verb) $(DataInstall) $(LibName.BCA) $(DestBytecodeLib)
uninstall-local::
$(Echo) Uninstalling $(BuildMode) Bytecode Archive $(DestBytecodeLib)
-$(Verb) $(RM) -f $(DestBytecodeLib)
endif
#---------------------------------------------------------
# ReLinked Library Targets:
# If the user didn't explicitly forbid building a
# relinked then we provide targets for building them.
#---------------------------------------------------------
ifndef DONT_BUILD_RELINKED
all-local:: $(LibName.O)
$(LibName.O): $(ObjectsO) $(LibDir)/.dir
$(Echo) Linking $(BuildMode) Object Library $(notdir $@)
$(Verb) $(Relink) -o $@ $(ObjectsO)
Vikram S. Adve
committed
ifneq ($(strip $(LibName.O)),)
-$(Verb) $(RM) -f $(LibName.O)
install-local:: $(DestRelinkedLib)
$(Echo) Installing $(BuildMode) Object Library $(DestRelinkedLib)
$(Verb) $(LTInstall) $(LibName.O) $(DestRelinkedLib)
uninstall-local::
$(Echo) Uninstalling $(BuildMode) Object Library $(DestRelinkedLib)
-$(Verb) $(RM) -f $(DestRelinkedLib)
endif
#---------------------------------------------------------
# Archive Library Targets:
# If the user wanted a regular archive library built,
# then we provide targets for building them.
#---------------------------------------------------------
ifdef BUILD_ARCHIVE
all-local:: $(LibName.A)
$(LibName.A): $(ObjectsO) $(LibDir)/.dir
$(Echo) Building $(BuildMode) Archive Library $(notdir $@)
-$(Verb) $(RM) -f $@
$(Verb) $(Archive) $@ $(ObjectsO)
$(Verb) $(Ranlib) $@
ifneq ($(strip $(LibName.A)),)
-$(Verb) $(RM) -f $(LibName.A)
install-local:: $(DestArchiveLib)
$(Echo) Installing $(BuildMode) Archive Library $(DestArchiveLib)
$(Verb) $(LTInstall) $(LibName.A) $(DestArchiveLib)
uninstall-local::
$(Echo) Uninstalling $(BuildMode) Archive Library $(DestArchiveLib)
-$(Verb) $(RM) -f $(DestArchiveLib)
endif
###############################################################################
# Tool Build Rules: Build executable tool based on TOOLNAME option
###############################################################################
ifdef TOOLNAME
#---------------------------------------------------------
# Handle the special "JIT" value for LLVM_LIBS which is a
# shorthand for a bunch of libraries that get the correct
# JIT support for a tool that runs JIT.
#---------------------------------------------------------
ifeq ($(LLVMLIBS),JIT)
# Make sure we can get our own symbols in the tool
Link += -dlopen self
# Generic JIT libraries
JIT_LIBS := LLVMInterpreter LLVMJIT LLVMCodeGen 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
# enabled automagically on an X86 host.
ifeq ($(ARCH), x86)
ENABLE_X86_JIT = 1
endif
# What the X86 JIT requires
ifdef ENABLE_X86_JIT
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 LLVMProfilePaths \
LLVMBCWriter LLVMTransforms.a LLVMipo.a LLVMipa.a \
LLVMDataStructure.a 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.
ifeq ($(ARCH), PowerPC)
ENABLE_PPC_JIT = 1
endif
# What the PowerPC JIT requires
ifdef ENABLE_PPC_JIT
endif
LLVMLIBS := $(JIT_LIBS) LLVMScalarOpts LLVMAnalysis.a LLVMTransformUtils.a \
LLVMBCReader LLVMCore LLVMSupport.a LLVMTarget.a LLVMbzip2 \
LLVMSystem.a $(PLATFORMLIBDL)
#---------------------------------------------------------
# Set up variables for building a tool.
#---------------------------------------------------------
ifdef EXAMPLE_TOOL
ToolBuildPath := $(ExmplDir)/$(TOOLNAME)$(EXEEXT)
else
ToolBuildPath := $(ToolDir)/$(TOOLNAME)$(EXEEXT)
ProjLibsOptions := $(patsubst %.a.o, -l%, $(addsuffix .o, $(USEDLIBS)))
ProjLibsOptions := $(patsubst %.o, $(LibDir)/%.o, $(ProjLibsOptions))
LLVMLibsOptions := $(patsubst %.a.o, -l%, $(addsuffix .o, $(LLVMLIBS)))
LLVMLibsOptions := $(patsubst %.o, $(LLVMLibDir)/%.o, $(LLVMLibsOptions))
ProjUsedLibs := $(patsubst %.a.o, lib%.a, $(addsuffix .o, $(USEDLIBS)))
LLVMUsedLibs := $(patsubst %.a.o, lib%.a, $(addsuffix .o, $(LLVMLIBS)))
ProjLibsPaths := $(addprefix $(LibDir)/,$(ProjUsedLibs))
LLVMLibsPaths := $(addprefix $(LLVMLibDir)/,$(LLVMUsedLibs))
#---------------------------------------------------------
# Tell make that we need to rebuild subdirectories before
# we can link the tool. This affects things like LLI which
# has library subdirectories.
#---------------------------------------------------------
$(ToolBuildPath): $(addsuffix /.makeall, $(PARALLEL_DIRS))
#---------------------------------------------------------
# Provide targets for building the tools
#---------------------------------------------------------
all-local:: $(ToolBuildPath)
John Criswell
committed
ifneq ($(strip $(ToolBuildPath)),)
-$(Verb) $(RM) -f $(ToolBuildPath)
ifdef EXAMPLE_TOOL
$(ToolBuildPath): $(ExmplDir)/.dir
else
$(ToolBuildPath): $(ToolDir)/.dir
endif
$(ToolBuildPath): $(ObjectsO) $(ProjLibsPaths) $(LLVMLibsPaths)
$(Echo) Linking $(BuildMode) executable $(TOOLNAME) $(StripWarnMsg)
$(Verb) $(Link) -o $@ $(TOOLLINKOPTS) $(ObjectsO) $(ProjLibsOptions) \
$(Echo) ======= Finished Linking $(BuildMode) Executable $(TOOLNAME) $(StripWarnMsg)
install-local:: $(DestTool)
$(Echo) Installing $(BuildMode) $(DestTool)
uninstall-local::
$(Echo) Uninstalling $(BuildMode) $(DestTool)
-$(Verb) $(RM) -f $(DestTool)
endif
###############################################################################
# Object Build Rules: Build object files based on sources
###############################################################################
# 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...
#---------------------------------------------------------
$(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
Chris Lattner
committed
$(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 $@ ; \
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 $@ ; \
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...
#---------------------------------------------------------
$(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
Chris Lattner
committed
$(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
#---------------------------------------------------------
Chris Lattner
committed
# Create .bc files in the ObjDir directory from .cpp .cc and .c files...
#---------------------------------------------------------
$(ObjDir)/%.bc: %.cpp $(ObjDir)/.dir $(GCCAS) $(BUILT_SOURCES)
$(Echo) "Compiling $*.cpp for $(BuildMode) build (bytecode)"
$(Verb) if $(BCCompile.CXX) -MD -MT $@ -MP -MF "$(ObjDir)/$*.BCCXXd" $< -o $@ ; \
then $(MV) -f "$(ObjDir)/$*.BCCXXd" "$(ObjDir)/$*.d"; \
else $(RM) -f "$(ObjDir)/$*.BCCXXd"; exit 1; fi
Chris Lattner
committed
$(ObjDir)/%.bc: %.cc $(ObjDir)/.dir $(GCCAS) $(BUILT_SOURCES)
$(Echo) "Compiling $*.cc for $(BuildMode) build (bytecode)"
$(Verb) if $(BCCompile.CXX) -MD -MT $@ -MP -MF "$(ObjDir)/$*.BCCXXd" $< -o $@ ; \
then $(MV) -f "$(ObjDir)/$*.BCCXXd" "$(ObjDir)/$*.d"; \
else $(RM) -f "$(ObjDir)/$*.BCCXXd"; exit 1; fi
$(ObjDir)/%.bc: %.c $(ObjDir)/.dir $(GCCAS) $(BUILT_SOURCES)
$(Echo) "Compiling $*.c for $(BuildMode) build (bytecode)"
$(Verb) if $(BCCompile.C) -MD -MT $@ -MP -MF "$(ObjDir)/$*.BCCd" $< -o $@ ; \
then $(MV) -f "$(ObjDir)/$*.BCCd" "$(ObjDir)/$*.d"; \
else $(RM) -f "$(ObjDir)/$*.BCCd"; exit 1; fi
# Provide alternate rule sets if dependencies are disabled
else
$(ObjDir)/%.lo $(ObjDir)/%.o: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES)
$(Echo) "Compiling $*.cpp for $(BuildMode) build (PIC)"