Implement BYTECODE_LIBRARY support

llvm-svn: 7855
This commit is contained in:
Chris Lattner 2003-08-15 02:18:35 +00:00
parent a45f4930ed
commit 7b45e00414
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.
#
ifndef LLVM_SRC_ROOT
LLVM_SRC_ROOT = $(BUILD_SRC_ROOT)
LLVM_SRC_ROOT := $(BUILD_SRC_ROOT)
endif
#
# Set the LLVM object directory.
#
ifndef LLVM_OBJ_ROOT
LLVM_OBJ_ROOT = $(BUILD_OBJ_ROOT)
LLVM_OBJ_ROOT := $(BUILD_OBJ_ROOT)
endif
###########################################################################
@ -143,6 +143,7 @@ endif
ifdef BYTECODE_LIBRARY
# if BYTECODE_LIBRARY is specified, the default is to build the bytecode lib
all:: bytecodelib
install:: bytecodelib-install
endif
# 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
# 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:
@ -227,6 +229,7 @@ endif
DESTLIBDEBUG := $(BUILD_OBJ_ROOT)/lib/Debug
DESTLIBRELEASE := $(BUILD_OBJ_ROOT)/lib/Release
DESTLIBPROFILE := $(BUILD_OBJ_ROOT)/lib/Profile
DESTLIBBYTECODE := $(BUILD_OBJ_ROOT)/lib/Bytecode
DESTLIBCURRENT := $(BUILD_OBJ_ROOT)/lib/$(CONFIGURATION)
# LLVM libraries used for linking
@ -300,14 +303,26 @@ endif
###########################################################################
#--------------------------------------------------------------------------
# Special tools used while building the LLVM tree. Burg is built as part
# of the utils directory.
#--------------------------------------------------------------------------
# Utilities used while building the LLVM tree, which live in the utils dir
#
BURG := $(LLVMTOOLCURRENT)/burg
RunBurg := $(BURG) $(BURG_OPTS)
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
@ -399,10 +414,12 @@ endif
#
# 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))
ObjectsP := $(addprefix $(BUILD_OBJ_DIR)/Profile/,$(Objs))
ObjectsG := $(addprefix $(BUILD_OBJ_DIR)/Debug/,$(Objs))
ObjectsBC := $(addprefix $(BUILD_OBJ_DIR)/Bytecode/,$(addsuffix .bc, $(Srcs)))
#
# The real objects underlying the libtool objects
@ -481,6 +498,7 @@ LIBNAME_AG := $(DESTLIBDEBUG)/lib$(LIBRARYNAME).a
LIBNAME_OBJO := $(DESTLIBRELEASE)/$(LIBRARYNAME).o
LIBNAME_OBJP := $(DESTLIBPROFILE)/$(LIBRARYNAME).o
LIBNAME_OBJG := $(DESTLIBDEBUG)/$(LIBRARYNAME).o
LIBNAME_BC := $(DESTLIBBYTECODE)/lib$(LIBRARYNAME).bc
#--------------------------------------------------------------------
# Library Targets
@ -489,6 +507,12 @@ LIBNAME_OBJG := $(DESTLIBDEBUG)/$(LIBRARYNAME).o
# dynamic target builds a shared object version of the library...
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?
ifndef DONT_BUILD_RELINKED
@ -504,6 +528,18 @@ endif
# 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.
#
@ -540,6 +576,7 @@ $(LIBNAME_AG): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir
@$(RM) -f $@
$(VERB) $(Link) -g $(STRIP) -o $@ $(ObjectsG) $(LibSubDirs) -static
#
# 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
# 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 $<"
$(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
#
@ -747,7 +797,9 @@ endif
# 'make clean' nukes the tree
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 $(LEX_OUTPUT) $(YACC_OUTPUT)

View File

@ -119,14 +119,14 @@ endif
# It is typically the root directory of what we're compiling now.
#
ifndef LLVM_SRC_ROOT
LLVM_SRC_ROOT = $(BUILD_SRC_ROOT)
LLVM_SRC_ROOT := $(BUILD_SRC_ROOT)
endif
#
# Set the LLVM object directory.
#
ifndef LLVM_OBJ_ROOT
LLVM_OBJ_ROOT = $(BUILD_OBJ_ROOT)
LLVM_OBJ_ROOT := $(BUILD_OBJ_ROOT)
endif
###########################################################################
@ -143,6 +143,7 @@ endif
ifdef BYTECODE_LIBRARY
# if BYTECODE_LIBRARY is specified, the default is to build the bytecode lib
all:: bytecodelib
install:: bytecodelib-install
endif
# 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
# 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:
@ -227,6 +229,7 @@ endif
DESTLIBDEBUG := $(BUILD_OBJ_ROOT)/lib/Debug
DESTLIBRELEASE := $(BUILD_OBJ_ROOT)/lib/Release
DESTLIBPROFILE := $(BUILD_OBJ_ROOT)/lib/Profile
DESTLIBBYTECODE := $(BUILD_OBJ_ROOT)/lib/Bytecode
DESTLIBCURRENT := $(BUILD_OBJ_ROOT)/lib/$(CONFIGURATION)
# LLVM libraries used for linking
@ -300,14 +303,26 @@ endif
###########################################################################
#--------------------------------------------------------------------------
# Special tools used while building the LLVM tree. Burg is built as part
# of the utils directory.
#--------------------------------------------------------------------------
# Utilities used while building the LLVM tree, which live in the utils dir
#
BURG := $(LLVMTOOLCURRENT)/burg
RunBurg := $(BURG) $(BURG_OPTS)
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
@ -399,10 +414,12 @@ endif
#
# 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))
ObjectsP := $(addprefix $(BUILD_OBJ_DIR)/Profile/,$(Objs))
ObjectsG := $(addprefix $(BUILD_OBJ_DIR)/Debug/,$(Objs))
ObjectsBC := $(addprefix $(BUILD_OBJ_DIR)/Bytecode/,$(addsuffix .bc, $(Srcs)))
#
# The real objects underlying the libtool objects
@ -481,6 +498,7 @@ LIBNAME_AG := $(DESTLIBDEBUG)/lib$(LIBRARYNAME).a
LIBNAME_OBJO := $(DESTLIBRELEASE)/$(LIBRARYNAME).o
LIBNAME_OBJP := $(DESTLIBPROFILE)/$(LIBRARYNAME).o
LIBNAME_OBJG := $(DESTLIBDEBUG)/$(LIBRARYNAME).o
LIBNAME_BC := $(DESTLIBBYTECODE)/lib$(LIBRARYNAME).bc
#--------------------------------------------------------------------
# Library Targets
@ -489,6 +507,12 @@ LIBNAME_OBJG := $(DESTLIBDEBUG)/$(LIBRARYNAME).o
# dynamic target builds a shared object version of the library...
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?
ifndef DONT_BUILD_RELINKED
@ -504,6 +528,18 @@ endif
# 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.
#
@ -540,6 +576,7 @@ $(LIBNAME_AG): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir
@$(RM) -f $@
$(VERB) $(Link) -g $(STRIP) -o $@ $(ObjectsG) $(LibSubDirs) -static
#
# 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
# 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 $<"
$(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
#
@ -747,7 +797,9 @@ endif
# 'make clean' nukes the tree
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 $(LEX_OUTPUT) $(YACC_OUTPUT)