mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-01 00:17:01 +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_LIBDIR_SUFFIX "@LLVM_LIBDIR_SUFFIX@"
|
||||||
#define LLVM_TARGETS_BUILT "@LLVM_TARGETS_BUILT@"
|
#define LLVM_TARGETS_BUILT "@LLVM_TARGETS_BUILT@"
|
||||||
#define LLVM_SYSTEM_LIBS "@LLVM_SYSTEM_LIBS@"
|
#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_LDFLAGS "${CMAKE_CXX_LINK_FLAGS}")
|
||||||
set(LLVM_BUILDMODE ${CMAKE_BUILD_TYPE})
|
set(LLVM_BUILDMODE ${CMAKE_BUILD_TYPE})
|
||||||
set(LLVM_SYSTEM_LIBS ${SYSTEM_LIBS})
|
set(LLVM_SYSTEM_LIBS ${SYSTEM_LIBS})
|
||||||
|
set(WAS_BUILT_WITH_CMAKE "ON")
|
||||||
string(REPLACE ";" " " LLVM_TARGETS_BUILT "${LLVM_TARGETS_TO_BUILD}")
|
string(REPLACE ";" " " LLVM_TARGETS_BUILT "${LLVM_TARGETS_TO_BUILD}")
|
||||||
configure_file(${BUILDVARIABLES_SRCPATH} ${BUILDVARIABLES_OBJPATH} @ONLY)
|
configure_file(${BUILDVARIABLES_SRCPATH} ${BUILDVARIABLES_OBJPATH} @ONLY)
|
||||||
|
|
||||||
|
|||||||
@@ -65,6 +65,12 @@ $(ObjDir)/BuildVariables.inc: $(BUILDVARIABLES_SRCPATH) Makefile $(ObjDir)/.dir
|
|||||||
>> temp.sed
|
>> temp.sed
|
||||||
$(Verb) $(ECHO) 's/@LLVM_TARGETS_BUILT@/$(subst /,\/,$(TARGETS_TO_BUILD))/' \
|
$(Verb) $(ECHO) 's/@LLVM_TARGETS_BUILT@/$(subst /,\/,$(TARGETS_TO_BUILD))/' \
|
||||||
>> temp.sed
|
>> 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) $(SED) -f temp.sed < $< > $@
|
||||||
$(Verb) $(RM) temp.sed
|
$(Verb) $(RM) temp.sed
|
||||||
|
|
||||||
|
|||||||
@@ -349,6 +349,30 @@ int main(int argc, char **argv) {
|
|||||||
/*IncludeNonInstalled=*/IsInDevelopmentTree);
|
/*IncludeNonInstalled=*/IsInDevelopmentTree);
|
||||||
|
|
||||||
if (PrintLibs || PrintLibNames || PrintLibFiles) {
|
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) {
|
for (unsigned i = 0, e = RequiredLibs.size(); i != e; ++i) {
|
||||||
StringRef Lib = RequiredLibs[i];
|
StringRef Lib = RequiredLibs[i];
|
||||||
if (i)
|
if (i)
|
||||||
@@ -360,8 +384,23 @@ int main(int argc, char **argv) {
|
|||||||
OS << ActiveLibDir << '/' << Lib;
|
OS << ActiveLibDir << '/' << Lib;
|
||||||
} else if (PrintLibs) {
|
} else if (PrintLibs) {
|
||||||
// If this is a typical library name, include it using -l.
|
// If this is a typical library name, include it using -l.
|
||||||
if (Lib.startswith("lib") && Lib.endswith(".a")) {
|
if (Lib.startswith("lib")) {
|
||||||
OS << "-l" << Lib.slice(3, Lib.size()-2);
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user