Attach rust_benchmark to atest and tradefed.

Automatically generate required tradefed configs for rust benchmarks so
that they're available in atest.

Test: atest <module with rust_benchmark defined>
Bug: 155309706
Change-Id: I6002100367a66b6b0555614acc6cebb00dbf435d
This commit is contained in:
Jakub Kotur
2021-01-15 15:57:27 +01:00
parent 1d640d0521
commit 546ccd5614
5 changed files with 77 additions and 0 deletions

View File

@@ -16,9 +16,31 @@ package rust
import (
"android/soong/android"
"android/soong/tradefed"
)
type BenchmarkProperties struct {
// Disables the creation of a test-specific directory when used with
// relative_install_path. Useful if several tests need to be in the same
// directory, but test_per_src doesn't work.
No_named_install_directory *bool
// the name of the test configuration (for example "AndroidBenchmark.xml") that should be
// installed with the module.
Test_config *string `android:"path,arch_variant"`
// the name of the test configuration template (for example "AndroidBenchmarkTemplate.xml") that
// should be installed with the module.
Test_config_template *string `android:"path,arch_variant"`
// list of compatibility suites (for example "cts", "vts") that the module should be
// installed into.
Test_suites []string `android:"arch_variant"`
// Flag to indicate whether or not to create test config automatically. If AndroidTest.xml
// doesn't exist next to the Android.bp, this attribute doesn't need to be set to true
// explicitly.
Auto_gen_config *bool
}
type benchmarkDecorator struct {
@@ -87,3 +109,21 @@ func (benchmark *benchmarkDecorator) compilerDeps(ctx DepsContext, deps Deps) De
func (benchmark *benchmarkDecorator) compilerProps() []interface{} {
return append(benchmark.binaryDecorator.compilerProps(), &benchmark.Properties)
}
func (benchmark *benchmarkDecorator) install(ctx ModuleContext) {
benchmark.testConfig = tradefed.AutoGenRustBenchmarkConfig(ctx,
benchmark.Properties.Test_config,
benchmark.Properties.Test_config_template,
benchmark.Properties.Test_suites,
nil,
benchmark.Properties.Auto_gen_config)
// default relative install path is module name
if !Bool(benchmark.Properties.No_named_install_directory) {
benchmark.baseCompiler.relative = ctx.ModuleName()
} else if String(benchmark.baseCompiler.Properties.Relative_install_path) == "" {
ctx.PropertyErrorf("no_named_install_directory", "Module install directory may only be disabled if relative_install_path is set")
}
benchmark.binaryDecorator.install(ctx)
}