diff --git a/android/module.go b/android/module.go index 4a6f5d1d9..f7061db60 100644 --- a/android/module.go +++ b/android/module.go @@ -1746,7 +1746,11 @@ func (m *ModuleBase) baseModuleContextFactory(ctx blueprint.BaseModuleContext) b } } -func (m *ModuleBase) archModuleContextFactory(ctx blueprint.IncomingTransitionContext) archModuleContext { +type archModuleContextFactoryContext interface { + Config() interface{} +} + +func (m *ModuleBase) archModuleContextFactory(ctx archModuleContextFactoryContext) archModuleContext { config := ctx.Config().(Config) target := m.Target() primaryArch := false diff --git a/android/mutator.go b/android/mutator.go index 440b9060f..b81dd124a 100644 --- a/android/mutator.go +++ b/android/mutator.go @@ -400,6 +400,12 @@ type IncomingTransitionContext interface { Config() Config DeviceConfig() DeviceConfig + + // IsAddingDependency returns true if the transition is being called while adding a dependency + // after the transition mutator has already run, or false if it is being called when the transition + // mutator is running. This should be used sparingly, all uses will have to be removed in order + // to support creating variants on demand. + IsAddingDependency() bool } type OutgoingTransitionContext interface { @@ -574,6 +580,10 @@ func (c *incomingTransitionContextImpl) DeviceConfig() DeviceConfig { return DeviceConfig{c.bp.Config().(Config).deviceConfig} } +func (c *incomingTransitionContextImpl) IsAddingDependency() bool { + return c.bp.IsAddingDependency() +} + func (c *incomingTransitionContextImpl) provider(provider blueprint.AnyProviderKey) (any, bool) { return c.bp.Provider(provider) } diff --git a/apex/apex.go b/apex/apex.go index ab50e85ff..10fe372b7 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -1363,7 +1363,7 @@ func (a *apexBundle) TaggedOutputs() map[string]android.Paths { var _ cc.Coverage = (*apexBundle)(nil) // Implements cc.Coverage -func (a *apexBundle) IsNativeCoverageNeeded(ctx android.IncomingTransitionContext) bool { +func (a *apexBundle) IsNativeCoverageNeeded(ctx cc.IsNativeCoverageNeededContext) bool { return ctx.DeviceConfig().NativeCoverageEnabled() } diff --git a/cc/coverage.go b/cc/coverage.go index f6092e447..a7618dd96 100644 --- a/cc/coverage.go +++ b/cc/coverage.go @@ -23,26 +23,26 @@ import ( ) var ( - clangCoverageHostLdFlags = []string{ - "-Wl,--no-as-needed", - "-Wl,--wrap,open", - } - clangContinuousCoverageFlags = []string{ - "-mllvm", - "-runtime-counter-relocation", - } - clangCoverageCFlags = []string{ - "-Wno-frame-larger-than=", - } - clangCoverageCommonFlags = []string{ - "-fcoverage-mapping", - "-Wno-pass-failed", - "-D__ANDROID_CLANG_COVERAGE__", - } - clangCoverageHWASanFlags = []string{ - "-mllvm", - "-hwasan-globals=0", - } + clangCoverageHostLdFlags = []string{ + "-Wl,--no-as-needed", + "-Wl,--wrap,open", + } + clangContinuousCoverageFlags = []string{ + "-mllvm", + "-runtime-counter-relocation", + } + clangCoverageCFlags = []string{ + "-Wno-frame-larger-than=", + } + clangCoverageCommonFlags = []string{ + "-fcoverage-mapping", + "-Wno-pass-failed", + "-D__ANDROID_CLANG_COVERAGE__", + } + clangCoverageHWASanFlags = []string{ + "-mllvm", + "-hwasan-globals=0", + } ) const profileInstrFlag = "-fprofile-instr-generate=/data/misc/trace/clang-%p-%m.profraw" @@ -247,9 +247,19 @@ func SetCoverageProperties(ctx android.BaseModuleContext, properties CoveragePro return properties } +type IsNativeCoverageNeededContext interface { + Config() android.Config + DeviceConfig() android.DeviceConfig + Device() bool +} + +var _ IsNativeCoverageNeededContext = android.IncomingTransitionContext(nil) +var _ IsNativeCoverageNeededContext = android.BaseModuleContext(nil) +var _ IsNativeCoverageNeededContext = android.BottomUpMutatorContext(nil) + type UseCoverage interface { android.Module - IsNativeCoverageNeeded(ctx android.IncomingTransitionContext) bool + IsNativeCoverageNeeded(ctx IsNativeCoverageNeededContext) bool } // Coverage is an interface for non-CC modules to implement to be mutated for coverage diff --git a/filesystem/filesystem.go b/filesystem/filesystem.go index ffa30a013..5add95441 100644 --- a/filesystem/filesystem.go +++ b/filesystem/filesystem.go @@ -632,7 +632,7 @@ func sha1sum(values []string) string { var _ cc.UseCoverage = (*filesystem)(nil) -func (*filesystem) IsNativeCoverageNeeded(ctx android.IncomingTransitionContext) bool { +func (*filesystem) IsNativeCoverageNeeded(ctx cc.IsNativeCoverageNeededContext) bool { return ctx.Device() && ctx.DeviceConfig().NativeCoverageEnabled() } diff --git a/java/app.go b/java/app.go index fc2294c24..19dc8d5d1 100644 --- a/java/app.go +++ b/java/app.go @@ -1227,7 +1227,7 @@ func (a *AndroidApp) Privileged() bool { return Bool(a.appProperties.Privileged) } -func (a *AndroidApp) IsNativeCoverageNeeded(ctx android.IncomingTransitionContext) bool { +func (a *AndroidApp) IsNativeCoverageNeeded(ctx cc.IsNativeCoverageNeededContext) bool { return ctx.Device() && ctx.DeviceConfig().NativeCoverageEnabled() } diff --git a/java/java.go b/java/java.go index 5fdb4b871..88b31b586 100644 --- a/java/java.go +++ b/java/java.go @@ -1358,7 +1358,7 @@ func (j *JavaTestImport) InstallInTestcases() bool { return true } -func (j *TestHost) IsNativeCoverageNeeded(ctx android.IncomingTransitionContext) bool { +func (j *TestHost) IsNativeCoverageNeeded(ctx cc.IsNativeCoverageNeededContext) bool { return ctx.DeviceConfig().NativeCoverageEnabled() } diff --git a/rust/rust.go b/rust/rust.go index 32998616e..9dae75ee5 100644 --- a/rust/rust.go +++ b/rust/rust.go @@ -501,7 +501,7 @@ func (mod *Module) isCoverageVariant() bool { var _ cc.Coverage = (*Module)(nil) -func (mod *Module) IsNativeCoverageNeeded(ctx android.IncomingTransitionContext) bool { +func (mod *Module) IsNativeCoverageNeeded(ctx cc.IsNativeCoverageNeededContext) bool { return mod.coverage != nil && mod.coverage.Properties.NeedCoverageVariant }