summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Justin Yun <justinyun@google.com> 2021-06-29 20:50:37 +0900
committer Justin Yun <justinyun@google.com> 2021-07-01 11:42:28 +0000
commit5e035863652abbadda3fc7039654ce915792c6ac (patch)
tree28d73286f36924aebae7b19c5a77dd558cecf48f
parent7ce730b90c1a368caa94ca8f2045015da4608b9e (diff)
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
-rw-r--r--cc/cc.go10
-rw-r--r--cc/linkable.go6
-rw-r--r--cc/snapshot_utils.go4
-rw-r--r--cc/vendor_snapshot.go10
-rw-r--r--rust/rust.go9
-rw-r--r--rust/snapshot_utils.go4
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