aports/testing/ldc-runtime-cross/APKBUILD
Celeste df866bea66 testing/ldc-runtime-cross: set LDC_WITH_LLD=OFF
CMake errors out without this option specified,
but it is actually referring to LDC bundling
an internal LLD, not LDC using external LLD

The only effect of setting LDC_WITH_LLD=ON
while building the LDC runtime is to add
`-link-internally` to the WASM section of
ldc2.conf, which does not end up in the final
.apk anyway due to CONF_INST_DIR being set to ""
2025-06-07 16:38:19 +00:00

306 lines
11 KiB
Text

# Maintainer: Celeste <cielesti@protonmail.com>
maintainer="Celeste <cielesti@protonmail.com>"
pkgname=ldc-runtime-cross
pkgver=1.41.0
pkgrel=0
_llvmfullver=19.1.7
_llvmver=${_llvmfullver%%.*}
_musl_commit=ae3a8c93a663b553e65f096498937083dad210d2
_ucontext=1.3.2
pkgdesc="Cross-compilation runtime for LDC"
url="https://github.com/ldc-developers/ldc"
arch="x86_64 aarch64 loongarch64" # limited by community/ldc
license="Apache-2.0 WITH LLVM-exception AND BSL-1.0 AND ISC AND MIT"
makedepends_build="
clang$_llvmver
cmake
ldc~$pkgver
lld$_llvmver
llvm$_llvmver-dev
llvm$_llvmver-gtest
llvm$_llvmver-static
samurai
"
source="https://github.com/llvm/llvm-project/releases/download/llvmorg-$_llvmfullver/compiler-rt-$_llvmfullver.src.tar.xz
https://github.com/llvm/llvm-project/releases/download/llvmorg-$_llvmfullver/cmake-$_llvmfullver.src.tar.xz
https://github.com/llvm/llvm-project/releases/download/llvmorg-$_llvmfullver/libunwind-$_llvmfullver.src.tar.xz
https://github.com/llvm/llvm-project/releases/download/llvmorg-$_llvmfullver/runtimes-$_llvmfullver.src.tar.xz
dont-guess-host-triple.patch
libunwind-link-libssp.patch
compiler-rt-aarch64-use-getauxval.patch
compiler-rt-riscv64-remove-dep-on-linux-headers.patch
compiler-rt-standalone-libatomic.patch
https://git.musl-libc.org/cgit/musl/snapshot/musl-$_musl_commit.tar.gz
__stack_chk_fail_local.c
https://distfiles.ariadne.space/libucontext/libucontext-$_ucontext.tar.xz
https://github.com/ldc-developers/ldc/releases/download/v$pkgver/ldc-$pkgver-src.tar.gz
druntime-ppc64le.patch
druntime-riscv64.patch
ldc2_cross.conf.in
"
builddir="$srcdir"
options="!archcheck !check !strip !tracedeps"
_llvmprefix="/usr/lib/llvm$_llvmver"
_alltargets="
aarch64
loongarch64
ppc64le
riscv64
x86_64
"
for _target in $_alltargets; do
if [ "$_target" != "$CBUILD_ARCH" ]; then
_targets="$_targets $_target"
subpackages="
$subpackages
$pkgname-$_target:_subpackage_target
"
fi
done
# Must match DMDFE_MINOR_VERSION and DMDFE_PATCH_VERSION from ldc/CMakeLists.txt
# DMD_VERSION returned by `ldc2 --version` is also based on these CMake variables
_dmd_minor=111
_dmd_patch=0
prepare() {
mkdir -vp llvm/cmake
ln -Tsvf $_llvmprefix/lib/cmake/llvm llvm/cmake/modules
ln -Tsvf $_llvmprefix/include llvm/include
local subproj; for subproj in compiler-rt cmake libunwind runtimes; do
ln -Tsvf $subproj-$_llvmfullver.src $subproj
done
local target; for target in $_targets; do
# unknown relocation (18) against symbol exit
if [ "$target" != "ppc64le" ]; then
cp -RT libucontext-$_ucontext build-ucontext-$target
fi
done
ln -Tsvf ldc-$pkgver-src ldc
default_prepare
if ! ldc2 --version | grep -q "based on DMD v.\.$_dmd_minor\.$_dmd_patch"; then
error 'Please update $_dmd_minor and $_dmd_patch'
return 1
fi
}
_cmake_configure_triple() {
local triple=$1; shift
cmake -G Ninja -Wno-dev \
-DCMAKE_ASM_COMPILER="clang-$_llvmver" \
-DCMAKE_ASM_COMPILER_TARGET="$triple" \
-DCMAKE_ASM_COMPILER_WORKS=ON \
-DCMAKE_C_COMPILER="clang-$_llvmver" \
-DCMAKE_C_COMPILER_TARGET="$triple" \
-DCMAKE_C_COMPILER_WORKS=ON \
-DCMAKE_CXX_COMPILER="clang++-$_llvmver" \
-DCMAKE_CXX_COMPILER_TARGET="$triple" \
-DCMAKE_CXX_COMPILER_WORKS=ON \
-DCMAKE_AR=$_llvmprefix/bin/llvm-ar \
-DCMAKE_NM=$_llvmprefix/bin/llvm-nm \
-DCMAKE_RANLIB=$_llvmprefix/bin/llvm-ranlib \
-DCMAKE_BUILD_TYPE=Release \
"$@"
}
build() {
local target triple; for target in $_targets; do
triple=$(arch_to_hostspec $target)
export CC="clang-$_llvmver --target=$triple"
local extra_ldflags="-fuse-ld=lld -resource-dir=$builddir/build-crt-$target --rtlib=compiler-rt"
local orig_ldflags="$LDFLAGS"
export LDFLAGS="$orig_ldflags $extra_ldflags"
local musl_builddir="$builddir/musl/build-$target"
local tmp_sysroot="$builddir/tmpsysroot-$target"
mkdir -p "$musl_builddir"
(
cd "$musl_builddir"
"$builddir"/musl-$_musl_commit/configure \
--host=$triple \
--prefix=/usr \
--disable-gcc-wrapper
make DESTDIR="$tmp_sysroot" install-headers
)
rm -r "$musl_builddir"
_cmake_configure_triple $triple \
-B build-crt-$target -S compiler-rt \
-DCMAKE_C_FLAGS="$CFLAGS -fPIC" \
-DCMAKE_INSTALL_PREFIX=$_llvmprefix/lib/clang/$_llvmver \
-DCMAKE_SYSROOT="$tmp_sysroot" \
-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY \
\
-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON \
-DCOMPILER_RT_BUILD_BUILTINS=ON \
-DCOMPILER_RT_BUILD_CRT=ON \
-DCOMPILER_RT_BUILD_STANDALONE_LIBATOMIC=ON \
-DCOMPILER_RT_BUILD_LIBFUZZER=OFF \
-DCOMPILER_RT_BUILD_MEMPROF=OFF \
-DCOMPILER_RT_BUILD_PROFILE=OFF \
-DCOMPILER_RT_BUILD_SANITIZERS=OFF \
-DCOMPILER_RT_BUILD_XRAY=OFF \
-DCOMPILER_RT_BUILD_ORC=OFF \
-DCOMPILER_RT_BUILD_CTX_PROFILE=OFF \
-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON
cmake --build build-crt-$target
mkdir -p "$musl_builddir"
(
cd "$musl_builddir"
# provide minimal libssp_nonshared.a so we don't need libssp from gcc
$CC $CFLAGS \
-c "$srcdir"/__stack_chk_fail_local.c \
-o __stack_chk_fail_local.o
$_llvmprefix/bin/llvm-ar r libssp_nonshared.a __stack_chk_fail_local.o
CFLAGS="${CFLAGS/-O* /}" \
CC="$CC $extra_ldflags" \
LDFLAGS="$orig_ldflags -Wl,-soname,libc.musl-$target.so.1" \
"$builddir"/musl-$_musl_commit/configure \
--host=$triple \
--prefix=/usr/$triple/usr \
--disable-gcc-wrapper \
AR=$_llvmprefix/bin/llvm-ar \
RANLIB=$_llvmprefix/bin/llvm-ranlib
make DESTDIR="$tmp_sysroot" install
cp libssp_nonshared.a "$tmp_sysroot"/usr/$triple/usr/lib/
)
_cmake_configure_triple $triple \
-B build-unwind-$target -S runtimes \
-DCMAKE_C_FLAGS="$CFLAGS -DNDEBUG" \
-DCMAKE_CXX_FLAGS="$CXXFLAGS -DNDEBUG" \
-DCMAKE_INSTALL_PREFIX=/usr/$triple/usr \
-DCMAKE_SYSROOT="$tmp_sysroot/usr/$triple" \
\
-DLLVM_DEFAULT_TARGET_TRIPLE="$triple" \
-DLLVM_ENABLE_RUNTIMES="libunwind" \
-DLLVM_INCLUDE_TESTS=OFF \
-DLIBUNWIND_HAS_NODEFAULTLIBS_FLAG=OFF \
-DLIBUNWIND_INCLUDE_DOCS=OFF \
-DLIBUNWIND_USE_COMPILER_RT=ON
cmake --build build-unwind-$target
if [ -d "build-ucontext-$target" ]; then
make -C build-ucontext-$target ARCH="$target" \
CC="$CC --sysroot=$tmp_sysroot/usr/$triple"
fi
DESTDIR="$tmp_sysroot" cmake --install build-unwind-$target
_cmake_configure_triple $triple \
-B build-drt-$target -S ldc/runtime \
-DCMAKE_INSTALL_PREFIX=/usr/$triple/usr \
-DCMAKE_SYSROOT="$tmp_sysroot/usr/$triple" \
-DCMAKE_SYSTEM_PROCESSOR=$target \
-DBUILD_SHARED_LIBS=ON \
\
-DLDC_EXE_FULL="$(command -v ldc2)" \
-DLDC_WITH_LLD=OFF \
-DC_SYSTEM_LIBS="unwind;m;pthread;rt;dl" \
-DD_EXTRA_FLAGS="-mtriple=$triple" \
-DADDITIONAL_DEFAULT_LDC_SWITCHES=' "-L--export-dynamic", "-L--eh-frame-hdr",' \
-DCONF_INST_DIR="" \
-DDMDFE_MINOR_VERSION=$_dmd_minor \
-DDMDFE_PATCH_VERSION=$_dmd_patch
cmake --build build-drt-$target
done
}
package() {
mkdir -p "$pkgdir"/etc
cat /etc/ldc/ldc2.conf > "$pkgdir"/etc/ldc2.conf
local target triple; for target in $_targets; do
triple=$(arch_to_hostspec $target)
depends="$depends $pkgname-$target=$pkgver-r$pkgrel"
local link_ucontext=''
case "$target" in
riscv64)
link_ucontext='\n "-L--push-state", "-L--no-as-needed", "-L-lucontext", "-L--pop-state",'
;;
esac
sed "$srcdir"/ldc2_cross.conf.in \
-e "s/@@LLVMVER@@/$_llvmver/g" \
-e "s/@@TRIPLE@@/$triple/g" \
-e "s/@@UCONTEXT@@/$link_ucontext/" \
>> "$pkgdir"/etc/ldc2.conf
DESTDIR="$pkgdir" cmake --install build-crt-$target
mkdir -p "$pkgdir"/usr/$triple/usr/lib
mv -v "$pkgdir"/$_llvmprefix/lib/clang/$_llvmver/lib/$triple/libatomic* \
"$pkgdir"/usr/$triple/usr/lib/
make -C musl/build-$target install \
DESTDIR="$pkgdir"
cp -v musl/build-$target/libssp_nonshared.a \
"$pkgdir"/usr/$triple/usr/lib/
if [ -d "build-ucontext-$target" ]; then
make -C build-ucontext-$target install ARCH="$target" \
DESTDIR="$pkgdir/usr/$triple" \
pkgconfigdir=/../../lib
rm "$pkgdir"/lib/libucontext.pc
fi
DESTDIR="$pkgdir" cmake --install build-unwind-$target
DESTDIR="$pkgdir" cmake --install build-drt-$target
done
rm "$pkgdir"/lib/ld-musl-*.so.1
rmdir "$pkgdir"/lib
}
_subpackage_target() {
local target=${subpkgname#"$pkgname-"}
local triple=$(arch_to_hostspec $target)
pkgdesc="$pkgdesc ($target support)"
depends="
clang$_llvmver
ldc~$pkgver
lld$_llvmver
"
amove \
usr/$triple \
$_llvmprefix/lib/clang/$_llvmver/lib/$triple
}
sha512sums="
e2e8e6a094525b84184e9e4a4c1a727de518d4ef1a91370515f0c955719dc946fd60e7fabd10f52ab1905ef6d4a86084b8ddfb9b45de838aa1c5ddf3c042748b compiler-rt-19.1.7.src.tar.xz
3ff56e1a61dbace35d8c168ad5c94c5a09d92eb683494bfe1deabcb3640cf79b7422d44903d049d2298d54c2874f9a60c4f13f6795a3949e7eaefd5d42e62621 cmake-19.1.7.src.tar.xz
afe1fa6d8c72979fd9ddabd33f5de1bc1bee2d744a76c073de963babd0e41a55da8c8fb339ad0491469de832234f727c9711227f2adef9bb843f81a9d67d9946 libunwind-19.1.7.src.tar.xz
6b87dafe809b49560c72b9872f4e2795de70c66000af2272ad46fc044e5c88a3415aaa444f80d37946da14127cd4645b2a7420e3e184641215f415b709d801d8 runtimes-19.1.7.src.tar.xz
b1b4d4a8f9f0b6eaea74f011c1ae7a06ef4458c657765ced707591d4ce9cc18347fec1a55653b501342a9560f0eb24486df607341818f9e199aacf7b9c6dbce4 dont-guess-host-triple.patch
f5ddb3dfbf52fea421fd59bf95f9ed7313bef019990214c6958c7dfa91d2c401c1dc3031544d39d95500e26ffa012b449d982edb1e6c44285ac75e2c4ca46171 libunwind-link-libssp.patch
38603fdfccc2856e40871e81b8b2b72494f649be944be404926faf5efb25036960ca113d9c0f129b4d51b82414975dd49cefecec1594385793a25a88a439e5b5 compiler-rt-aarch64-use-getauxval.patch
2bdd4704e98055b8fcd943bcd5489474912f8e158d673b8b58b8b086edaa7092eb6ed349f06ad7fb124c787d605ff12acbfd8b54c9a1a376a14dff7f680225ab compiler-rt-riscv64-remove-dep-on-linux-headers.patch
e094037fa053902b095310b9dcff11fe4f45e22223e138e4d821a67be2c84a18d86ab949b799b10c1c4d77384da5e1eb0690bcf8c94f0635aee58e5509202e57 compiler-rt-standalone-libatomic.patch
149f4570505d6ea61116b8ae8962f94d6fe74dd84f7d826885b5ef46b01b5e0067b60d0fb74be468262751b490c7325f695a0d536fded41046344047a117ee29 musl-ae3a8c93a663b553e65f096498937083dad210d2.tar.gz
062bb49fa54839010acd4af113e20f7263dde1c8a2ca359b5fb2661ef9ed9d84a0f7c3bc10c25dcfa10bb3c5a4874588dff636ac43d5dbb3d748d75400756d0b __stack_chk_fail_local.c
3911a9a772832dad68dc4dbb78ca646cba92170d4e192948e0a6e78295f6ee27f20b637986d39450edae805c96b08f7e1716fa7904fc84258acab8691d87c4f5 libucontext-1.3.2.tar.xz
75ec4fbe44bb20f66b0b299483faaa26ed01bfdc0df4abca92d5b421c1631bc1c6bbf6291bbe83c701078b47601afb0ac6f8fd393406c6403bf4d357666a6609 ldc-1.41.0-src.tar.gz
73bed780d9690760d85c12a8d7482a697f1cf170e79fb0d58ed07c1c9d732616bd70c52de133e230e550e373e04298bfe9904f9cdf9b0f862951476aa010cc3b druntime-ppc64le.patch
78119f4dc3583cedc0b6c4a0a9c821c9f9ed79a1050f9a54e85c136f1b2fa3c2a197f3eb3adc88b5dba70323fdd7f84d0ec36c89ffd125a220660bdfa415ead0 druntime-riscv64.patch
6c0847987008289c5a78726c929ddfd55c53829b9de5d92a419e536947cc3cd0e15d1f3d15699b05011042e355d695d6fe3767cb411a84d4edb65bea25003320 ldc2_cross.conf.in
"