diff options
author | 2024-11-20 18:34:16 +0000 | |
---|---|---|
committer | 2024-12-02 18:25:20 +0000 | |
commit | 71be42d93951aaaf95ba520281a9837f32bd738c (patch) | |
tree | db0e8e09776e00dfd1d18ef4c57ce6a688ed31cb /filesystem/filesystem.go | |
parent | f0eabbf94ffa8acf87e88822ec85c162f33b973e (diff) |
Automatically add system and system_ext autogen RRO to vendor/product
This CL creates a dependency edge from vendor/product to system and
system_ext. A post deps mutator will walk the transitive closure and add
the corresponding autogenerated RROs to deps.
Bug: 374371755
Bug: 375277835
Test: m soong_generated_vendor_filesystem_test
NOTICE is the last diff
Change-Id: Iffe64174a0d639dc224505a08eccd0a1dedc9f39
Diffstat (limited to 'filesystem/filesystem.go')
-rw-r--r-- | filesystem/filesystem.go | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/filesystem/filesystem.go b/filesystem/filesystem.go index 5b217aeec..eb3418064 100644 --- a/filesystem/filesystem.go +++ b/filesystem/filesystem.go @@ -25,6 +25,7 @@ import ( "android/soong/android" "android/soong/cc" + "android/soong/java" "android/soong/linkerconfig" "github.com/google/blueprint" @@ -33,6 +34,7 @@ import ( func init() { registerBuildComponents(android.InitRegistrationContext) + registerMutators(android.InitRegistrationContext) } func registerBuildComponents(ctx android.RegistrationContext) { @@ -45,6 +47,12 @@ func registerBuildComponents(ctx android.RegistrationContext) { 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 @@ type FilesystemProperties struct { // 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 @@ type depTagWithVisibilityEnforcementBypass struct { depTag } +type interPartitionDepTag struct { + blueprint.BaseDependencyTag +} + +var interPartitionDependencyTag = interPartitionDepTag{} + var _ android.ExcludeFromVisibilityEnforcementTag = (*depTagWithVisibilityEnforcementBypass)(nil) func (t depTagWithVisibilityEnforcementBypass) ExcludeFromVisibilityEnforcement() {} @@ -257,6 +279,12 @@ func (f *filesystem) DepsMutator(ctx android.BottomUpMutatorContext) { } 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 @@ func assertMaxImageSize(builder *android.RuleBuilder, image android.Path, maxSiz 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 + }) +} |