Merge "Convert coverageMutator to a TransitionMutator" into main
This commit is contained in:
@@ -246,7 +246,7 @@ func SetCoverageProperties(ctx android.BaseModuleContext, properties CoveragePro
|
||||
|
||||
type UseCoverage interface {
|
||||
android.Module
|
||||
IsNativeCoverageNeeded(ctx android.BaseModuleContext) bool
|
||||
IsNativeCoverageNeeded(ctx android.IncomingTransitionContext) bool
|
||||
}
|
||||
|
||||
// Coverage is an interface for non-CC modules to implement to be mutated for coverage
|
||||
@@ -258,43 +258,86 @@ type Coverage interface {
|
||||
EnableCoverageIfNeeded()
|
||||
}
|
||||
|
||||
func coverageMutator(mctx android.BottomUpMutatorContext) {
|
||||
if c, ok := mctx.Module().(*Module); ok && c.coverage != nil {
|
||||
needCoverageVariant := c.coverage.Properties.NeedCoverageVariant
|
||||
needCoverageBuild := c.coverage.Properties.NeedCoverageBuild
|
||||
if needCoverageVariant {
|
||||
m := mctx.CreateVariations("", "cov")
|
||||
type coverageTransitionMutator struct{}
|
||||
|
||||
// Setup the non-coverage version and set HideFromMake and
|
||||
// PreventInstall to true.
|
||||
m[0].(*Module).coverage.Properties.CoverageEnabled = false
|
||||
m[0].(*Module).coverage.Properties.IsCoverageVariant = false
|
||||
m[0].(*Module).Properties.HideFromMake = true
|
||||
m[0].(*Module).Properties.PreventInstall = true
|
||||
var _ android.TransitionMutator = (*coverageTransitionMutator)(nil)
|
||||
|
||||
// The coverage-enabled version inherits HideFromMake,
|
||||
// PreventInstall from the original module.
|
||||
m[1].(*Module).coverage.Properties.CoverageEnabled = needCoverageBuild
|
||||
m[1].(*Module).coverage.Properties.IsCoverageVariant = true
|
||||
func (c coverageTransitionMutator) Split(ctx android.BaseModuleContext) []string {
|
||||
if c, ok := ctx.Module().(*Module); ok && c.coverage != nil {
|
||||
if c.coverage.Properties.NeedCoverageVariant {
|
||||
return []string{"", "cov"}
|
||||
}
|
||||
} else if cov, ok := mctx.Module().(Coverage); ok && cov.IsNativeCoverageNeeded(mctx) {
|
||||
} else if cov, ok := ctx.Module().(Coverage); ok && cov.IsNativeCoverageNeeded(ctx) {
|
||||
// APEX and Rust modules fall here
|
||||
|
||||
// Note: variant "" is also created because an APEX can be depended on by another
|
||||
// module which are split into "" and "cov" variants. e.g. when cc_test refers
|
||||
// to an APEX via 'data' property.
|
||||
m := mctx.CreateVariations("", "cov")
|
||||
m[0].(Coverage).MarkAsCoverageVariant(false)
|
||||
m[0].(Coverage).SetPreventInstall()
|
||||
m[0].(Coverage).HideFromMake()
|
||||
|
||||
m[1].(Coverage).MarkAsCoverageVariant(true)
|
||||
m[1].(Coverage).EnableCoverageIfNeeded()
|
||||
} else if cov, ok := mctx.Module().(UseCoverage); ok && cov.IsNativeCoverageNeeded(mctx) {
|
||||
return []string{"", "cov"}
|
||||
} else if cov, ok := ctx.Module().(UseCoverage); ok && cov.IsNativeCoverageNeeded(ctx) {
|
||||
// Module itself doesn't have to have "cov" variant, but it should use "cov" variants of
|
||||
// deps.
|
||||
return []string{"cov"}
|
||||
}
|
||||
|
||||
return []string{""}
|
||||
}
|
||||
|
||||
func (c coverageTransitionMutator) OutgoingTransition(ctx android.OutgoingTransitionContext, sourceVariation string) string {
|
||||
return sourceVariation
|
||||
}
|
||||
|
||||
func (c coverageTransitionMutator) IncomingTransition(ctx android.IncomingTransitionContext, incomingVariation string) string {
|
||||
if c, ok := ctx.Module().(*Module); ok && c.coverage != nil {
|
||||
if !c.coverage.Properties.NeedCoverageVariant {
|
||||
return ""
|
||||
}
|
||||
} else if cov, ok := ctx.Module().(Coverage); ok {
|
||||
if !cov.IsNativeCoverageNeeded(ctx) {
|
||||
return ""
|
||||
}
|
||||
} else if cov, ok := ctx.Module().(UseCoverage); ok && cov.IsNativeCoverageNeeded(ctx) {
|
||||
// Module only has a "cov" variation, so all incoming variations should use "cov".
|
||||
return "cov"
|
||||
} else {
|
||||
return ""
|
||||
}
|
||||
|
||||
return incomingVariation
|
||||
}
|
||||
|
||||
func (c coverageTransitionMutator) Mutate(ctx android.BottomUpMutatorContext, variation string) {
|
||||
if c, ok := ctx.Module().(*Module); ok && c.coverage != nil {
|
||||
if variation == "" && c.coverage.Properties.NeedCoverageVariant {
|
||||
// Setup the non-coverage version and set HideFromMake and
|
||||
// PreventInstall to true.
|
||||
c.coverage.Properties.CoverageEnabled = false
|
||||
c.coverage.Properties.IsCoverageVariant = false
|
||||
c.Properties.HideFromMake = true
|
||||
c.Properties.PreventInstall = true
|
||||
} else if variation == "cov" {
|
||||
// The coverage-enabled version inherits HideFromMake,
|
||||
// PreventInstall from the original module.
|
||||
c.coverage.Properties.CoverageEnabled = c.coverage.Properties.NeedCoverageBuild
|
||||
c.coverage.Properties.IsCoverageVariant = true
|
||||
}
|
||||
} else if cov, ok := ctx.Module().(Coverage); ok && cov.IsNativeCoverageNeeded(ctx) {
|
||||
// APEX and Rust modules fall here
|
||||
|
||||
// Note: variant "" is also created because an APEX can be depended on by another
|
||||
// module which are split into "" and "cov" variants. e.g. when cc_test refers
|
||||
// to an APEX via 'data' property.
|
||||
if variation == "" {
|
||||
cov.MarkAsCoverageVariant(false)
|
||||
cov.SetPreventInstall()
|
||||
cov.HideFromMake()
|
||||
} else if variation == "cov" {
|
||||
cov.MarkAsCoverageVariant(true)
|
||||
cov.EnableCoverageIfNeeded()
|
||||
}
|
||||
} else if cov, ok := ctx.Module().(UseCoverage); ok && cov.IsNativeCoverageNeeded(ctx) {
|
||||
// Module itself doesn't have to have "cov" variant, but it should use "cov" variants of
|
||||
// deps.
|
||||
mctx.CreateVariations("cov")
|
||||
mctx.AliasVariation("cov")
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user