From 99c5fe6a38f8a70ab7e0c80f06e2ad37dc98829e Mon Sep 17 00:00:00 2001 From: Jooyung Han Date: Mon, 21 Mar 2022 15:13:38 +0900 Subject: [PATCH 1/2] Keep 'partition' in PackagingSpec Add a property 'partition' to PackagingSpec and fill it when PackagingSpec is created. This will enable PackageModule to filter PackgingSpec based on partition. (Will be used in a follow-up change) Bug: 225121718 Test: m (nothing changes) Change-Id: I7657edd380e215df66bae57d8b07dd4181841fdf --- android/module.go | 3 +++ android/packaging.go | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/android/module.go b/android/module.go index eb9d3d7c1..d0e2a7607 100644 --- a/android/module.go +++ b/android/module.go @@ -3119,6 +3119,7 @@ func (m *moduleContext) packageFile(fullInstallPath InstallPath, srcPath Path, e symlinkTarget: "", executable: executable, effectiveLicenseFiles: &licenseFiles, + partition: fullInstallPath.partition, } m.packagingSpecs = append(m.packagingSpecs, spec) return spec @@ -3236,6 +3237,7 @@ func (m *moduleContext) InstallSymlink(installPath InstallPath, name string, src srcPath: nil, symlinkTarget: relPath, executable: false, + partition: fullInstallPath.partition, }) return fullInstallPath @@ -3276,6 +3278,7 @@ func (m *moduleContext) InstallAbsoluteSymlink(installPath InstallPath, name str srcPath: nil, symlinkTarget: absPath, executable: false, + partition: fullInstallPath.partition, }) return fullInstallPath diff --git a/android/packaging.go b/android/packaging.go index e3a0b54be..e5a7fa4fd 100644 --- a/android/packaging.go +++ b/android/packaging.go @@ -40,6 +40,8 @@ type PackagingSpec struct { executable bool effectiveLicenseFiles *Paths + + partition string } // Get file name of installed package @@ -67,6 +69,10 @@ func (p *PackagingSpec) EffectiveLicenseFiles() Paths { return *p.effectiveLicenseFiles } +func (p *PackagingSpec) Partition() string { + return p.partition +} + type PackageModule interface { Module packagingBase() *PackagingBase From a8834282934f9a098d1fd6f991142a9a2b227656 Mon Sep 17 00:00:00 2001 From: Jooyung Han Date: Fri, 25 Mar 2022 11:40:12 +0900 Subject: [PATCH 2/2] Move GatherPackagingSpecs out of CopyDepsToZip This gives a PackageModule a chance to filter/customize the contents of resulting package. Bug: 225121718 Test: m (no changes) Change-Id: I45505e8234dff42201dc40d4f038e7b08eea89f0 --- android/packaging.go | 18 ++++++++++-------- android/packaging_test.go | 2 +- filesystem/filesystem.go | 4 ++-- snapshot/host_snapshot.go | 2 +- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/android/packaging.go b/android/packaging.go index e5a7fa4fd..ecd84a2f0 100644 --- a/android/packaging.go +++ b/android/packaging.go @@ -82,11 +82,14 @@ type PackageModule interface { // be copied to a zip in CopyDepsToZip, `depTag` should implement PackagingItem marker interface. AddDeps(ctx BottomUpMutatorContext, depTag blueprint.DependencyTag) + // GatherPackagingSpecs gathers PackagingSpecs of transitive dependencies. + GatherPackagingSpecs(ctx ModuleContext) map[string]PackagingSpec + // CopyDepsToZip zips the built artifacts of the dependencies into the given zip file and // returns zip entries in it. This is expected to be called in GenerateAndroidBuildActions, // followed by a build rule that unzips it and creates the final output (img, zip, tar.gz, // etc.) from the extracted files - CopyDepsToZip(ctx ModuleContext, zipOut WritablePath) []string + CopyDepsToZip(ctx ModuleContext, specs map[string]PackagingSpec, zipOut WritablePath) []string } // PackagingBase provides basic functionality for packaging dependencies. A module is expected to @@ -217,7 +220,7 @@ func (p *PackagingBase) AddDeps(ctx BottomUpMutatorContext, depTag blueprint.Dep } } -// Returns transitive PackagingSpecs from deps +// See PackageModule.GatherPackagingSpecs func (p *PackagingBase) GatherPackagingSpecs(ctx ModuleContext) map[string]PackagingSpec { m := make(map[string]PackagingSpec) ctx.VisitDirectDeps(func(child Module) { @@ -235,10 +238,10 @@ func (p *PackagingBase) GatherPackagingSpecs(ctx ModuleContext) map[string]Packa // CopySpecsToDir is a helper that will add commands to the rule builder to copy the PackagingSpec // entries into the specified directory. -func (p *PackagingBase) CopySpecsToDir(ctx ModuleContext, builder *RuleBuilder, m map[string]PackagingSpec, dir ModuleOutPath) (entries []string) { +func (p *PackagingBase) CopySpecsToDir(ctx ModuleContext, builder *RuleBuilder, specs map[string]PackagingSpec, dir ModuleOutPath) (entries []string) { seenDir := make(map[string]bool) - for _, k := range SortedStringKeys(m) { - ps := m[k] + for _, k := range SortedStringKeys(specs) { + ps := specs[k] destPath := dir.Join(ctx, ps.relPathInPackage).String() destDir := filepath.Dir(destPath) entries = append(entries, ps.relPathInPackage) @@ -260,14 +263,13 @@ func (p *PackagingBase) CopySpecsToDir(ctx ModuleContext, builder *RuleBuilder, } // See PackageModule.CopyDepsToZip -func (p *PackagingBase) CopyDepsToZip(ctx ModuleContext, zipOut WritablePath) (entries []string) { - m := p.GatherPackagingSpecs(ctx) +func (p *PackagingBase) CopyDepsToZip(ctx ModuleContext, specs map[string]PackagingSpec, zipOut WritablePath) (entries []string) { builder := NewRuleBuilder(pctx, ctx) dir := PathForModuleOut(ctx, ".zip") builder.Command().Text("rm").Flag("-rf").Text(dir.String()) builder.Command().Text("mkdir").Flag("-p").Text(dir.String()) - entries = p.CopySpecsToDir(ctx, builder, m, dir) + entries = p.CopySpecsToDir(ctx, builder, specs, dir) builder.Command(). BuiltTool("soong_zip"). diff --git a/android/packaging_test.go b/android/packaging_test.go index ff7446cb6..91ac1f386 100644 --- a/android/packaging_test.go +++ b/android/packaging_test.go @@ -95,7 +95,7 @@ func (m *packageTestModule) DepsMutator(ctx BottomUpMutatorContext) { func (m *packageTestModule) GenerateAndroidBuildActions(ctx ModuleContext) { zipFile := PathForModuleOut(ctx, "myzip.zip") - m.entries = m.CopyDepsToZip(ctx, zipFile) + m.entries = m.CopyDepsToZip(ctx, m.GatherPackagingSpecs(ctx), zipFile) } func runPackagingTest(t *testing.T, multitarget bool, bp string, expected []string) { diff --git a/filesystem/filesystem.go b/filesystem/filesystem.go index 079625895..9cf7bbdd0 100644 --- a/filesystem/filesystem.go +++ b/filesystem/filesystem.go @@ -226,7 +226,7 @@ func (f *filesystem) buildRootZip(ctx android.ModuleContext) android.OutputPath func (f *filesystem) buildImageUsingBuildImage(ctx android.ModuleContext) android.OutputPath { depsZipFile := android.PathForModuleOut(ctx, "deps.zip").OutputPath - f.CopyDepsToZip(ctx, depsZipFile) + f.CopyDepsToZip(ctx, f.GatherPackagingSpecs(ctx), depsZipFile) builder := android.NewRuleBuilder(pctx, ctx) depsBase := proptools.StringDefault(f.properties.Base_dir, ".") @@ -345,7 +345,7 @@ func (f *filesystem) buildCpioImage(ctx android.ModuleContext, compressed bool) } depsZipFile := android.PathForModuleOut(ctx, "deps.zip").OutputPath - f.CopyDepsToZip(ctx, depsZipFile) + f.CopyDepsToZip(ctx, f.GatherPackagingSpecs(ctx), depsZipFile) builder := android.NewRuleBuilder(pctx, ctx) depsBase := proptools.StringDefault(f.properties.Base_dir, ".") diff --git a/snapshot/host_snapshot.go b/snapshot/host_snapshot.go index 09a382e6e..e1d61544e 100644 --- a/snapshot/host_snapshot.go +++ b/snapshot/host_snapshot.go @@ -145,7 +145,7 @@ func (f *hostSnapshot) GenerateAndroidBuildActions(ctx android.ModuleContext) { f.installDir = android.PathForModuleInstall(ctx) - f.CopyDepsToZip(ctx, depsZipFile) + f.CopyDepsToZip(ctx, f.GatherPackagingSpecs(ctx), depsZipFile) builder := android.NewRuleBuilder(pctx, ctx) builder.Command().