aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiyong Park <jiyong@google.com>2024-05-04 03:56:55 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2024-05-04 03:56:55 +0000
commit7c9ab4f5b188ce04c59164d44cf067a8f433b592 (patch)
treeb66aea248ddf512705014c91ba585fbe276c9b1b
parentb92fc67f50ff9d5460aa34823df71077f4f2e0c0 (diff)
parent7e7d4af6b5ad646e47138a65a3942ba6ee4a5fe2 (diff)
downloadsoong-main.tar.gz
Merge changes from topic "revert-3069323-revert-3066748-duplicate_entry_fs-CIBDJQYRHU-FVLDIVWUZV" into mainHEADmastermain
* changes: Revert^2 "Filesystem modules follow the installation semantic" Revert "Revert "Prevent multiple PackagingSpecs having same inst..."
-rw-r--r--android/packaging.go29
-rw-r--r--filesystem/filesystem.go7
-rw-r--r--filesystem/filesystem_test.go23
-rw-r--r--filesystem/system_image.go2
4 files changed, 58 insertions, 3 deletions
diff --git a/android/packaging.go b/android/packaging.go
index 66772183c..fe61da1e9 100644
--- a/android/packaging.go
+++ b/android/packaging.go
@@ -50,6 +50,25 @@ type PackagingSpec struct {
skipInstall bool
}
+func (p *PackagingSpec) Equals(other *PackagingSpec) bool {
+ if other == nil {
+ return false
+ }
+ if p.relPathInPackage != other.relPathInPackage {
+ return false
+ }
+ if p.srcPath != other.srcPath || p.symlinkTarget != other.symlinkTarget {
+ return false
+ }
+ if p.executable != other.executable {
+ return false
+ }
+ if p.partition != other.partition {
+ return false
+ }
+ return true
+}
+
// Get file name of installed package
func (p *PackagingSpec) FileName() string {
if p.relPathInPackage != "" {
@@ -243,9 +262,15 @@ func (p *PackagingBase) GatherPackagingSpecsWithFilter(ctx ModuleContext, filter
continue
}
}
- if _, ok := m[ps.relPathInPackage]; !ok {
- m[ps.relPathInPackage] = ps
+ dstPath := ps.relPathInPackage
+ if existingPs, ok := m[dstPath]; ok {
+ if !existingPs.Equals(&ps) {
+ ctx.ModuleErrorf("packaging conflict at %v:\n%v\n%v", dstPath, existingPs, ps)
+ }
+ continue
}
+
+ m[dstPath] = ps
}
})
return m
diff --git a/filesystem/filesystem.go b/filesystem/filesystem.go
index 3bbf9f3e6..b342ae930 100644
--- a/filesystem/filesystem.go
+++ b/filesystem/filesystem.go
@@ -141,6 +141,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
}
@@ -193,6 +194,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/filesystem_test.go b/filesystem/filesystem_test.go
index 121504867..acd481352 100644
--- a/filesystem/filesystem_test.go
+++ b/filesystem/filesystem_test.go
@@ -442,3 +442,26 @@ func TestInconsistentPartitionTypesInDefaults(t *testing.T) {
}
`)
}
+
+func TestPreventDuplicatedEntries(t *testing.T) {
+ fixture.ExtendWithErrorHandler(android.FixtureExpectsOneErrorPattern(
+ "packaging conflict at")).
+ RunTestWithBp(t, `
+ android_filesystem {
+ name: "fs",
+ deps: [
+ "foo",
+ "foo_dup",
+ ],
+ }
+
+ cc_binary {
+ name: "foo",
+ }
+
+ cc_binary {
+ name: "foo_dup",
+ stem: "foo",
+ }
+ `)
+}
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"
}