Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 0 additions & 11 deletions mingw-w64-llvm/0004-enable-emutls-for-mingw.patch

This file was deleted.

124 changes: 54 additions & 70 deletions mingw-w64-llvm/PKGBUILD
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,12 @@ pkgname=("${MINGW_PACKAGE_PREFIX}-llvm"
"${MINGW_PACKAGE_PREFIX}-compiler-rt"
$( (( _clangprefix )) && echo "${MINGW_PACKAGE_PREFIX}-gcc-compat" )
"${MINGW_PACKAGE_PREFIX}-lld")
_pkgver=21.1.8
_pkgver=22.1.4
pkgver=${_pkgver/-/}
pkgrel=3
pkgrel=5
pkgdesc="C language family frontend for LLVM (mingw-w64)"
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64' 'clangarm64')
mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64')
url="https://llvm.org/"
msys2_repository_url="https://github.com/llvm/llvm-project"
msys2_references=(
Expand All @@ -46,28 +46,21 @@ makedepends=($([[ "$_compiler" == "clang" ]] && echo \
"${MINGW_PACKAGE_PREFIX}-cmake"
"${MINGW_PACKAGE_PREFIX}-ninja"
"${MINGW_PACKAGE_PREFIX}-pkgconf"
"${MINGW_PACKAGE_PREFIX}-libunwind"
"${MINGW_PACKAGE_PREFIX}-libffi"
"${MINGW_PACKAGE_PREFIX}-z3"
"${MINGW_PACKAGE_PREFIX}-python"
$((( _clangprefix )) && echo \
"${MINGW_PACKAGE_PREFIX}-compiler-rt" \
"${MINGW_PACKAGE_PREFIX}-libc++")
"git"
"${MINGW_PACKAGE_PREFIX}-git"
)
_url=https://github.com/llvm/llvm-project/releases/download/llvmorg-${_pkgver}
source=("${_url}/llvm-${_pkgver}.src.tar.xz"{,.sig}
"${_url}/clang-${_pkgver}.src.tar.xz"{,.sig}
"${_url}/clang-tools-extra-${_pkgver}.src.tar.xz"{,.sig}
"${_url}/compiler-rt-${_pkgver}.src.tar.xz"{,.sig}
"${_url}/lld-${_pkgver}.src.tar.xz"{,.sig}
"${_url}/cmake-${_pkgver}.src.tar.xz"{,.sig}
"${_url}/third-party-${_pkgver}.src.tar.xz"{,.sig}
_pkgfn=llvm-project-${_pkgver}.src
source=("${_url}/${_pkgfn}.tar.xz"{,.sig}
# 0001-0099 -> llvm
"0001-Fix-GetHostTriple-for-mingw-w64-in-msys.patch"
"0002-Fix-Findzstd-on-MINGW.patch"
"0003-add-pthread-as-system-lib-for-mingw.patch"
"0004-enable-emutls-for-mingw.patch"
# 0101-0199 -> clang
"0101-link-pthread-with-mingw.patch"
# 0201-0299 -> rt
Expand All @@ -76,33 +69,19 @@ source=("${_url}/llvm-${_pkgver}.src.tar.xz"{,.sig}
# 0401-0499 -> clang-tools-extra
# 0901-0999 -> whole tree
)
sha256sums=('d9022ddadb40a15015f6b27e6549a7144704ded8828ba036ffe4b8165707de21'
'SKIP'
'6090e3f23720d003cdd84483a47d0eec6d01adbb5e0c714ac0c8b58de546aa62'
'SKIP'
'6ddb7e731bf09ab821132e2e8a3c706b6d9c52c92a9ce9a9ed0976a9c6c28829'
'SKIP'
'dd54ae21aee1780fac59445b51ebff601ad016b31ac3a7de3b21126fd3ccb229'
'SKIP'
'd9524c5ee952500a2af92c27042a0d90ab089962af47816d4c85d0ebf76373d1'
'SKIP'
'85735f20fd8c81ecb0a09abb0c267018475420e93b65050cc5b7634eab744de9'
'SKIP'
'7fe99424384aea529ffaeec9cc9dfb8b451fd1852c03fc109e426fe208a1f1a7'
sha256sums=('3e68c90dda630c27d41d201e37b8bbf5222e39b273dec5ca880709c69e0a07d4'
'SKIP'
'eb03df53671df6627768141b3aaa76abe176a14e5e47911c97bec544387c4aff'
'd77d47e37e4948f5c01ae8bc05fb4e879b6516132c5a60c7bc820c9cbbb39668'
'790eb0fccb4ef29c3795bceb8a62c8f4ecd0bdd6c49b2812352b04cfbc552342'
'76d2a88733cebb1f01b766ff2ab91a9e095bae1d2e4cc18c1ffcf21fd095efc4'
'715cb8862753854b2d9256e0b70003e2d1f57083d83eaeaf5a095fc72b8a4e26'
'fd0253879cc5e31857f57307e6105e56493358e35d7c4540e0b476be607ab94e')
validpgpkeys=('B6C8F98282B944E3B0D5C2530FC3042E345AD05D' # Hans Wennborg, Google.
'474E22316ABF4785A88C6E8EA2C794A986419D8A' # Tom Stellard
'71046D1E9C6656BDD61171873E83BABF4A4F9E85' # Cullen Rhodes
'FFB3368980F3E6BB5737145A316C56D064CACBA5' # Douglas Yung
'D574BD5D1D0E98895E3BF90044F2485E45D59042') # Tobias Hieta
noextract=(clang-${_pkgver}.src.tar.xz
llvm-${_pkgver}.src.tar.xz)
noextract=(${_pkgfn}.tar.xz)

apply_patch_with_msg() {
for _patch in "$@"
Expand All @@ -121,46 +100,36 @@ revert_patch_with_msg() {
}

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

plain "Extracting llvm-${_pkgver}.src.tar.xz due to symlink(s) without pre-existing target(s)"
tar -xJf "${srcdir}"/llvm-${_pkgver}.src.tar.xz -C "${srcdir}" || true

# Rename Directories
for pkg in llvm clang clang-tools-extra compiler-rt lld cmake third-party; do
mv ${pkg}-${_pkgver}.src ${pkg}
done
plain "Extracting ${_pkgfn}.tar.xz due to symlink(s) without pre-existing target(s)"
${MINGW_PREFIX}/bin/bsdtar -xJf "${srcdir}"/${_pkgfn}.tar.xz -C "${srcdir}" || true

# Patch llvm
cd "${srcdir}"/llvm
cd "${srcdir}"/${_pkgfn}/llvm
apply_patch_with_msg \
"0001-Fix-GetHostTriple-for-mingw-w64-in-msys.patch" \
"0002-Fix-Findzstd-on-MINGW.patch"

if (( ! _clangprefix )); then
apply_patch_with_msg \
"0003-add-pthread-as-system-lib-for-mingw.patch" \
"0004-enable-emutls-for-mingw.patch"
"0003-add-pthread-as-system-lib-for-mingw.patch"
fi

# Patch clang
cd "${srcdir}"/clang
cd "${srcdir}"/${_pkgfn}/clang

if (( ! _clangprefix )); then
apply_patch_with_msg \
"0101-link-pthread-with-mingw.patch"
fi

# Patch lld
cd "${srcdir}"/lld
cd "${srcdir}"/${_pkgfn}/lld

apply_patch_with_msg \
"0303-ignore-new-bfd-options.patch"

# Patch clang-tools-extra
cd "${srcdir}"/clang-tools-extra
cd "${srcdir}"/${_pkgfn}/clang-tools-extra

# Patch whole tree
cd "${srcdir}"
Expand Down Expand Up @@ -212,11 +181,11 @@ build() {

if (( _pgo )); then
# Build Clang with instrumentation.
mkdir -p "${srcdir}"/build-${MSYSTEM}-instrument && cd "${srcdir}"/build-${MSYSTEM}-instrument
${MINGW_PREFIX}/bin/cmake.exe \
-GNinja \
-DDEFAULT_SYSROOT=${MINGW_PREFIX} \
-DLLVM_ENABLE_PROJECTS="clang;compiler-rt" \
-DLLVM_ENABLE_PROJECTS="clang" \
-DLLVM_ENABLE_RUNTIMES="compiler-rt" \
-DLLVM_BUILD_INSTRUMENTED=IR \
-DLLVM_TARGETS_TO_BUILD=Native \
-DCLANG_DEFAULT_RTLIB=compiler-rt \
Expand All @@ -225,21 +194,22 @@ build() {
-DCOMPILER_RT_BUILD_SANITIZERS=OFF \
-DCOMPILER_RT_BUILD_PROFILE=OFF \
"${common_cmake_args[@]}" \
../llvm
${MINGW_PREFIX}/bin/cmake --build . --target compiler-rt --target clang
-S ${_pkgfn}/${_realname} \
-B build-${MSYSTEM}-instrument
${MINGW_PREFIX}/bin/cmake --build build-${MSYSTEM}-instrument --target compiler-rt --target clang
# Use that to build part of llvm to generate a profile.
mkdir -p "${srcdir}"/build-${MSYSTEM}-train && cd "${srcdir}"/build-${MSYSTEM}-train
${MINGW_PREFIX}/bin/cmake.exe \
-GNinja \
-DCMAKE_C_COMPILER="${srcdir}"/build-${MSYSTEM}-instrument/bin/clang.exe \
-DCMAKE_CXX_COMPILER="${srcdir}"/build-${MSYSTEM}-instrument/bin/clang++.exe \
-DLLVM_ENABLE_PROJECTS="clang" \
-DLLVM_TARGETS_TO_BUILD=Native \
"${common_cmake_args[@]}" \
../llvm
-S ${_pkgfn}/${_realname} \
-B build-${MSYSTEM}-train
# Drop profiles generated from running cmake; those are not representative.
rm "${srcdir}"/build-${MSYSTEM}-instrument/profiles/*.profraw
${MINGW_PREFIX}/bin/cmake --build . --target clangSema
${MINGW_PREFIX}/bin/cmake --build build-${MSYSTEM}-train --target clangSema
# Save Profile data
${MINGW_PREFIX}/bin/llvm-profdata merge -output="${srcdir}"/profdata "${srcdir}"/build-${MSYSTEM}-instrument/profiles/*.profraw
common_cmake_args+=("-DLLVM_PROFDATA_FILE="${srcdir}"/profdata")
Expand All @@ -259,7 +229,10 @@ build() {
-DCLANG_DEFAULT_CXX_STDLIB=libc++
-DCLANG_LINKS_TO_CREATE="${_clang_links}"
-DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON
-DCOMPILER_RT_USE_LIBCXX=ON
#-DSANITIZER_CXX_ABI="libc++"
-DCOMPILER_RT_EXCLUDE_ATOMIC_BUILTIN=OFF
#-DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON
)
fi

Expand All @@ -286,8 +259,6 @@ build() {
platform_config+=(-DLLVM_TARGETS_TO_BUILD=Native)
fi

mkdir -p "${srcdir}"/build-${MSYSTEM} && cd "${srcdir}"/build-${MSYSTEM}

MSYS2_ARG_CONV_EXCL="-DCMAKE_INSTALL_PREFIX=" \
${MINGW_PREFIX}/bin/cmake.exe \
-GNinja \
Expand All @@ -298,9 +269,10 @@ build() {
-DLLD_DEFAULT_LD_LLD_IS_MINGW=ON \
"${common_cmake_args[@]}" \
"${platform_config[@]}" \
../llvm
-S ${_pkgfn}/${_realname} \
-B build-${MSYSTEM}

${MINGW_PREFIX}/bin/cmake.exe --build .
${MINGW_PREFIX}/bin/cmake.exe --build build-${MSYSTEM}
}


Expand All @@ -327,13 +299,14 @@ package_clang() {
sed -i.orig '/\(extra\|scan-build\|scan-build-py\|scan-view\)\/cmake_install.cmake/d' build-${MSYSTEM}/tools/clang/tools/cmake_install.cmake
DESTDIR="${pkgdir}" ${MINGW_PREFIX}/bin/cmake --install "${srcdir}"/build-${MSYSTEM}/tools/clang

install -Dm644 "${srcdir}"/clang/LICENSE.TXT "${pkgdir}"${MINGW_PREFIX}/share/licenses/clang/LICENSE
install -Dm644 "${srcdir}"/${_pkgfn}/clang/LICENSE.TXT \
"${pkgdir}"${MINGW_PREFIX}/share/licenses/clang/LICENSE

# Install Python bindings
_site_packages=$(python -c "import site; print(site.getsitepackages()[0])")
site_packages=$(cygpath ${_site_packages})
install -d "${pkgdir}"/${site_packages}
cp -a "${srcdir}"/clang/bindings/python/clang "${pkgdir}"/${site_packages}
cp -a "${srcdir}"/${_pkgfn}/clang/bindings/python/clang "${pkgdir}"/${site_packages}
${MINGW_PREFIX}/bin/python -m compileall -o 0 -o 1 "${pkgdir}"/${site_packages}

# Runtime libraries
Expand All @@ -351,7 +324,8 @@ package_clang-libs() {

cp -r "${srcdir}"/clang-libs/${MINGW_PREFIX} "${pkgdir}"${MINGW_PREFIX}

install -Dm644 "${srcdir}"/clang/LICENSE.TXT "${pkgdir}"${MINGW_PREFIX}/share/licenses/clang-libs/LICENSE
install -Dm644 "${srcdir}"/${_pkgfn}/clang/LICENSE.TXT \
"${pkgdir}"${MINGW_PREFIX}/share/licenses/clang-libs/LICENSE
}

package_clang-analyzer() {
Expand All @@ -368,7 +342,8 @@ package_clang-analyzer() {
# Compile Python scripts
${MINGW_PREFIX}/bin/python -m compileall -o 0 -o 1 "${pkgdir}"${MINGW_PREFIX}/lib/libscanbuild

install -Dm644 "${srcdir}"/clang/LICENSE.TXT "${pkgdir}"${MINGW_PREFIX}/share/licenses/clang-analyzer/LICENSE
install -Dm644 "${srcdir}"/${_pkgfn}/clang/LICENSE.TXT \
"${pkgdir}"${MINGW_PREFIX}/share/licenses/clang-analyzer/LICENSE
}

package_clang-tools-extra() {
Expand All @@ -378,22 +353,24 @@ package_clang-tools-extra() {

DESTDIR="${pkgdir}" ${MINGW_PREFIX}/bin/cmake --install "${srcdir}"/build-${MSYSTEM}/tools/clang/tools/extra

install -Dm644 "${srcdir}"/clang-tools-extra/LICENSE.TXT "${pkgdir}"${MINGW_PREFIX}/share/licenses/clang-tools-extra/LICENSE
install -Dm644 "${srcdir}"/${_pkgfn}/clang-tools-extra/LICENSE.TXT \
"${pkgdir}"${MINGW_PREFIX}/share/licenses/clang-tools-extra/LICENSE
}

package_compiler-rt() {
pkgdesc="Runtime libraries for Clang and LLVM (mingw-w64)"
url="https://compiler-rt.llvm.org/"
depends=($( (( _clangprefix )) || echo "${MINGW_PACKAGE_PREFIX}-cc-libs"))

DESTDIR="${pkgdir}" ${MINGW_PREFIX}/bin/cmake --install "${srcdir}"/build-${MSYSTEM}/projects/compiler-rt
DESTDIR="${pkgdir}" ${MINGW_PREFIX}/bin/cmake --install "${srcdir}"/build-${MSYSTEM}//projects/compiler-rt
mkdir -p "${pkgdir}"${MINGW_PREFIX}/bin/
find "${pkgdir}"${MINGW_PREFIX}/lib/clang/${pkgver%.[0-9].*}/lib/windows/ \
-name '*.dll' -exec mv '{}' "${pkgdir}"${MINGW_PREFIX}/bin/ \;
# remove bin dir we created if it is still empty
rmdir "${pkgdir}"${MINGW_PREFIX}/bin/ 2>/dev/null || true

install -Dm644 "${srcdir}"/compiler-rt/LICENSE.TXT "${pkgdir}"${MINGW_PREFIX}/share/licenses/compiler-rt/LICENSE
install -Dm644 "${srcdir}"/${_pkgfn}/compiler-rt/LICENSE.TXT \
"${pkgdir}"${MINGW_PREFIX}/share/licenses/compiler-rt/LICENSE
}

package_gcc-compat() {
Expand Down Expand Up @@ -427,7 +404,8 @@ package_lld() {
install -Dm755 "${pkgdir}"${MINGW_PREFIX}/bin/lld.exe "${pkgdir}"${MINGW_PREFIX}/bin/ld.exe
fi

install -Dm644 "${srcdir}"/lld/LICENSE.TXT "${pkgdir}"${MINGW_PREFIX}/share/licenses/lld/LICENSE
install -Dm644 "${srcdir}"/${_pkgfn}/lld/LICENSE.TXT \
"${pkgdir}"${MINGW_PREFIX}/share/licenses/lld/LICENSE
}

package_llvm() {
Expand All @@ -439,14 +417,18 @@ package_llvm() {
# -i.orig to check what has been removed in-case it starts dropping more than it should
sed -i.orig '/tools\/cmake_install.cmake/d' build-${MSYSTEM}/cmake_install.cmake
sed -i.orig '/compiler-rt\/cmake_install.cmake/d' build-${MSYSTEM}/projects/cmake_install.cmake

DESTDIR="${pkgdir}" ${MINGW_PREFIX}/bin/cmake --install build-${MSYSTEM}

install -Dm644 "${srcdir}"/llvm/LICENSE.TXT "${pkgdir}"${MINGW_PREFIX}/share/licenses/llvm/LICENSE
install -Dm644 "${srcdir}"/${_pkgfn}/llvm/LICENSE.TXT \
"${pkgdir}"${MINGW_PREFIX}/share/licenses/llvm/LICENSE

# Install CMake stuff
install -d "${pkgdir}"${MINGW_PREFIX}/share/llvm/cmake/{modules,platforms}
install -Dm644 "${srcdir}"/llvm/cmake/modules/*.cmake "${pkgdir}"${MINGW_PREFIX}/share/llvm/cmake/modules/
install -Dm644 "${srcdir}"/llvm/cmake/platforms/*.cmake "${pkgdir}"${MINGW_PREFIX}/share/llvm/cmake/platforms/
install -Dm644 "${srcdir}"/${_pkgfn}/llvm/cmake/modules/*.cmake \
"${pkgdir}"${MINGW_PREFIX}/share/llvm/cmake/modules/
install -Dm644 "${srcdir}"/${_pkgfn}/llvm/cmake/platforms/*.cmake \
"${pkgdir}"${MINGW_PREFIX}/share/llvm/cmake/platforms/

# fix cmake files.
local PREFIX_WIN=$(cygpath -wm ${MINGW_PREFIX})
Expand All @@ -470,7 +452,8 @@ package_llvm-tools() {
# remove duplicate headers already in llvm package
rm -r "${pkgdir}"${MINGW_PREFIX}/include/llvm-c

install -Dm644 "${srcdir}"/llvm/LICENSE.TXT "${pkgdir}"${MINGW_PREFIX}/share/licenses/llvm-tools/LICENSE
install -Dm644 "${srcdir}"/${_pkgfn}/llvm/LICENSE.TXT \
"${pkgdir}"${MINGW_PREFIX}/share/licenses/llvm-tools/LICENSE

# Provide gcov on CLANG*
if [[ ${MINGW_PACKAGE_PREFIX} == *-clang-* ]]; then
Expand All @@ -489,7 +472,8 @@ package_llvm-libs() {

cp -r "${srcdir}"/llvm-libs/${MINGW_PREFIX} "${pkgdir}"${MINGW_PREFIX}

install -Dm644 "${srcdir}"/llvm/LICENSE.TXT "${pkgdir}"${MINGW_PREFIX}/share/licenses/llvm-libs/LICENSE
install -Dm644 "${srcdir}"/${_pkgfn}/llvm/LICENSE.TXT \
"${pkgdir}"${MINGW_PREFIX}/share/licenses/llvm-libs/LICENSE
}

# template start; name=mingw-w64-splitpkg-wrappers; version=1.0;
Expand Down
Loading