Created attachment 678538 [details] build.log Hi. This package claims to support x32 ABI but there is no rust-1.47.0-x32-unknown-linux-gnu.tar.xz in /usr/portage/disfiles.
I can confirm it is still broken with 1.52.1 as well as dev-lang/rust for x32
Reproducible with dev-lang/rust-1.53.0:stable: > * Package: dev-lang/rust-1.53.0 > * Repository: gentoo > * Maintainer: gyakovlev@gentoo.org rust@gentoo.org > * USE: abi_x86_64 abi_x86_x32 amd64 cpu_flags_x86_sse2 elibc_glibc kernel_linux llvm_targets_X86 userland_GNU > * FEATURES: network-sandbox preserve-libs sandbox userpriv usersandbox > * Checking for at least 11520 MiB disk space at "/var/tmp/portage/dev-lang/rust-1.53.0/temp" ... > [ ok ] > * Using python3.9 to build > /var/tmp/portage/dev-lang/rust-1.53.0/temp/environment: line 3985: /var/tmp/portage/dev-lang/rust-1.53.0/work/rust-1.52.0-x86_64-pc-linux-gnux32/install.sh: No such file or directory > * ERROR: dev-lang/rust-1.53.0::gentoo failed (prepare phase): > * (no error message) > * > * Call stack: > * ebuild.sh, line 127: Called src_prepare > * environment, line 3985: Called die > * The specific snippet of code: > * "${WORKDIR}/${rust_stage0}"/install.sh --disable-ldconfig --without=rust-docs --destdir="${rust_stage0_root}" --prefix=/ || die; > * > * If you need support, post the output of `emerge --info '=dev-lang/rust-1.53.0::gentoo'`, > * the complete build log and the output of `emerge -pqv '=dev-lang/rust-1.53.0::gentoo'`. > * The complete build log is located at '/var/tmp/portage/dev-lang/rust-1.53.0/temp/build.log'. > * The ebuild environment file is located at '/var/tmp/portage/dev-lang/rust-1.53.0/temp/environment'. > * Working directory: '/var/tmp/portage/dev-lang/rust-1.53.0/work/rustc-1.53.0-src' > * S: '/var/tmp/portage/dev-lang/rust-1.53.0/work/rustc-1.53.0-src'
The upstream rust binary distribution *does* support x32 (x86_64-unknown-linux-gnux32) but as a target only, and requires the x32 rust-std (rustlib) component to be installed. The toolchain itself is amd64 only. For the purpose of bootstrapping a native x32 Rust toolchain, this enough. Patches follow...
Created attachment 776612 [details, diff] rust-bin ebuild patch adding x32 target rustlib
Created attachment 776615 [details, diff] rust eclass patch to add x32 triple mapping
Created attachment 776618 [details, diff] WIP patch to build native x32 rust toolchain This is WIP because -system-bootstrap isn't complete. It currently only works with system-bootstrap, although both dev-lang/rust-bin (amd64) and dev-lang/rust (x32) both work to bootstrap.
(In reply to Steven Newbury from comment #6) > Created attachment 776618 [details, diff] [details, diff] > WIP patch to build native x32 rust toolchain > > This is WIP because -system-bootstrap isn't complete. It currently only > works with system-bootstrap, although both dev-lang/rust-bin (amd64) and > dev-lang/rust (x32) both work to bootstrap. Also, only tested with system-llvm.
(In reply to Steven Newbury from comment #6) > Created attachment 776618 [details, diff] [details, diff] > WIP patch to build native x32 rust toolchain > > This is WIP because -system-bootstrap isn't complete. It currently only > works with system-bootstrap, although both dev-lang/rust-bin (amd64) and > dev-lang/rust (x32) both work to bootstrap. To get !system-boostrap working requires adding the x32 rustlib matching the rust release used for internal bootstrapping as I did for rust-bin.
Created attachment 776630 [details, diff] rust-bin ebuild patch adding x32 target rustlib Accidentally attached the wrong version.
Created attachment 777059 [details, diff] rust-bin ebuild patch adding x32 target rustlib Fixed bug
Created attachment 777062 [details, diff] rust-bin ebuild patch adding x32 target rustlib Forgot to mark obsolete
Created attachment 777068 [details, diff] rust-bin ebuild patch adding x32 target rustlib Apologies, this version works for both when x32 is multilib_is_native and when it isn't. Suffering from apparent brain failure.
I've updated my modified ebuilds for rust-1.77.1. Is there any chance of this bug getting addressed? Gentoo X32 is actually working very well right now, at least for relatively simple systems but rust is becoming increasingly important. It is one of the few upstreams to actually support abi-x32 so it doesn't really make sense to not have this bug fixed.
There is one outstanding issue with bootstrapping from the 64-bit amd64 rustc, the (Canadian) cross build requires 64-bit liblzma. What would be the best way off adding this dependency only for bootstrapping? With USE=system-bootstrap I suppose app-arch/xz-utils[abi_x86_64] could be added as an RDEPEND to dev-lang/rust-bin[abi_x86_x32]?
I'll update the ebuilds this weekend.
I've tested the rust-bin with a slightly edited patch to make it work for 1.77.1 and have at least confirmed this works at this point. When the updated ebuilds are done I will look into the rust ebuild as well.
Created attachment 894556 [details] rust ebuild supporting bootstrapping x32 from amd64 It requires system-bootstrap from rust-bin or from already merged x32 rustc.
Created attachment 894557 [details] rust-bin ebuild updated to latest version
The above rust ebuilds require the eclass patch for the x32 rust triple.
Would it be better if I attached patches of the ebuilds instead as I did previously?
Thanks for the updated ebuilds. I have spent the last week testing these and have confirmed the rust-bin works perfectly however there is issues with compiling it on a x32 system. I've spoke to the Rust project in Gentoo about my results and they are happy for you to make a PR for a rebased rust-bin ebuild for 1.78.0 (do check if 1.79.0 is out though as that release is incoming any day now). If you need help with this then please ping me in #gentoo-rust but please be aware you might need to wait a bit for me to reply and the channel isn't actively monitored so it might take an hour for us to get back to you. Once again thanks for the work you have put into keeping x32 alive.
*** Bug 947673 has been marked as a duplicate of this bug. ***