Merge "transitive r8 flags for installable {android,java}_libraries" into main am: d9569528bd am: 0b74fbb608

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2812555

Change-Id: I1456be6b3d86fa9e55787112c5fa239a21b025cf
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Sam Delmerico
2023-11-01 16:32:34 +00:00
committed by Automerger Merge Worker
4 changed files with 96 additions and 56 deletions

View File

@@ -811,8 +811,11 @@ func (a *AndroidLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext)
a.linter.manifest = a.aapt.manifestPath a.linter.manifest = a.aapt.manifestPath
a.linter.resources = a.aapt.resourceFiles a.linter.resources = a.aapt.resourceFiles
a.Module.extraProguardFlagFiles = append(a.Module.extraProguardFlagFiles, proguardSpecInfo := a.collectProguardSpecInfo(ctx)
a.proguardOptionsFile) ctx.SetProvider(ProguardSpecInfoProvider, proguardSpecInfo)
a.exportedProguardFlagFiles = proguardSpecInfo.ProguardFlagsFiles.ToList()
a.extraProguardFlagFiles = append(a.extraProguardFlagFiles, a.exportedProguardFlagFiles...)
a.extraProguardFlagFiles = append(a.extraProguardFlagFiles, a.proguardOptionsFile)
var extraSrcJars android.Paths var extraSrcJars android.Paths
var extraCombinedJars android.Paths var extraCombinedJars android.Paths
@@ -838,10 +841,6 @@ func (a *AndroidLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext)
ctx.CheckbuildFile(a.aarFile) ctx.CheckbuildFile(a.aarFile)
} }
proguardSpecInfo := a.collectProguardSpecInfo(ctx)
ctx.SetProvider(ProguardSpecInfoProvider, proguardSpecInfo)
a.exportedProguardFlagFiles = proguardSpecInfo.ProguardFlagsFiles.ToList()
prebuiltJniPackages := android.Paths{} prebuiltJniPackages := android.Paths{}
ctx.VisitDirectDeps(func(module android.Module) { ctx.VisitDirectDeps(func(module android.Module) {
if info, ok := ctx.OtherModuleProvider(module, JniPackageProvider).(JniPackageInfo); ok { if info, ok := ctx.OtherModuleProvider(module, JniPackageProvider).(JniPackageInfo); ok {

View File

@@ -300,6 +300,8 @@ func (d *dexer) r8Flags(ctx android.ModuleContext, flags javaBuilderFlags) (r8Fl
flagFiles = append(flagFiles, android.PathsForModuleSrc(ctx, opt.Proguard_flags_files)...) flagFiles = append(flagFiles, android.PathsForModuleSrc(ctx, opt.Proguard_flags_files)...)
flagFiles = android.FirstUniquePaths(flagFiles)
r8Flags = append(r8Flags, android.JoinWithPrefix(flagFiles.Strings(), "-include ")) r8Flags = append(r8Flags, android.JoinWithPrefix(flagFiles.Strings(), "-include "))
r8Deps = append(r8Deps, flagFiles...) r8Deps = append(r8Deps, flagFiles...)

View File

@@ -385,13 +385,53 @@ func TestProguardFlagsInheritanceStatic(t *testing.T) {
func TestProguardFlagsInheritance(t *testing.T) { func TestProguardFlagsInheritance(t *testing.T) {
directDepFlagsFileName := "direct_dep.flags" directDepFlagsFileName := "direct_dep.flags"
transitiveDepFlagsFileName := "transitive_dep.flags" transitiveDepFlagsFileName := "transitive_dep.flags"
bp := `
android_app {
name: "app",
static_libs: ["androidlib"], // this must be static_libs to initate dexing
platform_apis: true,
}
topLevelModules := []struct {
name string
definition string
}{
{
name: "android_app",
definition: `
android_app {
name: "app",
static_libs: ["androidlib"], // this must be static_libs to initate dexing
platform_apis: true,
}
`,
},
{
name: "android_library",
definition: `
android_library {
name: "app",
static_libs: ["androidlib"], // this must be static_libs to initate dexing
installable: true,
optimize: {
enabled: true,
shrink: true,
},
}
`,
},
{
name: "java_library",
definition: `
java_library {
name: "app",
static_libs: ["androidlib"], // this must be static_libs to initate dexing
srcs: ["Foo.java"],
installable: true,
optimize: {
enabled: true,
shrink: true,
},
}
`,
},
}
bp := `
android_library { android_library {
name: "androidlib", name: "androidlib",
static_libs: ["app_dep"], static_libs: ["app_dep"],
@@ -558,43 +598,46 @@ func TestProguardFlagsInheritance(t *testing.T) {
}, },
} }
for _, tc := range testcases { for _, topLevelModuleDef := range topLevelModules {
t.Run(tc.name, func(t *testing.T) { for _, tc := range testcases {
result := android.GroupFixturePreparers( t.Run(topLevelModuleDef.name+"-"+tc.name, func(t *testing.T) {
PrepareForTestWithJavaDefaultModules, result := android.GroupFixturePreparers(
android.FixtureMergeMockFs(android.MockFS{ PrepareForTestWithJavaDefaultModules,
directDepFlagsFileName: nil, android.FixtureMergeMockFs(android.MockFS{
transitiveDepFlagsFileName: nil, directDepFlagsFileName: nil,
}), transitiveDepFlagsFileName: nil,
).RunTestWithBp(t, }),
fmt.Sprintf( ).RunTestWithBp(t,
bp, topLevelModuleDef.definition+
tc.depType, fmt.Sprintf(
tc.transitiveDepType, bp,
tc.depExportsFlagsFiles, tc.depType,
tc.transitiveDepExportsFlagsFiles, tc.transitiveDepType,
), tc.depExportsFlagsFiles,
) tc.transitiveDepExportsFlagsFiles,
appR8 := result.ModuleForTests("app", "android_common").Rule("r8") ),
)
appR8 := result.ModuleForTests("app", "android_common").Rule("r8")
shouldHaveDepFlags := android.InList(directDepFlagsFileName, tc.expectedFlagsFiles) shouldHaveDepFlags := android.InList(directDepFlagsFileName, tc.expectedFlagsFiles)
if shouldHaveDepFlags { if shouldHaveDepFlags {
android.AssertStringDoesContain(t, "expected deps's proguard flags", android.AssertStringDoesContain(t, "expected deps's proguard flags",
appR8.Args["r8Flags"], directDepFlagsFileName) appR8.Args["r8Flags"], directDepFlagsFileName)
} else { } else {
android.AssertStringDoesNotContain(t, "app did not expect deps's proguard flags", android.AssertStringDoesNotContain(t, "app did not expect deps's proguard flags",
appR8.Args["r8Flags"], directDepFlagsFileName) appR8.Args["r8Flags"], directDepFlagsFileName)
} }
shouldHaveTransitiveDepFlags := android.InList(transitiveDepFlagsFileName, tc.expectedFlagsFiles) shouldHaveTransitiveDepFlags := android.InList(transitiveDepFlagsFileName, tc.expectedFlagsFiles)
if shouldHaveTransitiveDepFlags { if shouldHaveTransitiveDepFlags {
android.AssertStringDoesContain(t, "expected transitive deps's proguard flags", android.AssertStringDoesContain(t, "expected transitive deps's proguard flags",
appR8.Args["r8Flags"], transitiveDepFlagsFileName) appR8.Args["r8Flags"], transitiveDepFlagsFileName)
} else { } else {
android.AssertStringDoesNotContain(t, "app did not expect transitive deps's proguard flags", android.AssertStringDoesNotContain(t, "app did not expect transitive deps's proguard flags",
appR8.Args["r8Flags"], transitiveDepFlagsFileName) appR8.Args["r8Flags"], transitiveDepFlagsFileName)
} }
}) })
}
} }
} }
@@ -606,11 +649,6 @@ func TestProguardFlagsInheritanceAppImport(t *testing.T) {
platform_apis: true, platform_apis: true,
} }
android_library {
name: "androidlib",
static_libs: ["aarimport"],
}
android_library_import { android_library_import {
name: "aarimport", name: "aarimport",
aars: ["import.aar"], aars: ["import.aar"],

View File

@@ -697,6 +697,11 @@ func (j *Library) GenerateAndroidBuildActions(ctx android.ModuleContext) {
j.stem = proptools.StringDefault(j.overridableDeviceProperties.Stem, ctx.ModuleName()) j.stem = proptools.StringDefault(j.overridableDeviceProperties.Stem, ctx.ModuleName())
proguardSpecInfo := j.collectProguardSpecInfo(ctx)
ctx.SetProvider(ProguardSpecInfoProvider, proguardSpecInfo)
j.exportedProguardFlagFiles = proguardSpecInfo.ProguardFlagsFiles.ToList()
j.extraProguardFlagFiles = append(j.extraProguardFlagFiles, j.exportedProguardFlagFiles...)
apexInfo := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo) apexInfo := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo)
if !apexInfo.IsForPlatform() { if !apexInfo.IsForPlatform() {
j.hideApexVariantFromMake = true j.hideApexVariantFromMake = true
@@ -741,10 +746,6 @@ func (j *Library) GenerateAndroidBuildActions(ctx android.ModuleContext) {
} }
j.installFile = ctx.InstallFile(installDir, j.Stem()+".jar", j.outputFile, extraInstallDeps...) j.installFile = ctx.InstallFile(installDir, j.Stem()+".jar", j.outputFile, extraInstallDeps...)
} }
proguardSpecInfo := j.collectProguardSpecInfo(ctx)
ctx.SetProvider(ProguardSpecInfoProvider, proguardSpecInfo)
j.exportedProguardFlagFiles = proguardSpecInfo.ProguardFlagsFiles.ToList()
} }
func (j *Library) DepsMutator(ctx android.BottomUpMutatorContext) { func (j *Library) DepsMutator(ctx android.BottomUpMutatorContext) {