diff options
author | Paul Duffin <paulduffin@google.com> | 2021-04-08 17:49:27 +0100 |
---|---|---|
committer | Paul Duffin <paulduffin@google.com> | 2021-04-12 11:04:09 +0100 |
commit | c6bb7cf8d709d0bcfb8f90071dd34c779d16a888 (patch) | |
tree | d8c4ab1451db5381313594ee084915a6f9948e9f /java/hiddenapi_singleton.go | |
parent | 454ac1eff30a6be6abfef629b508939fc6670126 (diff) |
Extract ruleToGenerateHiddenApiFlags
Extracts the code for creating the rule that creates the monolithic
hidden API flags file which is encoded into dex implementation jars.
This refactoring is in preparation for moving the functionality from
the hiddenapi_singleton into the platform_bootclasspath.
A follow up change will move the method into the new
hiddenapi_modular.go alongside the hiddenAPIAugmentationInfo as they
will both be used to perform hidden API processing for a
bootclasspath_fragment.
Bug: 177892522
Test: verified that the out/soong/hiddenapi/... files are unchanged
by this change
Change-Id: I2729afa80cdfd2d1d4717365001648453d65632f
Diffstat (limited to 'java/hiddenapi_singleton.go')
-rw-r--r-- | java/hiddenapi_singleton.go | 89 |
1 files changed, 66 insertions, 23 deletions
diff --git a/java/hiddenapi_singleton.go b/java/hiddenapi_singleton.go index 7e9477bfe..341381ae9 100644 --- a/java/hiddenapi_singleton.go +++ b/java/hiddenapi_singleton.go @@ -346,39 +346,82 @@ func flagsRule(ctx android.SingletonContext) android.Path { ctx.Errorf("Failed to find combined-removed-dex.") } - rule := android.NewRuleBuilder(pctx, ctx) - outputPath := hiddenAPISingletonPaths(ctx).flags - tempPath := android.PathForOutput(ctx, outputPath.Rel()+".tmp") stubFlags := hiddenAPISingletonPaths(ctx).stubFlags - rule.Command(). + pathsForSource := func(paths ...string) android.Paths { return android.PathsForSource(ctx, paths) } + + ruleToGenerateHiddenApiFlags(ctx, outputPath, stubFlags, flagsCSV, hiddenAPIAugmentationInfo{ + Unsupported: pathsForSource("frameworks/base/boot/hiddenapi/hiddenapi-unsupported.txt"), + Removed: android.Paths{combinedRemovedApis}, + Max_target_r_low_priority: pathsForSource("frameworks/base/boot/hiddenapi/hiddenapi-max-target-r-loprio.txt"), + Max_target_q: pathsForSource("frameworks/base/boot/hiddenapi/hiddenapi-max-target-q.txt"), + Max_target_p: pathsForSource("frameworks/base/boot/hiddenapi/hiddenapi-max-target-p.txt"), + Max_target_o_low_priority: pathsForSource("frameworks/base/boot/hiddenapi/hiddenapi-max-target-o.txt"), + Blocked: pathsForSource("frameworks/base/boot/hiddenapi/hiddenapi-force-blocked.txt"), + Unsupported_packages: pathsForSource("frameworks/base/boot/hiddenapi/hiddenapi-unsupported-packages.txt"), + }) + + return outputPath +} + +// ruleToGenerateHiddenApiFlags creates a rule to create the monolithic hidden API flags from the +// flags from all the modules, the stub flags, augmented with some additional configuration files. +// +// baseFlagsPath is the path to the flags file containing all the information from the stubs plus +// an entry for every single member in the dex implementation jars of the individual modules. Every +// signature in any of the other files MUST be included in this file. +// +// moduleSpecificFlagsPaths are the paths to the flags files generated by each module using +// information from the baseFlagsPath as well as from annotations within the source. +// +// augmentationInfo is a struct containing paths to files that augment the information provided by +// the moduleSpecificFlagsPaths. +func ruleToGenerateHiddenApiFlags(ctx android.BuilderContext, outputPath android.WritablePath, baseFlagsPath android.Path, moduleSpecificFlagsPaths android.Paths, augmentationInfo hiddenAPIAugmentationInfo) { + tempPath := android.PathForOutput(ctx, outputPath.Rel()+".tmp") + rule := android.NewRuleBuilder(pctx, ctx) + command := rule.Command(). BuiltTool("generate_hiddenapi_lists"). - FlagWithInput("--csv ", stubFlags). - Inputs(flagsCSV). - FlagWithInput("--unsupported ", - android.PathForSource(ctx, "frameworks/base/boot/hiddenapi/hiddenapi-unsupported.txt")). - FlagWithInput("--unsupported ", combinedRemovedApis).Flag("--ignore-conflicts ").FlagWithArg("--tag ", "removed"). - FlagWithInput("--max-target-r ", - android.PathForSource(ctx, "frameworks/base/boot/hiddenapi/hiddenapi-max-target-r-loprio.txt")).FlagWithArg("--tag ", "lo-prio"). - FlagWithInput("--max-target-q ", - android.PathForSource(ctx, "frameworks/base/boot/hiddenapi/hiddenapi-max-target-q.txt")). - FlagWithInput("--max-target-p ", - android.PathForSource(ctx, "frameworks/base/boot/hiddenapi/hiddenapi-max-target-p.txt")). - FlagWithInput("--max-target-o ", android.PathForSource( - ctx, "frameworks/base/boot/hiddenapi/hiddenapi-max-target-o.txt")).Flag("--ignore-conflicts ").FlagWithArg("--tag ", "lo-prio"). - FlagWithInput("--blocked ", - android.PathForSource(ctx, "frameworks/base/boot/hiddenapi/hiddenapi-force-blocked.txt")). - FlagWithInput("--unsupported ", android.PathForSource( - ctx, "frameworks/base/boot/hiddenapi/hiddenapi-unsupported-packages.txt")).Flag("--packages "). + FlagWithInput("--csv ", baseFlagsPath). + Inputs(moduleSpecificFlagsPaths). FlagWithOutput("--output ", tempPath) + for _, path := range augmentationInfo.Unsupported { + command.FlagWithInput("--unsupported ", path) + } + + for _, path := range augmentationInfo.Removed { + command.FlagWithInput("--unsupported ", path).Flag("--ignore-conflicts ").FlagWithArg("--tag ", "removed") + } + + for _, path := range augmentationInfo.Max_target_r_low_priority { + command.FlagWithInput("--max-target-r ", path).FlagWithArg("--tag ", "lo-prio") + } + + for _, path := range augmentationInfo.Max_target_q { + command.FlagWithInput("--max-target-q ", path) + } + + for _, path := range augmentationInfo.Max_target_p { + command.FlagWithInput("--max-target-p ", path) + } + + for _, path := range augmentationInfo.Max_target_o_low_priority { + command.FlagWithInput("--max-target-o ", path).Flag("--ignore-conflicts ").FlagWithArg("--tag ", "lo-prio") + } + + for _, path := range augmentationInfo.Blocked { + command.FlagWithInput("--blocked ", path) + } + + for _, path := range augmentationInfo.Unsupported_packages { + command.FlagWithInput("--unsupported ", path).Flag("--packages ") + } + commitChangeForRestat(rule, tempPath, outputPath) rule.Build("hiddenAPIFlagsFile", "hiddenapi flags") - - return outputPath } // emptyFlagsRule creates a rule to build an empty hiddenapi-flags.csv, which is needed by master-art-host builds that |