# 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 the # cross compiler from the native chroot, running at native speed, whenever # calling the compiler from the foreign arch chroot. See crossdirect.c for # implementation details of the C version (llvm, fakeroot, rpath). The rust # version is implemented as simple shell wrappers. pkgname=crossdirect pkgver=5 pkgrel=0 pkgdesc="Wrappers to launch native cross compilers in foreign chroots" url="https://postmarketOS.org" arch="all" license="MIT" options="!check" source="cargo.sh crossdirect.c rustc.sh rust-qemu-linker.sh" build() { cd "$srcdir" # Architectures and binaries _archs="x86_64 armhf armv7 aarch64" 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="x86_64 armhf armv7 aarch64" _bins="c++ cc cpp g++ gcc clang clang++" # 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" # 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 $_bins; do ln -s "crossdirect-$_arch" "$_bin" ln -s "crossdirect-$_arch" "$_hostspec-$_bin" done ln -s ../cargo.sh cargo ln -s ../rustc.sh rustc done } sha512sums=" 0f4b48f250425dc57f63955fc8b38477d23db793bee367c3fbe03c3d2a559ba576434d07518310db4cae9d90d501af4051b80038b10fae94b980e537fc9374ad cargo.sh 500107e5aff8b34e74b54982ebcd447fc41bc8283956d506561b031a055cb30ec12698047c2604918b4b6d8560fe03db427a63dff2b83c907e8494b7f5233f29 crossdirect.c 2c41410a9ef2dab31403545e55e2464f2ee4e7056ffbcd3bc5810d582311801496b88d55307f17ce6acf766e9c867d30d05f2b0d8d46bf77a5e8f0495d6bc24e rustc.sh ea9bf8db3810d03d0a7395057f3d6e57f7127d87c55deaedc171c255288f5f3cc6fbcc680a5a1b92786cf573875d5dc22521173799fe2639acc97d0715ff905b rust-qemu-linker.sh "