[llvm] 08efca9 - [LLVM][Cygwin] Fix shared library name (#136599)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 24 13:51:37 PDT 2025
Author: jeremyd2019
Date: 2025-04-24T23:51:34+03:00
New Revision: 08efca9c2c2b9005a0390965a2bad9ef208e4db4
URL: https://github.com/llvm/llvm-project/commit/08efca9c2c2b9005a0390965a2bad9ef208e4db4
DIFF: https://github.com/llvm/llvm-project/commit/08efca9c2c2b9005a0390965a2bad9ef208e4db4.diff
LOG: [LLVM][Cygwin] Fix shared library name (#136599)
Treat Cygwin like WIN32 in llvm-shlib for naming the library.
Don't create shlib symlinks on Cygwin, they don't help anything there,
but teach llvm_install_library_symlink that Cygwin's shared libraries
live in BINDIR like WIN32.
Add a new variable to llvm-config's BuildVariables to have CMake's
shared library prefix, to avoid having to patch between "cyg" and
"msys-" on MSYS2.
Added:
Modified:
llvm/cmake/modules/AddLLVM.cmake
llvm/tools/llvm-config/BuildVariables.inc.in
llvm/tools/llvm-config/CMakeLists.txt
llvm/tools/llvm-config/llvm-config.cpp
llvm/tools/llvm-shlib/CMakeLists.txt
Removed:
################################################################################
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})
More information about the llvm-commits
mailing list