From: Reid Spencer Date: Thu, 2 Dec 2004 09:28:21 +0000 (+0000) Subject: For PR466: X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=9a2f137765305930b8cf0bf9fd09064ee328fbbc;p=oota-llvm.git For PR466: Change construction of bytecode libraries from producing a single bytecode file to producing a library containing bytecode files. This gets around the problem of multiple symbol definitions in the linker if something like -lc -lc is attempted on the command line. Previously this happened because the linker would find libc.bc as a "library". It will now find libc.a which it can simply search for missing symbols instead of linking in wholesale. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@18425 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Makefile.rules b/Makefile.rules index 9897fc87846..fc6598bb672 100644 --- a/Makefile.rules +++ b/Makefile.rules @@ -232,8 +232,8 @@ ifdef TOOL_VERBOSE C.Flags += -v CXX.Flags += -v LD.Flags += -v - BCLinkLib.Flags += -v VERBOSE := 1 +else endif # Adjust settings for verbose mode @@ -286,12 +286,11 @@ Link = $(LIBTOOL) $(LibTool.Flags) --mode=link $(CXX) $(CPP.Flags) \ $(CompileCommonOpts) $(LD.Flags) $(Strip) Relink = $(LIBTOOL) $(LibTool.Flags) --mode=link $(CXX) $(CPP.Flags) \ $(CompileCommonOpts) -BCLinkLib = $(LLVMGCC) -shared -nostdlib $(BCLinkLib.Flags) LTInstall = $(LIBTOOL) $(LibTool.Flags) --mode=install $(INSTALL) Burg = $(BURG) -I $(BUILD_SRC_DIR) TableGen = $(TBLGEN) -I $(BUILD_SRC_DIR) Archive = $(AR) $(AR.Flags) -LArchive = $(ToolDir)/llvm-ar rcsf +LArchive = $(LLVMToolDir)/llvm-ar rcsf ifdef RANLIB Ranlib = $(RANLIB) else @@ -466,7 +465,7 @@ LIBRARYNAME := $(strip $(LIBRARYNAME)) LibName.LA := $(LibDir)/lib$(LIBRARYNAME).la LibName.A := $(LibDir)/lib$(LIBRARYNAME).a LibName.O := $(LibDir)/$(LIBRARYNAME).o -LibName.BC := $(LibDir)/lib$(LIBRARYNAME).bc +LibName.BCA:= $(LibDir)/lib$(LIBRARYNAME).bca #--------------------------------------------------------- # Shared Library Targets: @@ -511,37 +510,41 @@ endif #--------------------------------------------------------- ifdef BYTECODE_LIBRARY -ifdef EXPORTED_SYMBOL_LIST - BCLinkLib += -Xlinker -internalize-public-api-list=$(EXPORTED_SYMBOL_LIST) -else - ifdef EXPORTED_SYMBOL_FILE - BCLinkLib += -Xlinker -internalize-public-api-file=$(EXPORTED_SYMBOL_FILE) - else - BCLinkLib += -Xlinker -disable-internalize - endif -endif +all-local:: $(LibName.BCA) -all-local:: $(LibName.BC) +ifdef EXPORTED_SYMBOL_FILE +BCLinkLib = $(LLVMGCC) -shared -nostdlib -Xlinker \ + -internalize-public-api-file=$(EXPORTED_SYMBOL_FILE) -$(LibName.BC): $(BUILT_SOURCES) $(ObjectsBC) $(LibDir)/.dir $(GCCLD) - $(Echo) Linking $(BuildMode) Bytecode Library $(notdir $@) - $(Verb) $(BCLinkLib) -o $@ $(ObjectsBC) +$(LibName.BCA): $(BUILT_SOURCES) $(ObjectsBC) $(LibDir)/.dir $(GCCLD) + $(Echo) Building $(BuildMode) Bytecode Archive $(notdir $@) \ + "(internalize)" + $(BCLinkLib) -o $(ObjDir)/$(LIBRARYNAME).o $(ObjectsBC) + $(Verb) $(LArchive) $@ $(ObjDir)/$(LIBRARYNAME).o +else +$(LibName.BCA): $(BUILT_SOURCES) $(ObjectsBC) $(LibDir)/.dir $(GCCLD) + $(Echo) Building $(BuildMode) Bytecode Archive $(notdir $@) + $(Verb) $(LArchive) $@ $(ObjectsBC) + +endif clean-local:: -ifneq ($(strip $(LibName.BC)),) - -$(Verb) $(RM) -f $(LibName.BC) +ifneq ($(strip $(LibName.BCA)),) + -$(Verb) $(RM) -f $(LibName.BCA) endif -DestBytecodeLib = $(bytecode_libdir)/lib$(LIBRARYNAME).bc +DestBytecodeLib = $(bytecode_libdir)/lib$(LIBRARYNAME).a + +install-bytecode: $(DestBytecodeLib) install-local:: $(DestBytecodeLib) -$(DestBytecodeLib): $(bytecode_libdir) $(LibName.BC) - $(Echo) Installing $(BuildMode) Bytecode Library $(DestBytecodeLib) - $(Verb) $(INSTALL) $(LibName.BC) $@ +$(DestBytecodeLib): $(bytecode_libdir) $(LibName.BCA) + $(Echo) Installing $(BuildMode) Bytecode Archive $(DestBytecodeLib) + $(Verb) $(INSTALL) $(LibName.BCA) $@ uninstall-local:: - $(Echo) Uninstalling $(BuildMode) Bytecode Library $(DestBytecodeLib) + $(Echo) Uninstalling $(BuildMode) Bytecode Archive $(DestBytecodeLib) -$(Verb) $(RM) -f $(DestBytecodeLib) endif