From 152a702955f14a3bf11ac98623ba5c4f5da13b70 Mon Sep 17 00:00:00 2001 From: Inseob Kim Date: Tue, 30 Mar 2021 16:51:08 +0900 Subject: [PATCH] Add default group support for logical_partition Default group has no size limit and becomes automatically minimized. Bug: 181107248 Test: boot microdroid Change-Id: Id38d3ab173db5fa01db3d471af15747d30b1820c --- filesystem/logical_partition.go | 55 ++++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 18 deletions(-) diff --git a/filesystem/logical_partition.go b/filesystem/logical_partition.go index 20d9622dc..dbbc1d88a 100644 --- a/filesystem/logical_partition.go +++ b/filesystem/logical_partition.go @@ -43,6 +43,10 @@ type logicalPartitionProperties struct { // Total size of the logical partition Size *string + // List of partitions for default group. Default group has no size limit and automatically + // minimized when creating an image. + Default_group []partitionProperties + // List of groups. A group defines a fixed sized region. It can host one or more logical // partitions and their total size is limited by the size of the group they are in. Groups []groupProperties @@ -52,7 +56,7 @@ type logicalPartitionProperties struct { } type groupProperties struct { - // Name of the partition group + // Name of the partition group. Can't be "default"; use default_group instead. Name *string // Size of the partition group @@ -92,8 +96,9 @@ func (l *logicalPartition) GenerateAndroidBuildActions(ctx android.ModuleContext // Sparse the filesystem images and calculate their sizes sparseImages := make(map[string]android.OutputPath) sparseImageSizes := make(map[string]android.OutputPath) - for _, group := range l.properties.Groups { - for _, part := range group.Partitions { + + sparsePartitions := func(partitions []partitionProperties) { + for _, part := range partitions { sparseImg, sizeTxt := sparseFilesystem(ctx, part, builder) pName := proptools.String(part.Name) sparseImages[pName] = sparseImg @@ -101,6 +106,12 @@ func (l *logicalPartition) GenerateAndroidBuildActions(ctx android.ModuleContext } } + for _, group := range l.properties.Groups { + sparsePartitions(group.Partitions) + } + + sparsePartitions(l.properties.Default_group) + cmd := builder.Command().BuiltTool("lpmake") size := proptools.String(l.properties.Size) @@ -123,10 +134,32 @@ func (l *logicalPartition) GenerateAndroidBuildActions(ctx android.ModuleContext groupNames := make(map[string]bool) partitionNames := make(map[string]bool) + addPartitionsToGroup := func(partitions []partitionProperties, gName string) { + for _, part := range partitions { + pName := proptools.String(part.Name) + if pName == "" { + ctx.PropertyErrorf("groups.partitions.name", "must be set") + } + if _, ok := partitionNames[pName]; ok { + ctx.PropertyErrorf("groups.partitions.name", "already exists") + } else { + partitionNames[pName] = true + } + // Get size of the partition by reading the -size.txt file + pSize := fmt.Sprintf("$(cat %s)", sparseImageSizes[pName]) + cmd.FlagWithArg("--partition=", fmt.Sprintf("%s:readonly:%s:%s", pName, pSize, gName)) + cmd.FlagWithInput("--image="+pName+"=", sparseImages[pName]) + } + } + + addPartitionsToGroup(l.properties.Default_group, "default") + for _, group := range l.properties.Groups { gName := proptools.String(group.Name) if gName == "" { ctx.PropertyErrorf("groups.name", "must be set") + } else if gName == "default" { + ctx.PropertyErrorf("groups.name", `can't use "default" as a group name. Use default_group instead`) } if _, ok := groupNames[gName]; ok { ctx.PropertyErrorf("group.name", "already exists") @@ -142,21 +175,7 @@ func (l *logicalPartition) GenerateAndroidBuildActions(ctx android.ModuleContext } cmd.FlagWithArg("--group=", gName+":"+gSize) - for _, part := range group.Partitions { - pName := proptools.String(part.Name) - if pName == "" { - ctx.PropertyErrorf("groups.partitions.name", "must be set") - } - if _, ok := partitionNames[pName]; ok { - ctx.PropertyErrorf("groups.partitions.name", "already exists") - } else { - partitionNames[pName] = true - } - // Get size of the partition by reading the -size.txt file - pSize := fmt.Sprintf("$(cat %s)", sparseImageSizes[pName]) - cmd.FlagWithArg("--partition=", fmt.Sprintf("%s:readonly:%s:%s", pName, pSize, gName)) - cmd.FlagWithInput("--image="+pName+"=", sparseImages[pName]) - } + addPartitionsToGroup(group.Partitions, gName) } l.output = android.PathForModuleOut(ctx, l.installFileName()).OutputPath