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": `[]`, + }), + }}) +}