Allow module types to force creation of a default APEX variant
Bug: 187910671
Test: m droid
Change-Id: I797d4ab60d15b526744fe6e4df1b55c8b75b0310
diff --git a/android/apex.go b/android/apex.go
index 60da45b..b01b700 100644
--- a/android/apex.go
+++ b/android/apex.go
@@ -203,6 +203,12 @@
// apex_available property of the module.
AvailableFor(what string) bool
+ // AlwaysRequiresPlatformApexVariant allows the implementing module to determine whether an
+ // APEX mutator should always be created for it.
+ //
+ // Returns false by default.
+ AlwaysRequiresPlatformApexVariant() bool
+
// Returns true if this module is not available to platform (i.e. apex_available property
// doesn't have "//apex_available:platform"), or shouldn't be available to platform, which
// is the case when this module depends on other module that isn't available to platform.
@@ -424,6 +430,11 @@
}
// Implements ApexModule
+func (m *ApexModuleBase) AlwaysRequiresPlatformApexVariant() bool {
+ return false
+}
+
+// Implements ApexModule
func (m *ApexModuleBase) NotAvailableForPlatform() bool {
return m.ApexProperties.NotAvailableForPlatform
}
diff --git a/apex/apex.go b/apex/apex.go
index 2c0df27..c8e6cc8 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -1013,9 +1013,8 @@
}
})
- // Exception 1: stub libraries and native bridge libraries are always available to platform
- if cc, ok := mctx.Module().(*cc.Module); ok &&
- (cc.IsStubs() || cc.Target().NativeBridge == android.NativeBridgeEnabled) {
+ // Exception 1: check to see if the module always requires it.
+ if am.AlwaysRequiresPlatformApexVariant() {
availableToPlatform = true
}
diff --git a/cc/cc.go b/cc/cc.go
index 16a49d3..3878681 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -3279,6 +3279,12 @@
return nil
}
+// Implements android.ApexModule
+func (c *Module) AlwaysRequiresPlatformApexVariant() bool {
+ // stub libraries and native bridge libraries are always available to platform
+ return c.IsStubs() || c.Target().NativeBridge == android.NativeBridgeEnabled
+}
+
//
// Defaults
//