Add F2FS support for APEX build system
Add the new property payload_fs_type in apex module type. Either 'f2fs' or 'ext4'. Default 'ext4'. Test: m Bug: 158453869 Change-Id: I36f373251bd597e11acb62af75437a87e2a531ec Merged-In: I36f373251bd597e11acb62af75437a87e2a531ec
This commit is contained in:
parent
2d815963ba
commit
4ba38c1a3f
2 changed files with 42 additions and 2 deletions
36
apex/apex.go
36
apex/apex.go
|
@ -41,6 +41,9 @@ const (
|
|||
imageApexType = "image"
|
||||
zipApexType = "zip"
|
||||
flattenedApexType = "flattened"
|
||||
|
||||
ext4FsType = "ext4"
|
||||
f2fsFsType = "f2fs"
|
||||
)
|
||||
|
||||
type dependencyTag struct {
|
||||
|
@ -1026,6 +1029,10 @@ type apexBundleProperties struct {
|
|||
// Should be only used in non-system apexes (e.g. vendor: true).
|
||||
// Default is false.
|
||||
Use_vndk_as_stable *bool
|
||||
|
||||
// The type of filesystem to use for an image apex. Either 'ext4' or 'f2fs'.
|
||||
// Default 'ext4'.
|
||||
Payload_fs_type *string
|
||||
}
|
||||
|
||||
type apexTargetBundleProperties struct {
|
||||
|
@ -1233,6 +1240,24 @@ func (af *apexFile) AvailableToPlatform() bool {
|
|||
return false
|
||||
}
|
||||
|
||||
type fsType int
|
||||
|
||||
const (
|
||||
ext4 fsType = iota
|
||||
f2fs
|
||||
)
|
||||
|
||||
func (f fsType) string() string {
|
||||
switch f {
|
||||
case ext4:
|
||||
return ext4FsType
|
||||
case f2fs:
|
||||
return f2fsFsType
|
||||
default:
|
||||
panic(fmt.Errorf("unknown APEX payload type %d", f))
|
||||
}
|
||||
}
|
||||
|
||||
type apexBundle struct {
|
||||
android.ModuleBase
|
||||
android.DefaultableModuleBase
|
||||
|
@ -1298,6 +1323,8 @@ type apexBundle struct {
|
|||
|
||||
// Optional list of lint report zip files for apexes that contain java or app modules
|
||||
lintReports android.Paths
|
||||
|
||||
payloadFsType fsType
|
||||
}
|
||||
|
||||
func addDependenciesForNativeModules(ctx android.BottomUpMutatorContext,
|
||||
|
@ -2270,6 +2297,15 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
|||
a.installDir = android.PathForModuleInstall(ctx, "apex")
|
||||
a.filesInfo = filesInfo
|
||||
|
||||
switch proptools.StringDefault(a.properties.Payload_fs_type, ext4FsType) {
|
||||
case ext4FsType:
|
||||
a.payloadFsType = ext4
|
||||
case f2fsFsType:
|
||||
a.payloadFsType = f2fs
|
||||
default:
|
||||
ctx.PropertyErrorf("payload_fs_type", "%q is not a valid filesystem for apex [ext4, f2fs]", *a.properties.Payload_fs_type)
|
||||
}
|
||||
|
||||
// Optimization. If we are building bundled APEX, for the files that are gathered due to the
|
||||
// transitive dependencies, don't place them inside the APEX, but place a symlink pointing
|
||||
// the same library in the system partition, thus effectively sharing the same libraries
|
||||
|
|
|
@ -63,6 +63,8 @@ func init() {
|
|||
pctx.HostBinToolVariable("jsonmodify", "jsonmodify")
|
||||
pctx.HostBinToolVariable("conv_apex_manifest", "conv_apex_manifest")
|
||||
pctx.HostBinToolVariable("extract_apks", "extract_apks")
|
||||
pctx.HostBinToolVariable("make_f2fs", "make_f2fs")
|
||||
pctx.HostBinToolVariable("sload_f2fs", "sload_f2fs")
|
||||
}
|
||||
|
||||
var (
|
||||
|
@ -116,12 +118,12 @@ var (
|
|||
`--payload_type image ` +
|
||||
`--key ${key} ${opt_flags} ${image_dir} ${out} `,
|
||||
CommandDeps: []string{"${apexer}", "${avbtool}", "${e2fsdroid}", "${merge_zips}",
|
||||
"${mke2fs}", "${resize2fs}", "${sefcontext_compile}",
|
||||
"${mke2fs}", "${resize2fs}", "${sefcontext_compile}", "${make_f2fs}", "${sload_f2fs}",
|
||||
"${soong_zip}", "${zipalign}", "${aapt2}", "prebuilts/sdk/current/public/android.jar"},
|
||||
Rspfile: "${out}.copy_commands",
|
||||
RspfileContent: "${copy_commands}",
|
||||
Description: "APEX ${image_dir} => ${out}",
|
||||
}, "tool_path", "image_dir", "copy_commands", "file_contexts", "canned_fs_config", "key", "opt_flags", "manifest")
|
||||
}, "tool_path", "image_dir", "copy_commands", "file_contexts", "canned_fs_config", "key", "opt_flags", "manifest", "payload_fs_type")
|
||||
|
||||
zipApexRule = pctx.StaticRule("zipApexRule", blueprint.RuleParams{
|
||||
Command: `rm -rf ${image_dir} && mkdir -p ${image_dir} && ` +
|
||||
|
@ -582,6 +584,8 @@ func (a *apexBundle) buildUnflattenedApex(ctx android.ModuleContext) {
|
|||
optFlags = append(optFlags, "--manifest_json "+a.manifestJsonOut.String())
|
||||
}
|
||||
|
||||
optFlags = append(optFlags, "--payload_fs_type "+a.payloadFsType.string())
|
||||
|
||||
ctx.Build(pctx, android.BuildParams{
|
||||
Rule: apexRule,
|
||||
Implicits: implicitInputs,
|
||||
|
|
Loading…
Reference in a new issue