Merge "Filter-out deps of unsupported arch" into main

This commit is contained in:
Treehugger Robot
2024-05-16 00:33:24 +00:00
committed by Gerrit Code Review
3 changed files with 93 additions and 0 deletions

View File

@@ -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
@@ -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
@@ -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

View File

@@ -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 {
@@ -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

View File

@@ -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)
}
}
}