mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-06-08 09:54:43 +02:00
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 ""
306 lines
11 KiB
Text
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
|
|
"
|