Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8e5685dd authored by Jooyung Han's avatar Jooyung Han
Browse files

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
parent 41243c1d
Loading
Loading
Loading
Loading
+34 −24
Original line number Diff line number Diff line
@@ -2282,13 +2282,22 @@ func TestVendorApex_use_vndk_as_stable(t *testing.T) {
	ensureListContains(t, requireNativeLibs, ":vndk")
}

func TestVendorApex_withPrebuiltFirmware(t *testing.T) {
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"],
			vendor: true,
					`+tc.additionalProp+`
				}
				apex_key {
					name: "myapex.key",
@@ -2299,13 +2308,14 @@ func TestVendorApex_withPrebuiltFirmware(t *testing.T) {
					name: "myfirmware",
					src: "myfirmware.bin",
					filename_from_src: true,
			vendor: true,
					`+tc.additionalProp+`
				}
			`)

			ensureExactContents(t, ctx, "myapex", "android_common_myapex_image", []string{
		"firmware/myfirmware.bin",
				"etc/firmware/myfirmware.bin",
			})
		})
	}
}

func TestAndroidMk_UseVendorRequired(t *testing.T) {
+8 −8
Original line number Diff line number Diff line
@@ -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.