Merge "rust: Add support for bootstrap linker."

This commit is contained in:
Ivan Lozano
2021-07-23 14:00:23 +00:00
committed by Gerrit Code Review
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 {