diff options
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 |