diff options
author | 2021-01-06 12:40:43 +0100 | |
---|---|---|
committer | 2021-04-06 12:40:32 +0200 | |
commit | 1d640d0521c7b266bb4b44726305ba2b9971f01d (patch) | |
tree | 940c8823c1fc93f4e2186824cb5e32934e9e95c8 /rust/benchmark.go | |
parent | 8f8029a92b35166e745789b114051d04e68e2ce6 (diff) |
Add rust_benchmark module to soong.
This commit adds rust_benchmark and rust_benchmark_host commands to
soong. Respectively running rust benchmarks on device and host. Currently
only criterion based benchmarks are supported and criterion library is
automatically linked.
Test: atest <module with rust_benchmark defined>
Bug: 155309706
Change-Id: I6edfc2b4bf30b1163fe59b8c2ecdcd4e7125e7b9
Diffstat (limited to 'rust/benchmark.go')
-rw-r--r-- | rust/benchmark.go | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/rust/benchmark.go b/rust/benchmark.go new file mode 100644 index 000000000..6e4fb85c1 --- /dev/null +++ b/rust/benchmark.go @@ -0,0 +1,89 @@ +// Copyright 2020 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package rust + +import ( + "android/soong/android" +) + +type BenchmarkProperties struct { +} + +type benchmarkDecorator struct { + *binaryDecorator + Properties BenchmarkProperties + testConfig android.Path +} + +func NewRustBenchmark(hod android.HostOrDeviceSupported) (*Module, *benchmarkDecorator) { + // Build both 32 and 64 targets for device benchmarks. + // Cannot build both for host benchmarks yet if the benchmark depends on + // something like proc-macro2 that cannot be built for both. + multilib := android.MultilibBoth + if hod != android.DeviceSupported && hod != android.HostAndDeviceSupported { + multilib = android.MultilibFirst + } + module := newModule(hod, multilib) + + benchmark := &benchmarkDecorator{ + binaryDecorator: &binaryDecorator{ + baseCompiler: NewBaseCompiler("nativebench", "nativebench64", InstallInData), + }, + } + + module.compiler = benchmark + module.AddProperties(&benchmark.Properties) + return module, benchmark +} + +func init() { + android.RegisterModuleType("rust_benchmark", RustBenchmarkFactory) + android.RegisterModuleType("rust_benchmark_host", RustBenchmarkHostFactory) +} + +func RustBenchmarkFactory() android.Module { + module, _ := NewRustBenchmark(android.HostAndDeviceSupported) + return module.Init() +} + +func RustBenchmarkHostFactory() android.Module { + module, _ := NewRustBenchmark(android.HostSupported) + return module.Init() +} + +func (benchmark *benchmarkDecorator) autoDep(ctx android.BottomUpMutatorContext) autoDep { + return rlibAutoDep +} + +func (benchmark *benchmarkDecorator) stdLinkage(ctx *depsContext) RustLinkage { + return RlibLinkage +} + +func (benchmark *benchmarkDecorator) compilerFlags(ctx ModuleContext, flags Flags) Flags { + flags = benchmark.binaryDecorator.compilerFlags(ctx, flags) + return flags +} + +func (benchmark *benchmarkDecorator) compilerDeps(ctx DepsContext, deps Deps) Deps { + deps = benchmark.binaryDecorator.compilerDeps(ctx, deps) + + deps.Rustlibs = append(deps.Rustlibs, "libcriterion") + + return deps +} + +func (benchmark *benchmarkDecorator) compilerProps() []interface{} { + return append(benchmark.binaryDecorator.compilerProps(), &benchmark.Properties) +} |