Loading cc/cc.go +0 −1 Original line number Diff line number Diff line Loading @@ -3466,7 +3466,6 @@ func MakeLibName(ctx android.ModuleContext, c LinkableInterface, ccDep LinkableI nonSystemVariantsExist := ccDep.HasNonSystemVariants() || isLLndk if ccDepModule != nil { // TODO(ivanlozano) Support snapshots for Rust-produced C library variants. // Use base module name for snapshots when exporting to Makefile. if snapshotPrebuilt, ok := ccDepModule.linker.(SnapshotInterface); ok { baseName := ccDepModule.BaseModuleName() Loading cc/snapshot_prebuilt.go +2 −2 Original line number Diff line number Diff line Loading @@ -522,6 +522,8 @@ func (p *snapshotLibraryDecorator) nativeCoverage() bool { return false } var _ snapshotSanitizer = (*snapshotLibraryDecorator)(nil) func (p *snapshotLibraryDecorator) isSanitizerAvailable(t SanitizerType) bool { switch t { case cfi: Loading Loading @@ -644,8 +646,6 @@ func RecoverySnapshotHeaderFactory() android.Module { return module.Init() } var _ snapshotSanitizer = (*snapshotLibraryDecorator)(nil) // Module definitions for snapshots of executable binaries. // // Modules (vendor|recovery)_snapshot_binary are defined here. They have their prebuilt executable Loading rust/androidmk.go +10 −2 Original line number Diff line number Diff line Loading @@ -43,6 +43,10 @@ func (mod *Module) SubAndroidMk(data *android.AndroidMkEntries, obj interface{}) } } func (mod *Module) AndroidMkSuffix() string { return mod.Properties.RustSubName + mod.Properties.SubName } func (mod *Module) AndroidMkEntries() []android.AndroidMkEntries { if mod.Properties.HideFromMake || mod.hideApexVariantFromMake { Loading Loading @@ -79,8 +83,7 @@ func (mod *Module) AndroidMkEntries() []android.AndroidMkEntries { mod.SubAndroidMk(&ret, mod.sanitize) } ret.SubName += mod.Properties.RustSubName ret.SubName += mod.Properties.SubName ret.SubName += mod.AndroidMkSuffix() return []android.AndroidMkEntries{ret} } Loading Loading @@ -152,6 +155,11 @@ func (library *libraryDecorator) AndroidMk(ctx AndroidMkContext, ret *android.An }) } func (library *snapshotLibraryDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkEntries) { ctx.SubAndroidMk(ret, library.libraryDecorator) ret.SubName = library.SnapshotAndroidMkSuffix() } func (procMacro *procMacroDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkEntries) { ctx.SubAndroidMk(ret, procMacro.baseCompiler) Loading rust/rust.go +12 −1 Original line number Diff line number Diff line Loading @@ -1111,6 +1111,17 @@ func (mod *Module) Prebuilt() *android.Prebuilt { return nil } func rustMakeLibName(ctx android.ModuleContext, c cc.LinkableInterface, dep cc.LinkableInterface, depName string) string { if rustDep, ok := dep.(*Module); ok { // Use base module name for snapshots when exporting to Makefile. if snapshotPrebuilt, ok := rustDep.compiler.(cc.SnapshotInterface); ok { baseName := rustDep.BaseModuleName() return baseName + snapshotPrebuilt.SnapshotAndroidMkSuffix() + rustDep.AndroidMkSuffix() } } return cc.MakeLibName(ctx, c, dep, depName) } func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps { var depPaths PathDeps Loading Loading @@ -1142,7 +1153,7 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps { if rustDep, ok := dep.(*Module); ok && !rustDep.CcLibraryInterface() { //Handle Rust Modules makeLibName := cc.MakeLibName(ctx, mod, rustDep, depName+rustDep.Properties.RustSubName) makeLibName := rustMakeLibName(ctx, mod, rustDep, depName+rustDep.Properties.RustSubName) switch depTag { case dylibDepTag: Loading rust/vendor_snapshot_test.go +24 −9 Original line number Diff line number Diff line Loading @@ -424,6 +424,14 @@ func TestVendorSnapshotUse(t *testing.T) { compile_multilib: "32", srcs: ["bin.rs"], } rust_library { name: "librust_vendor_available", crate_name: "rust_vendor", vendor_available: true, srcs: ["client.rs"], } ` vndkBp := ` Loading Loading @@ -499,13 +507,6 @@ func TestVendorSnapshotUse(t *testing.T) { system_shared_libs: [], } rust_library { name: "librust_vendor_available", crate_name: "rust_vendor", vendor_available: true, srcs: ["client.rs"], } rust_ffi_shared { name: "libclient", crate_name: "client", Loading Loading @@ -963,7 +964,7 @@ func TestVendorSnapshotUse(t *testing.T) { } libclientAndroidMkRlibs := ctx.ModuleForTests("libclient", sharedVariant).Module().(*Module).Properties.AndroidMkRlibs if g, w := libclientAndroidMkRlibs, []string{"librust_vendor_available.vendor_rlib.30.arm64.rlib-std", "libstd.vendor_rlib.30.arm64"}; !reflect.DeepEqual(g, w) { if g, w := libclientAndroidMkRlibs, []string{"librust_vendor_available.vendor.rlib-std", "libstd.vendor"}; !reflect.DeepEqual(g, w) { t.Errorf("wanted libclient libclientAndroidMkRlibs %q, got %q", w, g) } Loading @@ -978,10 +979,24 @@ func TestVendorSnapshotUse(t *testing.T) { } libclientRustAndroidMkRlibs := ctx.ModuleForTests("libclient_rust", rlibVariant).Module().(*Module).Properties.AndroidMkRlibs if g, w := libclientRustAndroidMkRlibs, []string{"librust_vendor_available.vendor_rlib.30.arm64.rlib-std", "libstd.vendor_rlib.30.arm64"}; !reflect.DeepEqual(g, w) { if g, w := libclientRustAndroidMkRlibs, []string{"librust_vendor_available.vendor.rlib-std", "libstd.vendor"}; !reflect.DeepEqual(g, w) { t.Errorf("wanted libclient libclientAndroidMkRlibs %q, got %q", w, g) } // rust vendor snapshot must have ".vendor" suffix in AndroidMk librustVendorAvailableSnapshotModule := ctx.ModuleForTests("librust_vendor_available.vendor_rlib.30.arm64", rlibVariant).Module() librustVendorSnapshotMkName := android.AndroidMkEntriesForTest(t, ctx, librustVendorAvailableSnapshotModule)[0].EntryMap["LOCAL_MODULE"][0] expectedRustVendorSnapshotName := "librust_vendor_available.vendor.rlib-std" if librustVendorSnapshotMkName != expectedRustVendorSnapshotName { t.Errorf("Unexpected rust vendor snapshot name in AndroidMk: %q, expected: %q\n", librustVendorSnapshotMkName, expectedRustVendorSnapshotName) } rustVendorBinModule := ctx.ModuleForTests("bin_without_snapshot", binaryVariant).Module() rustVendorBinMkRlibName := android.AndroidMkEntriesForTest(t, ctx, rustVendorBinModule)[0].EntryMap["LOCAL_RLIB_LIBRARIES"][0] if rustVendorBinMkRlibName != expectedRustVendorSnapshotName { t.Errorf("Unexpected rust rlib name in AndroidMk: %q, expected: %q\n", rustVendorBinMkRlibName, expectedRustVendorSnapshotName) } binWithoutSnapshotLdFlags := ctx.ModuleForTests("bin_without_snapshot", binaryVariant).Rule("rustc").Args["linkFlags"] libVndkStaticOutputPaths := cc.GetOutputPaths(ctx, staticVariant, []string{"libvndk.vendor_static.30.arm64"}) if !strings.Contains(binWithoutSnapshotLdFlags, libVndkStaticOutputPaths[0].String()) { Loading Loading
cc/cc.go +0 −1 Original line number Diff line number Diff line Loading @@ -3466,7 +3466,6 @@ func MakeLibName(ctx android.ModuleContext, c LinkableInterface, ccDep LinkableI nonSystemVariantsExist := ccDep.HasNonSystemVariants() || isLLndk if ccDepModule != nil { // TODO(ivanlozano) Support snapshots for Rust-produced C library variants. // Use base module name for snapshots when exporting to Makefile. if snapshotPrebuilt, ok := ccDepModule.linker.(SnapshotInterface); ok { baseName := ccDepModule.BaseModuleName() Loading
cc/snapshot_prebuilt.go +2 −2 Original line number Diff line number Diff line Loading @@ -522,6 +522,8 @@ func (p *snapshotLibraryDecorator) nativeCoverage() bool { return false } var _ snapshotSanitizer = (*snapshotLibraryDecorator)(nil) func (p *snapshotLibraryDecorator) isSanitizerAvailable(t SanitizerType) bool { switch t { case cfi: Loading Loading @@ -644,8 +646,6 @@ func RecoverySnapshotHeaderFactory() android.Module { return module.Init() } var _ snapshotSanitizer = (*snapshotLibraryDecorator)(nil) // Module definitions for snapshots of executable binaries. // // Modules (vendor|recovery)_snapshot_binary are defined here. They have their prebuilt executable Loading
rust/androidmk.go +10 −2 Original line number Diff line number Diff line Loading @@ -43,6 +43,10 @@ func (mod *Module) SubAndroidMk(data *android.AndroidMkEntries, obj interface{}) } } func (mod *Module) AndroidMkSuffix() string { return mod.Properties.RustSubName + mod.Properties.SubName } func (mod *Module) AndroidMkEntries() []android.AndroidMkEntries { if mod.Properties.HideFromMake || mod.hideApexVariantFromMake { Loading Loading @@ -79,8 +83,7 @@ func (mod *Module) AndroidMkEntries() []android.AndroidMkEntries { mod.SubAndroidMk(&ret, mod.sanitize) } ret.SubName += mod.Properties.RustSubName ret.SubName += mod.Properties.SubName ret.SubName += mod.AndroidMkSuffix() return []android.AndroidMkEntries{ret} } Loading Loading @@ -152,6 +155,11 @@ func (library *libraryDecorator) AndroidMk(ctx AndroidMkContext, ret *android.An }) } func (library *snapshotLibraryDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkEntries) { ctx.SubAndroidMk(ret, library.libraryDecorator) ret.SubName = library.SnapshotAndroidMkSuffix() } func (procMacro *procMacroDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkEntries) { ctx.SubAndroidMk(ret, procMacro.baseCompiler) Loading
rust/rust.go +12 −1 Original line number Diff line number Diff line Loading @@ -1111,6 +1111,17 @@ func (mod *Module) Prebuilt() *android.Prebuilt { return nil } func rustMakeLibName(ctx android.ModuleContext, c cc.LinkableInterface, dep cc.LinkableInterface, depName string) string { if rustDep, ok := dep.(*Module); ok { // Use base module name for snapshots when exporting to Makefile. if snapshotPrebuilt, ok := rustDep.compiler.(cc.SnapshotInterface); ok { baseName := rustDep.BaseModuleName() return baseName + snapshotPrebuilt.SnapshotAndroidMkSuffix() + rustDep.AndroidMkSuffix() } } return cc.MakeLibName(ctx, c, dep, depName) } func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps { var depPaths PathDeps Loading Loading @@ -1142,7 +1153,7 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps { if rustDep, ok := dep.(*Module); ok && !rustDep.CcLibraryInterface() { //Handle Rust Modules makeLibName := cc.MakeLibName(ctx, mod, rustDep, depName+rustDep.Properties.RustSubName) makeLibName := rustMakeLibName(ctx, mod, rustDep, depName+rustDep.Properties.RustSubName) switch depTag { case dylibDepTag: Loading
rust/vendor_snapshot_test.go +24 −9 Original line number Diff line number Diff line Loading @@ -424,6 +424,14 @@ func TestVendorSnapshotUse(t *testing.T) { compile_multilib: "32", srcs: ["bin.rs"], } rust_library { name: "librust_vendor_available", crate_name: "rust_vendor", vendor_available: true, srcs: ["client.rs"], } ` vndkBp := ` Loading Loading @@ -499,13 +507,6 @@ func TestVendorSnapshotUse(t *testing.T) { system_shared_libs: [], } rust_library { name: "librust_vendor_available", crate_name: "rust_vendor", vendor_available: true, srcs: ["client.rs"], } rust_ffi_shared { name: "libclient", crate_name: "client", Loading Loading @@ -963,7 +964,7 @@ func TestVendorSnapshotUse(t *testing.T) { } libclientAndroidMkRlibs := ctx.ModuleForTests("libclient", sharedVariant).Module().(*Module).Properties.AndroidMkRlibs if g, w := libclientAndroidMkRlibs, []string{"librust_vendor_available.vendor_rlib.30.arm64.rlib-std", "libstd.vendor_rlib.30.arm64"}; !reflect.DeepEqual(g, w) { if g, w := libclientAndroidMkRlibs, []string{"librust_vendor_available.vendor.rlib-std", "libstd.vendor"}; !reflect.DeepEqual(g, w) { t.Errorf("wanted libclient libclientAndroidMkRlibs %q, got %q", w, g) } Loading @@ -978,10 +979,24 @@ func TestVendorSnapshotUse(t *testing.T) { } libclientRustAndroidMkRlibs := ctx.ModuleForTests("libclient_rust", rlibVariant).Module().(*Module).Properties.AndroidMkRlibs if g, w := libclientRustAndroidMkRlibs, []string{"librust_vendor_available.vendor_rlib.30.arm64.rlib-std", "libstd.vendor_rlib.30.arm64"}; !reflect.DeepEqual(g, w) { if g, w := libclientRustAndroidMkRlibs, []string{"librust_vendor_available.vendor.rlib-std", "libstd.vendor"}; !reflect.DeepEqual(g, w) { t.Errorf("wanted libclient libclientAndroidMkRlibs %q, got %q", w, g) } // rust vendor snapshot must have ".vendor" suffix in AndroidMk librustVendorAvailableSnapshotModule := ctx.ModuleForTests("librust_vendor_available.vendor_rlib.30.arm64", rlibVariant).Module() librustVendorSnapshotMkName := android.AndroidMkEntriesForTest(t, ctx, librustVendorAvailableSnapshotModule)[0].EntryMap["LOCAL_MODULE"][0] expectedRustVendorSnapshotName := "librust_vendor_available.vendor.rlib-std" if librustVendorSnapshotMkName != expectedRustVendorSnapshotName { t.Errorf("Unexpected rust vendor snapshot name in AndroidMk: %q, expected: %q\n", librustVendorSnapshotMkName, expectedRustVendorSnapshotName) } rustVendorBinModule := ctx.ModuleForTests("bin_without_snapshot", binaryVariant).Module() rustVendorBinMkRlibName := android.AndroidMkEntriesForTest(t, ctx, rustVendorBinModule)[0].EntryMap["LOCAL_RLIB_LIBRARIES"][0] if rustVendorBinMkRlibName != expectedRustVendorSnapshotName { t.Errorf("Unexpected rust rlib name in AndroidMk: %q, expected: %q\n", rustVendorBinMkRlibName, expectedRustVendorSnapshotName) } binWithoutSnapshotLdFlags := ctx.ModuleForTests("bin_without_snapshot", binaryVariant).Rule("rustc").Args["linkFlags"] libVndkStaticOutputPaths := cc.GetOutputPaths(ctx, staticVariant, []string{"libvndk.vendor_static.30.arm64"}) if !strings.Contains(binWithoutSnapshotLdFlags, libVndkStaticOutputPaths[0].String()) { Loading