From d70dff7c9b0a381d9c3d047c28daafc60714f0f7 Mon Sep 17 00:00:00 2001 From: Jiakai Zhang Date: Thu, 24 Feb 2022 15:06:05 +0000 Subject: [PATCH] Install required deps for flattened APEX. The primary boot image is a required dep of the ART APEX. It needs to be installed no matter the APEX is flattened or not. Bug: 220991677 Test: 1. m OVERRIDE_TARGET_FLATTEN_APEX=true com.android.art 2. See boot.art in /system/framework/ Change-Id: I1a69ae1b86df97fc44ea6c75c8bb9ec960c8d249 --- apex/androidmk.go | 22 ++++++++++------------ apex/apex_test.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/apex/androidmk.go b/apex/androidmk.go index 8cca137a0..8785ca0f3 100644 --- a/apex/androidmk.go +++ b/apex/androidmk.go @@ -309,7 +309,14 @@ func (a *apexBundle) androidMkForFiles(w io.Writer, apexBundleName, apexName, mo return moduleNames } -func (a *apexBundle) writeRequiredModules(w io.Writer) { +func (a *apexBundle) writeRequiredModules(w io.Writer, moduleNames []string) { + if len(moduleNames) > 0 { + fmt.Fprintln(w, "LOCAL_REQUIRED_MODULES +=", strings.Join(moduleNames, " ")) + } + if len(a.requiredDeps) > 0 { + fmt.Fprintln(w, "LOCAL_REQUIRED_MODULES +=", strings.Join(a.requiredDeps, " ")) + } + var required []string var targetRequired []string var hostRequired []string @@ -349,10 +356,7 @@ func (a *apexBundle) androidMkForType() android.AndroidMkData { fmt.Fprintln(w, "LOCAL_PATH :=", moduleDir) fmt.Fprintln(w, "LOCAL_MODULE :=", name+a.suffix) data.Entries.WriteLicenseVariables(w) - if len(moduleNames) > 0 { - fmt.Fprintln(w, "LOCAL_REQUIRED_MODULES :=", strings.Join(moduleNames, " ")) - } - a.writeRequiredModules(w) + a.writeRequiredModules(w, moduleNames) fmt.Fprintln(w, "include $(BUILD_PHONY_PACKAGE)") } else { @@ -388,13 +392,7 @@ func (a *apexBundle) androidMkForType() android.AndroidMkData { if len(a.overridableProperties.Overrides) > 0 { fmt.Fprintln(w, "LOCAL_OVERRIDES_MODULES :=", strings.Join(a.overridableProperties.Overrides, " ")) } - if len(moduleNames) > 0 { - fmt.Fprintln(w, "LOCAL_REQUIRED_MODULES +=", strings.Join(moduleNames, " ")) - } - if len(a.requiredDeps) > 0 { - fmt.Fprintln(w, "LOCAL_REQUIRED_MODULES +=", strings.Join(a.requiredDeps, " ")) - } - a.writeRequiredModules(w) + a.writeRequiredModules(w, moduleNames) if a.mergedNotices.Merged.Valid() { fmt.Fprintln(w, "LOCAL_NOTICE_FILE :=", a.mergedNotices.Merged.Path().String()) diff --git a/apex/apex_test.go b/apex/apex_test.go index 1c183a0cc..990b6b21a 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -8661,6 +8661,38 @@ func TestAndroidMk_RequiredModules(t *testing.T) { ensureContains(t, androidMk, "LOCAL_REQUIRED_MODULES += otherapex") } +func TestAndroidMk_RequiredDeps(t *testing.T) { + ctx := testApex(t, ` + apex { + name: "myapex", + key: "myapex.key", + updatable: false, + } + + apex_key { + name: "myapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } + `) + + bundle := ctx.ModuleForTests("myapex", "android_common_myapex_image").Module().(*apexBundle) + bundle.requiredDeps = append(bundle.requiredDeps, "foo") + data := android.AndroidMkDataForTest(t, ctx, bundle) + var builder strings.Builder + data.Custom(&builder, bundle.BaseModuleName(), "TARGET_", "", data) + androidMk := builder.String() + ensureContains(t, androidMk, "LOCAL_REQUIRED_MODULES += foo") + + flattenedBundle := ctx.ModuleForTests("myapex", "android_common_myapex_flattened").Module().(*apexBundle) + flattenedBundle.requiredDeps = append(flattenedBundle.requiredDeps, "foo") + flattenedData := android.AndroidMkDataForTest(t, ctx, flattenedBundle) + var flattenedBuilder strings.Builder + flattenedData.Custom(&flattenedBuilder, flattenedBundle.BaseModuleName(), "TARGET_", "", flattenedData) + flattenedAndroidMk := flattenedBuilder.String() + ensureContains(t, flattenedAndroidMk, "LOCAL_REQUIRED_MODULES += foo") +} + func TestApexOutputFileProducer(t *testing.T) { for _, tc := range []struct { name string