Use VisitDirectDepsProxy in checkStaticExecutables.
Bug: 377723687
Test: Check the ninja and mk files.
Change-Id: I1c12fcabc7b389a85ffede0f9a03fdaeb92f1f5d
diff --git a/apex/apex.go b/apex/apex.go
index 3e1b41d..5407635 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -2742,12 +2742,12 @@
// 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 08a93cb9..7db0b9e 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -53,6 +53,13 @@
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 @@
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 ed38ad7..48f946e 100644
--- a/rust/rust.go
+++ b/rust/rust.go
@@ -1001,6 +1001,10 @@
ctx.Phony("rust", ctx.RustModule().OutputFile().Path())
}
+ android.SetProvider(ctx, cc.LinkableInfoKey, cc.LinkableInfo{
+ StaticExecutable: mod.StaticExecutable(),
+ })
+
mod.setOutputFiles(ctx)
buildComplianceMetadataInfo(ctx, mod, deps)