From 8e5685ddca0cdeffffe5a53b08ca8102144361cf Mon Sep 17 00:00:00 2001 From: Jooyung Han Date: Mon, 21 Sep 2020 11:02:57 +0900 Subject: [PATCH] apex: prebuilt_firmware installs in /etc/firmware Installation path of prebuilt_firmware varies accoding to target partitions. When it is for system, it installs a file in /system/etc/firmware while it installs in /vendor/firmware for vendor. We'd better be consistent about installation path when it is for APEXes regardless of target partition. Otherwise, ueventd would need to scan both /apex/*/etc/firmware and /apex/*/firmware. Having /etc prefix for prebuilt modules helps module owners to predict the layout of the contents. Bug: 162701747 Bug: 167942098 Test: soong tests Test: loading vibrator firmware from vibrator apex (sunfish) Change-Id: I7a7105026426f8a7a156bc947304930f761c81f3 --- apex/apex_test.go | 58 ++++++++++++++++++++++++++------------------- etc/prebuilt_etc.go | 16 ++++++------- 2 files changed, 42 insertions(+), 32 deletions(-) diff --git a/apex/apex_test.go b/apex/apex_test.go index 610f66750..5c49667e5 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -2282,30 +2282,40 @@ func TestVendorApex_use_vndk_as_stable(t *testing.T) { ensureListContains(t, requireNativeLibs, ":vndk") } -func TestVendorApex_withPrebuiltFirmware(t *testing.T) { - ctx, _ := testApex(t, ` - apex { - name: "myapex", - key: "myapex.key", - prebuilts: ["myfirmware"], - vendor: true, - } - apex_key { - name: "myapex.key", - public_key: "testkey.avbpubkey", - private_key: "testkey.pem", - } - prebuilt_firmware { - name: "myfirmware", - src: "myfirmware.bin", - filename_from_src: true, - vendor: true, - } - `) - - ensureExactContents(t, ctx, "myapex", "android_common_myapex_image", []string{ - "firmware/myfirmware.bin", - }) +func TestApex_withPrebuiltFirmware(t *testing.T) { + testCases := []struct { + name string + additionalProp string + }{ + {"system apex with prebuilt_firmware", ""}, + {"vendor apex with prebuilt_firmware", "vendor: true,"}, + } + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + ctx, _ := testApex(t, ` + apex { + name: "myapex", + key: "myapex.key", + prebuilts: ["myfirmware"], + `+tc.additionalProp+` + } + apex_key { + name: "myapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } + prebuilt_firmware { + name: "myfirmware", + src: "myfirmware.bin", + filename_from_src: true, + `+tc.additionalProp+` + } + `) + ensureExactContents(t, ctx, "myapex", "android_common_myapex_image", []string{ + "etc/firmware/myfirmware.bin", + }) + }) + } } func TestAndroidMk_UseVendorRequired(t *testing.T) { diff --git a/etc/prebuilt_etc.go b/etc/prebuilt_etc.go index 5dd2a8696..8e356793f 100644 --- a/etc/prebuilt_etc.go +++ b/etc/prebuilt_etc.go @@ -172,13 +172,7 @@ func (p *PrebuiltEtc) SubDir() string { } func (p *PrebuiltEtc) BaseDir() string { - // If soc install dir was specified and SOC specific is set, set the installDirPath to the specified - // socInstallDirBase. - installBaseDir := p.installDirBase - if p.SocSpecific() && p.socInstallDirBase != "" { - installBaseDir = p.socInstallDirBase - } - return installBaseDir + return p.installDirBase } func (p *PrebuiltEtc) Installable() bool { @@ -205,7 +199,13 @@ func (p *PrebuiltEtc) GenerateAndroidBuildActions(ctx android.ModuleContext) { ctx.PropertyErrorf("sub_dir", "relative_install_path is set. Cannot set sub_dir") } - p.installDirPath = android.PathForModuleInstall(ctx, p.BaseDir(), p.SubDir()) + // If soc install dir was specified and SOC specific is set, set the installDirPath to the specified + // socInstallDirBase. + installBaseDir := p.installDirBase + if p.SocSpecific() && p.socInstallDirBase != "" { + installBaseDir = p.socInstallDirBase + } + p.installDirPath = android.PathForModuleInstall(ctx, installBaseDir, p.SubDir()) // This ensures that outputFilePath has the correct name for others to // use, as the source file may have a different name.