From eb8c85abf585ae98cf140491b495f8679ccc2c5f Mon Sep 17 00:00:00 2001 From: Rupert Shuttleworth Date: Tue, 27 Jul 2021 07:10:32 -0400 Subject: [PATCH] Add initial bp2build converter support for apex_key modules. Test: Added unit test. Change-Id: I1ec2adfcef770ff91bcf35b89d9961f4d2b8a814 --- apex/key.go | 68 ++++++++++++++++++++++++++++ bp2build/Android.bp | 1 + bp2build/apex_key_conversion_test.go | 51 +++++++++++++++++++++ 3 files changed, 120 insertions(+) create mode 100644 bp2build/apex_key_conversion_test.go diff --git a/apex/key.go b/apex/key.go index 4bd0dc4f9..32a7ce177 100644 --- a/apex/key.go +++ b/apex/key.go @@ -20,6 +20,7 @@ import ( "strings" "android/soong/android" + "android/soong/bazel" "github.com/google/blueprint/proptools" ) @@ -33,6 +34,8 @@ func init() { func registerApexKeyBuildComponents(ctx android.RegistrationContext) { ctx.RegisterModuleType("apex_key", ApexKeyFactory) ctx.RegisterSingletonType("apex_keys_text", apexKeysTextFactory) + + android.RegisterBp2BuildMutator("apex_key", ApexKeyBp2Build) } type apexKey struct { @@ -192,3 +195,68 @@ func apexKeysTextFactory() android.Singleton { func (s *apexKeysText) MakeVars(ctx android.MakeVarsContext) { ctx.Strict("SOONG_APEX_KEYS_FILE", s.output.String()) } + +// For Bazel / bp2build + +type bazelApexKeyAttributes struct { + Public_key bazel.LabelAttribute + Private_key bazel.LabelAttribute +} + +type bazelApexKey struct { + android.BazelTargetModuleBase + bazelApexKeyAttributes +} + +func BazelApexKeyFactory() android.Module { + module := &bazelApexKey{} + module.AddProperties(&module.bazelApexKeyAttributes) + android.InitBazelTargetModule(module) + return module +} + +func ApexKeyBp2Build(ctx android.TopDownMutatorContext) { + module, ok := ctx.Module().(*apexKey) + if !ok { + // Not an APEX key + return + } + if !module.ConvertWithBp2build(ctx) { + return + } + if ctx.ModuleType() != "apex_key" { + return + } + + apexKeyBp2BuildInternal(ctx, module) +} + +func apexKeyBp2BuildInternal(ctx android.TopDownMutatorContext, module *apexKey) { + var privateKeyLabelAttribute bazel.LabelAttribute + if module.properties.Private_key != nil { + privateKeyLabelAttribute.SetValue(android.BazelLabelForModuleSrcSingle(ctx, *module.properties.Private_key)) + } + + var publicKeyLabelAttribute bazel.LabelAttribute + if module.properties.Public_key != nil { + publicKeyLabelAttribute.SetValue(android.BazelLabelForModuleSrcSingle(ctx, *module.properties.Public_key)) + } + + attrs := &bazelApexKeyAttributes{ + Private_key: privateKeyLabelAttribute, + Public_key: publicKeyLabelAttribute, + } + + props := bazel.BazelTargetModuleProperties{ + Rule_class: "apex_key", + Bzl_load_location: "//build/bazel/rules:apex_key.bzl", + } + + ctx.CreateBazelTargetModule(BazelApexKeyFactory, module.Name(), props, attrs) +} + +func (m *bazelApexKey) Name() string { + return m.BaseModuleName() +} + +func (m *bazelApexKey) GenerateAndroidBuildActions(ctx android.ModuleContext) {} diff --git a/bp2build/Android.bp b/bp2build/Android.bp index dded14ba1..6ab062e0c 100644 --- a/bp2build/Android.bp +++ b/bp2build/Android.bp @@ -29,6 +29,7 @@ bootstrap_go_package { ], testSrcs: [ "apex_conversion_test.go", + "apex_key_conversion_test.go", "build_conversion_test.go", "bzl_conversion_test.go", "cc_library_conversion_test.go", diff --git a/bp2build/apex_key_conversion_test.go b/bp2build/apex_key_conversion_test.go new file mode 100644 index 000000000..8e1aa0961 --- /dev/null +++ b/bp2build/apex_key_conversion_test.go @@ -0,0 +1,51 @@ +// 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 bp2build + +import ( + "android/soong/android" + "android/soong/apex" + + "testing" +) + +func runApexKeyTestCase(t *testing.T, tc bp2buildTestCase) { + t.Helper() + runBp2BuildTestCase(t, registerApexKeyModuleTypes, tc) +} + +func registerApexKeyModuleTypes(ctx android.RegistrationContext) { +} + +func TestApexKeySimple(t *testing.T) { + runApexKeyTestCase(t, bp2buildTestCase{ + description: "apex key - simple example", + moduleTypeUnderTest: "apex_key", + moduleTypeUnderTestFactory: apex.ApexKeyFactory, + moduleTypeUnderTestBp2BuildMutator: apex.ApexKeyBp2Build, + filesystem: map[string]string{}, + blueprint: ` +apex_key { + name: "com.android.apogee.key", + public_key: "com.android.apogee.avbpubkey", + private_key: "com.android.apogee.pem", +} +`, + expectedBazelTargets: []string{`apex_key( + name = "com.android.apogee.key", + private_key = "com.android.apogee.pem", + public_key = "com.android.apogee.avbpubkey", +)`}}) +}