Merge "Refactor special handling of hidden API encoding for master-art" am: fdd9743609
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1707569 Change-Id: Id36a114acd7854164cc3eee2c99e1144372b9f64
This commit is contained in:
commit
1b5e8cdbee
|
@ -4542,7 +4542,12 @@ func TestPrebuiltExportDexImplementationJars(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
|
||||
preparer := java.FixtureConfigureBootJars("myapex:libfoo", "myapex:libbar")
|
||||
preparer := android.GroupFixturePreparers(
|
||||
java.FixtureConfigureBootJars("myapex:libfoo", "myapex:libbar"),
|
||||
// Make sure that the frameworks/base/Android.bp file exists as otherwise hidden API encoding
|
||||
// is disabled.
|
||||
android.FixtureAddTextFile("frameworks/base/Android.bp", ""),
|
||||
)
|
||||
|
||||
checkBootDexJarPath := func(t *testing.T, ctx *android.TestContext, stem string, bootDexJarPath string) {
|
||||
t.Helper()
|
||||
|
|
|
@ -92,6 +92,12 @@ func (h *hiddenAPI) initHiddenAPI(ctx android.BaseModuleContext, configurationNa
|
|||
|
||||
h.configurationName = configurationName
|
||||
|
||||
// If the frameworks/base directories does not exist and no prebuilt hidden API flag files have
|
||||
// been configured then it is not possible to do hidden API encoding.
|
||||
if !ctx.Config().FrameworksBaseDirExists(ctx) && ctx.Config().PrebuiltHiddenApiDir(ctx) == "" {
|
||||
return
|
||||
}
|
||||
|
||||
// It is important that hiddenapi information is only gathered for/from modules that are actually
|
||||
// on the boot jars list because the runtime only enforces access to the hidden API for the
|
||||
// bootclassloader. If information is gathered for modules not on the list then that will cause
|
||||
|
@ -303,11 +309,7 @@ func hiddenAPIEncodeDex(ctx android.ModuleContext, output android.WritablePath,
|
|||
}
|
||||
|
||||
enforceHiddenApiFlagsToAllMembers := true
|
||||
// If frameworks/base doesn't exist we must be building with the 'master-art' manifest.
|
||||
// Disable assertion that all methods/fields have hidden API flags assigned.
|
||||
if !ctx.Config().FrameworksBaseDirExists(ctx) {
|
||||
enforceHiddenApiFlagsToAllMembers = false
|
||||
}
|
||||
|
||||
// b/149353192: when a module is instrumented, jacoco adds synthetic members
|
||||
// $jacocoData and $jacocoInit. Since they don't exist when building the hidden API flags,
|
||||
// don't complain when we don't find hidden API flags for the synthetic members.
|
||||
|
|
|
@ -117,7 +117,6 @@ func hiddenAPISingletonFactory() android.Singleton {
|
|||
}
|
||||
|
||||
type hiddenAPISingleton struct {
|
||||
flags android.Path
|
||||
}
|
||||
|
||||
// hiddenAPI singleton rules
|
||||
|
@ -136,17 +135,10 @@ func (h *hiddenAPISingleton) GenerateBuildActions(ctx android.SingletonContext)
|
|||
// consistency.
|
||||
|
||||
if ctx.Config().PrebuiltHiddenApiDir(ctx) != "" {
|
||||
h.flags = prebuiltFlagsRule(ctx)
|
||||
prebuiltFlagsRule(ctx)
|
||||
prebuiltIndexRule(ctx)
|
||||
return
|
||||
}
|
||||
|
||||
// These rules depend on files located in frameworks/base, skip them if running in a tree that doesn't have them.
|
||||
if ctx.Config().FrameworksBaseDirExists(ctx) {
|
||||
h.flags = flagsRule(ctx)
|
||||
} else {
|
||||
h.flags = emptyFlagsRule(ctx)
|
||||
}
|
||||
}
|
||||
|
||||
// Checks to see whether the supplied module variant is in the list of boot jars.
|
||||
|
@ -187,7 +179,7 @@ func isModuleInConfiguredList(ctx android.BaseModuleContext, module android.Modu
|
|||
return true
|
||||
}
|
||||
|
||||
func prebuiltFlagsRule(ctx android.SingletonContext) android.Path {
|
||||
func prebuiltFlagsRule(ctx android.SingletonContext) {
|
||||
outputPath := hiddenAPISingletonPaths(ctx).flags
|
||||
inputPath := android.PathForSource(ctx, ctx.Config().PrebuiltHiddenApiDir(ctx), "hiddenapi-flags.csv")
|
||||
|
||||
|
@ -196,8 +188,6 @@ func prebuiltFlagsRule(ctx android.SingletonContext) android.Path {
|
|||
Output: outputPath,
|
||||
Input: inputPath,
|
||||
})
|
||||
|
||||
return outputPath
|
||||
}
|
||||
|
||||
func prebuiltIndexRule(ctx android.SingletonContext) {
|
||||
|
@ -211,28 +201,6 @@ func prebuiltIndexRule(ctx android.SingletonContext) {
|
|||
})
|
||||
}
|
||||
|
||||
// flagsRule is a placeholder that simply returns the location of the file, the generation of the
|
||||
// ninja rules is done in generateHiddenAPIBuildActions.
|
||||
func flagsRule(ctx android.SingletonContext) android.Path {
|
||||
outputPath := hiddenAPISingletonPaths(ctx).flags
|
||||
return outputPath
|
||||
}
|
||||
|
||||
// emptyFlagsRule creates a rule to build an empty hiddenapi-flags.csv, which is needed by master-art-host builds that
|
||||
// have a partial manifest without frameworks/base but still need to build a boot image.
|
||||
func emptyFlagsRule(ctx android.SingletonContext) android.Path {
|
||||
rule := android.NewRuleBuilder(pctx, ctx)
|
||||
|
||||
outputPath := hiddenAPISingletonPaths(ctx).flags
|
||||
|
||||
rule.Command().Text("rm").Flag("-f").Output(outputPath)
|
||||
rule.Command().Text("touch").Output(outputPath)
|
||||
|
||||
rule.Build("emptyHiddenAPIFlagsFile", "empty hiddenapi flags")
|
||||
|
||||
return outputPath
|
||||
}
|
||||
|
||||
// tempPathForRestat creates a path of the same type as the supplied type but with a name of
|
||||
// <path>.tmp.
|
||||
//
|
||||
|
|
|
@ -60,10 +60,7 @@ func TestHiddenAPISingleton(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestHiddenAPISingletonWithSourceAndPrebuiltPreferredButNoDex(t *testing.T) {
|
||||
expectedErrorMessage :=
|
||||
"hiddenapi has determined that the source module \"foo\" should be ignored as it has been" +
|
||||
" replaced by the prebuilt module \"prebuilt_foo\" but unfortunately it does not provide a" +
|
||||
" suitable boot dex jar"
|
||||
expectedErrorMessage := "module prebuilt_foo{os:android,arch:common} does not provide a dex jar"
|
||||
|
||||
android.GroupFixturePreparers(
|
||||
hiddenApiFixtureFactory,
|
||||
|
|
Loading…
Reference in New Issue