From b07c901e0db38b4ec6b72db343109fa4c99839f7 Mon Sep 17 00:00:00 2001 From: Jingwen Chen Date: Wed, 8 Dec 2021 10:05:45 +0000 Subject: [PATCH] bp2build: Fix apex.binaries to be a LabelListAttribute. apex.binaries accepts a list of module names, which should be resolved to their fully qualified labels. Bazel treats string_list and label_list attributes differently, most notably with the latter adding dependency edges. Test: apex_conversion_test.go Bug: 209743852 Change-Id: Iafdc5c728e8658cce0e99d42f32e7bb6fe2f3168 --- apex/apex.go | 8 ++--- bp2build/apex_conversion_test.go | 56 ++++++++++++++++++-------------- 2 files changed, 35 insertions(+), 29 deletions(-) diff --git a/apex/apex.go b/apex/apex.go index 4ecb104e4..d898cbfdc 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -3257,7 +3257,7 @@ type bazelApexBundleAttributes struct { Updatable bazel.BoolAttribute Installable bazel.BoolAttribute Native_shared_libs bazel.LabelListAttribute - Binaries bazel.StringListAttribute + Binaries bazel.LabelListAttribute Prebuilts bazel.LabelListAttribute } @@ -3316,8 +3316,8 @@ func apexBundleBp2BuildInternal(ctx android.TopDownMutatorContext, module *apexB prebuiltsLabelList := android.BazelLabelForModuleDeps(ctx, prebuilts) prebuiltsLabelListAttribute := bazel.MakeLabelListAttribute(prebuiltsLabelList) - binaries := module.properties.ApexNativeDependencies.Binaries - binariesStringListAttribute := bazel.MakeStringListAttribute(binaries) + binaries := android.BazelLabelForModuleDeps(ctx, module.properties.ApexNativeDependencies.Binaries) + binariesLabelListAttribute := bazel.MakeLabelListAttribute(binaries) var updatableAttribute bazel.BoolAttribute if module.properties.Updatable != nil { @@ -3339,7 +3339,7 @@ func apexBundleBp2BuildInternal(ctx android.TopDownMutatorContext, module *apexB Updatable: updatableAttribute, Installable: installableAttribute, Native_shared_libs: nativeSharedLibsLabelListAttribute, - Binaries: binariesStringListAttribute, + Binaries: binariesLabelListAttribute, Prebuilts: prebuiltsLabelListAttribute, } diff --git a/bp2build/apex_conversion_test.go b/bp2build/apex_conversion_test.go index 1a23db700..64440dfa3 100644 --- a/bp2build/apex_conversion_test.go +++ b/bp2build/apex_conversion_test.go @@ -19,6 +19,7 @@ import ( "android/soong/apex" "android/soong/cc" "android/soong/java" + "android/soong/sh" "testing" ) @@ -32,6 +33,8 @@ func registerApexModuleTypes(ctx android.RegistrationContext) { // CC module types needed as they can be APEX dependencies cc.RegisterCCBuildComponents(ctx) + ctx.RegisterModuleType("sh_binary", sh.ShBinaryFactory) + ctx.RegisterModuleType("cc_binary", cc.BinaryFactory) ctx.RegisterModuleType("cc_library", cc.LibraryFactory) ctx.RegisterModuleType("apex_key", apex.ApexKeyFactory) ctx.RegisterModuleType("android_app_certificate", java.AndroidAppCertificateFactory) @@ -40,60 +43,63 @@ func registerApexModuleTypes(ctx android.RegistrationContext) { func TestApexBundleSimple(t *testing.T) { runApexTestCase(t, bp2buildTestCase{ - description: "apex - simple example", + description: "apex - example with all props", moduleTypeUnderTest: "apex", moduleTypeUnderTestFactory: apex.BundleFactory, moduleTypeUnderTestBp2BuildMutator: apex.ApexBundleBp2Build, filesystem: map[string]string{}, blueprint: ` apex_key { - name: "com.android.apogee.key", - public_key: "com.android.apogee.avbpubkey", - private_key: "com.android.apogee.pem", + name: "com.android.apogee.key", + public_key: "com.android.apogee.avbpubkey", + private_key: "com.android.apogee.pem", bazel_module: { bp2build_available: false }, } android_app_certificate { - name: "com.android.apogee.certificate", - certificate: "com.android.apogee", - bazel_module: { bp2build_available: false }, -} - -cc_library { - name: "native_shared_lib_1", + name: "com.android.apogee.certificate", + certificate: "com.android.apogee", bazel_module: { bp2build_available: false }, } cc_library { - name: "native_shared_lib_2", + name: "native_shared_lib_1", + bazel_module: { bp2build_available: false }, +} + +cc_library { + name: "native_shared_lib_2", bazel_module: { bp2build_available: false }, } // TODO(b/194878861): Add bp2build support for prebuilt_etc cc_library { - name: "pretend_prebuilt_1", - bazel_module: { bp2build_available: false }, + name: "pretend_prebuilt_1", + bazel_module: { bp2build_available: false }, } // TODO(b/194878861): Add bp2build support for prebuilt_etc cc_library { - name: "pretend_prebuilt_2", - bazel_module: { bp2build_available: false }, + name: "pretend_prebuilt_2", + bazel_module: { bp2build_available: false }, } filegroup { name: "com.android.apogee-file_contexts", - srcs: [ - "com.android.apogee-file_contexts", - ], - bazel_module: { bp2build_available: false }, + srcs: [ + "com.android.apogee-file_contexts", + ], + bazel_module: { bp2build_available: false }, } +cc_binary { name: "cc_binary_1", bazel_module: { bp2build_available: false } } +sh_binary { name: "sh_binary_2", bazel_module: { bp2build_available: false } } + apex { name: "com.android.apogee", manifest: "apogee_manifest.json", androidManifest: "ApogeeAndroidManifest.xml", - file_contexts: "com.android.apogee-file_contexts", + file_contexts: "com.android.apogee-file_contexts", min_sdk_version: "29", key: "com.android.apogee.key", certificate: "com.android.apogee.certificate", @@ -104,8 +110,8 @@ apex { "native_shared_lib_2", ], binaries: [ - "binary_1", - "binary_2", + "cc_binary_1", + "sh_binary_2", ], prebuilts: [ "pretend_prebuilt_1", @@ -117,8 +123,8 @@ apex { makeBazelTarget("apex", "com.android.apogee", attrNameToString{ "android_manifest": `"ApogeeAndroidManifest.xml"`, "binaries": `[ - "binary_1", - "binary_2", + ":cc_binary_1", + ":sh_binary_2", ]`, "certificate": `":com.android.apogee.certificate"`, "file_contexts": `":com.android.apogee-file_contexts"`,