Make ModifyPackagingSpec generic to any filesystem
ModifyPackagingSpec was added to support installing product-partition
modules on the system partition for GSI, but ramdisk also has a very
similar issue, where it's modules are installed to the "ramdisk/system"
partition.
Make ModifyPackagingSpec generic so that it works on the ramdisk files.
This reduces the ramdisk file diff down to just a missing build.prop
file.
Bug: 378146476
Test: m soong_generated_ramdisk_filesystem_test on aosp_cf_x86_64_phone
Change-Id: I1d197679a1128400b6bb837d99e3aabe2ab3c68e
diff --git a/filesystem/filesystem.go b/filesystem/filesystem.go
index 29e5ec3..fa66451 100644
--- a/filesystem/filesystem.go
+++ b/filesystem/filesystem.go
@@ -301,13 +301,24 @@
}
if proptools.Bool(f.properties.Is_auto_generated) { // TODO (spandandas): Remove this.
pt := f.PartitionType()
- return pt == "ramdisk" || ps.Partition() == pt
+ return ps.Partition() == pt || strings.HasPrefix(ps.Partition(), pt+"/")
}
return true
}
func (f *filesystem) ModifyPackagingSpec(ps *android.PackagingSpec) {
- // do nothing by default
+ // Sometimes, android.modulePartition() returns a path with >1 path components.
+ // This makes the partition field of packagingSpecs have multiple components, like
+ // "system/product". Right now, the filesystem module doesn't look at the partition field
+ // when deciding what path to install the file under, only the RelPathInPackage field, so
+ // we move the later path components from partition to relPathInPackage. This should probably
+ // be revisited in the future.
+ prefix := f.PartitionType() + "/"
+ if strings.HasPrefix(ps.Partition(), prefix) {
+ subPartition := strings.TrimPrefix(ps.Partition(), prefix)
+ ps.SetPartition(f.PartitionType())
+ ps.SetRelPathInPackage(filepath.Join(subPartition, ps.RelPathInPackage()))
+ }
}
var pctx = android.NewPackageContext("android/soong/filesystem")