Loading java/platform_compat_config.go +56 −0 Original line number Diff line number Diff line Loading @@ -15,12 +15,23 @@ package java import ( "path/filepath" "android/soong/android" "github.com/google/blueprint" "fmt" ) func init() { registerPlatformCompatConfigBuildComponents(android.InitRegistrationContext) android.RegisterSdkMemberType(&compatConfigMemberType{ SdkMemberTypeBase: android.SdkMemberTypeBase{ PropertyName: "compat_configs", SupportsSdk: true, }, }) } func registerPlatformCompatConfigBuildComponents(ctx android.RegistrationContext) { Loading @@ -42,6 +53,7 @@ type platformCompatConfigProperties struct { type platformCompatConfig struct { android.ModuleBase android.SdkBase properties platformCompatConfigProperties installDirPath android.InstallPath Loading Loading @@ -113,10 +125,54 @@ func (p *platformCompatConfig) AndroidMkEntries() []android.AndroidMkEntries { func PlatformCompatConfigFactory() android.Module { module := &platformCompatConfig{} module.AddProperties(&module.properties) android.InitSdkAwareModule(module) android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibCommon) 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. type prebuiltCompatConfigModule struct { android.ModuleBase Loading java/platform_compat_config_test.go +1 −10 Original line number Diff line number Diff line Loading @@ -36,18 +36,9 @@ func TestPlatformCompatConfig(t *testing.T) { `), ).RunTest(t) checkMergedCompatConfigInputs(t, result, "myconfig", CheckMergedCompatConfigInputs(t, result, "myconfig", "out/soong/.intermediates/myconfig1/myconfig1_meta.xml", "out/soong/.intermediates/myconfig2/myconfig2_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) } java/testing.go +9 −0 Original line number Diff line number Diff line Loading @@ -321,3 +321,12 @@ func CheckHiddenAPIRuleInputs(t *testing.T, expected string, hiddenAPIRule andro 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) } sdk/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ bootstrap_go_package { "boot_image_sdk_test.go", "bp_test.go", "cc_sdk_test.go", "compat_config_sdk_test.go", "exports_test.go", "java_sdk_test.go", "sdk_test.go", Loading sdk/compat_config_sdk_test.go 0 → 100644 +70 −0 Original line number Diff line number Diff line // 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
java/platform_compat_config.go +56 −0 Original line number Diff line number Diff line Loading @@ -15,12 +15,23 @@ package java import ( "path/filepath" "android/soong/android" "github.com/google/blueprint" "fmt" ) func init() { registerPlatformCompatConfigBuildComponents(android.InitRegistrationContext) android.RegisterSdkMemberType(&compatConfigMemberType{ SdkMemberTypeBase: android.SdkMemberTypeBase{ PropertyName: "compat_configs", SupportsSdk: true, }, }) } func registerPlatformCompatConfigBuildComponents(ctx android.RegistrationContext) { Loading @@ -42,6 +53,7 @@ type platformCompatConfigProperties struct { type platformCompatConfig struct { android.ModuleBase android.SdkBase properties platformCompatConfigProperties installDirPath android.InstallPath Loading Loading @@ -113,10 +125,54 @@ func (p *platformCompatConfig) AndroidMkEntries() []android.AndroidMkEntries { func PlatformCompatConfigFactory() android.Module { module := &platformCompatConfig{} module.AddProperties(&module.properties) android.InitSdkAwareModule(module) android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibCommon) 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. type prebuiltCompatConfigModule struct { android.ModuleBase Loading
java/platform_compat_config_test.go +1 −10 Original line number Diff line number Diff line Loading @@ -36,18 +36,9 @@ func TestPlatformCompatConfig(t *testing.T) { `), ).RunTest(t) checkMergedCompatConfigInputs(t, result, "myconfig", CheckMergedCompatConfigInputs(t, result, "myconfig", "out/soong/.intermediates/myconfig1/myconfig1_meta.xml", "out/soong/.intermediates/myconfig2/myconfig2_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) }
java/testing.go +9 −0 Original line number Diff line number Diff line Loading @@ -321,3 +321,12 @@ func CheckHiddenAPIRuleInputs(t *testing.T, expected string, hiddenAPIRule andro 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) }
sdk/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ bootstrap_go_package { "boot_image_sdk_test.go", "bp_test.go", "cc_sdk_test.go", "compat_config_sdk_test.go", "exports_test.go", "java_sdk_test.go", "sdk_test.go", Loading
sdk/compat_config_sdk_test.go 0 → 100644 +70 −0 Original line number Diff line number Diff line // 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 `), ) }