jeremyd2019 fe2812683e
mingw-w64-cross-compiler-rt/cross-clang: update to 21.1.1 (#5626)
* mingw-w64-cross-compiler-rt: update to 21.1.1

* mingw-w64-cross-clang: update to 21.1.1

* mingw-w64-cross-compiler-rt: makedepend on llvm now that it's split and not pulled in via clang

* mingw-w64-cross-clang: depend on llvm, for tools like llvm-dlltool

* mingw-w64-cross-compiler-rt: add third-party sources, for siphash/SipHash.h
2025-09-11 17:11:48 -07:00

124 lines
5.6 KiB
Bash

# Maintainer: Mateusz Mikuła <mati865@gmail.com>
_realname=clang
_mingw_suff=mingw-w64-cross
pkgname=("${_mingw_suff}-${_realname}")
pkgver=21.1.1
pkgrel=1
pkgdesc="Cross Clang for the MinGW-w64"
groups=("${_mingw_suff}-${_realname}-toolchain")
arch=('i686' 'x86_64')
url="https://llvm.org"
license=("spdx:Apache-2.0 WITH LLVM-exception")
depends=('llvm' 'mingw-w64-cross-clang-crt' 'mingw-w64-cross-compiler-rt')
makedepends=("clang" "cmake" "lld" "ninja" "python")
options=('!strip' 'staticlibs' '!emptydirs' '!buildflags')
msys2_references=(
'archlinux: clang'
'cpe: cpe:/a:llvm:llvm'
)
_url=https://github.com/llvm/llvm-project/releases/download/llvmorg-${pkgver}
source=("${_url}/llvm-project-${pkgver}.src.tar.xz"{,.sig})
sha256sums=('8863980e14484a72a9b7d2c80500e1749054d74f08f8c5102fd540a3c5ac9f8a'
'SKIP')
validpgpkeys=('B6C8F98282B944E3B0D5C2530FC3042E345AD05D' # Hans Wennborg, Google.
'474E22316ABF4785A88C6E8EA2C794A986419D8A' # Tom Stellard
'D574BD5D1D0E98895E3BF90044F2485E45D59042') # Tobias Hieta
noextract=(llvm-project-${pkgver}.src.tar.xz)
_targets="x86_64-w64-mingw32 i686-w64-mingw32 armv7-w64-mingw32 aarch64-w64-mingw32"
prepare() {
cd ${srcdir}
[ -d llvm-project-${pkgver}.src ] && rm -rf llvm-project-${pkgver}.src
plain "Extracting llvm-project-${pkgver}.src.tar.xz due to symlink(s) without pre-existing target(s)"
tar -Jxf llvm-project-${pkgver}.src.tar.xz || true
}
build() {
CFLAGS+=" --start-no-unused-arguments -rtlib=compiler-rt --end-no-unused-arguments"
CXXFLAGS+=" --start-no-unused-arguments -rtlib=compiler-rt --end-no-unused-arguments"
LDFLAGS+=" -fuse-ld=lld"
export CC="clang" CXX="clang++" ASM="clang" AR="llvm-ar" RANLIB="llvm-ranlib" DLLTOOL="llvm-dlltool" LD="clang"
for _target in ${_targets}; do
echo building $_target
cd "${srcdir}"
[[ -d build-${_target} ]] && rm -rf build-${_target}
mkdir build-${_target} && cd build-${_target}
cmake -GNinja \
-DCMAKE_INSTALL_PREFIX=/opt/${_target} \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_AR="$(which llvm-ar)" \
-DCMAKE_ASM_COMPILER="clang" \
-DCMAKE_C_COMPILER="clang" \
-DCMAKE_CXX_COMPILER="clang++" \
-DCMAKE_{ASM,C,CXX}_COMPILER_TARGET="${_target}" \
-DCMAKE_{ASM,C,CXX}_COMPILER_WORKS=ON \
-DCMAKE_RANLIB="$(which llvm-ranlib)" \
-DCMAKE_SYSROOT=/opt/${_target} \
-DCMAKE_CROSSCOMPILING=ON \
-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
-DCMAKE_FIND_ROOT_PATH_MODE_{LIBRARY,INCLUDE,PACKAGE}=ONLY \
-DCMAKE_SYSTEM_IGNORE_PATH=/usr/lib \
-DCMAKE_SYSTEM_NAME=Windows \
-DCXX_SUPPORTS_CUSTOM_LINKER=ON \
-DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=ON \
-DLIBCXX_ENABLE_SHARED=ON \
-DLIBCXX_ENABLE_STATIC=ON \
-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON \
-DLIBCXX_HAS_WIN32_THREAD_API=ON \
-DLIBCXX_INSTALL_MODULES=ON \
-DLIBCXX_INCLUDE_BENCHMARKS=OFF \
-DLIBCXX_USE_COMPILER_RT=ON \
-DLIBCXXABI_ENABLE_SHARED=OFF \
-DLIBCXXABI_ENABLE_STATIC=ON \
-DLIBCXXABI_ENABLE_STATIC_UNWINDER=ON \
-DLIBCXXABI_HAS_WIN32_THREAD_API=ON \
-DLIBCXXABI_USE_COMPILER_RT=ON \
-DLIBCXXABI_USE_LLVM_UNWINDER=ON \
-DLIBUNWIND_ENABLE_FRAME_APIS=ON \
-DLIBUNWIND_ENABLE_SHARED=ON \
-DLIBUNWIND_ENABLE_STATIC=ON \
-DLIBUNWIND_USE_COMPILER_RT=ON \
-DENABLE_TIME_ZONE_DATABASE_DEFAULT=ON \
-DLLVM_ENABLE_LIBCXX=ON \
-DLLVM_ENABLE_LLD=ON \
-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \
-DLLVM_INCLUDE_TESTS=OFF \
../llvm-project-${pkgver}.src/runtimes
cmake --build . -- unwind cxxabi cxx cxx_experimental
done
}
package() {
for _target in ${_targets}; do
cd "${srcdir}"
DESTDIR="${pkgdir}" cmake --build build-${_target} --target install-cxx install-cxxabi install-unwind
install -Dm644 "${srcdir}"/llvm-project-${pkgver}.src/libcxx/LICENSE.TXT \
"${pkgdir}"/usr/share/licenses/libc++/LICENSE
install -Dm644 "${srcdir}"/llvm-project-${pkgver}.src/libunwind/LICENSE.TXT \
"${pkgdir}"/usr/share/licenses/libunwind/LICENSE
_prefix="${pkgdir}/opt/${_target}/bin"
for tool in addr2line ar dlltool nm objcopy objdump ranlib rc readelf readobj size strings strip; do
printf "#!/bin/bash\n\nexec -a \"${_target}-${tool}\" /usr/bin/llvm-${tool} \"\$@\"" | tee "${_prefix}/${tool}" "${_prefix}/${_target}-${tool}" > /dev/null
done
for tool in windres; do
printf "#!/bin/bash\n\nexec /usr/bin/llvm-${tool} --target ${_target} --preprocessor-arg --sysroot=/opt/${_target} \"\$@\"" | tee "${_prefix}/${tool}" "${_prefix}/${_target}-${tool}" > /dev/null
done
for tool in as cc clang; do
printf "#!/bin/bash\n\nexec /usr/bin/clang --start-no-unused-arguments -target ${_target} -fuse-ld=lld -rtlib=compiler-rt -stdlib=libc++ -unwindlib=libunwind --sysroot=/opt/${_target} --end-no-unused-arguments \"\$@\"" | tee "${_prefix}/${tool}" "${_prefix}/${_target}-${tool}" > /dev/null
done
for tool in c++ clang++; do
printf "#!/bin/bash\n\nexec /usr/bin/clang++ --start-no-unused-arguments -target ${_target} -fuse-ld=lld -rtlib=compiler-rt -stdlib=libc++ -unwindlib=libunwind --sysroot=/opt/${_target} --end-no-unused-arguments \"\$@\"" | tee "${_prefix}/${tool}" "${_prefix}/${_target}-${tool}" > /dev/null
done
for tool in ld ld.lld; do
printf "#!/bin/bash\n\nexec /usr/bin/ld.lld \"\$@\"" | tee "${_prefix}/${tool}" "${_prefix}/${_target}-${tool}" > /dev/null
done
for tool in lld; do
printf "#!/bin/bash\n\nexec /usr/bin/lld \"\$@\"" | tee "${_prefix}/${tool}" "${_prefix}/${_target}-${tool}" > /dev/null
done
done
}