blob: 16d7aae6681883a901151e5c5aaf618f5f97538c [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) {
24 if !ctx.ModuleHasProvider(module, CodeMetadataProviderKey) {
25 return
26 }
27 intermediateMetadataPaths = append(
28 intermediateMetadataPaths, ctx.ModuleProvider(
29 module, CodeMetadataProviderKey,
30 ).(CodeMetadataProviderData).IntermediatePath,
31 )
32 },
33 )
34
35 rspFile := android.PathForOutput(ctx, fileContainingCodeMetadataFilePaths)
36 this.outputPath = android.PathForOutput(ctx, ownershipDirectory, allCodeMetadataFile)
37
38 rule := android.NewRuleBuilder(pctx, ctx)
39 cmd := rule.Command().
40 BuiltTool("metadata").
41 FlagWithArg("-rule ", "code_metadata").
42 FlagWithRspFileInputList("-inputFile ", rspFile, intermediateMetadataPaths)
43 cmd.FlagWithOutput("-outputFile ", this.outputPath)
44 rule.Build("all_code_metadata_rule", "Generate all code metadata")
45
46 ctx.Phony("all_code_metadata", this.outputPath)
47}
48
49func (this *allCodeMetadataSingleton) MakeVars(ctx android.MakeVarsContext) {
50 ctx.DistForGoal("code_metadata", this.outputPath)
51}