From 742f54c4bc32d44cb9c742dbc6c35bd85e7aa395 Mon Sep 17 00:00:00 2001 From: Jiyong Park Date: Tue, 30 Apr 2024 21:25:05 +0900 Subject: [PATCH] Filesystem modules follow the installation semantic With this change, filesystem modules (android_filesystem, android_system_image, etc.) follow the installation semantic which means output from modules which don't produce installable files (i.e. modules that return false on IsSkipInstall()) are not included in the filesystem module. Note that this bug has been there since the beginning but didn't trigger an error due to another bug (b/335506668) which allowed multiple packaging specs to contribute to the same path. That bug prevented the non-installable variant of a module (e.g. stub) from being installed simply because because it was "luckly" clobbered by the installable variant of the same module (e.g. impl lib). Bug: 335506668 Test: go test ./... Change-Id: I2a42d178701d74bf6ccc5f33ba33918f8c608d40 --- filesystem/filesystem.go | 7 +++++++ filesystem/system_image.go | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/filesystem/filesystem.go b/filesystem/filesystem.go index cadf9c246..5bcfce7a3 100644 --- a/filesystem/filesystem.go +++ b/filesystem/filesystem.go @@ -137,6 +137,7 @@ type filesystemProperties struct { // partitions like system.img. For example, cc_library modules are placed under ./lib[64] directory. func filesystemFactory() android.Module { module := &filesystem{} + module.filterPackagingSpec = module.filterInstallablePackagingSpec initFilesystemModule(module) return module } @@ -189,6 +190,12 @@ func (f *filesystem) partitionName() string { return proptools.StringDefault(f.properties.Partition_name, f.Name()) } +func (f *filesystem) filterInstallablePackagingSpec(ps android.PackagingSpec) bool { + // Filesystem module respects the installation semantic. A PackagingSpec from a module with + // IsSkipInstall() is skipped. + return !ps.SkipInstall() +} + var pctx = android.NewPackageContext("android/soong/filesystem") func (f *filesystem) GenerateAndroidBuildActions(ctx android.ModuleContext) { diff --git a/filesystem/system_image.go b/filesystem/system_image.go index 5028a493e..15cacfb4f 100644 --- a/filesystem/system_image.go +++ b/filesystem/system_image.go @@ -98,5 +98,5 @@ func (s *systemImage) buildLinkerConfigFile(ctx android.ModuleContext, root andr // Note that "apex" module installs its contents to "apex"(fake partition) as well // for symbol lookup by imitating "activated" paths. func (s *systemImage) filterPackagingSpec(ps android.PackagingSpec) bool { - return ps.Partition() == "system" + return s.filesystem.filterInstallablePackagingSpec(ps) && ps.Partition() == "system" }