From 71512f32655645d0279b1fd7b3d9f4fe5767ca10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thi=C3=A9baud=20Weksteen?= Date: Tue, 3 Nov 2020 15:17:51 +0100 Subject: [PATCH] rust: set STD_ENV_ARCH In 1.47.0, std::env requires the STD_ENV_ARCH environment variable to be set to the target architecture [1]. [1] https://github.com/rust-lang/rust/blob/8e8939b8045b7af6076fb718e2e298844aaf4650/library/std/src/env.rs#L866 Bug: 171280890 Test: cd external/rust; mm Change-Id: If4ddf4b9bad2a1a7518a358a5fb597170a97c67e --- rust/builder.go | 8 ++++++++ rust/config/global.go | 9 +++++++++ 2 files changed, 17 insertions(+) diff --git a/rust/builder.go b/rust/builder.go index 654b1e6bf..3e082dc2f 100644 --- a/rust/builder.go +++ b/rust/builder.go @@ -22,6 +22,7 @@ import ( "android/soong/android" "android/soong/cc" + "android/soong/rust/config" ) var ( @@ -138,6 +139,13 @@ func transformSrctoCrate(ctx ModuleContext, main android.Path, deps PathDeps, fl crate_name := ctx.RustModule().CrateName() targetTriple := ctx.toolchain().RustTriple() + // libstd requires a specific environment variable to be set. This is + // not officially documented and may be removed in the future. See + // https://github.com/rust-lang/rust/blob/master/library/std/src/env.rs#L866. + if crate_name == "std" { + envVars = append(envVars, "STD_ENV_ARCH="+config.StdEnvArch[ctx.RustModule().Arch().ArchType]) + } + inputs = append(inputs, main) // Collect rustc flags diff --git a/rust/config/global.go b/rust/config/global.go index 71c424091..326b85fe0 100644 --- a/rust/config/global.go +++ b/rust/config/global.go @@ -32,6 +32,15 @@ var ( "libtest", } + // Mapping between Soong internal arch types and std::env constants. + // Required as Rust uses aarch64 when Soong uses arm64. + StdEnvArch = map[android.ArchType]string{ + android.Arm: "arm", + android.Arm64: "aarch64", + android.X86: "x86", + android.X86_64: "x86_64", + } + GlobalRustFlags = []string{ "--remap-path-prefix $$(pwd)=", "-C codegen-units=1",