Loading android/module_context.go +3 −0 Original line number Diff line number Diff line Loading @@ -497,6 +497,7 @@ func (m *moduleContext) packageFile(fullInstallPath InstallPath, srcPath Path, e partition: fullInstallPath.partition, skipInstall: m.skipInstall(), aconfigPaths: m.getAconfigPaths(), archType: m.target.Arch.ArchType, } m.packagingSpecs = append(m.packagingSpecs, spec) return spec Loading Loading @@ -622,6 +623,7 @@ func (m *moduleContext) InstallSymlink(installPath InstallPath, name string, src partition: fullInstallPath.partition, skipInstall: m.skipInstall(), aconfigPaths: m.getAconfigPaths(), archType: m.target.Arch.ArchType, }) return fullInstallPath Loading Loading @@ -665,6 +667,7 @@ func (m *moduleContext) InstallAbsoluteSymlink(installPath InstallPath, name str partition: fullInstallPath.partition, skipInstall: m.skipInstall(), aconfigPaths: m.getAconfigPaths(), archType: m.target.Arch.ArchType, }) return fullInstallPath Loading android/packaging.go +23 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,9 @@ type PackagingSpec struct { // Paths of aconfig files for the built artifact aconfigPaths *Paths // ArchType of the module which produced this packaging spec archType ArchType } func (p *PackagingSpec) Equals(other *PackagingSpec) bool { Loading Loading @@ -260,11 +263,31 @@ func (p *PackagingBase) AddDeps(ctx BottomUpMutatorContext, depTag blueprint.Dep func (p *PackagingBase) GatherPackagingSpecsWithFilter(ctx ModuleContext, filter func(PackagingSpec) bool) map[string]PackagingSpec { m := make(map[string]PackagingSpec) var arches []ArchType for _, target := range p.getSupportedTargets(ctx) { arches = append(arches, target.Arch.ArchType) } // filter out packaging specs for unsupported architecture filterArch := func(ps PackagingSpec) bool { for _, arch := range arches { if arch == ps.archType { return true } } return false } ctx.VisitDirectDeps(func(child Module) { if pi, ok := ctx.OtherModuleDependencyTag(child).(PackagingItem); !ok || !pi.IsPackagingItem() { return } for _, ps := range child.TransitivePackagingSpecs() { if !filterArch(ps) { continue } if filter != nil { if !filter(ps) { continue Loading filesystem/filesystem_test.go +67 −0 Original line number Diff line number Diff line Loading @@ -497,3 +497,70 @@ func TestTrackPhonyAsRequiredDep(t *testing.T) { android.AssertStringListContains(t, "missing entry", fs.entries, e) } } func TestFilterOutUnsupportedArches(t *testing.T) { result := fixture.RunTestWithBp(t, ` android_filesystem { name: "fs_64_only", deps: ["foo"], } android_filesystem { name: "fs_64_32", compile_multilib: "both", multilib: { first: { deps: ["foo"], }, }, } cc_binary { name: "foo", required: ["phony"], } phony { name: "phony", required: [ "libbar", "app", ], } cc_library { name: "libbar", } android_app { name: "app", srcs: ["a.java"], platform_apis: true, } `) testcases := []struct { fsName string expected []string unexpected []string }{ { fsName: "fs_64_only", expected: []string{"app/app/app.apk", "bin/foo", "lib64/libbar.so"}, unexpected: []string{"lib/libbar.so"}, }, { fsName: "fs_64_32", expected: []string{"app/app/app.apk", "bin/foo", "lib64/libbar.so", "lib/libbar.so"}, unexpected: []string{}, }, } for _, c := range testcases { fs := result.ModuleForTests(c.fsName, "android_common").Module().(*filesystem) for _, e := range c.expected { android.AssertStringListContains(t, "missing entry", fs.entries, e) } for _, e := range c.unexpected { android.AssertStringListDoesNotContain(t, "unexpected entry", fs.entries, e) } } } Loading
android/module_context.go +3 −0 Original line number Diff line number Diff line Loading @@ -497,6 +497,7 @@ func (m *moduleContext) packageFile(fullInstallPath InstallPath, srcPath Path, e partition: fullInstallPath.partition, skipInstall: m.skipInstall(), aconfigPaths: m.getAconfigPaths(), archType: m.target.Arch.ArchType, } m.packagingSpecs = append(m.packagingSpecs, spec) return spec Loading Loading @@ -622,6 +623,7 @@ func (m *moduleContext) InstallSymlink(installPath InstallPath, name string, src partition: fullInstallPath.partition, skipInstall: m.skipInstall(), aconfigPaths: m.getAconfigPaths(), archType: m.target.Arch.ArchType, }) return fullInstallPath Loading Loading @@ -665,6 +667,7 @@ func (m *moduleContext) InstallAbsoluteSymlink(installPath InstallPath, name str partition: fullInstallPath.partition, skipInstall: m.skipInstall(), aconfigPaths: m.getAconfigPaths(), archType: m.target.Arch.ArchType, }) return fullInstallPath Loading
android/packaging.go +23 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,9 @@ type PackagingSpec struct { // Paths of aconfig files for the built artifact aconfigPaths *Paths // ArchType of the module which produced this packaging spec archType ArchType } func (p *PackagingSpec) Equals(other *PackagingSpec) bool { Loading Loading @@ -260,11 +263,31 @@ func (p *PackagingBase) AddDeps(ctx BottomUpMutatorContext, depTag blueprint.Dep func (p *PackagingBase) GatherPackagingSpecsWithFilter(ctx ModuleContext, filter func(PackagingSpec) bool) map[string]PackagingSpec { m := make(map[string]PackagingSpec) var arches []ArchType for _, target := range p.getSupportedTargets(ctx) { arches = append(arches, target.Arch.ArchType) } // filter out packaging specs for unsupported architecture filterArch := func(ps PackagingSpec) bool { for _, arch := range arches { if arch == ps.archType { return true } } return false } ctx.VisitDirectDeps(func(child Module) { if pi, ok := ctx.OtherModuleDependencyTag(child).(PackagingItem); !ok || !pi.IsPackagingItem() { return } for _, ps := range child.TransitivePackagingSpecs() { if !filterArch(ps) { continue } if filter != nil { if !filter(ps) { continue Loading
filesystem/filesystem_test.go +67 −0 Original line number Diff line number Diff line Loading @@ -497,3 +497,70 @@ func TestTrackPhonyAsRequiredDep(t *testing.T) { android.AssertStringListContains(t, "missing entry", fs.entries, e) } } func TestFilterOutUnsupportedArches(t *testing.T) { result := fixture.RunTestWithBp(t, ` android_filesystem { name: "fs_64_only", deps: ["foo"], } android_filesystem { name: "fs_64_32", compile_multilib: "both", multilib: { first: { deps: ["foo"], }, }, } cc_binary { name: "foo", required: ["phony"], } phony { name: "phony", required: [ "libbar", "app", ], } cc_library { name: "libbar", } android_app { name: "app", srcs: ["a.java"], platform_apis: true, } `) testcases := []struct { fsName string expected []string unexpected []string }{ { fsName: "fs_64_only", expected: []string{"app/app/app.apk", "bin/foo", "lib64/libbar.so"}, unexpected: []string{"lib/libbar.so"}, }, { fsName: "fs_64_32", expected: []string{"app/app/app.apk", "bin/foo", "lib64/libbar.so", "lib/libbar.so"}, unexpected: []string{}, }, } for _, c := range testcases { fs := result.ModuleForTests(c.fsName, "android_common").Module().(*filesystem) for _, e := range c.expected { android.AssertStringListContains(t, "missing entry", fs.entries, e) } for _, e := range c.unexpected { android.AssertStringListDoesNotContain(t, "unexpected entry", fs.entries, e) } } }