diff options
Diffstat (limited to 'filesystem/filesystem.go')
| -rw-r--r-- | filesystem/filesystem.go | 33 | 
1 files changed, 27 insertions, 6 deletions
| diff --git a/filesystem/filesystem.go b/filesystem/filesystem.go index efc889ccb..61127bf16 100644 --- a/filesystem/filesystem.go +++ b/filesystem/filesystem.go @@ -20,6 +20,7 @@ import (  	"io"  	"path/filepath"  	"slices" +	"strconv"  	"strings"  	"android/soong/android" @@ -36,6 +37,7 @@ func init() {  func registerBuildComponents(ctx android.RegistrationContext) {  	ctx.RegisterModuleType("android_filesystem", filesystemFactory)  	ctx.RegisterModuleType("android_system_image", systemImageFactory) +	ctx.RegisterModuleType("android_system_image_defaults", systemImageDefaultsFactory)  	ctx.RegisterModuleType("avb_add_hash_footer", avbAddHashFooterFactory)  	ctx.RegisterModuleType("avb_add_hash_footer_defaults", avbAddHashFooterDefaultsFactory)  	ctx.RegisterModuleType("avb_gen_vbmeta_image", avbGenVbmetaImageFactory) @@ -57,7 +59,7 @@ type filesystem struct {  	output     android.OutputPath  	installDir android.InstallPath -	// For testing. Keeps the result of CopyDepsToZip() +	// For testing. Keeps the result of CopySpecsToDir()  	entries []string  } @@ -81,6 +83,9 @@ type filesystemProperties struct {  	// avbtool. Default used by avbtool is sha1.  	Avb_hash_algorithm *string +	// The index used to prevent rollback of the image. Only used if use_avb is true. +	Rollback_index *int64 +  	// Name of the partition stored in vbmeta desc. Defaults to the name of this module.  	Partition_name *string @@ -120,6 +125,8 @@ type filesystemProperties struct {  	// modules would be installed to the same location as a make module, they will overwrite  	// the make version.  	Include_make_built_files string + +	Fsverity fsverityProperties  }  // android_filesystem packages a set of modules and their transitive dependencies into a filesystem @@ -176,6 +183,10 @@ func (f *filesystem) installFileName() string {  	return f.BaseModuleName() + ".img"  } +func (f *filesystem) partitionName() string { +	return proptools.StringDefault(f.properties.Partition_name, f.Name()) +} +  var pctx = android.NewPackageContext("android/soong/filesystem")  func (f *filesystem) GenerateAndroidBuildActions(ctx android.ModuleContext) { @@ -255,10 +266,12 @@ func (f *filesystem) buildImageUsingBuildImage(ctx android.ModuleContext) androi  	builder := android.NewRuleBuilder(pctx, ctx)  	// Wipe the root dir to get rid of leftover files from prior builds  	builder.Command().Textf("rm -rf %s && mkdir -p %s", rootDir, rootDir) -	f.entries = f.CopySpecsToDir(ctx, builder, f.gatherFilteredPackagingSpecs(ctx), rebasedDir) +	specs := f.gatherFilteredPackagingSpecs(ctx) +	f.entries = f.CopySpecsToDir(ctx, builder, specs, rebasedDir)  	f.buildNonDepsFiles(ctx, builder, rootDir)  	f.addMakeBuiltFiles(ctx, builder, rootDir) +	f.buildFsverityMetadataFiles(ctx, builder, specs, rootDir, rebasedDir)  	// run host_init_verifier  	// Ideally we should have a concept of pluggable linters that verify the generated image. @@ -338,13 +351,19 @@ func (f *filesystem) buildPropFile(ctx android.ModuleContext) (propFile android.  		addStr("avb_algorithm", algorithm)  		key := android.PathForModuleSrc(ctx, proptools.String(f.properties.Avb_private_key))  		addPath("avb_key_path", key) -		partitionName := proptools.StringDefault(f.properties.Partition_name, f.Name()) -		addStr("partition_name", partitionName) +		addStr("partition_name", f.partitionName())  		avb_add_hashtree_footer_args := "--do_not_generate_fec"  		if hashAlgorithm := proptools.String(f.properties.Avb_hash_algorithm); hashAlgorithm != "" {  			avb_add_hashtree_footer_args += " --hash_algorithm " + hashAlgorithm  		} -		securityPatchKey := "com.android.build." + partitionName + ".security_patch" +		if f.properties.Rollback_index != nil { +			rollbackIndex := proptools.Int(f.properties.Rollback_index) +			if rollbackIndex < 0 { +				ctx.PropertyErrorf("rollback_index", "Rollback index must be non-negative") +			} +			avb_add_hashtree_footer_args += " --rollback_index " + strconv.Itoa(rollbackIndex) +		} +		securityPatchKey := "com.android.build." + f.partitionName() + ".security_patch"  		securityPatchValue := ctx.Config().PlatformSecurityPatch()  		avb_add_hashtree_footer_args += " --prop " + securityPatchKey + ":" + securityPatchValue  		addStr("avb_add_hashtree_footer_args", avb_add_hashtree_footer_args) @@ -388,9 +407,11 @@ func (f *filesystem) buildCpioImage(ctx android.ModuleContext, compressed bool)  	builder := android.NewRuleBuilder(pctx, ctx)  	// Wipe the root dir to get rid of leftover files from prior builds  	builder.Command().Textf("rm -rf %s && mkdir -p %s", rootDir, rootDir) -	f.entries = f.CopySpecsToDir(ctx, builder, f.gatherFilteredPackagingSpecs(ctx), rebasedDir) +	specs := f.gatherFilteredPackagingSpecs(ctx) +	f.entries = f.CopySpecsToDir(ctx, builder, specs, rebasedDir)  	f.buildNonDepsFiles(ctx, builder, rootDir) +	f.buildFsverityMetadataFiles(ctx, builder, specs, rootDir, rebasedDir)  	output := android.PathForModuleOut(ctx, f.installFileName()).OutputPath  	cmd := builder.Command(). |