Two changes to support building shared libraries that contain multiple

llvm archive or re-linked libraries:
1. Permit the "JIT" special keyword on LLVMLIBS to be recognized when
   building a library, not just for building tools
2. If LINK_LIBS_IN_SHARED is set, the LLVMLIBS and USEDLIBS can be specified
   when linking a shared library and the libraries listed will be
   incorported into the shared library. THis is only used when the
   SHARED_LIBRARY variable is set.

llvm-svn: 22127
This commit is contained in:
Reid Spencer 2005-05-19 00:37:31 +00:00
parent 2dcb10ad84
commit f5c279718c

View File

@ -553,6 +553,82 @@ uninstall-local::
endif
###############################################################################
# Set up variables for building libararies
###############################################################################
#---------------------------------------------------------
# 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 library or 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
JIT_LIBS += LLVMX86 LLVMSelectionDAG
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
JIT_LIBS += LLVMPowerPC LLVMSelectionDAG
endif
LLVMLIBS := $(JIT_LIBS) LLVMScalarOpts LLVMAnalysis.a LLVMTransformUtils.a \
LLVMBCReader LLVMCore LLVMSupport.a LLVMTarget.a LLVMbzip2 \
LLVMSystem.a $(PLATFORMLIBDL)
endif
#---------------------------------------------------------
# Define various command line options pertaining to the
# libraries needed when linking. There are "Proj" libs
# (defined by the user's project) and "LLVM" libs (defined
# by the # LLVM project).
#---------------------------------------------------------
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))
###############################################################################
# Library Build Rules: Four ways to build a library
###############################################################################
@ -634,10 +710,18 @@ ifdef SHARED_LIBRARY
all-local:: $(LibName.LA)
ifdef LINK_LIBS_IN_SHARED
$(LibName.LA): $(ObjectsLO) $(LibDir)/.dir
$(Echo) Linking $(BuildMode) Shared Library $(LIBRARYNAME)$(SHLIBEXT)
$(Verb) $(Link) -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) $(LTInstall) $@ $(LibDir)
endif
clean-local::
ifneq ($(strip $(LibName.LA)),)
@ -800,63 +884,6 @@ endif
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
JIT_LIBS += LLVMX86 LLVMSelectionDAG
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
JIT_LIBS += LLVMPowerPC LLVMSelectionDAG
endif
LLVMLIBS := $(JIT_LIBS) LLVMScalarOpts LLVMAnalysis.a LLVMTransformUtils.a \
LLVMBCReader LLVMCore LLVMSupport.a LLVMTarget.a LLVMbzip2 \
LLVMSystem.a $(PLATFORMLIBDL)
endif
#---------------------------------------------------------
# Set up variables for building a tool.
#---------------------------------------------------------
@ -865,14 +892,6 @@ ToolBuildPath := $(ExmplDir)/$(TOOLNAME)$(EXEEXT)
else
ToolBuildPath := $(ToolDir)/$(TOOLNAME)$(EXEEXT)
endif
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