mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	Fix llvm-config to emit the linker flag for the combined shared object built by autoconfig/make instead of the individual components.
				
					
				
			Summary: This fixes `llvm-config` instead of fixing the makefiles because, AIUI, LLVM's autoconfig/make build system is on the way out anyway. This change only affects builds that use autoconfig/make. Reviewers: jfb Subscribers: echristo, dschuff, llvm-commits Differential Revision: http://reviews.llvm.org/D10716 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241938 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
		| @@ -26,3 +26,5 @@ | ||||
| #define LLVM_LIBDIR_SUFFIX "@LLVM_LIBDIR_SUFFIX@" | ||||
| #define LLVM_TARGETS_BUILT "@LLVM_TARGETS_BUILT@" | ||||
| #define LLVM_SYSTEM_LIBS "@LLVM_SYSTEM_LIBS@" | ||||
| #define BUILD_SHARED_LIBS "@BUILD_SHARED_LIBS@" | ||||
| #define WAS_BUILT_WITH_CMAKE "@WAS_BUILT_WITH_CMAKE@" | ||||
|   | ||||
| @@ -20,6 +20,7 @@ set(LLVM_CXXFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${uppercase_CMAKE_BUILD_ | ||||
| set(LLVM_LDFLAGS "${CMAKE_CXX_LINK_FLAGS}") | ||||
| set(LLVM_BUILDMODE ${CMAKE_BUILD_TYPE}) | ||||
| set(LLVM_SYSTEM_LIBS ${SYSTEM_LIBS}) | ||||
| set(WAS_BUILT_WITH_CMAKE "ON") | ||||
| string(REPLACE ";" " " LLVM_TARGETS_BUILT "${LLVM_TARGETS_TO_BUILD}") | ||||
| configure_file(${BUILDVARIABLES_SRCPATH} ${BUILDVARIABLES_OBJPATH} @ONLY) | ||||
|  | ||||
|   | ||||
| @@ -65,6 +65,12 @@ $(ObjDir)/BuildVariables.inc: $(BUILDVARIABLES_SRCPATH) Makefile $(ObjDir)/.dir | ||||
| 	  >> temp.sed | ||||
| 	$(Verb) $(ECHO) 's/@LLVM_TARGETS_BUILT@/$(subst /,\/,$(TARGETS_TO_BUILD))/' \ | ||||
| 	  >> temp.sed | ||||
| 	$(if $(filter-out $(ENABLE_SHARED),0),\ | ||||
| 	  $(Verb) $(ECHO) 's/@BUILD_SHARED_LIBS@/ON/',\ | ||||
| 	  $(Verb) $(ECHO) 's/@BUILD_SHARED_LIBS@/OFF/') \ | ||||
| 	  >> temp.sed | ||||
| 	$(Verb) $(ECHO) 's/@WAS_BUILT_WITH_CMAKE@/OFF/' \ | ||||
| 	  >> temp.sed | ||||
| 	$(Verb) $(SED) -f temp.sed < $< > $@ | ||||
| 	$(Verb) $(RM) temp.sed | ||||
|  | ||||
|   | ||||
| @@ -349,6 +349,30 @@ int main(int argc, char **argv) { | ||||
|                              /*IncludeNonInstalled=*/IsInDevelopmentTree); | ||||
|  | ||||
|     if (PrintLibs || PrintLibNames || PrintLibFiles) { | ||||
|       // If LLVM was built as a shared library, there will be only one thing | ||||
|       // that users should link against. | ||||
|       const bool IsSharedLib = (std::strcmp(BUILD_SHARED_LIBS, "ON") == 0); | ||||
|       const bool WasBuiltWithCMake = (std::strcmp(WAS_BUILT_WITH_CMAKE, "ON") == 0); | ||||
|       // CMake correctly builds components as separate shared libraries, however | ||||
|       // autoconfig/make builds components a static libraries and then links | ||||
|       // them all together to form a single shared library. Thus, only when | ||||
|       // `WAS_BUILT_WITH_CMAKE` is `OFF` and `BUILD_SHARED_LIBS` is `ON` do we | ||||
|       // override `RequiredLibs` with the single library name. | ||||
|       if (IsSharedLib && !WasBuiltWithCMake) { | ||||
|         RequiredLibs.clear(); | ||||
|         std::string Name = "libLLVM-" PACKAGE_VERSION; | ||||
|         const Triple HostTriple(LLVM_DEFAULT_TARGET_TRIPLE); | ||||
|         if (HostTriple.isOSWindows()) { | ||||
|           Name += ".dll"; | ||||
|         } else if (HostTriple.isOSDarwin()) { | ||||
|           Name += ".dylib"; | ||||
|         } else { | ||||
|           // default to linux' ext: | ||||
|           Name += ".so"; | ||||
|         } | ||||
|         RequiredLibs.push_back(Name); | ||||
|       } | ||||
|  | ||||
|       for (unsigned i = 0, e = RequiredLibs.size(); i != e; ++i) { | ||||
|         StringRef Lib = RequiredLibs[i]; | ||||
|         if (i) | ||||
| @@ -360,8 +384,23 @@ int main(int argc, char **argv) { | ||||
|           OS << ActiveLibDir << '/' << Lib; | ||||
|         } else if (PrintLibs) { | ||||
|           // If this is a typical library name, include it using -l. | ||||
|           if (Lib.startswith("lib") && Lib.endswith(".a")) { | ||||
|             OS << "-l" << Lib.slice(3, Lib.size()-2); | ||||
|           if (Lib.startswith("lib")) { | ||||
|             size_t FromEnd = 0; | ||||
|             if (Lib.endswith(".a")) { | ||||
|               FromEnd = 2; | ||||
|             } else if (Lib.endswith(".so")) { | ||||
|               FromEnd = 3; | ||||
|             } else if (Lib.endswith(".dylib")) { | ||||
|               FromEnd = 6; | ||||
|             } else { | ||||
|               FromEnd = 0; | ||||
|             } | ||||
|  | ||||
|             if (FromEnd != 0) { | ||||
|               OS << "-l" << Lib.slice(3, Lib.size() - FromEnd); | ||||
|             } else { | ||||
|               OS << "-l:" << Lib; | ||||
|             } | ||||
|             continue; | ||||
|           } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user