From df165c9e85e925a6390f55a1a49d2eb6e0781d5d Mon Sep 17 00:00:00 2001 From: Jingwen Chen Date: Wed, 8 Jun 2022 16:00:39 +0000 Subject: [PATCH 1/2] Only override prebuilts property if the override_apex.prebuilts is explicitly specified (not nil). This allows the base apex's prebuilts to be surfaced to the override apex target. Discovered when com.google.android.adbd's prebuilts didn't contain its init.rc module. Bug: 222588072 Test: CI Change-Id: I925e98d53f7d9208652c629799ab568521ba7dfe --- apex/apex.go | 6 +- bp2build/apex_conversion_test.go | 126 +++++++++++++++++++++++++++++++ 2 files changed, 130 insertions(+), 2 deletions(-) diff --git a/apex/apex.go b/apex/apex.go index 7a2a04a19..64e1760a4 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -2523,8 +2523,10 @@ func (o *OverrideApex) ConvertWithBp2build(ctx android.TopDownMutatorContext) { } // Prebuilts - prebuiltsLabelList := android.BazelLabelForModuleDeps(ctx, overridableProperties.Prebuilts) - attrs.Prebuilts = bazel.MakeLabelListAttribute(prebuiltsLabelList) + if overridableProperties.Prebuilts != nil { + prebuiltsLabelList := android.BazelLabelForModuleDeps(ctx, overridableProperties.Prebuilts) + attrs.Prebuilts = bazel.MakeLabelListAttribute(prebuiltsLabelList) + } // Compressible if overridableProperties.Compressible != nil { diff --git a/bp2build/apex_conversion_test.go b/bp2build/apex_conversion_test.go index 3f1349f11..00443f69f 100644 --- a/bp2build/apex_conversion_test.go +++ b/bp2build/apex_conversion_test.go @@ -18,6 +18,7 @@ import ( "android/soong/android" "android/soong/apex" "android/soong/cc" + "android/soong/etc" "android/soong/java" "android/soong/sh" @@ -57,6 +58,7 @@ func registerOverrideApexModuleTypes(ctx android.RegistrationContext) { ctx.RegisterModuleType("android_app_certificate", java.AndroidAppCertificateFactory) ctx.RegisterModuleType("filegroup", android.FileGroupFactory) ctx.RegisterModuleType("apex", apex.BundleFactory) + ctx.RegisterModuleType("prebuilt_etc", etc.PrebuiltEtcFactory) } func TestApexBundleSimple(t *testing.T) { @@ -818,3 +820,127 @@ override_apex { }), }}) } + +func TestApexBundleSimple_NoPrebuiltsOverride(t *testing.T) { + runOverrideApexTestCase(t, bp2buildTestCase{ + description: "override_apex - no override", + moduleTypeUnderTest: "override_apex", + moduleTypeUnderTestFactory: apex.OverrideApexFactory, + filesystem: map[string]string{ + "system/sepolicy/apex/Android.bp": ` +filegroup { + name: "com.android.apogee-file_contexts", + srcs: [ "apogee-file_contexts", ], + bazel_module: { bp2build_available: false }, +}`, + }, + blueprint: ` +prebuilt_etc { + name: "prebuilt_file", + bazel_module: { bp2build_available: false }, +} + +apex { + name: "com.android.apogee", + bazel_module: { bp2build_available: false }, + prebuilts: ["prebuilt_file"] +} + +override_apex { + name: "com.google.android.apogee", + base: ":com.android.apogee", +} +`, + expectedBazelTargets: []string{ + makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{ + "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, + "manifest": `"apex_manifest.json"`, + "prebuilts": `[":prebuilt_file"]`, + }), + }}) +} + +func TestApexBundleSimple_PrebuiltsOverride(t *testing.T) { + runOverrideApexTestCase(t, bp2buildTestCase{ + description: "override_apex - ooverride", + moduleTypeUnderTest: "override_apex", + moduleTypeUnderTestFactory: apex.OverrideApexFactory, + filesystem: map[string]string{ + "system/sepolicy/apex/Android.bp": ` +filegroup { + name: "com.android.apogee-file_contexts", + srcs: [ "apogee-file_contexts", ], + bazel_module: { bp2build_available: false }, +}`, + }, + blueprint: ` +prebuilt_etc { + name: "prebuilt_file", + bazel_module: { bp2build_available: false }, +} + +prebuilt_etc { + name: "prebuilt_file2", + bazel_module: { bp2build_available: false }, +} + +apex { + name: "com.android.apogee", + bazel_module: { bp2build_available: false }, + prebuilts: ["prebuilt_file"] +} + +override_apex { + name: "com.google.android.apogee", + base: ":com.android.apogee", + prebuilts: ["prebuilt_file2"] +} +`, + expectedBazelTargets: []string{ + makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{ + "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, + "manifest": `"apex_manifest.json"`, + "prebuilts": `[":prebuilt_file2"]`, + }), + }}) +} + +func TestApexBundleSimple_PrebuiltsOverrideEmptyList(t *testing.T) { + runOverrideApexTestCase(t, bp2buildTestCase{ + description: "override_apex - override with empty list", + moduleTypeUnderTest: "override_apex", + moduleTypeUnderTestFactory: apex.OverrideApexFactory, + filesystem: map[string]string{ + "system/sepolicy/apex/Android.bp": ` +filegroup { + name: "com.android.apogee-file_contexts", + srcs: [ "apogee-file_contexts", ], + bazel_module: { bp2build_available: false }, +}`, + }, + blueprint: ` +prebuilt_etc { + name: "prebuilt_file", + bazel_module: { bp2build_available: false }, +} + +apex { + name: "com.android.apogee", + bazel_module: { bp2build_available: false }, + prebuilts: ["prebuilt_file"] +} + +override_apex { + name: "com.google.android.apogee", + base: ":com.android.apogee", + prebuilts: [], +} +`, + expectedBazelTargets: []string{ + makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{ + "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, + "manifest": `"apex_manifest.json"`, + "prebuilts": `[]`, + }), + }}) +} From 81c67d390466d35a8216ec9d931284b086d3e4a8 Mon Sep 17 00:00:00 2001 From: Jingwen Chen Date: Wed, 8 Jun 2022 16:08:25 +0000 Subject: [PATCH 2/2] Use prebuilt_etc for prebuilt modules in bp2build test, instead of pretending with a cc_library. Test: CI Change-Id: Ib9a081670e072a0e7378289f677063a978d0a62d --- bp2build/apex_conversion_test.go | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/bp2build/apex_conversion_test.go b/bp2build/apex_conversion_test.go index 00443f69f..05045eec0 100644 --- a/bp2build/apex_conversion_test.go +++ b/bp2build/apex_conversion_test.go @@ -40,6 +40,7 @@ func registerApexModuleTypes(ctx android.RegistrationContext) { ctx.RegisterModuleType("apex_key", apex.ApexKeyFactory) ctx.RegisterModuleType("android_app_certificate", java.AndroidAppCertificateFactory) ctx.RegisterModuleType("filegroup", android.FileGroupFactory) + ctx.RegisterModuleType("prebuilt_etc", etc.PrebuiltEtcFactory) } func runOverrideApexTestCase(t *testing.T, tc bp2buildTestCase) { @@ -91,13 +92,13 @@ cc_library { bazel_module: { bp2build_available: false }, } -cc_library { - name: "pretend_prebuilt_1", +prebuilt_etc { + name: "prebuilt_1", bazel_module: { bp2build_available: false }, } -cc_library { - name: "pretend_prebuilt_2", +prebuilt_etc { + name: "prebuilt_2", bazel_module: { bp2build_available: false }, } @@ -132,8 +133,8 @@ apex { "sh_binary_2", ], prebuilts: [ - "pretend_prebuilt_1", - "pretend_prebuilt_2", + "prebuilt_1", + "prebuilt_2", ], package_name: "com.android.apogee.test.package", } @@ -167,8 +168,8 @@ apex { "//conditions:default": [], })`, "prebuilts": `[ - ":pretend_prebuilt_1", - ":pretend_prebuilt_2", + ":prebuilt_1", + ":prebuilt_2", ]`, "updatable": "False", "compressible": "False", @@ -551,13 +552,13 @@ cc_library { bazel_module: { bp2build_available: false }, } -cc_library { - name: "pretend_prebuilt_1", +prebuilt_etc { + name: "prebuilt_1", bazel_module: { bp2build_available: false }, } -cc_library { - name: "pretend_prebuilt_2", +prebuilt_etc { + name: "prebuilt_2", bazel_module: { bp2build_available: false }, } @@ -592,8 +593,8 @@ apex { "sh_binary_2", ], prebuilts: [ - "pretend_prebuilt_1", - "pretend_prebuilt_2", + "prebuilt_1", + "prebuilt_2", ], bazel_module: { bp2build_available: false }, }