diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake index 39f0e28a249d3..52bf7ca0906a3 100644 --- a/llvm/cmake/modules/AddLLVM.cmake +++ b/llvm/cmake/modules/AddLLVM.cmake @@ -750,7 +750,7 @@ function(llvm_add_library name) set(library_name ${output_name}-${LLVM_VERSION_MAJOR}${LLVM_VERSION_SUFFIX}) set(api_name ${output_name}-${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}${LLVM_VERSION_SUFFIX}) set_target_properties(${name} PROPERTIES OUTPUT_NAME ${library_name}) - if(UNIX) + if(UNIX AND NOT CYGWIN) llvm_install_library_symlink(${api_name} ${library_name} SHARED COMPONENT ${name}) llvm_install_library_symlink(${output_name} ${library_name} SHARED @@ -2259,7 +2259,7 @@ function(llvm_install_library_symlink name dest type) endif() set(output_dir lib${LLVM_LIBDIR_SUFFIX}) - if(WIN32 AND "${type}" STREQUAL "SHARED") + if((WIN32 OR CYGWIN) AND "${type}" STREQUAL "SHARED") set(output_dir "${CMAKE_INSTALL_BINDIR}") endif() diff --git a/llvm/tools/llvm-config/BuildVariables.inc.in b/llvm/tools/llvm-config/BuildVariables.inc.in index 370005cd8d7d0..e4e1d449bf4d7 100644 --- a/llvm/tools/llvm-config/BuildVariables.inc.in +++ b/llvm/tools/llvm-config/BuildVariables.inc.in @@ -35,3 +35,4 @@ #define LLVM_DYLIB_COMPONENTS "@LLVM_DYLIB_COMPONENTS_expanded@" #define LLVM_DYLIB_VERSION "@LLVM_DYLIB_VERSION@" #define LLVM_TOOLS_INSTALL_DIR "@LLVM_TOOLS_INSTALL_DIR@" +#define LLVM_SHARED_LIBRARY_PREFIX "@LLVM_SHARED_LIBRARY_PREFIX@" diff --git a/llvm/tools/llvm-config/CMakeLists.txt b/llvm/tools/llvm-config/CMakeLists.txt index 02c2532dba77a..3a8f40b9c6fea 100644 --- a/llvm/tools/llvm-config/CMakeLists.txt +++ b/llvm/tools/llvm-config/CMakeLists.txt @@ -65,6 +65,7 @@ set(LLVM_CXXFLAGS "${CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION} ${L set(LLVM_BUILD_SYSTEM cmake) set(LLVM_HAS_RTTI ${LLVM_CONFIG_HAS_RTTI}) set(LLVM_DYLIB_VERSION "${LLVM_VERSION_MAJOR}${LLVM_VERSION_SUFFIX}") +set(LLVM_SHARED_LIBRARY_PREFIX "${CMAKE_SHARED_LIBRARY_PREFIX}") # Use the C++ link flags, since they should be a superset of C link flags. set(LLVM_LDFLAGS "${CMAKE_CXX_LINK_FLAGS}") diff --git a/llvm/tools/llvm-config/llvm-config.cpp b/llvm/tools/llvm-config/llvm-config.cpp index d5b76b1bb6c16..a54538bb534ad 100644 --- a/llvm/tools/llvm-config/llvm-config.cpp +++ b/llvm/tools/llvm-config/llvm-config.cpp @@ -390,7 +390,7 @@ int main(int argc, char **argv) { SharedExt = "dll"; SharedVersionedExt = LLVM_DYLIB_VERSION ".dll"; if (HostTriple.isOSCygMing()) { - SharedPrefix = "lib"; + SharedPrefix = LLVM_SHARED_LIBRARY_PREFIX; StaticExt = "a"; StaticPrefix = "lib"; } else { @@ -454,7 +454,7 @@ int main(int argc, char **argv) { /// extension. Returns true if Lib is in a recognized format. auto GetComponentLibraryNameSlice = [&](const StringRef &Lib, StringRef &Out) { - if (Lib.starts_with("lib")) { + if (Lib.starts_with(StaticPrefix) || Lib.starts_with(SharedPrefix)) { unsigned FromEnd; if (Lib.ends_with(StaticExt)) { FromEnd = StaticExt.size() + 1; @@ -465,7 +465,10 @@ int main(int argc, char **argv) { } if (FromEnd != 0) { - Out = Lib.slice(3, Lib.size() - FromEnd); + unsigned FromStart = Lib.starts_with(SharedPrefix) + ? SharedPrefix.size() + : StaticPrefix.size(); + Out = Lib.slice(FromStart, Lib.size() - FromEnd); return true; } } diff --git a/llvm/tools/llvm-shlib/CMakeLists.txt b/llvm/tools/llvm-shlib/CMakeLists.txt index a5b0cab0f1ce5..4968c4e24e15b 100644 --- a/llvm/tools/llvm-shlib/CMakeLists.txt +++ b/llvm/tools/llvm-shlib/CMakeLists.txt @@ -33,7 +33,7 @@ if(LLVM_BUILD_LLVM_DYLIB) if (LLVM_LINK_LLVM_DYLIB) set(INSTALL_WITH_TOOLCHAIN INSTALL_WITH_TOOLCHAIN) endif() - if (WIN32) + if (WIN32 OR CYGWIN) add_llvm_library(LLVM SHARED DISABLE_LLVM_LINK_LLVM_DYLIB SONAME ${INSTALL_WITH_TOOLCHAIN} ${SOURCES}) else() add_llvm_library(LLVM SHARED DISABLE_LLVM_LINK_LLVM_DYLIB OUTPUT_NAME LLVM ${INSTALL_WITH_TOOLCHAIN} ${SOURCES})