Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1a6acd4f authored by Colin Cross's avatar Colin Cross
Browse files

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
Change-Id: I215124a9b35a2ad50ad562079d392e3d33da11f4
parent 181c2a40
Loading
Loading
Loading
Loading
+15 −5
Original line number Original line Diff line number Diff line
@@ -406,6 +406,14 @@ func NewConfig(srcDir, buildDir string) (Config, error) {
		return Config{}, err
		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
	return Config{config}, nil
}
}


@@ -1057,18 +1065,20 @@ func (c *deviceConfig) JavaCoverageEnabledForPath(path string) bool {
	return coverage
	return coverage
}
}


func (c *config) NativeLineCoverage() bool {
// Returns true if gcov or clang coverage is enabled.
	return Bool(c.productVariables.NativeLineCoverage)
}

func (c *deviceConfig) NativeCoverageEnabled() bool {
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 {
func (c *deviceConfig) ClangCoverageEnabled() bool {
	return Bool(c.config.productVariables.ClangCoverage)
	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
// NativeCoverageEnabledForPath returns whether (GCOV- or Clang-based) native
// code coverage is enabled for path. By default, coverage is not enabled for a
// 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
// given path unless it is part of the NativeCoveragePaths product variable (and
+4 −2
Original line number Original line Diff line number Diff line
@@ -270,12 +270,14 @@ type productVariables struct {
	JavaCoveragePaths        []string `json:",omitempty"`
	JavaCoveragePaths        []string `json:",omitempty"`
	JavaCoverageExcludePaths []string `json:",omitempty"`
	JavaCoverageExcludePaths []string `json:",omitempty"`


	NativeLineCoverage         *bool    `json:",omitempty"`
	GcovCoverage               *bool    `json:",omitempty"`
	Native_coverage            *bool    `json:",omitempty"`
	ClangCoverage              *bool    `json:",omitempty"`
	ClangCoverage              *bool    `json:",omitempty"`
	NativeCoveragePaths        []string `json:",omitempty"`
	NativeCoveragePaths        []string `json:",omitempty"`
	NativeCoverageExcludePaths []string `json:",omitempty"`
	NativeCoverageExcludePaths []string `json:",omitempty"`


	// Set by NewConfig
	Native_coverage *bool

	SanitizeHost       []string `json:",omitempty"`
	SanitizeHost       []string `json:",omitempty"`
	SanitizeDevice     []string `json:",omitempty"`
	SanitizeDevice     []string `json:",omitempty"`
	SanitizeDeviceDiag []string `json:",omitempty"`
	SanitizeDeviceDiag []string `json:",omitempty"`
+1 −1
Original line number Original line Diff line number Diff line
@@ -1553,7 +1553,7 @@ func (a *apexBundle) AddSanitizerDependencies(ctx android.BottomUpMutatorContext
var _ cc.Coverage = (*apexBundle)(nil)
var _ cc.Coverage = (*apexBundle)(nil)


func (a *apexBundle) IsNativeCoverageNeeded(ctx android.BaseModuleContext) bool {
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() {
func (a *apexBundle) PreventInstall() {
+1 −0
Original line number Original line Diff line number Diff line
@@ -118,6 +118,7 @@ func TestVndkApexUsesVendorVariant(t *testing.T) {


	t.Run("VNDK APEX supports coverage variants", func(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) {
		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)
			config.TestProductVariables.Native_coverage = proptools.BoolPtr(true)
		})
		})


+2 −2
Original line number Original line Diff line number Diff line
@@ -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) {
func (cov *coverage) flags(ctx ModuleContext, flags Flags, deps PathDeps) (Flags, PathDeps) {
	gcovCoverage := ctx.DeviceConfig().NativeCoverageEnabled()
	clangCoverage := ctx.DeviceConfig().ClangCoverageEnabled()
	clangCoverage := ctx.DeviceConfig().ClangCoverageEnabled()
	gcovCoverage := ctx.DeviceConfig().GcovCoverageEnabled()


	if !gcovCoverage && !clangCoverage {
	if !gcovCoverage && !clangCoverage {
		return flags, deps
		return flags, deps
@@ -161,7 +161,7 @@ func (cov *coverage) begin(ctx BaseModuleContext) {
func SetCoverageProperties(ctx android.BaseModuleContext, properties CoverageProperties, moduleTypeHasCoverage bool,
func SetCoverageProperties(ctx android.BaseModuleContext, properties CoverageProperties, moduleTypeHasCoverage bool,
	useSdk bool, sdkVersion string) CoverageProperties {
	useSdk bool, sdkVersion string) CoverageProperties {
	// Coverage is disabled globally
	// Coverage is disabled globally
	if !ctx.DeviceConfig().NativeCoverageEnabled() && !ctx.DeviceConfig().ClangCoverageEnabled() {
	if !ctx.DeviceConfig().NativeCoverageEnabled() {
		return properties
		return properties
	}
	}


Loading