Merge "rust: Add support for bootstrap linker." am: c76c802e6a

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1774534

Change-Id: I8578911c4a56dc21ea6374a02e87fa1c892928ce
This commit is contained in:
Ivan Lozano
2021-07-23 14:23:37 +00:00
committed by Automerger Merge Worker
3 changed files with 31 additions and 1 deletions

View File

@@ -114,6 +114,23 @@ func TestBinaryFlags(t *testing.T) {
}
}
// Test that the bootstrap property sets the appropriate linker
func TestBootstrap(t *testing.T) {
ctx := testRust(t, `
rust_binary {
name: "foo",
srcs: ["foo.rs"],
bootstrap: true,
}`)
foo := ctx.ModuleForTests("foo", "android_arm64_armv8-a").Rule("rustc")
flag := "-Wl,-dynamic-linker,/system/bin/bootstrap/linker64"
if !strings.Contains(foo.Args["linkFlags"], flag) {
t.Errorf("missing link flag to use bootstrap linker, expecting %#v, linkFlags: %#v", flag, foo.Args["linkFlags"])
}
}
func TestStaticBinaryFlags(t *testing.T) {
ctx := testRust(t, `
rust_binary {

View File

@@ -220,6 +220,15 @@ func transformSrctoCrate(ctx ModuleContext, main android.Path, deps PathDeps, fl
linkFlags = append(linkFlags, flags.GlobalLinkFlags...)
linkFlags = append(linkFlags, flags.LinkFlags...)
// Check if this module needs to use the bootstrap linker
if ctx.RustModule().Bootstrap() && !ctx.RustModule().InRecovery() && !ctx.RustModule().InRamdisk() && !ctx.RustModule().InVendorRamdisk() {
dynamicLinker := "-Wl,-dynamic-linker,/system/bin/bootstrap/linker"
if ctx.toolchain().Is64Bit() {
dynamicLinker += "64"
}
linkFlags = append(linkFlags, dynamicLinker)
}
libFlags := makeLibFlags(deps)
// Collect dependencies

View File

@@ -85,6 +85,10 @@ type BaseProperties struct {
VendorRamdiskVariantNeeded bool `blueprint:"mutated"`
ExtraVariants []string `blueprint:"mutated"`
// Allows this module to use non-APEX version of libraries. Useful
// for building binaries that are started before APEXes are activated.
Bootstrap *bool
// Used by vendor snapshot to record dependencies from snapshot modules.
SnapshotSharedLibs []string `blueprint:"mutated"`
SnapshotStaticLibs []string `blueprint:"mutated"`
@@ -288,7 +292,7 @@ func (mod *Module) UseVndk() bool {
}
func (mod *Module) Bootstrap() bool {
return false
return Bool(mod.Properties.Bootstrap)
}
func (mod *Module) MustUseVendorVariant() bool {