| package testing |
| |
| import ( |
| "android/soong/android" |
| ) |
| |
| const fileContainingCodeMetadataFilePaths = "all_code_metadata_paths.rsp" |
| const allCodeMetadataFile = "all_code_metadata.pb" |
| |
| func AllCodeMetadataFactory() android.Singleton { |
| return &allCodeMetadataSingleton{} |
| } |
| |
| type allCodeMetadataSingleton struct { |
| // Path where the collected metadata is stored after successful validation. |
| outputPath android.OutputPath |
| } |
| |
| func (this *allCodeMetadataSingleton) GenerateBuildActions(ctx android.SingletonContext) { |
| var intermediateMetadataPaths android.Paths |
| |
| ctx.VisitAllModules( |
| func(module android.Module) { |
| if metadata, ok := android.SingletonModuleProvider(ctx, module, CodeMetadataProviderKey); ok { |
| intermediateMetadataPaths = append(intermediateMetadataPaths, metadata.IntermediatePath) |
| } |
| }, |
| ) |
| |
| rspFile := android.PathForOutput(ctx, fileContainingCodeMetadataFilePaths) |
| this.outputPath = android.PathForOutput(ctx, ownershipDirectory, allCodeMetadataFile) |
| |
| rule := android.NewRuleBuilder(pctx, ctx) |
| cmd := rule.Command(). |
| BuiltTool("metadata"). |
| FlagWithArg("-rule ", "code_metadata"). |
| FlagWithRspFileInputList("-inputFile ", rspFile, intermediateMetadataPaths) |
| cmd.FlagWithOutput("-outputFile ", this.outputPath) |
| rule.Build("all_code_metadata_rule", "Generate all code metadata") |
| |
| ctx.Phony("all_code_metadata", this.outputPath) |
| } |
| |
| func (this *allCodeMetadataSingleton) MakeVars(ctx android.MakeVarsContext) { |
| ctx.DistForGoal("code_metadata", this.outputPath) |
| } |