From df09d173cad6bf652dc949698e48824248d59373 Mon Sep 17 00:00:00 2001 From: Jooyung Han Date: Tue, 11 May 2021 11:13:30 +0900 Subject: [PATCH 1/2] 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()) From 77f7c442462cd968ea9f6bc7d86948767e92f202 Mon Sep 17 00:00:00 2001 From: Jooyung Han Date: Wed, 12 May 2021 03:53:32 +0900 Subject: [PATCH 2/2] packaging: install/package deps if not marked IsHideFromMake TransitivePackagingSpecs() gathers transitive "install/package" dependencies. Previously, IsInstallDepNeeded(depTag) was checked. But, in this way, some stub libraries which are marked as "HideFromMake()" to avoid install/package can be gathered. For example, libdexfile is not installed even if it is one of libdexfile_support's runtime_libs because it is a stub library and the impl is provided by "art" apex. So when gathering transitive deps "IsHideFromMake()" is checked and if the dep is hidden (so, not supposed to be installed) then the dep (and its deps) is ignored. Bug: 187686926 Test: m nothing Test: m microdroid (libdexfile shouldn't be included in system/lib) Test: m hosttar (no changes) Change-Id: I2729001d4c64985cf0f2b37440c2082fe912e6c5 --- android/module.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/module.go b/android/module.go index 99606d165..f355a8bf7 100644 --- a/android/module.go +++ b/android/module.go @@ -1500,7 +1500,7 @@ func (m *ModuleBase) computeInstallDeps(ctx ModuleContext) ([]*installPathsDepSe var installDeps []*installPathsDepSet var packagingSpecs []*packagingSpecsDepSet ctx.VisitDirectDeps(func(dep Module) { - if IsInstallDepNeeded(ctx.OtherModuleDependencyTag(dep)) { + if IsInstallDepNeeded(ctx.OtherModuleDependencyTag(dep)) && !dep.IsHideFromMake() { installDeps = append(installDeps, dep.base().installFilesDepSet) packagingSpecs = append(packagingSpecs, dep.base().packagingSpecsDepSet) }