Merge changes from topic "gcov-clang-migration" into rvc-dev
* changes: Make native_coverage clause work with ClangCoverage Introduce product variables to select Java code coverage paths in Soong. Rename native code coverage paths product variables in Soong.
This commit is contained in:
commit
f6cd2a0cc6
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1037,27 +1045,55 @@ func (c *deviceConfig) SamplingPGO() bool {
|
||||||
return Bool(c.config.productVariables.SamplingPGO)
|
return Bool(c.config.productVariables.SamplingPGO)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *config) NativeLineCoverage() bool {
|
// JavaCoverageEnabledForPath returns whether Java code coverage is enabled for
|
||||||
return Bool(c.productVariables.NativeLineCoverage)
|
// path. Coverage is enabled by default when the product variable
|
||||||
|
// JavaCoveragePaths is empty. If JavaCoveragePaths is not empty, coverage is
|
||||||
|
// enabled for any path which is part of this variable (and not part of the
|
||||||
|
// JavaCoverageExcludePaths product variable). Value "*" in JavaCoveragePaths
|
||||||
|
// represents any path.
|
||||||
|
func (c *deviceConfig) JavaCoverageEnabledForPath(path string) bool {
|
||||||
|
coverage := false
|
||||||
|
if c.config.productVariables.JavaCoveragePaths == nil ||
|
||||||
|
InList("*", c.config.productVariables.JavaCoveragePaths) ||
|
||||||
|
HasAnyPrefix(path, c.config.productVariables.JavaCoveragePaths) {
|
||||||
|
coverage = true
|
||||||
|
}
|
||||||
|
if coverage && c.config.productVariables.JavaCoverageExcludePaths != nil {
|
||||||
|
if HasAnyPrefix(path, c.config.productVariables.JavaCoverageExcludePaths) {
|
||||||
|
coverage = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return coverage
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns true if gcov or clang coverage is enabled.
|
||||||
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) CoverageEnabledForPath(path string) bool {
|
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
|
||||||
|
// not part of the NativeCoverageExcludePaths product variable). Value "*" in
|
||||||
|
// NativeCoveragePaths represents any path.
|
||||||
|
func (c *deviceConfig) NativeCoverageEnabledForPath(path string) bool {
|
||||||
coverage := false
|
coverage := false
|
||||||
if c.config.productVariables.CoveragePaths != nil {
|
if c.config.productVariables.NativeCoveragePaths != nil {
|
||||||
if InList("*", c.config.productVariables.CoveragePaths) || HasAnyPrefix(path, c.config.productVariables.CoveragePaths) {
|
if InList("*", c.config.productVariables.NativeCoveragePaths) || HasAnyPrefix(path, c.config.productVariables.NativeCoveragePaths) {
|
||||||
coverage = true
|
coverage = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if coverage && c.config.productVariables.CoverageExcludePaths != nil {
|
if coverage && c.config.productVariables.NativeCoverageExcludePaths != nil {
|
||||||
if HasAnyPrefix(path, c.config.productVariables.CoverageExcludePaths) {
|
if HasAnyPrefix(path, c.config.productVariables.NativeCoverageExcludePaths) {
|
||||||
coverage = false
|
coverage = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -253,11 +253,16 @@ type productVariables struct {
|
||||||
|
|
||||||
SamplingPGO *bool `json:",omitempty"`
|
SamplingPGO *bool `json:",omitempty"`
|
||||||
|
|
||||||
NativeLineCoverage *bool `json:",omitempty"`
|
JavaCoveragePaths []string `json:",omitempty"`
|
||||||
Native_coverage *bool `json:",omitempty"`
|
JavaCoverageExcludePaths []string `json:",omitempty"`
|
||||||
ClangCoverage *bool `json:",omitempty"`
|
|
||||||
CoveragePaths []string `json:",omitempty"`
|
GcovCoverage *bool `json:",omitempty"`
|
||||||
CoverageExcludePaths []string `json:",omitempty"`
|
ClangCoverage *bool `json:",omitempty"`
|
||||||
|
NativeCoveragePaths []string `json:",omitempty"`
|
||||||
|
NativeCoverageExcludePaths []string `json:",omitempty"`
|
||||||
|
|
||||||
|
// Set by NewConfig
|
||||||
|
Native_coverage *bool
|
||||||
|
|
||||||
DevicePrefer32BitApps *bool `json:",omitempty"`
|
DevicePrefer32BitApps *bool `json:",omitempty"`
|
||||||
DevicePrefer32BitExecutables *bool `json:",omitempty"`
|
DevicePrefer32BitExecutables *bool `json:",omitempty"`
|
||||||
|
|
|
@ -1660,7 +1660,7 @@ func (a *apexBundle) IsSanitizerEnabled(ctx android.BaseModuleContext, sanitizer
|
||||||
}
|
}
|
||||||
|
|
||||||
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() {
|
||||||
|
|
|
@ -155,6 +155,7 @@ func TestVndkApexUsesVendorVariant(t *testing.T) {
|
||||||
sdk_version: "current",
|
sdk_version: "current",
|
||||||
}
|
}
|
||||||
`, func(fs map[string][]byte, config android.Config) {
|
`, 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)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
@ -151,7 +151,7 @@ func (cov *coverage) flags(ctx ModuleContext, flags Flags, deps PathDeps) (Flags
|
||||||
|
|
||||||
func (cov *coverage) begin(ctx BaseModuleContext) {
|
func (cov *coverage) begin(ctx BaseModuleContext) {
|
||||||
// Coverage is disabled globally
|
// Coverage is disabled globally
|
||||||
if !ctx.DeviceConfig().NativeCoverageEnabled() && !ctx.DeviceConfig().ClangCoverageEnabled() {
|
if !ctx.DeviceConfig().NativeCoverageEnabled() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,7 +175,7 @@ func (cov *coverage) begin(ctx BaseModuleContext) {
|
||||||
|
|
||||||
if needCoverageVariant {
|
if needCoverageVariant {
|
||||||
// Coverage variant is actually built with coverage if enabled for its module path
|
// Coverage variant is actually built with coverage if enabled for its module path
|
||||||
needCoverageBuild = ctx.DeviceConfig().CoverageEnabledForPath(ctx.ModuleDir())
|
needCoverageBuild = ctx.DeviceConfig().NativeCoverageEnabledForPath(ctx.ModuleDir())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -952,7 +952,7 @@ func (a *AndroidApp) Privileged() bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *AndroidApp) IsNativeCoverageNeeded(ctx android.BaseModuleContext) 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() {
|
func (a *AndroidApp) PreventInstall() {
|
||||||
|
|
|
@ -633,7 +633,9 @@ type jniLib struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (j *Module) shouldInstrument(ctx android.BaseModuleContext) bool {
|
func (j *Module) shouldInstrument(ctx android.BaseModuleContext) bool {
|
||||||
return j.properties.Instrument && ctx.Config().IsEnvTrue("EMMA_INSTRUMENT")
|
return j.properties.Instrument &&
|
||||||
|
ctx.Config().IsEnvTrue("EMMA_INSTRUMENT") &&
|
||||||
|
ctx.DeviceConfig().JavaCoverageEnabledForPath(ctx.ModuleDir())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (j *Module) shouldInstrumentStatic(ctx android.BaseModuleContext) bool {
|
func (j *Module) shouldInstrumentStatic(ctx android.BaseModuleContext) bool {
|
||||||
|
|
Loading…
Reference in New Issue