Merge "Make filesystem aware of coverage"

This commit is contained in:
Jooyung Han
2023-03-21 01:36:01 +00:00
committed by Gerrit Code Review
3 changed files with 77 additions and 2 deletions

View File

@@ -219,10 +219,14 @@ func SetCoverageProperties(ctx android.BaseModuleContext, properties CoveragePro
return properties return properties
} }
// Coverage is an interface for non-CC modules to implement to be mutated for coverage type UseCoverage interface {
type Coverage interface {
android.Module android.Module
IsNativeCoverageNeeded(ctx android.BaseModuleContext) bool IsNativeCoverageNeeded(ctx android.BaseModuleContext) bool
}
// Coverage is an interface for non-CC modules to implement to be mutated for coverage
type Coverage interface {
UseCoverage
SetPreventInstall() SetPreventInstall()
HideFromMake() HideFromMake()
MarkAsCoverageVariant(bool) MarkAsCoverageVariant(bool)
@@ -261,6 +265,11 @@ func coverageMutator(mctx android.BottomUpMutatorContext) {
m[1].(Coverage).MarkAsCoverageVariant(true) m[1].(Coverage).MarkAsCoverageVariant(true)
m[1].(Coverage).EnableCoverageIfNeeded() m[1].(Coverage).EnableCoverageIfNeeded()
} else if cov, ok := mctx.Module().(UseCoverage); ok && cov.IsNativeCoverageNeeded(mctx) {
// Module itself doesn't have to have "cov" variant, but it should use "cov" variants of
// deps.
mctx.CreateVariations("cov")
mctx.AliasVariation("cov")
} }
} }

View File

@@ -22,6 +22,7 @@ import (
"strings" "strings"
"android/soong/android" "android/soong/android"
"android/soong/cc"
"github.com/google/blueprint" "github.com/google/blueprint"
"github.com/google/blueprint/proptools" "github.com/google/blueprint/proptools"
@@ -498,3 +499,11 @@ func sha1sum(values []string) string {
} }
return fmt.Sprintf("%x", h.Sum(nil)) return fmt.Sprintf("%x", h.Sum(nil))
} }
// Base cc.UseCoverage
var _ cc.UseCoverage = (*filesystem)(nil)
func (*filesystem) IsNativeCoverageNeeded(ctx android.BaseModuleContext) bool {
return ctx.Device() && ctx.DeviceConfig().NativeCoverageEnabled()
}

View File

@@ -20,6 +20,9 @@ import (
"android/soong/android" "android/soong/android"
"android/soong/cc" "android/soong/cc"
"android/soong/etc"
"github.com/google/blueprint/proptools"
) )
func TestMain(m *testing.M) { func TestMain(m *testing.M) {
@@ -28,6 +31,7 @@ func TestMain(m *testing.M) {
var fixture = android.GroupFixturePreparers( var fixture = android.GroupFixturePreparers(
android.PrepareForIntegrationTestWithAndroid, android.PrepareForIntegrationTestWithAndroid,
etc.PrepareForTestWithPrebuiltEtc,
cc.PrepareForIntegrationTestWithCc, cc.PrepareForIntegrationTestWithCc,
PrepareForTestWithFilesystemBuildComponents, PrepareForTestWithFilesystemBuildComponents,
) )
@@ -225,3 +229,56 @@ func TestFileSystemShouldInstallCoreVariantIfTargetBuildAppsIsSet(t *testing.T)
inputs.Strings(), inputs.Strings(),
"out/soong/.intermediates/libbar/android_arm64_armv8-a_shared/libbar.so") "out/soong/.intermediates/libbar/android_arm64_armv8-a_shared/libbar.so")
} }
func TestFileSystemWithCoverageVariants(t *testing.T) {
context := android.GroupFixturePreparers(
fixture,
android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
variables.GcovCoverage = proptools.BoolPtr(true)
variables.Native_coverage = proptools.BoolPtr(true)
}),
)
result := context.RunTestWithBp(t, `
prebuilt_etc {
name: "prebuilt",
src: ":myfilesystem",
}
android_system_image {
name: "myfilesystem",
deps: [
"libfoo",
],
linker_config_src: "linker.config.json",
}
cc_library {
name: "libfoo",
shared_libs: [
"libbar",
],
stl: "none",
}
cc_library {
name: "libbar",
stl: "none",
}
`)
filesystem := result.ModuleForTests("myfilesystem", "android_common_cov")
inputs := filesystem.Output("deps.zip").Implicits
android.AssertStringListContains(t, "filesystem should have libfoo(cov)",
inputs.Strings(),
"out/soong/.intermediates/libfoo/android_arm64_armv8-a_shared_cov/libfoo.so")
android.AssertStringListContains(t, "filesystem should have libbar(cov)",
inputs.Strings(),
"out/soong/.intermediates/libbar/android_arm64_armv8-a_shared_cov/libbar.so")
filesystemOutput := filesystem.Output("myfilesystem.img").Output
prebuiltInput := result.ModuleForTests("prebuilt", "android_arm64_armv8-a").Rule("Cp").Input
if filesystemOutput != prebuiltInput {
t.Error("prebuilt should use cov variant of filesystem")
}
}