summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apex/apex.go4
-rw-r--r--cc/cc.go11
-rw-r--r--rust/rust.go4
3 files changed, 17 insertions, 2 deletions
diff --git a/apex/apex.go b/apex/apex.go
index 335bd16ea..e0195d3c0 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -2744,12 +2744,12 @@ func (a *apexBundle) checkApexAvailability(ctx android.ModuleContext) {
// checkStaticExecutable ensures that executables in an APEX are not static.
func (a *apexBundle) checkStaticExecutables(ctx android.ModuleContext) {
- ctx.VisitDirectDeps(func(module android.Module) {
+ ctx.VisitDirectDepsProxy(func(module android.ModuleProxy) {
if ctx.OtherModuleDependencyTag(module) != executableTag {
return
}
- if l, ok := module.(cc.LinkableInterface); ok && l.StaticExecutable() {
+ if android.OtherModuleProviderOrDefault(ctx, module, cc.LinkableInfoKey).StaticExecutable {
apex := a.ApexVariationName()
exec := ctx.OtherModuleName(module)
if isStaticExecutableAllowed(apex, exec) {
diff --git a/cc/cc.go b/cc/cc.go
index 2b011d6ed..76d01a527 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -53,6 +53,13 @@ type CcObjectInfo struct {
var CcObjectInfoProvider = blueprint.NewProvider[CcObjectInfo]()
+type LinkableInfo struct {
+ // StaticExecutable returns true if this is a binary module with "static_executable: true".
+ StaticExecutable bool
+}
+
+var LinkableInfoKey = blueprint.NewProvider[LinkableInfo]()
+
func init() {
RegisterCCBuildComponents(android.InitRegistrationContext)
@@ -2119,6 +2126,10 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) {
android.SetProvider(ctx, CcObjectInfoProvider, ccObjectInfo)
}
+ android.SetProvider(ctx, LinkableInfoKey, LinkableInfo{
+ StaticExecutable: c.StaticExecutable(),
+ })
+
c.setOutputFiles(ctx)
if c.makeVarsInfo != nil {
diff --git a/rust/rust.go b/rust/rust.go
index ed38ad7a7..48f946e1c 100644
--- a/rust/rust.go
+++ b/rust/rust.go
@@ -1001,6 +1001,10 @@ func (mod *Module) GenerateAndroidBuildActions(actx android.ModuleContext) {
ctx.Phony("rust", ctx.RustModule().OutputFile().Path())
}
+ android.SetProvider(ctx, cc.LinkableInfoKey, cc.LinkableInfo{
+ StaticExecutable: mod.StaticExecutable(),
+ })
+
mod.setOutputFiles(ctx)
buildComplianceMetadataInfo(ctx, mod, deps)