[llvm] [LLVM][Cygwin] Fix llvm-config shared library names (PR #136599)

via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 21 12:16:39 PDT 2025


https://github.com/jeremyd2019 created https://github.com/llvm/llvm-project/pull/136599

Add a new variable to BuildVariables to have CMake's shared library prefix, to avoid having to patch between "cyg" and "msys-" on MSYS2.

Override LLVM_DYLIB_VERSION on Cygwin to include minor version, though I don't really understand why that isn't an issue on any other platform.

Strip SharedVersionedExt on Cygwin, as the import library is lacking the version suffix.

I'd appreciate feedback on whether this is right, or if the cmake files need tweaking to make the library names on Cygwin more like MinGW (or somehow make the import library name more like what other UNIX systems would link to)

/cc @mstorsjo 

>From 30308d5172b08b53a538650e069a899b231c6b14 Mon Sep 17 00:00:00 2001
From: Jeremy Drake <github at jdrake.com>
Date: Mon, 21 Apr 2025 10:37:40 -0700
Subject: [PATCH] [LLVM][Cygwin] Fix llvm-config shared library names

Add a new variable to BuildVariables to have CMake's shared library
prefix, to avoid having to patch between "cyg" and "msys-" on MSYS2.

Override LLVM_DYLIB_VERSION on Cygwin to include minor version, though I
don't really understand why that isn't an issue on any other platform.
---
 llvm/tools/llvm-config/BuildVariables.inc.in |  1 +
 llvm/tools/llvm-config/CMakeLists.txt        |  6 +++++-
 llvm/tools/llvm-config/llvm-config.cpp       | 12 +++++++++---
 3 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/llvm/tools/llvm-config/BuildVariables.inc.in b/llvm/tools/llvm-config/BuildVariables.inc.in
index 370005cd8d7d0..ba4adb61a13b7 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 "@CMAKE_SHARED_LIBRARY_PREFIX@"
diff --git a/llvm/tools/llvm-config/CMakeLists.txt b/llvm/tools/llvm-config/CMakeLists.txt
index 02c2532dba77a..c1fabbfdd2ae4 100644
--- a/llvm/tools/llvm-config/CMakeLists.txt
+++ b/llvm/tools/llvm-config/CMakeLists.txt
@@ -64,7 +64,11 @@ set(LLVM_CFLAGS "${LLVM_C_STD_FLAG} ${LLVM_DEFINITIONS}")
 set(LLVM_CXXFLAGS "${CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION} ${LLVM_CXX_STDLIB_FLAG} ${COMPILE_FLAGS} ${LLVM_DEFINITIONS}")
 set(LLVM_BUILD_SYSTEM cmake)
 set(LLVM_HAS_RTTI ${LLVM_CONFIG_HAS_RTTI})
-set(LLVM_DYLIB_VERSION "${LLVM_VERSION_MAJOR}${LLVM_VERSION_SUFFIX}")
+if(CYGWIN)
+  set(LLVM_DYLIB_VERSION "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}${LLVM_VERSION_SUFFIX}")
+else()
+  set(LLVM_DYLIB_VERSION "${LLVM_VERSION_MAJOR}${LLVM_VERSION_SUFFIX}")
+endif()
 
 # 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..f995f0a7b9f18 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,10 +454,13 @@ 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;
+      } else if (HostTriple.isWindowsCygwinEnvironment() &&
+                 Lib.ends_with(SharedVersionedExt)) {
+        FromEnd = SharedVersionedExt.size() + 1;
       } else if (Lib.ends_with(SharedExt)) {
         FromEnd = SharedExt.size() + 1;
       } else {
@@ -465,7 +468,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;
       }
     }



More information about the llvm-commits mailing list