Signed-off-by: Jens Reidel <adrian@postmarketos.org> Part-of: <https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/7116>
136 lines
3.8 KiB
Bash
136 lines
3.8 KiB
Bash
# Maintainer: Oliver Smith <ollieparanoid@postmarketos.org>
|
|
# https://docs.postmarketos.org/pmbootstrap/cross_compiling.html
|
|
#
|
|
# Wrapper for the "crossdirect" compilation method.
|
|
# pmbootstrap mounts the native chroot in the foreign arch (e.g. armhf) chroot
|
|
# as /native. This package gets installed into the native chroot, and creates
|
|
# wrappers like:
|
|
#
|
|
# /native/usr/lib/crossdirect/armhf/gcc
|
|
# -> /native/usr/bin/armv6-alpine-linux-muslgnueabihf-gcc
|
|
# /native/usr/lib/crossdirect/armhf/rustc
|
|
# -> /native/usr/bin/rustc --target=armv6-alpine-linux-musleabihf ...
|
|
#
|
|
# When building packages in the armhf chroot, PATH will get prepended with
|
|
# "/native/usr/lib/crossdirect/armhf". The end game is of course invoking
|
|
# programs such as cross compilers and archivers from the native chroot,
|
|
# running at native speed, whenever they get called from the foreign arch
|
|
# chroot. See crossdirect.c for implementation details of the C version (llvm,
|
|
# fakeroot, rpath). The rust version and redirect for archivers are implemented
|
|
# as simple shell wrappers.
|
|
|
|
pkgname=crossdirect
|
|
pkgver=5.3.1
|
|
pkgrel=1
|
|
pkgdesc="Wrappers to launch native programs (e.g. cross compilers) in foreign chroots"
|
|
url="https://postmarketOS.org"
|
|
arch="all"
|
|
license="MIT"
|
|
options="!check"
|
|
source="
|
|
cargo.sh
|
|
crossdirect.c
|
|
exec_native.sh
|
|
rust-qemu-linker.sh
|
|
rustc.sh
|
|
"
|
|
|
|
build() {
|
|
cd "$srcdir"
|
|
# Architectures and binaries
|
|
_archs="x86_64 armhf armv7 aarch64 loongarch64 ppc64le riscv64"
|
|
for _arch in $_archs; do
|
|
[ "$_arch" == "$CARCH" ] && continue
|
|
_hostspec="$(arch_to_hostspec $_arch)"
|
|
|
|
# Build with -Werror, because we maintain this short program. (If
|
|
# upstream is elsewhere, having -Werror is usually not desired.)
|
|
$CC -o "crossdirect-$_arch" \
|
|
-static \
|
|
-Werror \
|
|
-DHOSTSPEC="\"$_hostspec\"" \
|
|
crossdirect.c
|
|
done
|
|
}
|
|
|
|
package() {
|
|
# Architectures and binaries
|
|
_archs="
|
|
aarch64
|
|
armhf
|
|
armv7
|
|
loongarch64
|
|
ppc64le
|
|
riscv64
|
|
x86_64
|
|
"
|
|
_bin_compilers="
|
|
c++
|
|
cc
|
|
clang
|
|
clang++
|
|
cpp
|
|
g++
|
|
gcc
|
|
"
|
|
_bin_archivers="
|
|
bzip2
|
|
gunzip
|
|
gzip
|
|
lzip
|
|
lzma
|
|
lzop
|
|
pigz
|
|
unlzma
|
|
unpigz
|
|
unxz
|
|
unzip
|
|
xz
|
|
"
|
|
|
|
# Rust wrappers
|
|
install -Dm755 "$srcdir/rust-qemu-linker.sh" \
|
|
"$pkgdir/usr/lib/crossdirect/rust-qemu-linker"
|
|
install -Dm755 "$srcdir/cargo.sh" "$pkgdir/usr/lib/crossdirect/cargo.sh"
|
|
install -Dm755 "$srcdir/rustc.sh" "$pkgdir/usr/lib/crossdirect/rustc.sh"
|
|
|
|
# For archivers
|
|
install -Dm755 "$srcdir/exec_native.sh" -t "$pkgdir/usr/lib/crossdirect/"
|
|
|
|
# Iterate over architectures
|
|
for _arch in $_archs; do
|
|
[ "$_arch" == "$CARCH" ] && continue
|
|
|
|
# GCC: put arch-specific crossdirect wrapper in arch-specific
|
|
# bin folder
|
|
_bindir="$pkgdir/usr/lib/crossdirect/$_arch"
|
|
_hostspec="$(arch_to_hostspec $_arch)"
|
|
mkdir -p "$_bindir"
|
|
cd "$_bindir"
|
|
cp "$srcdir/crossdirect-$_arch" "./"
|
|
|
|
# GCC: create compiler symlinks
|
|
for _bin in $_bin_compilers; do
|
|
ln -s "crossdirect-$_arch" "$_bin"
|
|
ln -s "crossdirect-$_arch" "$_hostspec-$_bin"
|
|
done
|
|
|
|
# Archivers
|
|
for _bin in $_bin_archivers; do
|
|
ln -s ../exec_native.sh "$_bin"
|
|
done
|
|
|
|
# Rust
|
|
ln -s ../cargo.sh cargo
|
|
ln -s ../rustc.sh rustc
|
|
done
|
|
}
|
|
|
|
sha512sums="
|
|
0f4b48f250425dc57f63955fc8b38477d23db793bee367c3fbe03c3d2a559ba576434d07518310db4cae9d90d501af4051b80038b10fae94b980e537fc9374ad cargo.sh
|
|
b2e602b7fc95ed403d29f0d754879d5f773c39ee33e726bb10cff17b3c088406dac84f2ca6d8ad563c64370007d98af805d6ee9cd4a06fe3d4c61c0cb90c5c0c crossdirect.c
|
|
73e2b5d2d8ef7c6002b3a787d14945586991493b8d81f59e5c0beda0d3b290543e1fdc6f288da726c5dd121c0861d2a894410b7b749a537df0df5b409e102330 exec_native.sh
|
|
ea9bf8db3810d03d0a7395057f3d6e57f7127d87c55deaedc171c255288f5f3cc6fbcc680a5a1b92786cf573875d5dc22521173799fe2639acc97d0715ff905b rust-qemu-linker.sh
|
|
de2aa6929bbff5db9132673e667f4525b333d062cb1f7a0597dd924de9e5c7215a9f8e2e6263b6fb5ace06f2c4b64f4ebfd0ede9b78add07c2cd08ec8613e98f rustc.sh
|
|
"
|