diff --git a/android/config.go b/android/config.go index b90610822..16f3d7321 100644 --- a/android/config.go +++ b/android/config.go @@ -406,6 +406,14 @@ func NewConfig(srcDir, buildDir string) (Config, error) { return Config{}, err } + if Bool(config.productVariables.GcovCoverage) && Bool(config.productVariables.ClangCoverage) { + return Config{}, fmt.Errorf("GcovCoverage and ClangCoverage cannot both be set") + } + + config.productVariables.Native_coverage = proptools.BoolPtr( + Bool(config.productVariables.GcovCoverage) || + Bool(config.productVariables.ClangCoverage)) + return Config{config}, nil } @@ -1057,18 +1065,20 @@ func (c *deviceConfig) JavaCoverageEnabledForPath(path string) bool { return coverage } -func (c *config) NativeLineCoverage() bool { - return Bool(c.productVariables.NativeLineCoverage) -} - +// Returns true if gcov or clang coverage is enabled. func (c *deviceConfig) NativeCoverageEnabled() bool { - return Bool(c.config.productVariables.Native_coverage) || Bool(c.config.productVariables.NativeLineCoverage) + return Bool(c.config.productVariables.GcovCoverage) || + Bool(c.config.productVariables.ClangCoverage) } func (c *deviceConfig) ClangCoverageEnabled() bool { return Bool(c.config.productVariables.ClangCoverage) } +func (c *deviceConfig) GcovCoverageEnabled() bool { + return Bool(c.config.productVariables.GcovCoverage) +} + // NativeCoverageEnabledForPath returns whether (GCOV- or Clang-based) native // code coverage is enabled for path. By default, coverage is not enabled for a // given path unless it is part of the NativeCoveragePaths product variable (and diff --git a/android/variable.go b/android/variable.go index b2149c3ff..2c8bd0720 100644 --- a/android/variable.go +++ b/android/variable.go @@ -270,12 +270,14 @@ type productVariables struct { JavaCoveragePaths []string `json:",omitempty"` JavaCoverageExcludePaths []string `json:",omitempty"` - NativeLineCoverage *bool `json:",omitempty"` - Native_coverage *bool `json:",omitempty"` + GcovCoverage *bool `json:",omitempty"` ClangCoverage *bool `json:",omitempty"` NativeCoveragePaths []string `json:",omitempty"` NativeCoverageExcludePaths []string `json:",omitempty"` + // Set by NewConfig + Native_coverage *bool + SanitizeHost []string `json:",omitempty"` SanitizeDevice []string `json:",omitempty"` SanitizeDeviceDiag []string `json:",omitempty"` diff --git a/apex/apex.go b/apex/apex.go index a4af7aa35..840dd4983 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -1553,7 +1553,7 @@ func (a *apexBundle) AddSanitizerDependencies(ctx android.BottomUpMutatorContext var _ cc.Coverage = (*apexBundle)(nil) func (a *apexBundle) IsNativeCoverageNeeded(ctx android.BaseModuleContext) bool { - return ctx.Device() && (ctx.DeviceConfig().NativeCoverageEnabled() || ctx.DeviceConfig().ClangCoverageEnabled()) + return ctx.Device() && ctx.DeviceConfig().NativeCoverageEnabled() } func (a *apexBundle) PreventInstall() { diff --git a/apex/vndk_test.go b/apex/vndk_test.go index 05cdfcd92..60b6ed5cd 100644 --- a/apex/vndk_test.go +++ b/apex/vndk_test.go @@ -118,6 +118,7 @@ func TestVndkApexUsesVendorVariant(t *testing.T) { t.Run("VNDK APEX supports coverage variants", func(t *testing.T) { ctx, _ := testApex(t, bp, func(fs map[string][]byte, config android.Config) { + config.TestProductVariables.GcovCoverage = proptools.BoolPtr(true) config.TestProductVariables.Native_coverage = proptools.BoolPtr(true) }) diff --git a/cc/coverage.go b/cc/coverage.go index 1a559a9a5..c8233247f 100644 --- a/cc/coverage.go +++ b/cc/coverage.go @@ -74,8 +74,8 @@ func (cov *coverage) deps(ctx DepsContext, deps Deps) Deps { } func (cov *coverage) flags(ctx ModuleContext, flags Flags, deps PathDeps) (Flags, PathDeps) { - gcovCoverage := ctx.DeviceConfig().NativeCoverageEnabled() clangCoverage := ctx.DeviceConfig().ClangCoverageEnabled() + gcovCoverage := ctx.DeviceConfig().GcovCoverageEnabled() if !gcovCoverage && !clangCoverage { return flags, deps @@ -161,7 +161,7 @@ func (cov *coverage) begin(ctx BaseModuleContext) { func SetCoverageProperties(ctx android.BaseModuleContext, properties CoverageProperties, moduleTypeHasCoverage bool, useSdk bool, sdkVersion string) CoverageProperties { // Coverage is disabled globally - if !ctx.DeviceConfig().NativeCoverageEnabled() && !ctx.DeviceConfig().ClangCoverageEnabled() { + if !ctx.DeviceConfig().NativeCoverageEnabled() { return properties } diff --git a/java/app.go b/java/app.go index 4bb292ddf..1d2c58227 100755 --- a/java/app.go +++ b/java/app.go @@ -938,7 +938,7 @@ func (a *AndroidApp) Privileged() bool { } func (a *AndroidApp) IsNativeCoverageNeeded(ctx android.BaseModuleContext) bool { - return ctx.Device() && (ctx.DeviceConfig().NativeCoverageEnabled() || ctx.DeviceConfig().ClangCoverageEnabled()) + return ctx.Device() && ctx.DeviceConfig().NativeCoverageEnabled() } func (a *AndroidApp) PreventInstall() { diff --git a/rust/coverage.go b/rust/coverage.go index 9be57dccf..4e3977be3 100644 --- a/rust/coverage.go +++ b/rust/coverage.go @@ -45,7 +45,7 @@ func (cov *coverage) deps(ctx DepsContext, deps Deps) Deps { func (cov *coverage) flags(ctx ModuleContext, flags Flags, deps PathDeps) (Flags, PathDeps) { - if !ctx.DeviceConfig().NativeCoverageEnabled() && !ctx.DeviceConfig().ClangCoverageEnabled() { + if !ctx.DeviceConfig().NativeCoverageEnabled() { return flags, deps } diff --git a/rust/rust_test.go b/rust/rust_test.go index fe21e3a39..703aaed29 100644 --- a/rust/rust_test.go +++ b/rust/rust_test.go @@ -88,6 +88,7 @@ func testRustContext(t *testing.T, bp string, coverage bool) *android.TestContex config := testConfig(bp) if coverage { + config.TestProductVariables.GcovCoverage = proptools.BoolPtr(true) config.TestProductVariables.Native_coverage = proptools.BoolPtr(true) config.TestProductVariables.NativeCoveragePaths = []string{"*"} }