From 72cabc625599fafc1f1f56c74938a8b11946d7ca Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Tue, 16 Jun 2020 17:51:46 -0700 Subject: Make native_coverage clause work with ClangCoverage Make uses NATIVE_COVERAGE to enable gcov coverage and CLANG_COVERAGE to enable clang coverage. NATIVE_COVERAGE is translated to the Soong Native_coverage product variable which triggers the native_coverage clause in Android.bp files. The clause also needs to be triggered for CLANG_COVERAGE. Rename the existing Native_coverage product variable to GcovCoverage, and regenerate Native_coverage when either GcovCoverage or ClangCoverage are set. Also remove NativeLineCoverage, it wasn't doing anything differently than Native_coverage. Bug: 159059537 Test: m checkbuild Merged-In: I215124a9b35a2ad50ad562079d392e3d33da11f4 Change-Id: I215124a9b35a2ad50ad562079d392e3d33da11f4 --- android/config.go | 20 +++++++++++++++----- android/variable.go | 6 ++++-- apex/apex.go | 2 +- apex/vndk_test.go | 1 + cc/coverage.go | 4 ++-- java/app.go | 2 +- 6 files changed, 24 insertions(+), 11 deletions(-) diff --git a/android/config.go b/android/config.go index 40347e76..b6ef2684 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 } @@ -1058,18 +1066,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 fadfebcb..983c2356 100644 --- a/android/variable.go +++ b/android/variable.go @@ -256,12 +256,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 + DevicePrefer32BitApps *bool `json:",omitempty"` DevicePrefer32BitExecutables *bool `json:",omitempty"` HostPrefer32BitExecutables *bool `json:",omitempty"` diff --git a/apex/apex.go b/apex/apex.go index a63a8d60..f9c9b87f 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -1660,7 +1660,7 @@ func (a *apexBundle) IsSanitizerEnabled(ctx android.BaseModuleContext, sanitizer } 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 523ac263..8557faee 100644 --- a/apex/vndk_test.go +++ b/apex/vndk_test.go @@ -155,6 +155,7 @@ func TestVndkApexUsesVendorVariant(t *testing.T) { sdk_version: "current", } `, 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 7e1bfa41..4431757d 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 @@ -151,7 +151,7 @@ func (cov *coverage) flags(ctx ModuleContext, flags Flags, deps PathDeps) (Flags func (cov *coverage) begin(ctx BaseModuleContext) { // Coverage is disabled globally - if !ctx.DeviceConfig().NativeCoverageEnabled() && !ctx.DeviceConfig().ClangCoverageEnabled() { + if !ctx.DeviceConfig().NativeCoverageEnabled() { return } diff --git a/java/app.go b/java/app.go index e2e3a53d..eaac2091 100755 --- a/java/app.go +++ b/java/app.go @@ -947,7 +947,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() { -- cgit v1.2.3