From 5e035863652abbadda3fc7039654ce915792c6ac Mon Sep 17 00:00:00 2001 From: Justin Yun Date: Tue, 29 Jun 2021 20:50:37 +0900 Subject: [PATCH] Include static lib information for the snapshot modules snapshot modules require the list of static libs to find the NOTICE files for the snapshot modules. snapshot binaries must include static_executable property to check if non static binaries have libc as a static lib. Bug: 190690041 Test: Check NOTICE for libaudiopreprocessing.so built from snapshots. Change-Id: I53f7549a158ab27ada87833a3f4d58620aa7c3cf --- cc/cc.go | 10 ++++++++++ cc/linkable.go | 6 ++++++ cc/snapshot_utils.go | 4 ++++ cc/vendor_snapshot.go | 10 ++++++++-- rust/rust.go | 9 +++++++++ rust/snapshot_utils.go | 4 ++++ 6 files changed, 41 insertions(+), 2 deletions(-) diff --git a/cc/cc.go b/cc/cc.go index 0aa101458..ffd2863e6 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -337,6 +337,7 @@ type BaseProperties struct { // Used by vendor snapshot to record dependencies from snapshot modules. SnapshotSharedLibs []string `blueprint:"mutated"` + SnapshotStaticLibs []string `blueprint:"mutated"` SnapshotRuntimeLibs []string `blueprint:"mutated"` Installable *bool @@ -2856,6 +2857,8 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { c.Properties.AndroidMkStaticLibs = append( c.Properties.AndroidMkStaticLibs, makeLibName) } + // Record BaseLibName for snapshots. + c.Properties.SnapshotStaticLibs = append(c.Properties.SnapshotStaticLibs, BaseLibName(depName)) } } else if !c.IsStubs() { // Stubs lib doesn't link to the runtime lib, object, crt, etc. dependencies. @@ -3179,6 +3182,13 @@ func (c *Module) Binary() bool { return false } +func (c *Module) StaticExecutable() bool { + if b, ok := c.linker.(*binaryDecorator); ok { + return b.static() + } + return false +} + func (c *Module) Object() bool { if o, ok := c.linker.(interface { object() bool diff --git a/cc/linkable.go b/cc/linkable.go index 231626ecc..dd87334a3 100644 --- a/cc/linkable.go +++ b/cc/linkable.go @@ -94,6 +94,9 @@ type Snapshottable interface { // SnapshotSharedLibs returns the list of shared library dependencies for this module. SnapshotSharedLibs() []string + // SnapshotStaticLibs returns the list of static library dependencies for this module. + SnapshotStaticLibs() []string + // IsSnapshotPrebuilt returns true if this module is a snapshot prebuilt. IsSnapshotPrebuilt() bool } @@ -226,6 +229,9 @@ type LinkableInterface interface { // Header returns true if this is a library headers module. Header() bool + // StaticExecutable returns true if this is a binary module with "static_executable: true". + StaticExecutable() bool + // EverInstallable returns true if the module is ever installable EverInstallable() bool diff --git a/cc/snapshot_utils.go b/cc/snapshot_utils.go index a6c8ed522..b0538bea0 100644 --- a/cc/snapshot_utils.go +++ b/cc/snapshot_utils.go @@ -53,6 +53,10 @@ func (m *Module) SnapshotSharedLibs() []string { return m.Properties.SnapshotSharedLibs } +func (m *Module) SnapshotStaticLibs() []string { + return m.Properties.SnapshotStaticLibs +} + // snapshotLibraryInterface is an interface for libraries captured to VNDK / vendor snapshots. type snapshotLibraryInterface interface { libraryInterface diff --git a/cc/vendor_snapshot.go b/cc/vendor_snapshot.go index 5a303c806..7ba2363fc 100644 --- a/cc/vendor_snapshot.go +++ b/cc/vendor_snapshot.go @@ -242,10 +242,12 @@ type snapshotJsonFlags struct { SanitizeUbsanDep bool `json:",omitempty"` // binary flags - Symlinks []string `json:",omitempty"` + Symlinks []string `json:",omitempty"` + StaticExecutable bool `json:",omitempty"` // dependencies SharedLibs []string `json:",omitempty"` + StaticLibs []string `json:",omitempty"` RuntimeLibs []string `json:",omitempty"` Required []string `json:",omitempty"` @@ -381,6 +383,8 @@ func (c *snapshotSingleton) GenerateBuildActions(ctx android.SingletonContext) { if m.Shared() { prop.SharedLibs = m.SnapshotSharedLibs() } + // static libs dependencies are required to collect the NOTICE files. + prop.StaticLibs = m.SnapshotStaticLibs() if sanitizable, ok := m.(PlatformSanitizeable); ok { if sanitizable.Static() && sanitizable.SanitizePropDefined() { prop.SanitizeMinimalDep = sanitizable.MinimalRuntimeDep() || sanitizable.MinimalRuntimeNeeded() @@ -426,8 +430,10 @@ func (c *snapshotSingleton) GenerateBuildActions(ctx android.SingletonContext) { } else if m.Binary() { // binary flags prop.Symlinks = m.Symlinks() + prop.StaticExecutable = m.StaticExecutable() prop.SharedLibs = m.SnapshotSharedLibs() - + // static libs dependencies are required to collect the NOTICE files. + prop.StaticLibs = m.SnapshotStaticLibs() // install bin binPath := m.OutputFile().Path() snapshotBinOut := filepath.Join(snapshotArchDir, targetArch, "binary", binPath.Base()) diff --git a/rust/rust.go b/rust/rust.go index 05f639939..a11a04c89 100644 --- a/rust/rust.go +++ b/rust/rust.go @@ -87,6 +87,7 @@ type BaseProperties struct { // Used by vendor snapshot to record dependencies from snapshot modules. SnapshotSharedLibs []string `blueprint:"mutated"` + SnapshotStaticLibs []string `blueprint:"mutated"` // Make this module available when building for vendor ramdisk. // On device without a dedicated recovery partition, the module is only @@ -259,6 +260,13 @@ func (mod *Module) Binary() bool { return false } +func (mod *Module) StaticExecutable() bool { + if !mod.Binary() { + return false + } + return Bool(mod.compiler.(*binaryDecorator).Properties.Static_executable) +} + func (mod *Module) Object() bool { // Rust has no modules which produce only object files. return false @@ -1097,6 +1105,7 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps { // Record baseLibName for snapshots. mod.Properties.SnapshotSharedLibs = append(mod.Properties.SnapshotSharedLibs, cc.BaseLibName(depName)) + mod.Properties.SnapshotStaticLibs = append(mod.Properties.SnapshotStaticLibs, cc.BaseLibName(depName)) mod.Properties.AndroidMkSharedLibs = append(mod.Properties.AndroidMkSharedLibs, makeLibName) exportDep = true diff --git a/rust/snapshot_utils.go b/rust/snapshot_utils.go index bd7ca7f68..8dabd9bf6 100644 --- a/rust/snapshot_utils.go +++ b/rust/snapshot_utils.go @@ -57,6 +57,10 @@ func (mod *Module) SnapshotSharedLibs() []string { return mod.Properties.SnapshotSharedLibs } +func (mod *Module) SnapshotStaticLibs() []string { + return mod.Properties.SnapshotStaticLibs +} + func (mod *Module) Symlinks() []string { // TODO update this to return the list of symlinks when Rust supports defining symlinks return nil