Loading android/packaging.go +27 −2 Original line number Diff line number Diff line Loading @@ -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 != "" { Loading Loading @@ -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 Loading filesystem/filesystem.go +7 −0 Original line number Diff line number Diff line Loading @@ -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 } Loading Loading @@ -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) { Loading filesystem/filesystem_test.go +23 −0 Original line number Diff line number Diff line Loading @@ -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", } `) } filesystem/system_image.go +1 −1 Original line number Diff line number Diff line Loading @@ -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" } Loading
android/packaging.go +27 −2 Original line number Diff line number Diff line Loading @@ -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 != "" { Loading Loading @@ -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 Loading
filesystem/filesystem.go +7 −0 Original line number Diff line number Diff line Loading @@ -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 } Loading Loading @@ -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) { Loading
filesystem/filesystem_test.go +23 −0 Original line number Diff line number Diff line Loading @@ -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", } `) }
filesystem/system_image.go +1 −1 Original line number Diff line number Diff line Loading @@ -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" }