summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-config
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-config')
-rw-r--r--llvm/tools/llvm-config/BuildVariables.inc.in2
-rw-r--r--llvm/tools/llvm-config/CMakeLists.txt1
-rw-r--r--llvm/tools/llvm-config/Makefile6
-rw-r--r--llvm/tools/llvm-config/llvm-config.cpp43
4 files changed, 50 insertions, 2 deletions
diff --git a/llvm/tools/llvm-config/BuildVariables.inc.in b/llvm/tools/llvm-config/BuildVariables.inc.in
index 3f51f491a7a..66f7a16a4ce 100644
--- a/llvm/tools/llvm-config/BuildVariables.inc.in
+++ b/llvm/tools/llvm-config/BuildVariables.inc.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@"
diff --git a/llvm/tools/llvm-config/CMakeLists.txt b/llvm/tools/llvm-config/CMakeLists.txt
index d2ef45a1681..3d5c9e68e11 100644
--- a/llvm/tools/llvm-config/CMakeLists.txt
+++ b/llvm/tools/llvm-config/CMakeLists.txt
@@ -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)
diff --git a/llvm/tools/llvm-config/Makefile b/llvm/tools/llvm-config/Makefile
index 1ff8b6f0406..11e5d338771 100644
--- a/llvm/tools/llvm-config/Makefile
+++ b/llvm/tools/llvm-config/Makefile
@@ -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
diff --git a/llvm/tools/llvm-config/llvm-config.cpp b/llvm/tools/llvm-config/llvm-config.cpp
index 879b9ab0945..c007d71baf1 100644
--- a/llvm/tools/llvm-config/llvm-config.cpp
+++ b/llvm/tools/llvm-config/llvm-config.cpp
@@ -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;
}
OpenPOWER on IntegriCloud