diff --git a/mingw-w64-llvm-14/0001-Fix-GetHostTriple-for-mingw-w64-in-msys.patch b/mingw-w64-llvm-14/0001-Fix-GetHostTriple-for-mingw-w64-in-msys.patch new file mode 100644 index 0000000000..be63c8f6a9 --- /dev/null +++ b/mingw-w64-llvm-14/0001-Fix-GetHostTriple-for-mingw-w64-in-msys.patch @@ -0,0 +1,24 @@ +From b47a00af69f3c662e54dc54e482fc9b0d4ba6480 Mon Sep 17 00:00:00 2001 +From: Martell Malone +Date: Sun, 28 Jun 2015 20:14:51 +0100 +Subject: [PATCH 2/5] Fix GetHostTriple for mingw-w64 in msys + +--- + cmake/modules/GetHostTriple.cmake | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/cmake/modules/GetHostTriple.cmake b/cmake/modules/GetHostTriple.cmake +index 0cad1db4eff..47e9f986e15 100644 +--- a/cmake/modules/GetHostTriple.cmake ++++ b/cmake/modules/GetHostTriple.cmake +@@ -16,7 +16,7 @@ + else() + set( value "i686-pc-windows-msvc" ) + endif() +- elseif( MINGW AND NOT MSYS ) ++ elseif( MINGW ) + # CMake doesn't provide COMPILER_ARCHITECTURE_ID for Clang/GCC, + # but it does for MSVC. + if( CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "ARM.*" ) +2.13.3 + diff --git a/mingw-w64-llvm-14/0002-Revert-CMake-try-creating-symlink-first-on-windows.patch b/mingw-w64-llvm-14/0002-Revert-CMake-try-creating-symlink-first-on-windows.patch new file mode 100644 index 0000000000..e85a37d0c9 --- /dev/null +++ b/mingw-w64-llvm-14/0002-Revert-CMake-try-creating-symlink-first-on-windows.patch @@ -0,0 +1,28 @@ +--- a/cmake/modules/LLVMInstallSymlink.cmake ++++ b/cmake/modules/LLVMInstallSymlink.cmake +@@ -6,17 +6,18 @@ + + function(install_symlink name target outdir) + set(DESTDIR $ENV{DESTDIR}) ++ if(CMAKE_HOST_UNIX) ++ set(LINK_OR_COPY create_symlink) ++ else() ++ set(LINK_OR_COPY copy) ++ endif() ++ + set(bindir "${DESTDIR}${CMAKE_INSTALL_PREFIX}/${outdir}") + + message(STATUS "Creating ${name}") + + execute_process( +- COMMAND "${CMAKE_COMMAND}" -E create_symlink "${target}" "${name}" +- WORKING_DIRECTORY "${bindir}" ERROR_VARIABLE has_err) +- if(CMAKE_HOST_WIN32 AND has_err) +- execute_process( +- COMMAND "${CMAKE_COMMAND}" -E copy "${target}" "${name}" +- WORKING_DIRECTORY "${bindir}") +- endif() ++ COMMAND "${CMAKE_COMMAND}" -E ${LINK_OR_COPY} "${target}" "${name}" ++ WORKING_DIRECTORY "${bindir}") + + endfunction() diff --git a/mingw-w64-llvm-14/0003-add-pthread-as-system-lib-for-mingw.patch b/mingw-w64-llvm-14/0003-add-pthread-as-system-lib-for-mingw.patch new file mode 100644 index 0000000000..1d8792100b --- /dev/null +++ b/mingw-w64-llvm-14/0003-add-pthread-as-system-lib-for-mingw.patch @@ -0,0 +1,26 @@ +From 9102055df75457e1194008ce6152221112a785ad Mon Sep 17 00:00:00 2001 +From: Mateusz Mikula +Date: Tue, 14 Mar 2017 17:50:29 +0100 +Subject: [PATCH 5/5] add pthread as system lib for mingw + +--- + lib/Support/CMakeLists.txt | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/lib/Support/CMakeLists.txt b/lib/Support/CMakeLists.txt +index 0a8e3897cce..de9cda5dda3 100644 +--- a/lib/Support/CMakeLists.txt ++++ b/lib/Support/CMakeLists.txt +@@ -6,6 +6,9 @@ set(system_libs) + # libuuid required for FOLDERID_Profile usage in lib/Support/Windows/Path.inc. + # advapi32 required for CryptAcquireContextW in lib/Support/Windows/Path.inc. + set(system_libs ${system_libs} psapi shell32 ole32 uuid advapi32) ++ if( MINGW ) ++ set(system_libs ${system_libs} pthread) ++ endif() + elseif( CMAKE_HOST_UNIX ) + if( HAVE_LIBRT ) + set(system_libs ${system_libs} rt) +-- +2.13.3 + diff --git a/mingw-w64-llvm-14/0004-enable-emutls-for-mingw.patch b/mingw-w64-llvm-14/0004-enable-emutls-for-mingw.patch new file mode 100644 index 0000000000..2388f67c39 --- /dev/null +++ b/mingw-w64-llvm-14/0004-enable-emutls-for-mingw.patch @@ -0,0 +1,11 @@ +--- llvm-10.0.0.src/include/llvm/ADT/Triple.h.orig 2020-05-15 15:49:40.073000000 +0200 ++++ llvm-10.0.0.src/include/llvm/ADT/Triple.h 2020-05-15 20:51:29.844520400 +0200 +@@ -809,7 +809,7 @@ + + /// Tests whether the target uses emulated TLS as default. + bool hasDefaultEmulatedTLS() const { +- return isAndroid() || isOSOpenBSD() || isWindowsCygwinEnvironment(); ++ return isAndroid() || isOSOpenBSD() || isOSCygMing(); + } + + /// Tests whether the target uses -data-sections as default. diff --git a/mingw-w64-llvm-14/0011-List-memrchr-as-unavailable-on-Windows.patch b/mingw-w64-llvm-14/0011-List-memrchr-as-unavailable-on-Windows.patch new file mode 100644 index 0000000000..632af083ac --- /dev/null +++ b/mingw-w64-llvm-14/0011-List-memrchr-as-unavailable-on-Windows.patch @@ -0,0 +1,25 @@ +From eef37f2d89e72954645f4f3583227df74c841a84 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Mateusz=20Miku=C5=82a?= +Date: Sun, 18 Sep 2022 13:17:16 +0200 +Subject: [PATCH] List memrchr as unavailable on Windows + +Otherwise LLVM will optimize strrchr into memrchr causing linker error +--- + lib/Analysis/TargetLibraryInfo.cpp | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/lib/Analysis/TargetLibraryInfo.cpp b/lib/Analysis/TargetLibraryInfo.cpp +index 75b57e75fdd0..40f0cf39d7d6 100644 +--- a/lib/Analysis/TargetLibraryInfo.cpp ++++ b/lib/Analysis/TargetLibraryInfo.cpp +@@ -439,6 +439,7 @@ static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T, + TLI.setUnavailable(LibFunc_htons); + TLI.setUnavailable(LibFunc_lchown); + TLI.setUnavailable(LibFunc_lstat); ++ TLI.setUnavailable(LibFunc_memrchr); + TLI.setUnavailable(LibFunc_ntohl); + TLI.setUnavailable(LibFunc_ntohs); + TLI.setUnavailable(LibFunc_pread); +-- +2.37.3.windows.1 + diff --git a/mingw-w64-llvm-14/0101-link-pthread-with-mingw.patch b/mingw-w64-llvm-14/0101-link-pthread-with-mingw.patch new file mode 100644 index 0000000000..3fdfc0fc0d --- /dev/null +++ b/mingw-w64-llvm-14/0101-link-pthread-with-mingw.patch @@ -0,0 +1,25 @@ +From 9498118b65fa150f074efb52b4507b53434a90ad Mon Sep 17 00:00:00 2001 +From: Mateusz Mikula +Date: Thu, 2 Feb 2017 12:33:51 +0100 +Subject: [PATCH 4/6] link pthread with mingw + +--- + lib/Driver/ToolChains/MinGW.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/Driver/ToolChains/MinGW.cpp b/lib/Driver/ToolChains/MinGW.cpp +index 632b76d92b..23da2d6376 100644 +--- a/lib/Driver/ToolChains/MinGW.cpp ++++ b/lib/Driver/ToolChains/MinGW.cpp +@@ -265,7 +265,7 @@ + if (Args.hasArg(options::OPT_pg)) + CmdArgs.push_back("-lgmon"); + +- if (Args.hasArg(options::OPT_pthread)) ++ if (!Args.hasArg(options::OPT_no_pthread)) + CmdArgs.push_back("-lpthread"); + + if (Sanitize.needsAsanRt()) { +-- +2.14.1 + diff --git a/mingw-w64-llvm-14/0102-fix-emulated-tls.patch b/mingw-w64-llvm-14/0102-fix-emulated-tls.patch new file mode 100644 index 0000000000..5f558369fe --- /dev/null +++ b/mingw-w64-llvm-14/0102-fix-emulated-tls.patch @@ -0,0 +1,30 @@ +diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp +index 74c14fed6575..44ffd22b921f 100644 +--- a/lib/CodeGen/CodeGenModule.cpp ++++ b/lib/CodeGen/CodeGenModule.cpp +@@ -1143,7 +1143,7 @@ static bool shouldAssumeDSOLocal(const CodeGenModule &CGM, + // such variables can't be marked as DSO local. (Native TLS variables + // can't be dllimported at all, though.) + if (GV->isDeclarationForLinker() && isa(GV) && +- (!GV->isThreadLocal() || CGM.getCodeGenOpts().EmulatedTLS)) ++ (!GV->isThreadLocal() || CGM.useEmulatedTLS())) + return false; + } + +diff --git a/clang/lib/CodeGen/CodeGenModule.h b/clang/lib/CodeGen/CodeGenModule.h +index f57afdca4942..b10c392dc1bb 100644 +--- a/lib/CodeGen/CodeGenModule.h ++++ b/lib/CodeGen/CodeGenModule.h +@@ -746,6 +746,12 @@ public: + + const TargetCodeGenInfo &getTargetCodeGenInfo(); + ++ bool useEmulatedTLS() const { ++ if (CodeGenOpts.ExplicitEmulatedTLS) ++ return CodeGenOpts.EmulatedTLS; ++ return getTriple().hasDefaultEmulatedTLS(); ++ } ++ + CodeGenTypes &getTypes() { return Types; } + + CodeGenVTables &getVTables() { return VTables; } diff --git a/mingw-w64-llvm-14/PKGBUILD b/mingw-w64-llvm-14/PKGBUILD new file mode 100644 index 0000000000..1e52a7d39e --- /dev/null +++ b/mingw-w64-llvm-14/PKGBUILD @@ -0,0 +1,217 @@ +# Maintainer: Martell Malone +# Maintainer: Alexey Pavlov +# Contributor: Ray Donnelly +# Contributor: Mateusz MikuĊ‚a +# Contributor: wirx6 +# Contributor: Yuui Tanabe +# Contributor: Oscar Fuentes +# Contributor: Adrian Pop + +if [[ $MINGW_PACKAGE_PREFIX == *-clang-* ]]; then + _clangprefix=1 +fi +_realname=llvm +pkgbase=mingw-w64-${_realname}-14 +pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}-14" + "${MINGW_PACKAGE_PREFIX}-clang-14") +pkgver=14.0.6 +pkgrel=1 +pkgdesc="C language family frontend for LLVM (mingw-w64)" +arch=('any') +mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64' 'clang32' 'clangarm64') +url="https://llvm.org/" +license=("custom:Apache 2.0 with LLVM Exception") +makedepends=("${MINGW_PACKAGE_PREFIX}-cc" + "${MINGW_PACKAGE_PREFIX}-cmake" + "${MINGW_PACKAGE_PREFIX}-ninja" + "${MINGW_PACKAGE_PREFIX}-pkg-config" + "${MINGW_PACKAGE_PREFIX}-z3" + "${MINGW_PACKAGE_PREFIX}-libffi" + "${MINGW_PACKAGE_PREFIX}-python-sphinx" + "${MINGW_PACKAGE_PREFIX}-python" + "git" + ) +_url=https://github.com/llvm/llvm-project/releases/download/llvmorg-${pkgver} +# libunwind: # https://bugs.llvm.org/show_bug.cgi?id=49228 +source=("${_url}/llvm-${pkgver}.src.tar.xz"{,.sig} + "${_url}/clang-${pkgver}.src.tar.xz"{,.sig} + "0001-Fix-GetHostTriple-for-mingw-w64-in-msys.patch" + "0002-Revert-CMake-try-creating-symlink-first-on-windows.patch" + "0003-add-pthread-as-system-lib-for-mingw.patch" + "0004-enable-emutls-for-mingw.patch" + "0101-link-pthread-with-mingw.patch" + "0102-fix-emulated-tls.patch") +# Some patch notes :) +#0001-0099 -> llvm +#0101-0199 -> clang +sha256sums=('050922ecaaca5781fdf6631ea92bc715183f202f9d2f15147226f023414f619a' + 'SKIP' + '2b5847b6a63118b9efe5c85548363c81ffe096b66c3b3675e953e26342ae4031' + 'SKIP' + 'eb03df53671df6627768141b3aaa76abe176a14e5e47911c97bec544387c4aff' + 'efed1bd36c0d4295d4e4439987771e004ef5d232ce6e6f345d535baab945fd23' + '7f0c64cd87b61e894be632f180ae5291e1aa9f1d9d382608f659067eeeda7146' + '3837bd707d3d99a742e874d5c59a1e7d5502811d6926319974c5d9db86020039' + '715cb8862753854b2d9256e0b70003e2d1f57083d83eaeaf5a095fc72b8a4e26' + '3a58bd5243fb082df64c90bd9a4f00c698317f20365d11bbe30fac5dfccd215e') +validpgpkeys=('B6C8F98282B944E3B0D5C2530FC3042E345AD05D' # Hans Wennborg, Google. + '474E22316ABF4785A88C6E8EA2C794A986419D8A') # Tom Stellard +noextract=(clang-${pkgver}.src.tar.xz) + +apply_patch_with_msg() { + for _patch in "$@" + do + msg2 "Applying ${_patch}" + patch -Nbp1 -i "${srcdir}/${_patch}" + done +} + +prepare() { + cd "${srcdir}" + plain "Extracting clang-${pkgver}.src.tar.xz due to symlink(s) without pre-existing target(s)" + tar -xJf ${srcdir}/clang-${pkgver}.src.tar.xz -C ${srcdir} || true + + # Rename Directories + for pkg in llvm clang; do + mv ${pkg}-$pkgver.src ${pkg} + done + + # Patch llvm + cd "${srcdir}/llvm" + apply_patch_with_msg \ + "0001-Fix-GetHostTriple-for-mingw-w64-in-msys.patch" \ + "0002-Revert-CMake-try-creating-symlink-first-on-windows.patch" + + if (( ! _clangprefix )); then + apply_patch_with_msg \ + "0003-add-pthread-as-system-lib-for-mingw.patch" \ + "0004-enable-emutls-for-mingw.patch" + fi + + # Patch clang + cd "${srcdir}/clang" + + if (( ! _clangprefix )); then + apply_patch_with_msg \ + "0101-link-pthread-with-mingw.patch" + fi + + # https://github.com/msys2/MINGW-packages/pull/12550#issuecomment-1228506687 + apply_patch_with_msg \ + "0102-fix-emulated-tls.patch" +} + +build() { + cd "${srcdir}" + + case "${CARCH}" in + i?86|armv7) + # lld needs all the address space it can get. + LDFLAGS+=" -Wl,--large-address-aware" + ;; + esac + + local -a platform_config + local -a common_cmake_args + + if check_option "debug" "y"; then + common_cmake_args+=(-DCMAKE_BUILD_TYPE=Debug) + VERBOSE="VERBOSE=1" + else + common_cmake_args+=(-DCMAKE_BUILD_TYPE=Release) + fi + common_cmake_args+=(-Wno-dev + -DCMAKE_INSTALL_PREFIX=${MINGW_PREFIX}/opt/llvm-14 + -DCMAKE_INSTALL_LIBDIR=lib + -DCMAKE_SYSTEM_IGNORE_PATH=/usr/lib + -DLLVM_HOST_TRIPLE="${CARCH}-w64-windows-gnu" + -DPython3_EXECUTABLE=${MINGW_PREFIX}/bin/python.exe) + + # Include location of libffi headers in CPPFLAGS + FFI_INCLUDE_DIR="$(pkg-config --cflags libffi)" + FFI_INCLUDE_DIR=$(echo $FFI_INCLUDE_DIR | sed 's|-I||g') + + if (( _clangprefix )); then + platform_config+=(-DCLANG_DEFAULT_RTLIB=compiler-rt + -DCLANG_DEFAULT_UNWINDLIB=libunwind + -DCLANG_DEFAULT_CXX_STDLIB=libc++ + -DLLVM_ENABLE_LIBCXX=ON + -DCLANG_DEFAULT_LINKER=lld + -DLLVM_ENABLE_LLD=ON) + fi + + local _projects="clang" + + platform_config+=(-DLLVM_TARGETS_TO_BUILD="AArch64;X86") + + mkdir -p build-${MSYSTEM} && cd build-${MSYSTEM} + + MSYS2_ARG_CONV_EXCL="-DCMAKE_INSTALL_PREFIX=" \ + ${MINGW_PREFIX}/bin/cmake.exe \ + -GNinja \ + -DFFI_INCLUDE_DIR="${FFI_INCLUDE_DIR}" \ + -DLIBCLANG_BUILD_STATIC=ON \ + -DLLVM_BUILD_STATIC=ON \ + -DLLVM_ENABLE_ASSERTIONS=OFF \ + -DLLVM_ENABLE_FFI=ON \ + -DLLVM_ENABLE_PROJECTS="${_projects}" \ + -DLLVM_ENABLE_SPHINX=ON \ + -DLLVM_ENABLE_THREADS=ON \ + -DLLVM_INCLUDE_EXAMPLES=OFF \ + -DLLVM_INCLUDE_BENCHMARKS=OFF \ + -DLLVM_INCLUDE_TESTS=OFF \ + -DLLVM_INCLUDE_UTILS=OFF \ + "${common_cmake_args[@]}" \ + "${platform_config[@]}" \ + ../llvm + + ${MINGW_PREFIX}/bin/cmake.exe --build . + + # Disable automatic installation of components that go into subpackages + # -i.orig to check what has been removed in-case it starts dropping more than it should + # + sed -i.orig '/clang\/cmake_install.cmake/d' tools/cmake_install.cmake +} + +package_clang-14() { + pkgdesc="C language family frontend for LLVM (mingw-w64)" + url="https://clang.llvm.org/" + depends=("${MINGW_PACKAGE_PREFIX}-llvm-14" + $( ((_clangprefix)) && echo \ + "${MINGW_PACKAGE_PREFIX}-crt" \ + "${MINGW_PACKAGE_PREFIX}-headers" \ + "${MINGW_PACKAGE_PREFIX}-lld" \ + "${MINGW_PACKAGE_PREFIX}-winpthreads" \ + || echo "${MINGW_PACKAGE_PREFIX}-gcc")) + + ${MINGW_PREFIX}/bin/cmake --install "${srcdir}/build-${MSYSTEM}/tools/clang" --prefix "${pkgdir}${MINGW_PREFIX}"/opt/llvm-14 +} + +package_llvm-14() { + pkgdesc="Low Level Virtual Machine (mingw-w64)" + depends=("${MINGW_PACKAGE_PREFIX}-gcc-libs") + + DESTDIR="${pkgdir}" ${MINGW_PREFIX}/bin/cmake --install "${srcdir}/build-${MSYSTEM}" + + install -Dm644 "${srcdir}/llvm/LICENSE.TXT" "${pkgdir}${MINGW_PREFIX}/opt/llvm-14/share/licenses/llvm/LICENSE" + + # Install CMake stuff + install -d "${pkgdir}"${MINGW_PREFIX}/opt/llvm-14/share/llvm/cmake/{modules,platforms} + install -Dm644 "${srcdir}"/llvm/cmake/modules/*.cmake "${pkgdir}"${MINGW_PREFIX}/opt/llvm-14/share/llvm/cmake/modules/ + install -Dm644 "${srcdir}"/llvm/cmake/platforms/*.cmake "${pkgdir}"${MINGW_PREFIX}/opt/llvm-14/share/llvm/cmake/platforms/ + + # fix cmake files. + local PREFIX_WIN=$(cygpath -wm ${MINGW_PREFIX}) + sed -e "s|${PREFIX_WIN}|${MINGW_PREFIX}|g" -i ${pkgdir}/${MINGW_PREFIX}/opt/llvm-14/lib/cmake/llvm/LLVMExports.cmake +} + +# template start; name=mingw-w64-splitpkg-wrappers; version=1.0; +# vim: set ft=bash : + +# generate wrappers +for _name in "${pkgname[@]}"; do + _short="package_${_name#${MINGW_PACKAGE_PREFIX}-}" + _func="$(declare -f "${_short}")" + eval "${_func/#${_short}/package_${_name}}" +done +# template end;