Merge "Soong: Define a new Soong module named prebuilt_firmware."
This commit is contained in:
@@ -24,6 +24,7 @@ func init() {
|
|||||||
RegisterModuleType("prebuilt_usr_share", PrebuiltUserShareFactory)
|
RegisterModuleType("prebuilt_usr_share", PrebuiltUserShareFactory)
|
||||||
RegisterModuleType("prebuilt_usr_share_host", PrebuiltUserShareHostFactory)
|
RegisterModuleType("prebuilt_usr_share_host", PrebuiltUserShareHostFactory)
|
||||||
RegisterModuleType("prebuilt_font", PrebuiltFontFactory)
|
RegisterModuleType("prebuilt_font", PrebuiltFontFactory)
|
||||||
|
RegisterModuleType("prebuilt_firmware", PrebuiltFirmwareFactory)
|
||||||
|
|
||||||
PreDepsMutators(func(ctx RegisterMutatorsContext) {
|
PreDepsMutators(func(ctx RegisterMutatorsContext) {
|
||||||
ctx.BottomUp("prebuilt_etc", prebuiltEtcMutator).Parallel()
|
ctx.BottomUp("prebuilt_etc", prebuiltEtcMutator).Parallel()
|
||||||
@@ -61,7 +62,9 @@ type PrebuiltEtc struct {
|
|||||||
sourceFilePath Path
|
sourceFilePath Path
|
||||||
outputFilePath OutputPath
|
outputFilePath OutputPath
|
||||||
// The base install location, e.g. "etc" for prebuilt_etc, "usr/share" for prebuilt_usr_share.
|
// The base install location, e.g. "etc" for prebuilt_etc, "usr/share" for prebuilt_usr_share.
|
||||||
installDirBase string
|
installDirBase string
|
||||||
|
// The base install location when soc_specific property is set to true, e.g. "firmware" for prebuilt_firmware.
|
||||||
|
socInstallDirBase string
|
||||||
installDirPath OutputPath
|
installDirPath OutputPath
|
||||||
additionalDependencies *Paths
|
additionalDependencies *Paths
|
||||||
}
|
}
|
||||||
@@ -121,7 +124,14 @@ func (p *PrebuiltEtc) GenerateAndroidBuildActions(ctx ModuleContext) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
p.outputFilePath = PathForModuleOut(ctx, filename).OutputPath
|
p.outputFilePath = PathForModuleOut(ctx, filename).OutputPath
|
||||||
p.installDirPath = PathForModuleInstall(ctx, p.installDirBase, String(p.properties.Sub_dir))
|
|
||||||
|
// If soc install dir was specified and SOC specific is set, set the installDirPath to the specified
|
||||||
|
// socInstallDirBase.
|
||||||
|
installBaseDir := p.installDirBase
|
||||||
|
if ctx.SocSpecific() && p.socInstallDirBase != "" {
|
||||||
|
installBaseDir = p.socInstallDirBase
|
||||||
|
}
|
||||||
|
p.installDirPath = PathForModuleInstall(ctx, installBaseDir, String(p.properties.Sub_dir))
|
||||||
|
|
||||||
// This ensures that outputFilePath has the correct name for others to
|
// This ensures that outputFilePath has the correct name for others to
|
||||||
// use, as the source file may have a different name.
|
// use, as the source file may have a different name.
|
||||||
@@ -250,3 +260,14 @@ func PrebuiltFontFactory() Module {
|
|||||||
InitAndroidArchModule(module, DeviceSupported, MultilibFirst)
|
InitAndroidArchModule(module, DeviceSupported, MultilibFirst)
|
||||||
return module
|
return module
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// prebuilt_firmware installs a firmware file to <partition>/etc/firmware directory for system image.
|
||||||
|
// If soc_specific property is set to true, the firmware file is installed to the vendor <partition>/firmware
|
||||||
|
// directory for vendor image.
|
||||||
|
func PrebuiltFirmwareFactory() Module {
|
||||||
|
module := &PrebuiltEtc{installDirBase: "etc/firmware", socInstallDirBase: "firmware"}
|
||||||
|
InitPrebuiltEtcModule(module)
|
||||||
|
// This module is device-only
|
||||||
|
InitAndroidArchModule(module, DeviceSupported, MultilibFirst)
|
||||||
|
return module
|
||||||
|
}
|
||||||
|
@@ -31,6 +31,7 @@ func testPrebuiltEtc(t *testing.T, bp string) (*TestContext, Config) {
|
|||||||
ctx.RegisterModuleType("prebuilt_usr_share", ModuleFactoryAdaptor(PrebuiltUserShareFactory))
|
ctx.RegisterModuleType("prebuilt_usr_share", ModuleFactoryAdaptor(PrebuiltUserShareFactory))
|
||||||
ctx.RegisterModuleType("prebuilt_usr_share_host", ModuleFactoryAdaptor(PrebuiltUserShareHostFactory))
|
ctx.RegisterModuleType("prebuilt_usr_share_host", ModuleFactoryAdaptor(PrebuiltUserShareHostFactory))
|
||||||
ctx.RegisterModuleType("prebuilt_font", ModuleFactoryAdaptor(PrebuiltFontFactory))
|
ctx.RegisterModuleType("prebuilt_font", ModuleFactoryAdaptor(PrebuiltFontFactory))
|
||||||
|
ctx.RegisterModuleType("prebuilt_firmware", ModuleFactoryAdaptor(PrebuiltFirmwareFactory))
|
||||||
ctx.PreDepsMutators(func(ctx RegisterMutatorsContext) {
|
ctx.PreDepsMutators(func(ctx RegisterMutatorsContext) {
|
||||||
ctx.BottomUp("prebuilt_etc", prebuiltEtcMutator).Parallel()
|
ctx.BottomUp("prebuilt_etc", prebuiltEtcMutator).Parallel()
|
||||||
})
|
})
|
||||||
@@ -235,3 +236,39 @@ func TestPrebuiltFontInstallDirPath(t *testing.T) {
|
|||||||
t.Errorf("expected %q, got %q", expected, p.installDirPath.RelPathString())
|
t.Errorf("expected %q, got %q", expected, p.installDirPath.RelPathString())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPrebuiltFirmwareDirPath(t *testing.T) {
|
||||||
|
targetPath := "target/product/test_device"
|
||||||
|
tests := []struct {
|
||||||
|
description string
|
||||||
|
config string
|
||||||
|
expectedPath string
|
||||||
|
}{{
|
||||||
|
description: "prebuilt: system firmware",
|
||||||
|
config: `
|
||||||
|
prebuilt_firmware {
|
||||||
|
name: "foo.conf",
|
||||||
|
src: "foo.conf",
|
||||||
|
}`,
|
||||||
|
expectedPath: filepath.Join(targetPath, "system/etc/firmware"),
|
||||||
|
}, {
|
||||||
|
description: "prebuilt: vendor firmware",
|
||||||
|
config: `
|
||||||
|
prebuilt_firmware {
|
||||||
|
name: "foo.conf",
|
||||||
|
src: "foo.conf",
|
||||||
|
soc_specific: true,
|
||||||
|
sub_dir: "sub_dir",
|
||||||
|
}`,
|
||||||
|
expectedPath: filepath.Join(targetPath, "vendor/firmware/sub_dir"),
|
||||||
|
}}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.description, func(t *testing.T) {
|
||||||
|
ctx, _ := testPrebuiltEtc(t, tt.config)
|
||||||
|
p := ctx.ModuleForTests("foo.conf", "android_arm64_armv8-a_core").Module().(*PrebuiltEtc)
|
||||||
|
if p.installDirPath.RelPathString() != tt.expectedPath {
|
||||||
|
t.Errorf("expected %q, got %q", tt.expectedPath, p.installDirPath)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user