From 3f136a4ad1a432a7b8b4ecd7223258db16ad3ed1 Mon Sep 17 00:00:00 2001 From: "Dustin C. Hatch" Date: Sat, 14 Dec 2024 09:41:35 -0600 Subject: [PATCH] crossdev: Build a cross toolchain for Rust To cross-compile Rust packages, we need a standard library compiled for the target system. --- lib/crossdev.sh | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/lib/crossdev.sh b/lib/crossdev.sh index e848882..eefa441 100755 --- a/lib/crossdev.sh +++ b/lib/crossdev.sh @@ -2,6 +2,8 @@ set -e +target=$1 + mkdir -p /var/db/repos/crossdev/profiles /var/db/repos/crossdev/metadata echo crossdev > /var/db/repos/crossdev/profiles/repo_name echo 'masters = gentoo' > /var/db/repos/crossdev/metadata/layout.conf @@ -18,3 +20,33 @@ EOF emerge -kvnuUDj --rebuilt-binaries=y --color=y sys-devel/crossdev crossdev --stable -t "$1" + +ln -s /var/db/repos/gentoo/sys-devel/rust-std /var/db/repos/crossdev/cross-${target}/ + +mkdir -p + /etc/portage/env/dev-lang \ + /etc/portage/package.accept_keywords \ + /etc/portage/package.use \ + && : +printf 'cross-%s/rust-std **\n' "${target}" \ + > /etc/portage/package.accept-keywords/rust-cross +echo 'dev-lang/rust rust-src' \ + > /etc/portage/package.use/rust-src +case ${target%%-*} in +aarch64) + llvm_target=AArch64 + ;; +arm*) + llvm_target=ARM + ;; +*) + printf 'Unknown LLVM target: %s' "${target%%-*}" + exit 1 + ;; +esac +printf '( %s:%s:%s )\n' \ + "${llvm_target}" \ + "${target}" \ + "${target}" \ + >> /etc/portage/env/dev-lang/rust +emerge -vbknuUj cross-${target}/rust-std