From df09d173cad6bf652dc949698e48824248d59373 Mon Sep 17 00:00:00 2001 From: Jooyung Han Date: Tue, 11 May 2021 11:13:30 +0900 Subject: [PATCH] Generate linker config with packaged items. Previously, we gather all deps without checking if a dep is actually one of packaged items (CopyDepsToZip contents) For example, following items shouldn't be listed. provideLibs: "platform-mainline-sdk_libartpalette-system@current.so" provideLibs: "platform-mainline-sdk_liblog@current.so" provideLibs: "runtime-module-sdk_libc@current.so" provideLibs: "runtime-module-sdk_libdl@current.so" provideLibs: "runtime-module-sdk_libdl_android@current.so" provideLibs: "runtime-module-sdk_libm@current.so" Now, we gather only those modules contributing CopyDepsToZip to generate linker config for android_system_image. Test: m nothing Test: m microdroid Test: conv_linker_config print -s .../microdroid/android_common/root/system/etc/linker.config.pb shouldn't list sdk members. Change-Id: Ife5d2193ab59970367d10e196aaaa922c6582862 --- android/packaging.go | 9 +++++++-- filesystem/system_image.go | 12 +++++++----- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/android/packaging.go b/android/packaging.go index 72c0c1777..906582667 100644 --- a/android/packaging.go +++ b/android/packaging.go @@ -198,8 +198,8 @@ func (p *PackagingBase) AddDeps(ctx BottomUpMutatorContext, depTag blueprint.Dep } } -// See PackageModule.CopyDepsToZip -func (p *PackagingBase) CopyDepsToZip(ctx ModuleContext, zipOut WritablePath) (entries []string) { +// Returns transitive PackagingSpecs from deps +func (p *PackagingBase) GatherPackagingSpecs(ctx ModuleContext) map[string]PackagingSpec { m := make(map[string]PackagingSpec) ctx.VisitDirectDeps(func(child Module) { if pi, ok := ctx.OtherModuleDependencyTag(child).(PackagingItem); !ok || !pi.IsPackagingItem() { @@ -211,7 +211,12 @@ func (p *PackagingBase) CopyDepsToZip(ctx ModuleContext, zipOut WritablePath) (e } } }) + return m +} +// See PackageModule.CopyDepsToZip +func (p *PackagingBase) CopyDepsToZip(ctx ModuleContext, zipOut WritablePath) (entries []string) { + m := p.GatherPackagingSpecs(ctx) builder := NewRuleBuilder(pctx, ctx) dir := PathForModuleOut(ctx, ".zip") diff --git a/filesystem/system_image.go b/filesystem/system_image.go index a7c914395..1d24d6d41 100644 --- a/filesystem/system_image.go +++ b/filesystem/system_image.go @@ -50,17 +50,19 @@ func (s *systemImage) buildExtraFiles(ctx android.ModuleContext, root android.Ou func (s *systemImage) buildLinkerConfigFile(ctx android.ModuleContext, root android.OutputPath) android.OutputPath { input := android.PathForModuleSrc(ctx, android.String(s.properties.Linker_config_src)) output := root.Join(ctx, "system", "etc", "linker.config.pb") + + // we need "Module"s for packaging items var otherModules []android.Module + deps := s.GatherPackagingSpecs(ctx) ctx.WalkDeps(func(child, parent android.Module) bool { - // Don't track direct dependencies that aren't not packaged - if parent == s { - if pi, ok := ctx.OtherModuleDependencyTag(child).(android.PackagingItem); !ok || !pi.IsPackagingItem() { - return false + for _, ps := range child.PackagingSpecs() { + if _, ok := deps[ps.RelPathInPackage()]; ok { + otherModules = append(otherModules, child) } } - otherModules = append(otherModules, child) return true }) + builder := android.NewRuleBuilder(pctx, ctx) linkerconfig.BuildLinkerConfig(ctx, builder, input, otherModules, output) builder.Build("conv_linker_config", "Generate linker config protobuf "+output.String())