diff --git a/Makefile.common b/Makefile.common index 3d89a1c12b4..915cd8a3f4a 100644 --- a/Makefile.common +++ b/Makefile.common @@ -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) diff --git a/Makefile.rules b/Makefile.rules index 3d89a1c12b4..915cd8a3f4a 100644 --- a/Makefile.rules +++ b/Makefile.rules @@ -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)