aboutsummaryrefslogtreecommitdiffstats
path: root/cc/coverage.go
diff options
context:
space:
mode:
authorJiyong Park <jiyong@google.com>2019-08-09 14:44:36 +0900
committerJiyong Park <jiyong@google.com>2019-08-16 00:01:18 +0900
commit49932f3e6975f5a39d8f9f5b064431d105740ada (patch)
treeff6e1a682bd4c163d2811660a474d3c0bf701529 /cc/coverage.go
parent1bc40c56b9f9f02191d14bf9812101e0ae55bb2f (diff)
downloadandroid_build_soong-49932f3e6975f5a39d8f9f5b064431d105740ada.tar.gz
android_build_soong-49932f3e6975f5a39d8f9f5b064431d105740ada.tar.bz2
android_build_soong-49932f3e6975f5a39d8f9f5b064431d105740ada.zip
Build native coverage variant of APEXes when needed
When the native coverage is enabled, APEXes (and files there) are built for native coverage as well. Bug: 138952487 Test: make -j NATIVE_COVERAGE=true COVERAGE_PATHS='*' com.android.resolv find out -name "*.gcno" | grep DnsResolver shows files Test: libnetd_resolv.zip is found under $(TARGET_OUT)/apex/com.android.resolv/lib directory Merged-In: I97bcee9bf8ffc0dc71453abbdb613ed56ea2cdb4 (cherry picked from commit ee9a98d88ec9a792c3d67b9aed9e4571bf2544cf) Change-Id: I97bcee9bf8ffc0dc71453abbdb613ed56ea2cdb4
Diffstat (limited to 'cc/coverage.go')
-rw-r--r--cc/coverage.go18
1 files changed, 17 insertions, 1 deletions
diff --git a/cc/coverage.go b/cc/coverage.go
index 9dc7f06b..f4f8a049 100644
--- a/cc/coverage.go
+++ b/cc/coverage.go
@@ -138,7 +138,6 @@ func (cov *coverage) begin(ctx BaseModuleContext) {
} else {
// Check if Native_coverage is set to false. This property defaults to true.
needCoverageVariant = BoolDefault(cov.Properties.Native_coverage, true)
-
if sdk_version := ctx.sdkVersion(); ctx.useSdk() && sdk_version != "current" {
// Native coverage is not supported for SDK versions < 23
if fromApi, err := strconv.Atoi(sdk_version); err == nil && fromApi < 23 {
@@ -156,6 +155,14 @@ func (cov *coverage) begin(ctx BaseModuleContext) {
cov.Properties.NeedCoverageVariant = needCoverageVariant
}
+// Coverage is an interface for non-CC modules to implement to be mutated for coverage
+type Coverage interface {
+ android.Module
+ IsNativeCoverageNeeded(ctx android.BaseModuleContext) bool
+ PreventInstall()
+ HideFromMake()
+}
+
func coverageMutator(mctx android.BottomUpMutatorContext) {
if c, ok := mctx.Module().(*Module); ok && c.coverage != nil {
needCoverageVariant := c.coverage.Properties.NeedCoverageVariant
@@ -175,5 +182,14 @@ func coverageMutator(mctx android.BottomUpMutatorContext) {
m[1].(*Module).coverage.Properties.CoverageEnabled = needCoverageBuild
m[1].(*Module).coverage.Properties.IsCoverageVariant = true
}
+ } else if cov, ok := mctx.Module().(Coverage); ok && cov.IsNativeCoverageNeeded(mctx) {
+ // APEX modules fall here
+
+ // Note: variant "" is also created because an APEX can be depended on by another
+ // module which are split into "" and "cov" variants. e.g. when cc_test refers
+ // to an APEX via 'data' property.
+ m := mctx.CreateVariations("", "cov")
+ m[0].(Coverage).PreventInstall()
+ m[0].(Coverage).HideFromMake()
}
}