aboutsummaryrefslogtreecommitdiff
path: root/testing/all_code_metadata.go
blob: 12aa7b51f3ebc4580a736f6f43aa8e3d014a9ddd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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)
}