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 <jpiotrowski@microsoft.com>
This commit is contained in:
Jeremi Piotrowski 2021-07-19 14:33:08 +00:00 committed by Jeremi Piotrowski
parent e4f57bea82
commit 4ba3218d6a

View File

@ -399,6 +399,7 @@ install_cross_libs() {
install_cross_rust() { install_cross_rust() {
local cross_chost="$1"; shift local cross_chost="$1"; shift
local emerge_flags=( "$@" --binpkg-respect-use=y --update ) local emerge_flags=( "$@" --binpkg-respect-use=y --update )
local cbuild="$(portageq envvar CBUILD)"
# may be called from either catalyst (root) or upgrade_chroot (user) # may be called from either catalyst (root) or upgrade_chroot (user)
local sudo="env" local sudo="env"
@ -406,10 +407,10 @@ install_cross_rust() {
sudo="sudo -E" sudo="sudo -E"
fi 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" echo "Building Rust for arm64"
# If no aarch64 folder exists, try to remove any existing Rust packages. # 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 $sudo emerge "${emerge_flags[@]}" dev-lang/rust
fi fi
} }