Add platform_compat_config to sdk
Bug: 182402754 Test: m nothing Change-Id: Ife3f4f64fc116d62eb7c3cc10c50e00f19d1d81c
This commit is contained in:
parent
04b4a19fe6
commit
001b2342f7
5 changed files with 137 additions and 10 deletions
|
@ -15,12 +15,23 @@
|
||||||
package java
|
package java
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
"android/soong/android"
|
"android/soong/android"
|
||||||
|
"github.com/google/blueprint"
|
||||||
|
|
||||||
"fmt"
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
registerPlatformCompatConfigBuildComponents(android.InitRegistrationContext)
|
registerPlatformCompatConfigBuildComponents(android.InitRegistrationContext)
|
||||||
|
|
||||||
|
android.RegisterSdkMemberType(&compatConfigMemberType{
|
||||||
|
SdkMemberTypeBase: android.SdkMemberTypeBase{
|
||||||
|
PropertyName: "compat_configs",
|
||||||
|
SupportsSdk: true,
|
||||||
|
},
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func registerPlatformCompatConfigBuildComponents(ctx android.RegistrationContext) {
|
func registerPlatformCompatConfigBuildComponents(ctx android.RegistrationContext) {
|
||||||
|
@ -42,6 +53,7 @@ type platformCompatConfigProperties struct {
|
||||||
|
|
||||||
type platformCompatConfig struct {
|
type platformCompatConfig struct {
|
||||||
android.ModuleBase
|
android.ModuleBase
|
||||||
|
android.SdkBase
|
||||||
|
|
||||||
properties platformCompatConfigProperties
|
properties platformCompatConfigProperties
|
||||||
installDirPath android.InstallPath
|
installDirPath android.InstallPath
|
||||||
|
@ -113,10 +125,54 @@ func (p *platformCompatConfig) AndroidMkEntries() []android.AndroidMkEntries {
|
||||||
func PlatformCompatConfigFactory() android.Module {
|
func PlatformCompatConfigFactory() android.Module {
|
||||||
module := &platformCompatConfig{}
|
module := &platformCompatConfig{}
|
||||||
module.AddProperties(&module.properties)
|
module.AddProperties(&module.properties)
|
||||||
|
android.InitSdkAwareModule(module)
|
||||||
android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibCommon)
|
android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibCommon)
|
||||||
return module
|
return module
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type compatConfigMemberType struct {
|
||||||
|
android.SdkMemberTypeBase
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *compatConfigMemberType) AddDependencies(mctx android.BottomUpMutatorContext, dependencyTag blueprint.DependencyTag, names []string) {
|
||||||
|
mctx.AddVariationDependencies(nil, dependencyTag, names...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *compatConfigMemberType) IsInstance(module android.Module) bool {
|
||||||
|
_, ok := module.(*platformCompatConfig)
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *compatConfigMemberType) AddPrebuiltModule(ctx android.SdkMemberContext, member android.SdkMember) android.BpModule {
|
||||||
|
return ctx.SnapshotBuilder().AddPrebuiltModule(member, "prebuilt_platform_compat_config")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *compatConfigMemberType) CreateVariantPropertiesStruct() android.SdkMemberProperties {
|
||||||
|
return &compatConfigSdkMemberProperties{}
|
||||||
|
}
|
||||||
|
|
||||||
|
type compatConfigSdkMemberProperties struct {
|
||||||
|
android.SdkMemberPropertiesBase
|
||||||
|
|
||||||
|
Metadata android.Path
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *compatConfigSdkMemberProperties) PopulateFromVariant(ctx android.SdkMemberContext, variant android.Module) {
|
||||||
|
module := variant.(*platformCompatConfig)
|
||||||
|
b.Metadata = module.metadataFile
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *compatConfigSdkMemberProperties) AddToPropertySet(ctx android.SdkMemberContext, propertySet android.BpPropertySet) {
|
||||||
|
builder := ctx.SnapshotBuilder()
|
||||||
|
if b.Metadata != nil {
|
||||||
|
snapshotRelativePath := filepath.Join("compat_configs", ctx.Name(), b.Metadata.Base())
|
||||||
|
builder.CopyToSnapshot(b.Metadata, snapshotRelativePath)
|
||||||
|
propertySet.AddProperty("metadata", snapshotRelativePath)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ android.SdkMemberType = (*compatConfigMemberType)(nil)
|
||||||
|
|
||||||
// A prebuilt version of the platform compat config module.
|
// A prebuilt version of the platform compat config module.
|
||||||
type prebuiltCompatConfigModule struct {
|
type prebuiltCompatConfigModule struct {
|
||||||
android.ModuleBase
|
android.ModuleBase
|
||||||
|
|
|
@ -36,18 +36,9 @@ func TestPlatformCompatConfig(t *testing.T) {
|
||||||
`),
|
`),
|
||||||
).RunTest(t)
|
).RunTest(t)
|
||||||
|
|
||||||
checkMergedCompatConfigInputs(t, result, "myconfig",
|
CheckMergedCompatConfigInputs(t, result, "myconfig",
|
||||||
"out/soong/.intermediates/myconfig1/myconfig1_meta.xml",
|
"out/soong/.intermediates/myconfig1/myconfig1_meta.xml",
|
||||||
"out/soong/.intermediates/myconfig2/myconfig2_meta.xml",
|
"out/soong/.intermediates/myconfig2/myconfig2_meta.xml",
|
||||||
"out/soong/.intermediates/myconfig3/myconfig3_meta.xml",
|
"out/soong/.intermediates/myconfig3/myconfig3_meta.xml",
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check that the merged file create by platform_compat_config_singleton has the correct inputs.
|
|
||||||
func checkMergedCompatConfigInputs(t *testing.T, result *android.TestResult, message string, expectedPaths ...string) {
|
|
||||||
sourceGlobalCompatConfig := result.SingletonForTests("platform_compat_config_singleton")
|
|
||||||
allOutputs := sourceGlobalCompatConfig.AllOutputs()
|
|
||||||
android.AssertIntEquals(t, message+": output len", 1, len(allOutputs))
|
|
||||||
output := sourceGlobalCompatConfig.Output(allOutputs[0])
|
|
||||||
android.AssertPathsRelativeToTopEquals(t, message+": inputs", expectedPaths, output.Implicits)
|
|
||||||
}
|
|
||||||
|
|
|
@ -319,3 +319,12 @@ func CheckHiddenAPIRuleInputs(t *testing.T, expected string, hiddenAPIRule andro
|
||||||
t.Errorf("Expected hiddenapi rule inputs:\n%s\nactual inputs:\n%s", expected, actual)
|
t.Errorf("Expected hiddenapi rule inputs:\n%s\nactual inputs:\n%s", expected, actual)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check that the merged file create by platform_compat_config_singleton has the correct inputs.
|
||||||
|
func CheckMergedCompatConfigInputs(t *testing.T, result *android.TestResult, message string, expectedPaths ...string) {
|
||||||
|
sourceGlobalCompatConfig := result.SingletonForTests("platform_compat_config_singleton")
|
||||||
|
allOutputs := sourceGlobalCompatConfig.AllOutputs()
|
||||||
|
android.AssertIntEquals(t, message+": output len", 1, len(allOutputs))
|
||||||
|
output := sourceGlobalCompatConfig.Output(allOutputs[0])
|
||||||
|
android.AssertPathsRelativeToTopEquals(t, message+": inputs", expectedPaths, output.Implicits)
|
||||||
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@ bootstrap_go_package {
|
||||||
"boot_image_sdk_test.go",
|
"boot_image_sdk_test.go",
|
||||||
"bp_test.go",
|
"bp_test.go",
|
||||||
"cc_sdk_test.go",
|
"cc_sdk_test.go",
|
||||||
|
"compat_config_sdk_test.go",
|
||||||
"exports_test.go",
|
"exports_test.go",
|
||||||
"java_sdk_test.go",
|
"java_sdk_test.go",
|
||||||
"sdk_test.go",
|
"sdk_test.go",
|
||||||
|
|
70
sdk/compat_config_sdk_test.go
Normal file
70
sdk/compat_config_sdk_test.go
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
// Copyright 2021 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 sdk
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"android/soong/android"
|
||||||
|
"android/soong/java"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestSnapshotWithCompatConfig(t *testing.T) {
|
||||||
|
result := android.GroupFixturePreparers(
|
||||||
|
prepareForSdkTestWithJava,
|
||||||
|
java.PrepareForTestWithPlatformCompatConfig,
|
||||||
|
).RunTestWithBp(t, `
|
||||||
|
sdk {
|
||||||
|
name: "mysdk",
|
||||||
|
compat_configs: ["myconfig"],
|
||||||
|
}
|
||||||
|
|
||||||
|
platform_compat_config {
|
||||||
|
name: "myconfig",
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
|
||||||
|
CheckSnapshot(t, result, "mysdk", "",
|
||||||
|
checkVersionedAndroidBpContents(`
|
||||||
|
// This is auto-generated. DO NOT EDIT.
|
||||||
|
|
||||||
|
prebuilt_platform_compat_config {
|
||||||
|
name: "mysdk_myconfig@current",
|
||||||
|
sdk_member_name: "myconfig",
|
||||||
|
visibility: ["//visibility:public"],
|
||||||
|
metadata: "compat_configs/myconfig/myconfig_meta.xml",
|
||||||
|
}
|
||||||
|
|
||||||
|
sdk_snapshot {
|
||||||
|
name: "mysdk@current",
|
||||||
|
visibility: ["//visibility:public"],
|
||||||
|
compat_configs: ["mysdk_myconfig@current"],
|
||||||
|
}
|
||||||
|
`),
|
||||||
|
checkUnversionedAndroidBpContents(`
|
||||||
|
// This is auto-generated. DO NOT EDIT.
|
||||||
|
|
||||||
|
prebuilt_platform_compat_config {
|
||||||
|
name: "myconfig",
|
||||||
|
prefer: false,
|
||||||
|
visibility: ["//visibility:public"],
|
||||||
|
metadata: "compat_configs/myconfig/myconfig_meta.xml",
|
||||||
|
}
|
||||||
|
`),
|
||||||
|
checkAllCopyRules(`
|
||||||
|
.intermediates/myconfig/android_common/myconfig_meta.xml -> compat_configs/myconfig/myconfig_meta.xml
|
||||||
|
`),
|
||||||
|
)
|
||||||
|
}
|
Loading…
Reference in a new issue