diff --git a/android/apex.go b/android/apex.go index 60da45bf9..b01b700b8 100644 --- a/android/apex.go +++ b/android/apex.go @@ -203,6 +203,12 @@ type ApexModule interface { // 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. @@ -423,6 +429,11 @@ func (m *ApexModuleBase) AvailableFor(what string) bool { return CheckAvailableForApex(what, m.ApexProperties.Apex_available) } +// 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 24af85df0..4a6a1aeba 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -1013,9 +1013,8 @@ func markPlatformAvailability(mctx android.BottomUpMutatorContext) { } }) - // 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 2520705fd..c5552d6e6 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -3296,6 +3296,12 @@ func (c *Module) ShouldSupportSdkVersion(ctx android.BaseModuleContext, 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 //