rust: use rust-snapshot binaries only in rust-native

Otherwise, use rust-native and cargo-native binaries as that allows
our native tweaks in them to be used for target/nativesdk rust -
same as for everything else written in rust.

In particular, this allows building target rust with
cargo-native that includes important reproducibility tweaks.

Unfortunately, this also breaks rust selftest, and that
is partially addressed by the following commit.

[YOCTO #15185]

(From OE-Core rev: d592bc02b0846411796c1d481c09833559d1d29f)

Signed-off-by: Alexander Kanavin <alex@linutronix.de>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 8f2230cb51fe22ef4711a56fecfab4858c04e35b)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
This commit is contained in:
Alexander Kanavin
2024-05-21 14:50:39 +02:00
committed by Steve Sakoman
parent e4de7259e4
commit 04976a1e40

View File

@@ -11,6 +11,11 @@ DEPENDS += "file-native python3-native"
DEPENDS:append:class-native = " rust-llvm-native"
DEPENDS:append:class-nativesdk = " nativesdk-rust-llvm"
# native rust uses cargo/rustc from binary snapshots to bootstrap
# but everything else should use our native builds
DEPENDS:append:class-target = " cargo-native rust-native"
DEPENDS:append:class-nativesdk = " cargo-native rust-native"
DEPENDS += "rust-llvm (=${PV})"
RDEPENDS:${PN}:append:class-target = " gcc g++ binutils"
@@ -70,6 +75,11 @@ addtask do_test_compile after do_configure do_rust_gen_targets
do_rust_setup_snapshot[dirs] += "${WORKDIR}/rust-snapshot"
do_rust_setup_snapshot[vardepsexclude] += "UNINATIVE_LOADER"
RUSTC_BOOTSTRAP = "${STAGING_BINDIR_NATIVE}/rustc"
CARGO_BOOTSTRAP = "${STAGING_BINDIR_NATIVE}/cargo"
RUSTC_BOOTSTRAP:class-native = "${WORKDIR}/rust-snapshot/bin/rustc"
CARGO_BOOTSTRAP:class-native = "${WORKDIR}/rust-snapshot/bin/cargo"
python do_configure() {
import json
import configparser
@@ -142,10 +152,10 @@ python do_configure() {
config.set("build", "submodules", e(False))
config.set("build", "docs", e(False))
rustc = d.expand("${WORKDIR}/rust-snapshot/bin/rustc")
rustc = d.getVar('RUSTC_BOOTSTRAP')
config.set("build", "rustc", e(rustc))
cargo = d.expand("${WORKDIR}/rust-snapshot/bin/cargo")
cargo = d.getVar('CARGO_BOOTSTRAP')
config.set("build", "cargo", e(cargo))
config.set("build", "vendor", e(True))