Implement BYTECODE_LIBRARY support

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7855 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2003-08-15 02:18:35 +00:00
parent fad4929ee2
commit 481cc7c79e
2 changed files with 124 additions and 20 deletions

View File

@ -119,14 +119,14 @@ endif
# It is typically the root directory of what we're compiling now. # It is typically the root directory of what we're compiling now.
# #
ifndef LLVM_SRC_ROOT ifndef LLVM_SRC_ROOT
LLVM_SRC_ROOT = $(BUILD_SRC_ROOT) LLVM_SRC_ROOT := $(BUILD_SRC_ROOT)
endif endif
# #
# Set the LLVM object directory. # Set the LLVM object directory.
# #
ifndef LLVM_OBJ_ROOT ifndef LLVM_OBJ_ROOT
LLVM_OBJ_ROOT = $(BUILD_OBJ_ROOT) LLVM_OBJ_ROOT := $(BUILD_OBJ_ROOT)
endif endif
########################################################################### ###########################################################################
@ -143,6 +143,7 @@ endif
ifdef BYTECODE_LIBRARY ifdef BYTECODE_LIBRARY
# if BYTECODE_LIBRARY is specified, the default is to build the bytecode lib # if BYTECODE_LIBRARY is specified, the default is to build the bytecode lib
all:: bytecodelib all:: bytecodelib
install:: bytecodelib-install
endif endif
# Default Rule: Make sure it's also a :: rule # Default Rule: Make sure it's also a :: rule
@ -172,7 +173,8 @@ prdirs::
# slightly since GNU Make will not try to find implicit rules for targets # slightly since GNU Make will not try to find implicit rules for targets
# which are marked as Phony. # which are marked as Phony.
# #
.PHONY: all dynamic bytecodelib clean distclean install test bytecode prdirs .PHONY: all dynamic bytecodelib bytecodelib-install
.PHONY: clean distclean install test bytecode prdirs
########################################################################### ###########################################################################
# Miscellaneous paths and commands: # Miscellaneous paths and commands:
@ -227,6 +229,7 @@ endif
DESTLIBDEBUG := $(BUILD_OBJ_ROOT)/lib/Debug DESTLIBDEBUG := $(BUILD_OBJ_ROOT)/lib/Debug
DESTLIBRELEASE := $(BUILD_OBJ_ROOT)/lib/Release DESTLIBRELEASE := $(BUILD_OBJ_ROOT)/lib/Release
DESTLIBPROFILE := $(BUILD_OBJ_ROOT)/lib/Profile DESTLIBPROFILE := $(BUILD_OBJ_ROOT)/lib/Profile
DESTLIBBYTECODE := $(BUILD_OBJ_ROOT)/lib/Bytecode
DESTLIBCURRENT := $(BUILD_OBJ_ROOT)/lib/$(CONFIGURATION) DESTLIBCURRENT := $(BUILD_OBJ_ROOT)/lib/$(CONFIGURATION)
# LLVM libraries used for linking # LLVM libraries used for linking
@ -300,14 +303,26 @@ endif
########################################################################### ###########################################################################
#-------------------------------------------------------------------------- #--------------------------------------------------------------------------
# Special tools used while building the LLVM tree. Burg is built as part # Utilities used while building the LLVM tree, which live in the utils dir
# of the utils directory. #
#--------------------------------------------------------------------------
BURG := $(LLVMTOOLCURRENT)/burg BURG := $(LLVMTOOLCURRENT)/burg
RunBurg := $(BURG) $(BURG_OPTS) RunBurg := $(BURG) $(BURG_OPTS)
TBLGEN := $(LLVMTOOLCURRENT)/tblgen TBLGEN := $(LLVMTOOLCURRENT)/tblgen
#--------------------------------------------------------------------------
# The LLVM GCC front-end in C and C++ flavors
#
LLVMGCC := $(LLVMGCCDIR)/bin/gcc
LCC1 := $(LLVMGCCDIR)/lib/gcc-lib/$(LLVMGCCARCH)/cc1
LLVMGXX := $(LLVMGCCDIR)/bin/g++
LCC1XX := $(LLVMGCCDIR)/lib/gcc-lib/$(LLVMGCCARCH)/cc1plus
#--------------------------------------------------------------------------
# Some of the compiled LLVM tools which are used for compilation of runtime
# libraries.
#
LLVMAS := $(LLVMTOOLCURRENT)/as
########################################################################### ###########################################################################
# Compile Time Flags # Compile Time Flags
@ -399,10 +414,12 @@ endif
# #
# Libtool Objects # Libtool Objects
# #
Objs := $(sort $(patsubst Debug/%.lo, %.lo, $(addsuffix .lo,$(notdir $(basename $(Source)))))) Srcs := $(sort $(notdir $(basename $(Source))))
Objs := $(addsuffix .lo, $(Srcs))
ObjectsO := $(addprefix $(BUILD_OBJ_DIR)/Release/,$(Objs)) ObjectsO := $(addprefix $(BUILD_OBJ_DIR)/Release/,$(Objs))
ObjectsP := $(addprefix $(BUILD_OBJ_DIR)/Profile/,$(Objs)) ObjectsP := $(addprefix $(BUILD_OBJ_DIR)/Profile/,$(Objs))
ObjectsG := $(addprefix $(BUILD_OBJ_DIR)/Debug/,$(Objs)) ObjectsG := $(addprefix $(BUILD_OBJ_DIR)/Debug/,$(Objs))
ObjectsBC := $(addprefix $(BUILD_OBJ_DIR)/Bytecode/,$(addsuffix .bc, $(Srcs)))
# #
# The real objects underlying the libtool objects # The real objects underlying the libtool objects
@ -481,6 +498,7 @@ LIBNAME_AG := $(DESTLIBDEBUG)/lib$(LIBRARYNAME).a
LIBNAME_OBJO := $(DESTLIBRELEASE)/$(LIBRARYNAME).o LIBNAME_OBJO := $(DESTLIBRELEASE)/$(LIBRARYNAME).o
LIBNAME_OBJP := $(DESTLIBPROFILE)/$(LIBRARYNAME).o LIBNAME_OBJP := $(DESTLIBPROFILE)/$(LIBRARYNAME).o
LIBNAME_OBJG := $(DESTLIBDEBUG)/$(LIBRARYNAME).o LIBNAME_OBJG := $(DESTLIBDEBUG)/$(LIBRARYNAME).o
LIBNAME_BC := $(DESTLIBBYTECODE)/lib$(LIBRARYNAME).bc
#-------------------------------------------------------------------- #--------------------------------------------------------------------
# Library Targets # Library Targets
@ -489,6 +507,12 @@ LIBNAME_OBJG := $(DESTLIBDEBUG)/$(LIBRARYNAME).o
# dynamic target builds a shared object version of the library... # dynamic target builds a shared object version of the library...
dynamic:: $(DESTLIBCURRENT)/lib$(LIBRARYNAME).so dynamic:: $(DESTLIBCURRENT)/lib$(LIBRARYNAME).so
bytecodelib:: $(LIBNAME_BC)
bytecodelib-install:: $(LLVMGCCDIR)/bytecode-libs/lib$(LIBRARYNAME).bc
$(LLVMGCCDIR)/bytecode-libs/lib$(LIBRARYNAME).bc: $(LIBNAME_BC)
@echo ======= Installing $(LIBRARYNAME) bytecode library =======
cp $< $@
# Does the library want a .o version built? # Does the library want a .o version built?
ifndef DONT_BUILD_RELINKED ifndef DONT_BUILD_RELINKED
@ -504,6 +528,18 @@ endif
# Rules for building libraries # Rules for building libraries
#-------------------------------------------------------------------- #--------------------------------------------------------------------
LinkBCLib := $(LLVMGCC) -shared
ifdef EXPORTED_SYMBOL_LIST
LinkBCLib += -Xlinker -internalize-public-api-list=$(EXPORTED_SYMBOL_LIST)
else
LinkBCLib += -Xlinker -disable-internalize
endif
# Rule for building bytecode libraries.
$(LIBNAME_BC): $(ObjectsBC) $(LibSubDirs)
@echo ======= Linking $(LIBRARYNAME) bytecode library =======
$(VERB) $(LinkBCLib) -o $@ $(ObjectsBC) $(LibSubDirs) $(LibLinkOpts)
# #
# Rules for building dynamically linked libraries. # Rules for building dynamically linked libraries.
# #
@ -540,6 +576,7 @@ $(LIBNAME_AG): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir
@$(RM) -f $@ @$(RM) -f $@
$(VERB) $(Link) -g $(STRIP) -o $@ $(ObjectsG) $(LibSubDirs) -static $(VERB) $(Link) -g $(STRIP) -o $@ $(ObjectsG) $(LibSubDirs) -static
# #
# Rules for building .o libraries. # Rules for building .o libraries.
# #
@ -663,7 +700,7 @@ endif
#--------------------------------------------------------- #---------------------------------------------------------
.PRECIOUS: $(BUILD_OBJ_DIR)/Depend/.dir .PRECIOUS: $(BUILD_OBJ_DIR)/Depend/.dir $(BUILD_OBJ_DIR)/Bytecode/.dir
.PRECIOUS: $(BUILD_OBJ_DIR)/Debug/.dir $(BUILD_OBJ_DIR)/Release/.dir .PRECIOUS: $(BUILD_OBJ_DIR)/Debug/.dir $(BUILD_OBJ_DIR)/Release/.dir
# Create .lo files in the ObjectFiles directory from the .cpp and .c files... # Create .lo files in the ObjectFiles directory from the .cpp and .c files...
@ -691,6 +728,19 @@ $(BUILD_OBJ_DIR)/Debug/%.lo: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Debug/.dir
@echo "Compiling $<" @echo "Compiling $<"
$(VERB) $(CompileCG) $< -o $@ $(VERB) $(CompileCG) $< -o $@
$(BUILD_OBJ_DIR)/Bytecode/%.bc: $(SourceDir)%.cpp $(BUILD_OBJ_DIR)/Bytecode/.dir $(LCC1XX)
@echo "Compiling $< to bytecode"
$(VERB) $(LLVMGXX) $(CPPFLAGS) -c $< -o $@
$(BUILD_OBJ_DIR)/Bytecode/%.bc: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Bytecode/.dir $(LCC1)
@echo "Compiling $< to bytecode"
$(VERB) $(LLVMGCC) $(CPPFLAGS) -c $< -o $@
$(BUILD_OBJ_DIR)/Bytecode/%.bc: $(SourceDir)%.ll $(BUILD_OBJ_DIR)/Bytecode/.dir $(LCC1)
@echo "Compiling $< to bytecode"
$(VERB) $(LLVMAS) $< -f -o $@
# #
# Rules for building lex/yacc files # Rules for building lex/yacc files
# #
@ -747,7 +797,9 @@ endif
# 'make clean' nukes the tree # 'make clean' nukes the tree
clean:: clean::
$(VERB) $(RM) -rf $(BUILD_OBJ_DIR)/Debug $(BUILD_OBJ_DIR)/Release $(BUILD_OBJ_DIR)/Profile $(BUILD_OBJ_DIR)/Depend $(VERB) $(RM) -rf $(BUILD_OBJ_DIR)/Debug $(BUILD_OBJ_DIR)/Release
$(VERB) $(RM) -rf $(BUILD_OBJ_DIR)/Profile $(BUILD_OBJ_DIR)/Depend
$(VERB) $(RM) -rf $(BUILD_OBJ_DIR)/Bytecode
$(VERB) $(RM) -f core core.[0-9][0-9]* *.o *.d *.so *~ *.flc $(VERB) $(RM) -f core core.[0-9][0-9]* *.o *.d *.so *~ *.flc
$(VERB) $(RM) -f $(LEX_OUTPUT) $(YACC_OUTPUT) $(VERB) $(RM) -f $(LEX_OUTPUT) $(YACC_OUTPUT)

View File

@ -119,14 +119,14 @@ endif
# It is typically the root directory of what we're compiling now. # It is typically the root directory of what we're compiling now.
# #
ifndef LLVM_SRC_ROOT ifndef LLVM_SRC_ROOT
LLVM_SRC_ROOT = $(BUILD_SRC_ROOT) LLVM_SRC_ROOT := $(BUILD_SRC_ROOT)
endif endif
# #
# Set the LLVM object directory. # Set the LLVM object directory.
# #
ifndef LLVM_OBJ_ROOT ifndef LLVM_OBJ_ROOT
LLVM_OBJ_ROOT = $(BUILD_OBJ_ROOT) LLVM_OBJ_ROOT := $(BUILD_OBJ_ROOT)
endif endif
########################################################################### ###########################################################################
@ -143,6 +143,7 @@ endif
ifdef BYTECODE_LIBRARY ifdef BYTECODE_LIBRARY
# if BYTECODE_LIBRARY is specified, the default is to build the bytecode lib # if BYTECODE_LIBRARY is specified, the default is to build the bytecode lib
all:: bytecodelib all:: bytecodelib
install:: bytecodelib-install
endif endif
# Default Rule: Make sure it's also a :: rule # Default Rule: Make sure it's also a :: rule
@ -172,7 +173,8 @@ prdirs::
# slightly since GNU Make will not try to find implicit rules for targets # slightly since GNU Make will not try to find implicit rules for targets
# which are marked as Phony. # which are marked as Phony.
# #
.PHONY: all dynamic bytecodelib clean distclean install test bytecode prdirs .PHONY: all dynamic bytecodelib bytecodelib-install
.PHONY: clean distclean install test bytecode prdirs
########################################################################### ###########################################################################
# Miscellaneous paths and commands: # Miscellaneous paths and commands:
@ -227,6 +229,7 @@ endif
DESTLIBDEBUG := $(BUILD_OBJ_ROOT)/lib/Debug DESTLIBDEBUG := $(BUILD_OBJ_ROOT)/lib/Debug
DESTLIBRELEASE := $(BUILD_OBJ_ROOT)/lib/Release DESTLIBRELEASE := $(BUILD_OBJ_ROOT)/lib/Release
DESTLIBPROFILE := $(BUILD_OBJ_ROOT)/lib/Profile DESTLIBPROFILE := $(BUILD_OBJ_ROOT)/lib/Profile
DESTLIBBYTECODE := $(BUILD_OBJ_ROOT)/lib/Bytecode
DESTLIBCURRENT := $(BUILD_OBJ_ROOT)/lib/$(CONFIGURATION) DESTLIBCURRENT := $(BUILD_OBJ_ROOT)/lib/$(CONFIGURATION)
# LLVM libraries used for linking # LLVM libraries used for linking
@ -300,14 +303,26 @@ endif
########################################################################### ###########################################################################
#-------------------------------------------------------------------------- #--------------------------------------------------------------------------
# Special tools used while building the LLVM tree. Burg is built as part # Utilities used while building the LLVM tree, which live in the utils dir
# of the utils directory. #
#--------------------------------------------------------------------------
BURG := $(LLVMTOOLCURRENT)/burg BURG := $(LLVMTOOLCURRENT)/burg
RunBurg := $(BURG) $(BURG_OPTS) RunBurg := $(BURG) $(BURG_OPTS)
TBLGEN := $(LLVMTOOLCURRENT)/tblgen TBLGEN := $(LLVMTOOLCURRENT)/tblgen
#--------------------------------------------------------------------------
# The LLVM GCC front-end in C and C++ flavors
#
LLVMGCC := $(LLVMGCCDIR)/bin/gcc
LCC1 := $(LLVMGCCDIR)/lib/gcc-lib/$(LLVMGCCARCH)/cc1
LLVMGXX := $(LLVMGCCDIR)/bin/g++
LCC1XX := $(LLVMGCCDIR)/lib/gcc-lib/$(LLVMGCCARCH)/cc1plus
#--------------------------------------------------------------------------
# Some of the compiled LLVM tools which are used for compilation of runtime
# libraries.
#
LLVMAS := $(LLVMTOOLCURRENT)/as
########################################################################### ###########################################################################
# Compile Time Flags # Compile Time Flags
@ -399,10 +414,12 @@ endif
# #
# Libtool Objects # Libtool Objects
# #
Objs := $(sort $(patsubst Debug/%.lo, %.lo, $(addsuffix .lo,$(notdir $(basename $(Source)))))) Srcs := $(sort $(notdir $(basename $(Source))))
Objs := $(addsuffix .lo, $(Srcs))
ObjectsO := $(addprefix $(BUILD_OBJ_DIR)/Release/,$(Objs)) ObjectsO := $(addprefix $(BUILD_OBJ_DIR)/Release/,$(Objs))
ObjectsP := $(addprefix $(BUILD_OBJ_DIR)/Profile/,$(Objs)) ObjectsP := $(addprefix $(BUILD_OBJ_DIR)/Profile/,$(Objs))
ObjectsG := $(addprefix $(BUILD_OBJ_DIR)/Debug/,$(Objs)) ObjectsG := $(addprefix $(BUILD_OBJ_DIR)/Debug/,$(Objs))
ObjectsBC := $(addprefix $(BUILD_OBJ_DIR)/Bytecode/,$(addsuffix .bc, $(Srcs)))
# #
# The real objects underlying the libtool objects # The real objects underlying the libtool objects
@ -481,6 +498,7 @@ LIBNAME_AG := $(DESTLIBDEBUG)/lib$(LIBRARYNAME).a
LIBNAME_OBJO := $(DESTLIBRELEASE)/$(LIBRARYNAME).o LIBNAME_OBJO := $(DESTLIBRELEASE)/$(LIBRARYNAME).o
LIBNAME_OBJP := $(DESTLIBPROFILE)/$(LIBRARYNAME).o LIBNAME_OBJP := $(DESTLIBPROFILE)/$(LIBRARYNAME).o
LIBNAME_OBJG := $(DESTLIBDEBUG)/$(LIBRARYNAME).o LIBNAME_OBJG := $(DESTLIBDEBUG)/$(LIBRARYNAME).o
LIBNAME_BC := $(DESTLIBBYTECODE)/lib$(LIBRARYNAME).bc
#-------------------------------------------------------------------- #--------------------------------------------------------------------
# Library Targets # Library Targets
@ -489,6 +507,12 @@ LIBNAME_OBJG := $(DESTLIBDEBUG)/$(LIBRARYNAME).o
# dynamic target builds a shared object version of the library... # dynamic target builds a shared object version of the library...
dynamic:: $(DESTLIBCURRENT)/lib$(LIBRARYNAME).so dynamic:: $(DESTLIBCURRENT)/lib$(LIBRARYNAME).so
bytecodelib:: $(LIBNAME_BC)
bytecodelib-install:: $(LLVMGCCDIR)/bytecode-libs/lib$(LIBRARYNAME).bc
$(LLVMGCCDIR)/bytecode-libs/lib$(LIBRARYNAME).bc: $(LIBNAME_BC)
@echo ======= Installing $(LIBRARYNAME) bytecode library =======
cp $< $@
# Does the library want a .o version built? # Does the library want a .o version built?
ifndef DONT_BUILD_RELINKED ifndef DONT_BUILD_RELINKED
@ -504,6 +528,18 @@ endif
# Rules for building libraries # Rules for building libraries
#-------------------------------------------------------------------- #--------------------------------------------------------------------
LinkBCLib := $(LLVMGCC) -shared
ifdef EXPORTED_SYMBOL_LIST
LinkBCLib += -Xlinker -internalize-public-api-list=$(EXPORTED_SYMBOL_LIST)
else
LinkBCLib += -Xlinker -disable-internalize
endif
# Rule for building bytecode libraries.
$(LIBNAME_BC): $(ObjectsBC) $(LibSubDirs)
@echo ======= Linking $(LIBRARYNAME) bytecode library =======
$(VERB) $(LinkBCLib) -o $@ $(ObjectsBC) $(LibSubDirs) $(LibLinkOpts)
# #
# Rules for building dynamically linked libraries. # Rules for building dynamically linked libraries.
# #
@ -540,6 +576,7 @@ $(LIBNAME_AG): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir
@$(RM) -f $@ @$(RM) -f $@
$(VERB) $(Link) -g $(STRIP) -o $@ $(ObjectsG) $(LibSubDirs) -static $(VERB) $(Link) -g $(STRIP) -o $@ $(ObjectsG) $(LibSubDirs) -static
# #
# Rules for building .o libraries. # Rules for building .o libraries.
# #
@ -663,7 +700,7 @@ endif
#--------------------------------------------------------- #---------------------------------------------------------
.PRECIOUS: $(BUILD_OBJ_DIR)/Depend/.dir .PRECIOUS: $(BUILD_OBJ_DIR)/Depend/.dir $(BUILD_OBJ_DIR)/Bytecode/.dir
.PRECIOUS: $(BUILD_OBJ_DIR)/Debug/.dir $(BUILD_OBJ_DIR)/Release/.dir .PRECIOUS: $(BUILD_OBJ_DIR)/Debug/.dir $(BUILD_OBJ_DIR)/Release/.dir
# Create .lo files in the ObjectFiles directory from the .cpp and .c files... # Create .lo files in the ObjectFiles directory from the .cpp and .c files...
@ -691,6 +728,19 @@ $(BUILD_OBJ_DIR)/Debug/%.lo: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Debug/.dir
@echo "Compiling $<" @echo "Compiling $<"
$(VERB) $(CompileCG) $< -o $@ $(VERB) $(CompileCG) $< -o $@
$(BUILD_OBJ_DIR)/Bytecode/%.bc: $(SourceDir)%.cpp $(BUILD_OBJ_DIR)/Bytecode/.dir $(LCC1XX)
@echo "Compiling $< to bytecode"
$(VERB) $(LLVMGXX) $(CPPFLAGS) -c $< -o $@
$(BUILD_OBJ_DIR)/Bytecode/%.bc: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Bytecode/.dir $(LCC1)
@echo "Compiling $< to bytecode"
$(VERB) $(LLVMGCC) $(CPPFLAGS) -c $< -o $@
$(BUILD_OBJ_DIR)/Bytecode/%.bc: $(SourceDir)%.ll $(BUILD_OBJ_DIR)/Bytecode/.dir $(LCC1)
@echo "Compiling $< to bytecode"
$(VERB) $(LLVMAS) $< -f -o $@
# #
# Rules for building lex/yacc files # Rules for building lex/yacc files
# #
@ -747,7 +797,9 @@ endif
# 'make clean' nukes the tree # 'make clean' nukes the tree
clean:: clean::
$(VERB) $(RM) -rf $(BUILD_OBJ_DIR)/Debug $(BUILD_OBJ_DIR)/Release $(BUILD_OBJ_DIR)/Profile $(BUILD_OBJ_DIR)/Depend $(VERB) $(RM) -rf $(BUILD_OBJ_DIR)/Debug $(BUILD_OBJ_DIR)/Release
$(VERB) $(RM) -rf $(BUILD_OBJ_DIR)/Profile $(BUILD_OBJ_DIR)/Depend
$(VERB) $(RM) -rf $(BUILD_OBJ_DIR)/Bytecode
$(VERB) $(RM) -f core core.[0-9][0-9]* *.o *.d *.so *~ *.flc $(VERB) $(RM) -f core core.[0-9][0-9]* *.o *.d *.so *~ *.flc
$(VERB) $(RM) -f $(LEX_OUTPUT) $(YACC_OUTPUT) $(VERB) $(RM) -f $(LEX_OUTPUT) $(YACC_OUTPUT)