8efd580eb1
The original `tradefed_binary_host` in Soong always used the host OS architecture when writing the `arch` in `test-suite-info.properties`. This change introduces the `Suite_arch` attribute in `tradefed_binary_host`, allowing users to specify the architecture for `test-suite-info.properties`. Bug: 313535357 Test: 1. Add property of `suite_arch` in the Android.bp 2. m cts-tradefed 3. check `test-suite-info.properties` in cts-tradefed.jar Change-Id: Ib95db4e0e8d238c9bb8a2a3fffea606fa6a764ce
171 lines
5 KiB
Go
171 lines
5 KiB
Go
// Copyright 2018 Google Inc. All rights reserved.
|
|
//
|
|
// 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 suite_harness
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/google/blueprint"
|
|
|
|
"android/soong/android"
|
|
"android/soong/java"
|
|
)
|
|
|
|
var pctx = android.NewPackageContext("android/soong/tradefed/suite_harness")
|
|
|
|
func init() {
|
|
android.RegisterModuleType("tradefed_binary_host", tradefedBinaryFactory)
|
|
|
|
pctx.Import("android/soong/android")
|
|
}
|
|
|
|
type TradefedBinaryProperties struct {
|
|
Short_name string
|
|
Full_name string
|
|
Version string
|
|
Suite_arch string
|
|
Prepend_platform_version_name bool
|
|
}
|
|
|
|
// tradefedBinaryFactory creates an empty module for the tradefed_binary module type,
|
|
// which is a java_binary with some additional processing in tradefedBinaryLoadHook.
|
|
func tradefedBinaryFactory() android.Module {
|
|
props := &TradefedBinaryProperties{}
|
|
module := java.BinaryHostFactory()
|
|
module.AddProperties(props)
|
|
android.AddLoadHook(module, tradefedBinaryLoadHook(props))
|
|
|
|
return module
|
|
}
|
|
|
|
const genSuffix = "-gen"
|
|
|
|
// tradefedBinaryLoadHook adds extra resources and libraries to tradefed_binary modules.
|
|
func tradefedBinaryLoadHook(tfb *TradefedBinaryProperties) func(ctx android.LoadHookContext) {
|
|
return func(ctx android.LoadHookContext) {
|
|
genName := ctx.ModuleName() + genSuffix
|
|
version := tfb.Version
|
|
if tfb.Prepend_platform_version_name {
|
|
version = ctx.Config().PlatformVersionName() + tfb.Version
|
|
}
|
|
|
|
// Create a submodule that generates the test-suite-info.properties file
|
|
// and copies DynamicConfig.xml if it is present.
|
|
ctx.CreateModule(tradefedBinaryGenFactory,
|
|
&TradefedBinaryGenProperties{
|
|
Name: &genName,
|
|
Short_name: tfb.Short_name,
|
|
Full_name: tfb.Full_name,
|
|
Suite_arch: tfb.Suite_arch,
|
|
Version: version,
|
|
})
|
|
|
|
props := struct {
|
|
Java_resources []string
|
|
Libs []string
|
|
}{}
|
|
|
|
// Add dependencies required by all tradefed_binary modules.
|
|
props.Libs = []string{
|
|
"tradefed",
|
|
"loganalysis",
|
|
"compatibility-host-util",
|
|
}
|
|
|
|
// Add the files generated by the submodule created above to the resources.
|
|
props.Java_resources = []string{":" + genName}
|
|
|
|
ctx.AppendProperties(&props)
|
|
|
|
}
|
|
}
|
|
|
|
type TradefedBinaryGenProperties struct {
|
|
Name *string
|
|
Short_name string
|
|
Full_name string
|
|
Version string
|
|
Suite_arch string
|
|
}
|
|
|
|
type tradefedBinaryGen struct {
|
|
android.ModuleBase
|
|
|
|
properties TradefedBinaryGenProperties
|
|
|
|
gen android.Paths
|
|
}
|
|
|
|
func tradefedBinaryGenFactory() android.Module {
|
|
tfg := &tradefedBinaryGen{}
|
|
tfg.AddProperties(&tfg.properties)
|
|
android.InitAndroidModule(tfg)
|
|
return tfg
|
|
}
|
|
|
|
func (tfg *tradefedBinaryGen) DepsMutator(android.BottomUpMutatorContext) {}
|
|
|
|
var tradefedBinaryGenRule = pctx.StaticRule("tradefedBinaryGenRule", blueprint.RuleParams{
|
|
Command: `rm -f $out && touch $out && ` +
|
|
`echo "# This file is auto generated by Android.mk. Do not modify." >> $out && ` +
|
|
`echo "build_number = $$(cat ${buildNumberFile})" >> $out && ` +
|
|
`echo "target_arch = ${arch}" >> $out && ` +
|
|
`echo "name = ${name}" >> $out && ` +
|
|
`echo "fullname = ${fullname}" >> $out && ` +
|
|
`echo "version = ${version}" >> $out`,
|
|
}, "buildNumberFile", "arch", "name", "fullname", "version")
|
|
|
|
func (tfg *tradefedBinaryGen) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
|
buildNumberFile := ctx.Config().BuildNumberFile(ctx)
|
|
outputFile := android.PathForModuleOut(ctx, "test-suite-info.properties")
|
|
|
|
arch := strings.ReplaceAll(tfg.properties.Suite_arch, " ", "")
|
|
if arch == "" {
|
|
arch = ctx.Config().DevicePrimaryArchType().String()
|
|
}
|
|
|
|
ctx.Build(pctx, android.BuildParams{
|
|
Rule: tradefedBinaryGenRule,
|
|
Output: outputFile,
|
|
OrderOnly: android.Paths{buildNumberFile},
|
|
Args: map[string]string{
|
|
"buildNumberFile": buildNumberFile.String(),
|
|
"arch": arch,
|
|
"name": tfg.properties.Short_name,
|
|
"fullname": tfg.properties.Full_name,
|
|
"version": tfg.properties.Version,
|
|
},
|
|
})
|
|
|
|
tfg.gen = append(tfg.gen, outputFile)
|
|
|
|
dynamicConfig := android.ExistentPathForSource(ctx, ctx.ModuleDir(), "DynamicConfig.xml")
|
|
if dynamicConfig.Valid() {
|
|
outputFile := android.PathForModuleOut(ctx, strings.TrimSuffix(ctx.ModuleName(), genSuffix)+".dynamic")
|
|
ctx.Build(pctx, android.BuildParams{
|
|
Rule: android.Cp,
|
|
Input: dynamicConfig.Path(),
|
|
Output: outputFile,
|
|
})
|
|
|
|
tfg.gen = append(tfg.gen, outputFile)
|
|
}
|
|
}
|
|
|
|
func (tfg *tradefedBinaryGen) Srcs() android.Paths {
|
|
return append(android.Paths(nil), tfg.gen...)
|
|
}
|
|
|
|
var _ android.SourceFileProducer = (*tradefedBinaryGen)(nil)
|