blob: 12aa7b51f3ebc4580a736f6f43aa8e3d014a9ddd [file] [log] [blame]
Aditya Choudhary8094b6b2023-10-12 19:40:17 +00001package testing
2
3import (
4 "android/soong/android"
5)
6
7const fileContainingCodeMetadataFilePaths = "all_code_metadata_paths.rsp"
8const allCodeMetadataFile = "all_code_metadata.pb"
9
10func AllCodeMetadataFactory() android.Singleton {
11 return &allCodeMetadataSingleton{}
12}
13
14type allCodeMetadataSingleton struct {
15 // Path where the collected metadata is stored after successful validation.
16 outputPath android.OutputPath
17}
18
19func (this *allCodeMetadataSingleton) GenerateBuildActions(ctx android.SingletonContext) {
20 var intermediateMetadataPaths android.Paths
21
22 ctx.VisitAllModules(
23 func(module android.Module) {
Colin Cross5a377182023-12-14 14:46:23 -080024 if metadata, ok := android.SingletonModuleProvider(ctx, module, CodeMetadataProviderKey); ok {
25 intermediateMetadataPaths = append(intermediateMetadataPaths, metadata.IntermediatePath)
Aditya Choudhary8094b6b2023-10-12 19:40:17 +000026 }
Aditya Choudhary8094b6b2023-10-12 19:40:17 +000027 },
28 )
29
30 rspFile := android.PathForOutput(ctx, fileContainingCodeMetadataFilePaths)
31 this.outputPath = android.PathForOutput(ctx, ownershipDirectory, allCodeMetadataFile)
32
33 rule := android.NewRuleBuilder(pctx, ctx)
34 cmd := rule.Command().
35 BuiltTool("metadata").
36 FlagWithArg("-rule ", "code_metadata").
37 FlagWithRspFileInputList("-inputFile ", rspFile, intermediateMetadataPaths)
38 cmd.FlagWithOutput("-outputFile ", this.outputPath)
39 rule.Build("all_code_metadata_rule", "Generate all code metadata")
40
41 ctx.Phony("all_code_metadata", this.outputPath)
42}
43
44func (this *allCodeMetadataSingleton) MakeVars(ctx android.MakeVarsContext) {
45 ctx.DistForGoal("code_metadata", this.outputPath)
46}