From 283eb7ac5671d6c21749b696bc214f4bc4564fd6 Mon Sep 17 00:00:00 2001 From: Jeremy Drake Date: Mon, 21 Apr 2025 10:42:25 -0700 Subject: [PATCH 1/2] llvm: fix llvm-config for Cygwin --- ...Fix-llvm-config-shared-library-names.patch | 114 ++++++++++++++++++ llvm/PKGBUILD | 5 +- 2 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 llvm/0003-LLVM-Cygwin-Fix-llvm-config-shared-library-names.patch diff --git a/llvm/0003-LLVM-Cygwin-Fix-llvm-config-shared-library-names.patch b/llvm/0003-LLVM-Cygwin-Fix-llvm-config-shared-library-names.patch new file mode 100644 index 00000000000..f28b9e78278 --- /dev/null +++ b/llvm/0003-LLVM-Cygwin-Fix-llvm-config-shared-library-names.patch @@ -0,0 +1,114 @@ +From 5cb3c0bc6beeb169ab08ffc7da8a78276f254c25 Mon Sep 17 00:00:00 2001 +From: Jeremy Drake +Date: Mon, 21 Apr 2025 10:37:40 -0700 +Subject: [PATCH 17/17] [LLVM][Cygwin] Fix llvm shared library name + +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 BuildVariables to have CMake's shared library +prefix, to avoid having to patch between "cyg" and "msys-" on MSYS2. +--- + llvm/cmake/modules/AddLLVM.cmake | 4 ++-- + llvm/tools/llvm-config/BuildVariables.inc.in | 1 + + llvm/tools/llvm-config/CMakeLists.txt | 1 + + llvm/tools/llvm-config/llvm-config.cpp | 9 ++++++--- + llvm/tools/llvm-shlib/CMakeLists.txt | 2 +- + 5 files changed, 11 insertions(+), 6 deletions(-) + +diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake +index 7e1449e1a..93ce51e69 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 +@@ -2241,7 +2241,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 370005cd8..e4e1d449b 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 02c2532db..3a8f40b9c 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 d5b76b1bb..a54538bb5 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 9ad6154ae..64492f9db 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}) +-- +2.49.0.windows.1 + diff --git a/llvm/PKGBUILD b/llvm/PKGBUILD index 30f4ae75159..00360667150 100644 --- a/llvm/PKGBUILD +++ b/llvm/PKGBUILD @@ -12,7 +12,7 @@ _version=20.1.3 _rc="" _tag=llvmorg-${_version}${_rc} pkgver=${_version}${_rc/-/} -pkgrel=1 +pkgrel=2 pkgdesc="C language family frontend for LLVM" arch=('i686' 'x86_64') url="https://llvm.org/" @@ -39,6 +39,7 @@ source=("${_url}/llvm-${pkgver}.src.tar.xz"{,.sig} "${_url}/runtimes-${pkgver}.src.tar.xz"{,.sig} "0001-LLVM-Cygwin-Fix-symbol-visibility-definition.patch" "0002-undef-i386.patch" + "0003-LLVM-Cygwin-Fix-llvm-config-shared-library-names.patch" "0102-Clang-Cygwin-Enable-few-conditions-that-are-shared-w.patch" "0103-Clang-Cygwin-Enable-TLS.patch" "0104-Clang-Cygwin-Fix-symbol-visibility-definition.patch" @@ -69,6 +70,7 @@ sha256sums=('e5dc9b9d842c5f79080f67860a084077e163430de1e2cd3a74e8bee86e186751' 'SKIP' '68053c76fc82309a8a2c6f91ee9344f40d943f5a3078681c9d76388cc901b66b' '233010fa91dc741ef6a7fd8b864f92766d37b3ce50c5d39811ca883ea6d1d859' + '834ed176bc5bad1dabde4558aa38e768b6d454f82081f1cdedb44163f0962be6' 'a73568d353fd27ff7cae0bdddbced0d0119274a465befe8a0bda6cae4721da0b' 'f93d3b3227ee5958880d070451f92129c62a645e6cdc94bac9a13fa0144b3e23' 'f489cec6ee4a7dcfbe90be4d58fa853d0dfab893d024a8e878074dfab1fd4bfd' @@ -126,6 +128,7 @@ prepare() { cd "${srcdir}"/llvm apply_git_patch_with_msg 0001-LLVM-Cygwin-Fix-symbol-visibility-definition.patch apply_git_patch_with_msg 0002-undef-i386.patch + apply_git_patch_with_msg 0003-LLVM-Cygwin-Fix-llvm-config-shared-library-names.patch # Patch clang cd "${srcdir}"/clang From 8d5e148e0cf3d2a530a58ab79f3890dd9aa98e47 Mon Sep 17 00:00:00 2001 From: Jeremy Drake Date: Mon, 21 Apr 2025 17:46:23 -0700 Subject: [PATCH 2/2] llvm: patch signals, remove LLVM_ENABLE_BACKTRACES=OFF --- ...Signals-compatibility-with-Cygwin-AP.patch | 26 +++++++++++++++++++ llvm/PKGBUILD | 5 ++-- 2 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 llvm/0004-LLVM-Cygwin-Fix-Signals-compatibility-with-Cygwin-AP.patch diff --git a/llvm/0004-LLVM-Cygwin-Fix-Signals-compatibility-with-Cygwin-AP.patch b/llvm/0004-LLVM-Cygwin-Fix-Signals-compatibility-with-Cygwin-AP.patch new file mode 100644 index 00000000000..3dce5d29144 --- /dev/null +++ b/llvm/0004-LLVM-Cygwin-Fix-Signals-compatibility-with-Cygwin-AP.patch @@ -0,0 +1,26 @@ +From b6b6d01ec5c84ba11bc797e185e915e701699532 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Mateusz=20Miku=C5=82a?= +Date: Sat, 5 Apr 2025 13:18:35 +0200 +Subject: [PATCH 17/17] [LLVM][Cygwin] Fix Signals compatibility with Cygwin + API + +--- + llvm/lib/Support/Unix/Signals.inc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/llvm/lib/Support/Unix/Signals.inc b/llvm/lib/Support/Unix/Signals.inc +index 2e7b467a1..4f8010ca2 100644 +--- a/llvm/lib/Support/Unix/Signals.inc ++++ b/llvm/lib/Support/Unix/Signals.inc +@@ -842,7 +842,7 @@ void llvm::sys::PrintStackTrace(raw_ostream &OS, int Depth) { + + const char *name = strrchr(dlinfo.dli_fname, '/'); + if (!name) +- OS << format(" %-*s", width, dlinfo.dli_fname); ++ OS << format(" %-*s", width, (const char *)dlinfo.dli_fname); + else + OS << format(" %-*s", width, name + 1); + +-- +2.49.0.windows.1 + diff --git a/llvm/PKGBUILD b/llvm/PKGBUILD index 00360667150..d066ddcbcfe 100644 --- a/llvm/PKGBUILD +++ b/llvm/PKGBUILD @@ -40,6 +40,7 @@ source=("${_url}/llvm-${pkgver}.src.tar.xz"{,.sig} "0001-LLVM-Cygwin-Fix-symbol-visibility-definition.patch" "0002-undef-i386.patch" "0003-LLVM-Cygwin-Fix-llvm-config-shared-library-names.patch" + "0004-LLVM-Cygwin-Fix-Signals-compatibility-with-Cygwin-AP.patch" "0102-Clang-Cygwin-Enable-few-conditions-that-are-shared-w.patch" "0103-Clang-Cygwin-Enable-TLS.patch" "0104-Clang-Cygwin-Fix-symbol-visibility-definition.patch" @@ -71,6 +72,7 @@ sha256sums=('e5dc9b9d842c5f79080f67860a084077e163430de1e2cd3a74e8bee86e186751' '68053c76fc82309a8a2c6f91ee9344f40d943f5a3078681c9d76388cc901b66b' '233010fa91dc741ef6a7fd8b864f92766d37b3ce50c5d39811ca883ea6d1d859' '834ed176bc5bad1dabde4558aa38e768b6d454f82081f1cdedb44163f0962be6' + '6bf8f75ac82b60d13198e206c0cf1bac7cdf1a84dc1db0a86d7686f1c0f346f1' 'a73568d353fd27ff7cae0bdddbced0d0119274a465befe8a0bda6cae4721da0b' 'f93d3b3227ee5958880d070451f92129c62a645e6cdc94bac9a13fa0144b3e23' 'f489cec6ee4a7dcfbe90be4d58fa853d0dfab893d024a8e878074dfab1fd4bfd' @@ -129,6 +131,7 @@ prepare() { apply_git_patch_with_msg 0001-LLVM-Cygwin-Fix-symbol-visibility-definition.patch apply_git_patch_with_msg 0002-undef-i386.patch apply_git_patch_with_msg 0003-LLVM-Cygwin-Fix-llvm-config-shared-library-names.patch + apply_git_patch_with_msg 0004-LLVM-Cygwin-Fix-Signals-compatibility-with-Cygwin-AP.patch # Patch clang cd "${srcdir}"/clang @@ -168,11 +171,9 @@ build() { -DCOMPILER_RT_BUILD_ORC=OFF -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON -DLLVM_DEFAULT_TARGET_TRIPLE=${CARCH}-pc-windows-cygnus - -DLLVM_ENABLE_BACKTRACES=OFF -DLLVM_ENABLE_THREADS=ON -DLLVM_HOST_TRIPLE=${CARCH}-pc-windows-cygnus -DLLVM_INCLUDE_BENCHMARKS=OFF - -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_USE_SYMLINKS=OFF -DPython3_EXECUTABLE=/usr/bin/python.exe