Add `avb_custom_vbmeta_images_partition_list` to misc_info.txt

Make generates this from `BOARD_AVB_VBMETA_CUSTOM_PARTITIONS`. To
generate this in Soong, a new Filesytem_partition_type is added to
vbmeta modules. For the chained vbmeta partitions for cuttlefish, this
will be
- system
- vendor
- system_dlkm
- vendor_dlkm

android_device will query this information from its vbmeta partitions,
and filter out system and vendor.

Bug: 398036609
Test: Built and diff'd misc_info.txt locally
Change-Id: I8ff3fe5e5e50504e49abbf89f7d50be472e64e30
diff --git a/filesystem/android_device.go b/filesystem/android_device.go
index 02bad0a..18276d4 100644
--- a/filesystem/android_device.go
+++ b/filesystem/android_device.go
@@ -840,14 +840,25 @@
 			Textf("echo avb_enable=true >> %s", miscInfo).
 			Textf("&& echo avb_building_vbmeta_image=true >> %s", miscInfo).
 			Textf("&& echo avb_avbtool=avbtool >> %s", miscInfo)
+
+		var allChainedVbmetaPartitionTypes []string
 		for _, vbmetaPartitionName := range a.partitionProps.Vbmeta_partitions {
 			img := ctx.GetDirectDepProxyWithTag(vbmetaPartitionName, filesystemDepTag)
 			if provider, ok := android.OtherModuleProvider(ctx, img, vbmetaPartitionProvider); ok {
 				builder.Command().Text("cat").Input(provider.PropFileForMiscInfo).Textf(" >> %s", miscInfo)
+				if provider.FilesystemPartitionType != "" { // the top-level vbmeta.img
+					allChainedVbmetaPartitionTypes = append(allChainedVbmetaPartitionTypes, provider.FilesystemPartitionType)
+				}
 			} else {
 				ctx.ModuleErrorf("vbmeta dep %s does not set vbmetaPartitionProvider\n", vbmetaPartitionName)
 			}
 		}
+		// Determine the custom vbmeta partitions by removing system and vendor
+		customVbmetaPartitionTypes := android.RemoveListFromList(allChainedVbmetaPartitionTypes, []string{"system", "vendor"})
+		builder.Command().Textf("echo avb_custom_vbmeta_images_partition_list=%s >> %s",
+			strings.Join(android.SortedUniqueStrings(customVbmetaPartitionTypes), " "),
+			miscInfo,
+		)
 
 	}
 	if a.partitionProps.Boot_partition_name != nil {
diff --git a/filesystem/vbmeta.go b/filesystem/vbmeta.go
index d59a2ae..e7a39be 100644
--- a/filesystem/vbmeta.go
+++ b/filesystem/vbmeta.go
@@ -55,6 +55,10 @@
 	// Name of the partition stored in vbmeta desc. Defaults to the name of this module.
 	Partition_name *string
 
+	// Type of the `android_filesystem` for which the vbmeta.img is created.
+	// Examples are system, vendor, product.
+	Filesystem_partition_type *string
+
 	// Set the name of the output. Defaults to <module_name>.img.
 	Stem *string
 
@@ -118,6 +122,9 @@
 	// Name of the partition
 	Name string
 
+	// Partition type of the correspdonding android_filesystem.
+	FilesystemPartitionType string
+
 	// Rollback index location, non-negative int
 	RollbackIndexLocation int
 
@@ -305,11 +312,12 @@
 	})
 
 	android.SetProvider(ctx, vbmetaPartitionProvider, vbmetaPartitionInfo{
-		Name:                  v.partitionName(),
-		RollbackIndexLocation: ril,
-		PublicKey:             extractedPublicKey,
-		Output:                output,
-		PropFileForMiscInfo:   v.buildPropFileForMiscInfo(ctx),
+		Name:                    v.partitionName(),
+		FilesystemPartitionType: proptools.String(v.properties.Filesystem_partition_type),
+		RollbackIndexLocation:   ril,
+		PublicKey:               extractedPublicKey,
+		Output:                  output,
+		PropFileForMiscInfo:     v.buildPropFileForMiscInfo(ctx),
 	})
 
 	ctx.SetOutputFiles([]android.Path{output}, "")