mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-27 05:10:41 +00:00
Implement BYTECODE_LIBRARY support
llvm-svn: 7855
This commit is contained in:
parent
a45f4930ed
commit
7b45e00414
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user