Make filesystem aware of coverage
filesystem should have coverage variants with coverage-enabled build. Otherwise, it would fail to collect dependencies. Bug: 273238141 Test: m nothing (soong tests) Test: compare the artifacts $ SKIP_ABI_CHECKS=true SOONG_COLLECT_JAVA_DEPS=true EMMA_INSTRUMENT=true\ EMMA_INSTRUMENT_FRAMEWORK=true CLANG_COVERAGE=true\ NATIVE_COVERAGE_PATHS='*' m microdroid $ m microdroid Change-Id: I792458ace00a63b4b5213898fd3209351a6e00be
This commit is contained in:
parent
58fa5a3f36
commit
e606759ddf
3 changed files with 77 additions and 2 deletions
|
@ -219,10 +219,14 @@ func SetCoverageProperties(ctx android.BaseModuleContext, properties CoveragePro
|
|||
return properties
|
||||
}
|
||||
|
||||
// Coverage is an interface for non-CC modules to implement to be mutated for coverage
|
||||
type Coverage interface {
|
||||
type UseCoverage interface {
|
||||
android.Module
|
||||
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()
|
||||
HideFromMake()
|
||||
MarkAsCoverageVariant(bool)
|
||||
|
@ -261,6 +265,11 @@ func coverageMutator(mctx android.BottomUpMutatorContext) {
|
|||
|
||||
m[1].(Coverage).MarkAsCoverageVariant(true)
|
||||
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")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@ import (
|
|||
"strings"
|
||||
|
||||
"android/soong/android"
|
||||
"android/soong/cc"
|
||||
|
||||
"github.com/google/blueprint"
|
||||
"github.com/google/blueprint/proptools"
|
||||
|
@ -498,3 +499,11 @@ func sha1sum(values []string) string {
|
|||
}
|
||||
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()
|
||||
}
|
||||
|
|
|
@ -20,6 +20,9 @@ import (
|
|||
|
||||
"android/soong/android"
|
||||
"android/soong/cc"
|
||||
"android/soong/etc"
|
||||
|
||||
"github.com/google/blueprint/proptools"
|
||||
)
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
|
@ -28,6 +31,7 @@ func TestMain(m *testing.M) {
|
|||
|
||||
var fixture = android.GroupFixturePreparers(
|
||||
android.PrepareForIntegrationTestWithAndroid,
|
||||
etc.PrepareForTestWithPrebuiltEtc,
|
||||
cc.PrepareForIntegrationTestWithCc,
|
||||
PrepareForTestWithFilesystemBuildComponents,
|
||||
)
|
||||
|
@ -225,3 +229,56 @@ func TestFileSystemShouldInstallCoreVariantIfTargetBuildAppsIsSet(t *testing.T)
|
|||
inputs.Strings(),
|
||||
"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")
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue