Merge "Separate hidden API flag generation from encoding"
This commit is contained in:
@@ -841,12 +841,12 @@ func (b *BootclasspathFragmentModule) isTestFragment() bool {
|
||||
return b.testFragment
|
||||
}
|
||||
|
||||
// produceHiddenAPIOutput produces the hidden API all-flags.csv file (and supporting files)
|
||||
// for the fragment as well as encoding the flags in the boot dex jars.
|
||||
func (b *BootclasspathFragmentModule) produceHiddenAPIOutput(ctx android.ModuleContext, contents []android.Module, input HiddenAPIFlagInput) *HiddenAPIOutput {
|
||||
// generateHiddenApiFlagRules generates rules to generate hidden API flags and compute the signature
|
||||
// patterns file.
|
||||
func (b *BootclasspathFragmentModule) generateHiddenApiFlagRules(ctx android.ModuleContext, contents []android.Module, input HiddenAPIFlagInput, bootDexInfoByModule bootDexInfoByModule, suffix string) HiddenAPIFlagOutput {
|
||||
// Generate the rules to create the hidden API flags and update the supplied hiddenAPIInfo with the
|
||||
// paths to the created files.
|
||||
output := hiddenAPIRulesForBootclasspathFragment(ctx, contents, input)
|
||||
flagOutput := hiddenAPIFlagRulesForBootclasspathFragment(ctx, bootDexInfoByModule, contents, input)
|
||||
|
||||
// If the module specifies split_packages or package_prefixes then use those to generate the
|
||||
// signature patterns.
|
||||
@@ -854,8 +854,8 @@ func (b *BootclasspathFragmentModule) produceHiddenAPIOutput(ctx android.ModuleC
|
||||
packagePrefixes := input.PackagePrefixes
|
||||
singlePackages := input.SinglePackages
|
||||
if splitPackages != nil || packagePrefixes != nil || singlePackages != nil {
|
||||
output.SignaturePatternsPath = buildRuleSignaturePatternsFile(
|
||||
ctx, output.AllFlagsPath, splitPackages, packagePrefixes, singlePackages)
|
||||
flagOutput.SignaturePatternsPath = buildRuleSignaturePatternsFile(
|
||||
ctx, flagOutput.AllFlagsPath, splitPackages, packagePrefixes, singlePackages)
|
||||
} else if !b.isTestFragment() {
|
||||
ctx.ModuleErrorf(`Must specify at least one of the split_packages, package_prefixes and single_packages properties
|
||||
If this is a new bootclasspath_fragment or you are unsure what to do add the
|
||||
@@ -867,6 +867,26 @@ func (b *BootclasspathFragmentModule) produceHiddenAPIOutput(ctx android.ModuleC
|
||||
should specify here. If you are happy with its suggestions then you can add
|
||||
the --fix option and it will fix them for you.`, b.BaseModuleName())
|
||||
}
|
||||
return flagOutput
|
||||
}
|
||||
|
||||
// produceHiddenAPIOutput produces the hidden API all-flags.csv file (and supporting files)
|
||||
// for the fragment as well as encoding the flags in the boot dex jars.
|
||||
func (b *BootclasspathFragmentModule) produceHiddenAPIOutput(ctx android.ModuleContext, contents []android.Module, input HiddenAPIFlagInput) *HiddenAPIOutput {
|
||||
// Gather information about the boot dex files for the boot libraries provided by this fragment.
|
||||
bootDexInfoByModule := extractBootDexInfoFromModules(ctx, contents)
|
||||
|
||||
// Generate the flag file needed to encode into the dex files.
|
||||
flagOutput := b.generateHiddenApiFlagRules(ctx, contents, input, bootDexInfoByModule, "")
|
||||
|
||||
// Encode those flags into the dex files of the contents of this fragment.
|
||||
encodedBootDexFilesByModule := hiddenAPIEncodeRulesForBootclasspathFragment(ctx, bootDexInfoByModule, flagOutput.AllFlagsPath)
|
||||
|
||||
// Store that information for return for use by other rules.
|
||||
output := &HiddenAPIOutput{
|
||||
HiddenAPIFlagOutput: flagOutput,
|
||||
EncodedBootDexFilesByModule: encodedBootDexFilesByModule,
|
||||
}
|
||||
|
||||
return output
|
||||
}
|
||||
|
@@ -1116,8 +1116,8 @@ func buildRuleValidateOverlappingCsvFiles(ctx android.BuilderContext, name strin
|
||||
return validFile
|
||||
}
|
||||
|
||||
// hiddenAPIRulesForBootclasspathFragment will generate all the flags for a fragment of the
|
||||
// bootclasspath and then encode the flags into the boot dex files.
|
||||
// hiddenAPIFlagRulesForBootclasspathFragment will generate all the flags for a fragment of the
|
||||
// bootclasspath.
|
||||
//
|
||||
// It takes:
|
||||
// * Map from android.SdkKind to stub dex jar paths defining the API for that sdk kind.
|
||||
@@ -1130,13 +1130,9 @@ func buildRuleValidateOverlappingCsvFiles(ctx android.BuilderContext, name strin
|
||||
// * metadata.csv
|
||||
// * index.csv
|
||||
// * all-flags.csv
|
||||
// * encoded boot dex files
|
||||
func hiddenAPIRulesForBootclasspathFragment(ctx android.ModuleContext, contents []android.Module, input HiddenAPIFlagInput) *HiddenAPIOutput {
|
||||
func hiddenAPIFlagRulesForBootclasspathFragment(ctx android.ModuleContext, bootDexInfoByModule bootDexInfoByModule, contents []android.Module, input HiddenAPIFlagInput) HiddenAPIFlagOutput {
|
||||
hiddenApiSubDir := "modular-hiddenapi"
|
||||
|
||||
// Gather information about the boot dex files for the boot libraries provided by this fragment.
|
||||
bootDexInfoByModule := extractBootDexInfoFromModules(ctx, contents)
|
||||
|
||||
// Generate the stub-flags.csv.
|
||||
stubFlagsCSV := android.PathForModuleOut(ctx, hiddenApiSubDir, "stub-flags.csv")
|
||||
buildRuleToGenerateHiddenAPIStubFlagsFile(ctx, "modularHiddenAPIStubFlagsFile", "modular hiddenapi stub flags", stubFlagsCSV, bootDexInfoByModule.bootDexJars(), input, nil)
|
||||
@@ -1169,16 +1165,6 @@ func hiddenAPIRulesForBootclasspathFragment(ctx android.ModuleContext, contents
|
||||
allFlagsCSV := android.PathForModuleOut(ctx, hiddenApiSubDir, "all-flags.csv")
|
||||
buildRuleToGenerateHiddenApiFlags(ctx, "modularHiddenApiAllFlags", "modular hiddenapi all flags", allFlagsCSV, stubFlagsCSV, android.Paths{annotationFlagsCSV}, input.FlagFilesByCategory, nil, removedDexSignatures)
|
||||
|
||||
// Encode the flags into the boot dex files.
|
||||
encodedBootDexJarsByModule := map[string]android.Path{}
|
||||
outputDir := android.PathForModuleOut(ctx, "hiddenapi-modular/encoded").OutputPath
|
||||
for _, name := range android.SortedStringKeys(bootDexInfoByModule) {
|
||||
bootDexInfo := bootDexInfoByModule[name]
|
||||
unencodedDex := bootDexInfo.path
|
||||
encodedDex := hiddenAPIEncodeDex(ctx, unencodedDex, allFlagsCSV, bootDexInfo.uncompressDex, bootDexInfo.minSdkVersion, outputDir)
|
||||
encodedBootDexJarsByModule[name] = encodedDex
|
||||
}
|
||||
|
||||
// Generate the filtered-stub-flags.csv file which contains the filtered stub flags that will be
|
||||
// compared against the monolithic stub flags.
|
||||
filteredStubFlagsCSV := android.PathForModuleOut(ctx, hiddenApiSubDir, "filtered-stub-flags.csv")
|
||||
@@ -1194,8 +1180,7 @@ func hiddenAPIRulesForBootclasspathFragment(ctx android.ModuleContext, contents
|
||||
HIDDENAPI_FLAGS_CSV_IMPL_FLAGS)
|
||||
|
||||
// Store the paths in the info for use by other modules and sdk snapshot generation.
|
||||
output := HiddenAPIOutput{
|
||||
HiddenAPIFlagOutput: HiddenAPIFlagOutput{
|
||||
return HiddenAPIFlagOutput{
|
||||
AnnotationFlagsPath: annotationFlagsCSV,
|
||||
MetadataPath: metadataCSV,
|
||||
IndexPath: indexCSV,
|
||||
@@ -1203,10 +1188,22 @@ func hiddenAPIRulesForBootclasspathFragment(ctx android.ModuleContext, contents
|
||||
AllFlagsPath: allFlagsCSV,
|
||||
FilteredStubFlagsPath: filteredStubFlagsCSV,
|
||||
FilteredFlagsPath: filteredFlagsCSV,
|
||||
},
|
||||
EncodedBootDexFilesByModule: encodedBootDexJarsByModule,
|
||||
}
|
||||
return &output
|
||||
}
|
||||
|
||||
// hiddenAPIEncodeRulesForBootclasspathFragment generates rules to encode hidden API flags into the
|
||||
// dex jars in bootDexInfoByModule.
|
||||
func hiddenAPIEncodeRulesForBootclasspathFragment(ctx android.ModuleContext, bootDexInfoByModule bootDexInfoByModule, allFlagsCSV android.Path) bootDexJarByModule {
|
||||
// Encode the flags into the boot dex files.
|
||||
encodedBootDexJarsByModule := bootDexJarByModule{}
|
||||
outputDir := android.PathForModuleOut(ctx, "hiddenapi-modular/encoded").OutputPath
|
||||
for _, name := range android.SortedStringKeys(bootDexInfoByModule) {
|
||||
bootDexInfo := bootDexInfoByModule[name]
|
||||
unencodedDex := bootDexInfo.path
|
||||
encodedDex := hiddenAPIEncodeDex(ctx, unencodedDex, allFlagsCSV, bootDexInfo.uncompressDex, bootDexInfo.minSdkVersion, outputDir)
|
||||
encodedBootDexJarsByModule[name] = encodedDex
|
||||
}
|
||||
return encodedBootDexJarsByModule
|
||||
}
|
||||
|
||||
func buildRuleToGenerateRemovedDexSignatures(ctx android.ModuleContext, removedTxtFiles android.Paths) android.OptionalPath {
|
||||
|
Reference in New Issue
Block a user