Skip to content

Commit

Permalink
Implement BYTECODE_LIBRARY support
Browse files Browse the repository at this point in the history
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7855 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
lattner committed Aug 15, 2003
1 parent fad4929 commit 481cc7c
Show file tree
Hide file tree
Showing 2 changed files with 124 additions and 20 deletions.
72 changes: 62 additions & 10 deletions Makefile.common
Original file line number Diff line number Diff line change
Expand Up @@ -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

###########################################################################
Expand All @@ -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
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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.
#
Expand Down Expand Up @@ -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.
#
Expand Down Expand Up @@ -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...
Expand Down Expand Up @@ -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
#
Expand Down Expand Up @@ -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)

Expand Down
72 changes: 62 additions & 10 deletions Makefile.rules
Original file line number Diff line number Diff line change
Expand Up @@ -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

###########################################################################
Expand All @@ -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
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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.
#
Expand Down Expand Up @@ -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.
#
Expand Down Expand Up @@ -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...
Expand Down Expand Up @@ -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
#
Expand Down Expand Up @@ -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)

Expand Down

0 comments on commit 481cc7c

Please sign in to comment.