Merge "Generate fsv meta only when PRODUCT_FSVERITY_GENERATE_METADATA is true" into main
diff --git a/android/arch_test.go b/android/arch_test.go
index 57c9010..7914884 100644
--- a/android/arch_test.go
+++ b/android/arch_test.go
@@ -560,15 +560,7 @@
prepareForArchTest,
// Test specific preparer
OptionalFixturePreparer(tt.preparer),
- // Prepare for native bridge test
- FixtureModifyConfig(func(config Config) {
- config.Targets[Android] = []Target{
- {Android, Arch{ArchType: X86_64, ArchVariant: "silvermont", Abi: []string{"arm64-v8a"}}, NativeBridgeDisabled, "", "", false},
- {Android, Arch{ArchType: X86, ArchVariant: "silvermont", Abi: []string{"armeabi-v7a"}}, NativeBridgeDisabled, "", "", false},
- {Android, Arch{ArchType: Arm64, ArchVariant: "armv8-a", Abi: []string{"arm64-v8a"}}, NativeBridgeEnabled, "x86_64", "arm64", false},
- {Android, Arch{ArchType: Arm, ArchVariant: "armv7-a-neon", Abi: []string{"armeabi-v7a"}}, NativeBridgeEnabled, "x86", "arm", false},
- }
- }),
+ PrepareForNativeBridgeEnabled,
FixtureWithRootAndroidBp(bp),
).RunTest(t)
diff --git a/android/testing.go b/android/testing.go
index f243e81..765839f 100644
--- a/android/testing.go
+++ b/android/testing.go
@@ -190,6 +190,26 @@
})
}
+// PrepareForNativeBridgeEnabled sets configuration with targets including:
+// - X86_64 (primary)
+// - X86 (secondary)
+// - Arm64 on X86_64 (native bridge)
+// - Arm on X86 (native bridge)
+var PrepareForNativeBridgeEnabled = FixtureModifyConfig(
+ func(config Config) {
+ config.Targets[Android] = []Target{
+ {Os: Android, Arch: Arch{ArchType: X86_64, ArchVariant: "silvermont", Abi: []string{"arm64-v8a"}},
+ NativeBridge: NativeBridgeDisabled, NativeBridgeHostArchName: "", NativeBridgeRelativePath: ""},
+ {Os: Android, Arch: Arch{ArchType: X86, ArchVariant: "silvermont", Abi: []string{"armeabi-v7a"}},
+ NativeBridge: NativeBridgeDisabled, NativeBridgeHostArchName: "", NativeBridgeRelativePath: ""},
+ {Os: Android, Arch: Arch{ArchType: Arm64, ArchVariant: "armv8-a", Abi: []string{"arm64-v8a"}},
+ NativeBridge: NativeBridgeEnabled, NativeBridgeHostArchName: "x86_64", NativeBridgeRelativePath: "arm64"},
+ {Os: Android, Arch: Arch{ArchType: Arm, ArchVariant: "armv7-a-neon", Abi: []string{"armeabi-v7a"}},
+ NativeBridge: NativeBridgeEnabled, NativeBridgeHostArchName: "x86", NativeBridgeRelativePath: "arm"},
+ }
+ },
+)
+
func NewTestArchContext(config Config) *TestContext {
ctx := NewTestContext(config)
ctx.preDeps = append(ctx.preDeps, registerArchMutator)
diff --git a/apex/apex_test.go b/apex/apex_test.go
index 6cdb225..27c0340 100644
--- a/apex/apex_test.go
+++ b/apex/apex_test.go
@@ -84,26 +84,6 @@
return files.AddToFixture()
}
-// withNativeBridgeTargets sets configuration with targets including:
-// - X86_64 (primary)
-// - X86 (secondary)
-// - Arm64 on X86_64 (native bridge)
-// - Arm on X86 (native bridge)
-var withNativeBridgeEnabled = android.FixtureModifyConfig(
- func(config android.Config) {
- config.Targets[android.Android] = []android.Target{
- {Os: android.Android, Arch: android.Arch{ArchType: android.X86_64, ArchVariant: "silvermont", Abi: []string{"arm64-v8a"}},
- NativeBridge: android.NativeBridgeDisabled, NativeBridgeHostArchName: "", NativeBridgeRelativePath: ""},
- {Os: android.Android, Arch: android.Arch{ArchType: android.X86, ArchVariant: "silvermont", Abi: []string{"armeabi-v7a"}},
- NativeBridge: android.NativeBridgeDisabled, NativeBridgeHostArchName: "", NativeBridgeRelativePath: ""},
- {Os: android.Android, Arch: android.Arch{ArchType: android.Arm64, ArchVariant: "armv8-a", Abi: []string{"arm64-v8a"}},
- NativeBridge: android.NativeBridgeEnabled, NativeBridgeHostArchName: "x86_64", NativeBridgeRelativePath: "arm64"},
- {Os: android.Android, Arch: android.Arch{ArchType: android.Arm, ArchVariant: "armv7-a-neon", Abi: []string{"armeabi-v7a"}},
- NativeBridge: android.NativeBridgeEnabled, NativeBridgeHostArchName: "x86", NativeBridgeRelativePath: "arm"},
- }
- },
-)
-
func withManifestPackageNameOverrides(specs []string) android.FixturePreparer {
return android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
variables.ManifestPackageNameOverrides = specs
@@ -3198,7 +3178,7 @@
},
},
}
- `, withNativeBridgeEnabled)
+ `, android.PrepareForNativeBridgeEnabled)
ensureExactContents(t, ctx, "myapex", "android_common_myapex", []string{
"bin/foo/bar/mybin",
"bin/foo/bar/mybin64",
diff --git a/cc/prebuilt.go b/cc/prebuilt.go
index ba4c662..96a07bc 100644
--- a/cc/prebuilt.go
+++ b/cc/prebuilt.go
@@ -16,7 +16,6 @@
import (
"path/filepath"
- "strings"
"github.com/google/blueprint/depset"
"github.com/google/blueprint/proptools"
@@ -120,22 +119,6 @@
// Stub variants will create a stub .so file from stub .c files
if p.buildStubs() && objs.objFiles != nil {
// TODO (b/275273834): Make objs.objFiles == nil a hard error when the symbol files have been added to module sdk.
-
- // The map.txt files of libclang_rt.* contain version information, but the checked in .so files do not.
- // e.g. libclang_rt.* libs impl
- // $ nm -D prebuilts/../libclang_rt.hwasan-aarch64-android.so
- // __hwasan_init
-
- // stubs generated from .map.txt
- // $ nm -D out/soong/.intermediates/../<stubs>/libclang_rt.hwasan-aarch64-android.so
- // __hwasan_init@@LIBCLANG_RT_ASAN
-
- // Special-case libclang_rt.* libs to account for this discrepancy.
- // TODO (spandandas): Remove this special case https://r.android.com/3236596 has been submitted, and a new set of map.txt
- // files of libclang_rt.* libs have been generated.
- if strings.Contains(ctx.ModuleName(), "libclang_rt.") {
- p.versionScriptPath = android.OptionalPathForPath(nil)
- }
return p.linkShared(ctx, flags, deps, objs)
}
diff --git a/filesystem/aconfig_files.go b/filesystem/aconfig_files.go
index 608fccd..7de404f 100644
--- a/filesystem/aconfig_files.go
+++ b/filesystem/aconfig_files.go
@@ -52,6 +52,8 @@
sb.WriteString(aconfigToolPath.String())
sb.WriteString(" dump-cache --dedup --format protobuf --out ")
sb.WriteString(installAconfigFlagsPath.String())
+ sb.WriteString(" --filter container:")
+ sb.WriteString(f.PartitionType())
sb.WriteString(" \\\n")
sb.WriteString(sbCaches.String())
cmd.ImplicitOutput(installAconfigFlagsPath)
@@ -71,8 +73,9 @@
sb.WriteString(fileType)
sb.WriteString(" --out ")
sb.WriteString(outputPath.String())
- sb.WriteString(" \\\n")
- sb.WriteString(sbCaches.String())
+ sb.WriteString(" --cache ")
+ sb.WriteString(installAconfigFlagsPath.String())
+ sb.WriteRune('\n')
cmd.ImplicitOutput(outputPath)
f.appendToEntry(ctx, outputPath)
}
diff --git a/filesystem/filesystem.go b/filesystem/filesystem.go
index 5b217ae..eb34180 100644
--- a/filesystem/filesystem.go
+++ b/filesystem/filesystem.go
@@ -25,6 +25,7 @@
"android/soong/android"
"android/soong/cc"
+ "android/soong/java"
"android/soong/linkerconfig"
"github.com/google/blueprint"
@@ -33,6 +34,7 @@
func init() {
registerBuildComponents(android.InitRegistrationContext)
+ registerMutators(android.InitRegistrationContext)
}
func registerBuildComponents(ctx android.RegistrationContext) {
@@ -45,6 +47,12 @@
ctx.RegisterModuleType("avb_gen_vbmeta_image_defaults", avbGenVbmetaImageDefaultsFactory)
}
+func registerMutators(ctx android.RegistrationContext) {
+ ctx.PostDepsMutators(func(ctx android.RegisterMutatorsContext) {
+ ctx.BottomUp("add_autogenerated_rro_deps", addAutogeneratedRroDeps)
+ })
+}
+
type filesystem struct {
android.ModuleBase
android.PackagingBase
@@ -170,6 +178,14 @@
// Path to the dev nodes description file. This is only needed for building the ramdisk
// partition and should not be explicitly specified.
Dev_nodes_description_file *string `android:"path" blueprint:"mutated"`
+
+ // Additional dependencies used for building android products
+ Android_filesystem_deps AndroidFilesystemDeps
+}
+
+type AndroidFilesystemDeps struct {
+ System *string
+ System_ext *string
}
// Additional properties required to generate erofs FS partitions.
@@ -235,6 +251,12 @@
depTag
}
+type interPartitionDepTag struct {
+ blueprint.BaseDependencyTag
+}
+
+var interPartitionDependencyTag = interPartitionDepTag{}
+
var _ android.ExcludeFromVisibilityEnforcementTag = (*depTagWithVisibilityEnforcementBypass)(nil)
func (t depTagWithVisibilityEnforcementBypass) ExcludeFromVisibilityEnforcement() {}
@@ -257,6 +279,12 @@
} else {
f.AddDeps(ctx, dependencyTag)
}
+ if f.properties.Android_filesystem_deps.System != nil {
+ ctx.AddDependency(ctx.Module(), interPartitionDependencyTag, proptools.String(f.properties.Android_filesystem_deps.System))
+ }
+ if f.properties.Android_filesystem_deps.System_ext != nil {
+ ctx.AddDependency(ctx.Module(), interPartitionDependencyTag, proptools.String(f.properties.Android_filesystem_deps.System_ext))
+ }
}
type fsType int
@@ -1004,3 +1032,30 @@
image, maxSize)
cmd.Implicit(image)
}
+
+// addAutogeneratedRroDeps walks the transitive closure of vendor and product partitions.
+// It visits apps installed in system and system_ext partitions, and adds the autogenerated
+// RRO modules to its own deps.
+func addAutogeneratedRroDeps(ctx android.BottomUpMutatorContext) {
+ f, ok := ctx.Module().(*filesystem)
+ if !ok {
+ return
+ }
+ thisPartition := f.PartitionType()
+ if thisPartition != "vendor" && thisPartition != "product" {
+ return
+ }
+ ctx.WalkDeps(func(child, parent android.Module) bool {
+ depTag := ctx.OtherModuleDependencyTag(child)
+ if parent.Name() == f.Name() && depTag != interPartitionDependencyTag {
+ return false // This is a module listed in deps of vendor/product filesystem
+ }
+ if vendorOverlay := java.AutogeneratedRroModuleName(ctx, child.Name(), "vendor"); ctx.OtherModuleExists(vendorOverlay) && thisPartition == "vendor" {
+ ctx.AddFarVariationDependencies(nil, dependencyTagWithVisibilityEnforcementBypass, vendorOverlay)
+ }
+ if productOverlay := java.AutogeneratedRroModuleName(ctx, child.Name(), "product"); ctx.OtherModuleExists(productOverlay) && thisPartition == "product" {
+ ctx.AddFarVariationDependencies(nil, dependencyTagWithVisibilityEnforcementBypass, productOverlay)
+ }
+ return true
+ })
+}
diff --git a/fsgen/filesystem_creator.go b/fsgen/filesystem_creator.go
index 7384384..e40bce5 100644
--- a/fsgen/filesystem_creator.go
+++ b/fsgen/filesystem_creator.go
@@ -205,7 +205,7 @@
ctx.CreateModule(filesystem.AndroidDeviceFactory, baseProps, partitionProps)
}
-func partitionSpecificFsProps(fsProps *filesystem.FilesystemProperties, partitionVars android.PartitionVariables, partitionType string) {
+func partitionSpecificFsProps(ctx android.EarlyModuleContext, fsProps *filesystem.FilesystemProperties, partitionVars android.PartitionVariables, partitionType string) {
switch partitionType {
case "system":
fsProps.Build_logtags = proptools.BoolPtr(true)
@@ -360,6 +360,10 @@
}
case "product":
fsProps.Gen_aconfig_flags_pb = proptools.BoolPtr(true)
+ fsProps.Android_filesystem_deps.System = proptools.StringPtr(generatedModuleNameForPartition(ctx.Config(), "system"))
+ if ctx.DeviceConfig().SystemExtPath() == "system_ext" {
+ fsProps.Android_filesystem_deps.System_ext = proptools.StringPtr(generatedModuleNameForPartition(ctx.Config(), "system_ext"))
+ }
case "vendor":
fsProps.Gen_aconfig_flags_pb = proptools.BoolPtr(true)
fsProps.Symlinks = []filesystem.SymlinkDefinition{
@@ -372,6 +376,10 @@
Name: proptools.StringPtr("vendor/lib/modules"),
},
}
+ fsProps.Android_filesystem_deps.System = proptools.StringPtr(generatedModuleNameForPartition(ctx.Config(), "system"))
+ if ctx.DeviceConfig().SystemExtPath() == "system_ext" {
+ fsProps.Android_filesystem_deps.System_ext = proptools.StringPtr(generatedModuleNameForPartition(ctx.Config(), "system_ext"))
+ }
case "odm":
fsProps.Symlinks = []filesystem.SymlinkDefinition{
filesystem.SymlinkDefinition{
@@ -715,7 +723,7 @@
fsProps.Is_auto_generated = proptools.BoolPtr(true)
- partitionSpecificFsProps(fsProps, partitionVars, partitionType)
+ partitionSpecificFsProps(ctx, fsProps, partitionVars, partitionType)
// system_image properties that are not set:
// - filesystemProperties.Avb_hash_algorithm
diff --git a/fsgen/filesystem_creator_test.go b/fsgen/filesystem_creator_test.go
index fe4a403..5657608 100644
--- a/fsgen/filesystem_creator_test.go
+++ b/fsgen/filesystem_creator_test.go
@@ -168,13 +168,8 @@
BoardFileSystemType: "ext4",
},
}
- config.Targets[android.Android] = []android.Target{
- {Os: android.Android, Arch: android.Arch{ArchType: android.X86_64, ArchVariant: "silvermont", Abi: []string{"arm64-v8a"}}, NativeBridge: android.NativeBridgeDisabled, NativeBridgeHostArchName: "", NativeBridgeRelativePath: "", HostCross: false},
- {Os: android.Android, Arch: android.Arch{ArchType: android.X86, ArchVariant: "silvermont", Abi: []string{"armeabi-v7a"}}, NativeBridge: android.NativeBridgeDisabled, NativeBridgeHostArchName: "", NativeBridgeRelativePath: "", HostCross: false},
- {Os: android.Android, Arch: android.Arch{ArchType: android.Arm64, ArchVariant: "armv8-a", Abi: []string{"arm64-v8a"}}, NativeBridge: android.NativeBridgeEnabled, NativeBridgeHostArchName: "x86_64", NativeBridgeRelativePath: "arm64", HostCross: false},
- {Os: android.Android, Arch: android.Arch{ArchType: android.Arm, ArchVariant: "armv7-a-neon", Abi: []string{"armeabi-v7a"}}, NativeBridge: android.NativeBridgeEnabled, NativeBridgeHostArchName: "x86", NativeBridgeRelativePath: "arm", HostCross: false},
- }
}),
+ android.PrepareForNativeBridgeEnabled,
android.FixtureMergeMockFs(android.MockFS{
"external/avb/test/data/testkey_rsa4096.pem": nil,
"build/soong/fsgen/Android.bp": []byte(`
diff --git a/java/app.go b/java/app.go
index 7f80160..34a548e 100644
--- a/java/app.go
+++ b/java/app.go
@@ -1382,6 +1382,10 @@
return module
}
+func AutogeneratedRroModuleName(ctx android.EarlyModuleContext, moduleName, partition string) string {
+ return fmt.Sprintf("%s__%s__auto_generated_rro_%s", moduleName, ctx.Config().DeviceProduct(), partition)
+}
+
// A dictionary of values to be overridden in the manifest.
type Manifest_values struct {
// Overrides the value of package_name in the manifest