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
|
return b.testFragment
|
||||||
}
|
}
|
||||||
|
|
||||||
// produceHiddenAPIOutput produces the hidden API all-flags.csv file (and supporting files)
|
// generateHiddenApiFlagRules generates rules to generate hidden API flags and compute the signature
|
||||||
// for the fragment as well as encoding the flags in the boot dex jars.
|
// patterns file.
|
||||||
func (b *BootclasspathFragmentModule) produceHiddenAPIOutput(ctx android.ModuleContext, contents []android.Module, input HiddenAPIFlagInput) *HiddenAPIOutput {
|
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
|
// Generate the rules to create the hidden API flags and update the supplied hiddenAPIInfo with the
|
||||||
// paths to the created files.
|
// 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
|
// If the module specifies split_packages or package_prefixes then use those to generate the
|
||||||
// signature patterns.
|
// signature patterns.
|
||||||
@@ -854,8 +854,8 @@ func (b *BootclasspathFragmentModule) produceHiddenAPIOutput(ctx android.ModuleC
|
|||||||
packagePrefixes := input.PackagePrefixes
|
packagePrefixes := input.PackagePrefixes
|
||||||
singlePackages := input.SinglePackages
|
singlePackages := input.SinglePackages
|
||||||
if splitPackages != nil || packagePrefixes != nil || singlePackages != nil {
|
if splitPackages != nil || packagePrefixes != nil || singlePackages != nil {
|
||||||
output.SignaturePatternsPath = buildRuleSignaturePatternsFile(
|
flagOutput.SignaturePatternsPath = buildRuleSignaturePatternsFile(
|
||||||
ctx, output.AllFlagsPath, splitPackages, packagePrefixes, singlePackages)
|
ctx, flagOutput.AllFlagsPath, splitPackages, packagePrefixes, singlePackages)
|
||||||
} else if !b.isTestFragment() {
|
} else if !b.isTestFragment() {
|
||||||
ctx.ModuleErrorf(`Must specify at least one of the split_packages, package_prefixes and single_packages properties
|
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
|
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
|
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())
|
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
|
return output
|
||||||
}
|
}
|
||||||
|
@@ -1116,8 +1116,8 @@ func buildRuleValidateOverlappingCsvFiles(ctx android.BuilderContext, name strin
|
|||||||
return validFile
|
return validFile
|
||||||
}
|
}
|
||||||
|
|
||||||
// hiddenAPIRulesForBootclasspathFragment will generate all the flags for a fragment of the
|
// hiddenAPIFlagRulesForBootclasspathFragment will generate all the flags for a fragment of the
|
||||||
// bootclasspath and then encode the flags into the boot dex files.
|
// bootclasspath.
|
||||||
//
|
//
|
||||||
// It takes:
|
// It takes:
|
||||||
// * Map from android.SdkKind to stub dex jar paths defining the API for that sdk kind.
|
// * 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
|
// * metadata.csv
|
||||||
// * index.csv
|
// * index.csv
|
||||||
// * all-flags.csv
|
// * all-flags.csv
|
||||||
// * encoded boot dex files
|
func hiddenAPIFlagRulesForBootclasspathFragment(ctx android.ModuleContext, bootDexInfoByModule bootDexInfoByModule, contents []android.Module, input HiddenAPIFlagInput) HiddenAPIFlagOutput {
|
||||||
func hiddenAPIRulesForBootclasspathFragment(ctx android.ModuleContext, contents []android.Module, input HiddenAPIFlagInput) *HiddenAPIOutput {
|
|
||||||
hiddenApiSubDir := "modular-hiddenapi"
|
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.
|
// Generate the stub-flags.csv.
|
||||||
stubFlagsCSV := android.PathForModuleOut(ctx, hiddenApiSubDir, "stub-flags.csv")
|
stubFlagsCSV := android.PathForModuleOut(ctx, hiddenApiSubDir, "stub-flags.csv")
|
||||||
buildRuleToGenerateHiddenAPIStubFlagsFile(ctx, "modularHiddenAPIStubFlagsFile", "modular hiddenapi stub flags", stubFlagsCSV, bootDexInfoByModule.bootDexJars(), input, nil)
|
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")
|
allFlagsCSV := android.PathForModuleOut(ctx, hiddenApiSubDir, "all-flags.csv")
|
||||||
buildRuleToGenerateHiddenApiFlags(ctx, "modularHiddenApiAllFlags", "modular hiddenapi all flags", allFlagsCSV, stubFlagsCSV, android.Paths{annotationFlagsCSV}, input.FlagFilesByCategory, nil, removedDexSignatures)
|
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
|
// Generate the filtered-stub-flags.csv file which contains the filtered stub flags that will be
|
||||||
// compared against the monolithic stub flags.
|
// compared against the monolithic stub flags.
|
||||||
filteredStubFlagsCSV := android.PathForModuleOut(ctx, hiddenApiSubDir, "filtered-stub-flags.csv")
|
filteredStubFlagsCSV := android.PathForModuleOut(ctx, hiddenApiSubDir, "filtered-stub-flags.csv")
|
||||||
@@ -1194,19 +1180,30 @@ func hiddenAPIRulesForBootclasspathFragment(ctx android.ModuleContext, contents
|
|||||||
HIDDENAPI_FLAGS_CSV_IMPL_FLAGS)
|
HIDDENAPI_FLAGS_CSV_IMPL_FLAGS)
|
||||||
|
|
||||||
// Store the paths in the info for use by other modules and sdk snapshot generation.
|
// Store the paths in the info for use by other modules and sdk snapshot generation.
|
||||||
output := HiddenAPIOutput{
|
return HiddenAPIFlagOutput{
|
||||||
HiddenAPIFlagOutput: HiddenAPIFlagOutput{
|
AnnotationFlagsPath: annotationFlagsCSV,
|
||||||
AnnotationFlagsPath: annotationFlagsCSV,
|
MetadataPath: metadataCSV,
|
||||||
MetadataPath: metadataCSV,
|
IndexPath: indexCSV,
|
||||||
IndexPath: indexCSV,
|
StubFlagsPath: stubFlagsCSV,
|
||||||
StubFlagsPath: stubFlagsCSV,
|
AllFlagsPath: allFlagsCSV,
|
||||||
AllFlagsPath: allFlagsCSV,
|
FilteredStubFlagsPath: filteredStubFlagsCSV,
|
||||||
FilteredStubFlagsPath: filteredStubFlagsCSV,
|
FilteredFlagsPath: filteredFlagsCSV,
|
||||||
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 {
|
func buildRuleToGenerateRemovedDexSignatures(ctx android.ModuleContext, removedTxtFiles android.Paths) android.OptionalPath {
|
||||||
|
Reference in New Issue
Block a user