From 4ba3218d6ac38c43b2898002f0f5caff135e5c60 Mon Sep 17 00:00:00 2001 From: Jeremi Piotrowski Date: Mon, 19 Jul 2021 14:33:08 +0000 Subject: [PATCH] boostrap_sdk: only build aarch64 cross-rust on x86 hosts The rust ebuild has some magic to detect cross-toolchains present on the system and enable building additional cross targets. The code to trigger the rebuild of rust is part of install_cross_rust, and checks whether the cross directories exist in the rust installation. If they don't, then rust is removed and rebuilt to allow for the auto-detection to happen. Right now there are two issues with the code. Firstly, the path that is checked is wrong, which leads to rust always being removed and rebuilt. The path checked is /usr/lib/rust-*/rustlib but /usr/lib/rustlib is where the files are installed. The second issue is that it checks for aarch64 dirs when CHOST is aarch64-cros-linux-gnu. However, on an aarch64 host the aarch64 dirs will already exist from building the sdk itself. The rust ebuild is not ready to handle aarch64 hosts yet and blows up. The correct behavior is to combine the check for CHOST with a check for the right CBUILD. On an aarch64 host we should presumably check for the x86 CHOST and rust dirs, but that can be added later, because it needs more work. Signed-off-by: Jeremi Piotrowski --- build_library/toolchain_util.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/build_library/toolchain_util.sh b/build_library/toolchain_util.sh index 286735d2cc..278e7664b1 100644 --- a/build_library/toolchain_util.sh +++ b/build_library/toolchain_util.sh @@ -399,6 +399,7 @@ install_cross_libs() { install_cross_rust() { local cross_chost="$1"; shift local emerge_flags=( "$@" --binpkg-respect-use=y --update ) + local cbuild="$(portageq envvar CBUILD)" # may be called from either catalyst (root) or upgrade_chroot (user) local sudo="env" @@ -406,10 +407,10 @@ install_cross_rust() { sudo="sudo -E" fi - if [ "${cross_chost}" = "aarch64-cros-linux-gnu" ]; then + if [ "${cbuild}" = "x86_64-pc-linux-gnu" ] && [ "${cross_chost}" = "aarch64-cros-linux-gnu" ]; then echo "Building Rust for arm64" # If no aarch64 folder exists, try to remove any existing Rust packages. - [ ! -d /usr/lib/rust-*/rustlib/aarch64-unknown-linux-gnu ] && ($sudo emerge -C dev-lang/rust || true) + [ ! -d /usr/lib/rustlib/aarch64-unknown-linux-gnu ] && ($sudo emerge -C dev-lang/rust || true) $sudo emerge "${emerge_flags[@]}" dev-lang/rust fi }