package testing import ( "android/soong/android" ) const ownershipDirectory = "ownership" const fileContainingFilePaths = "all_test_spec_paths.rsp" const allTestSpecsFile = "all_test_specs.pb" func AllTestSpecsFactory() android.Singleton { return &allTestSpecsSingleton{} } type allTestSpecsSingleton struct { // Path where the collected metadata is stored after successful validation. outputPath android.OutputPath } func (this *allTestSpecsSingleton) GenerateBuildActions(ctx android.SingletonContext) { var intermediateMetadataPaths android.Paths ctx.VisitAllModules(func(module android.Module) { if metadata, ok := android.SingletonModuleProvider(ctx, module, TestSpecProviderKey); ok { intermediateMetadataPaths = append(intermediateMetadataPaths, metadata.IntermediatePath) } }) rspFile := android.PathForOutput(ctx, fileContainingFilePaths) this.outputPath = android.PathForOutput(ctx, ownershipDirectory, allTestSpecsFile) rule := android.NewRuleBuilder(pctx, ctx) cmd := rule.Command(). BuiltTool("metadata"). FlagWithArg("-rule ", "test_spec"). FlagWithRspFileInputList("-inputFile ", rspFile, intermediateMetadataPaths) cmd.FlagWithOutput("-outputFile ", this.outputPath) rule.Build("all_test_specs_rule", "Generate all test specifications") ctx.Phony("all_test_specs", this.outputPath) } func (this *allTestSpecsSingleton) MakeVars(ctx android.MakeVarsContext) { ctx.DistForGoal("test_specs", this.outputPath) }