aboutsummaryrefslogtreecommitdiffstats
path: root/cc
diff options
context:
space:
mode:
authorPirama Arumuga Nainar <pirama@google.com>2019-03-29 09:31:40 -0700
committerandroid-build-merger <android-build-merger@google.com>2019-03-29 09:31:40 -0700
commit0727bda73d35bd571b7dc166bcb9ab9985cf04a4 (patch)
tree8202106c116ba0d4b770ea9c4a85b14f8178d17f /cc
parent5f4da30d62d8cd232ea5613f3e4afcad751753b6 (diff)
parentef7a03515297b8b048b29c0062127cc5b1039220 (diff)
downloadbuild_soong-0727bda73d35bd571b7dc166bcb9ab9985cf04a4.tar.gz
build_soong-0727bda73d35bd571b7dc166bcb9ab9985cf04a4.tar.bz2
build_soong-0727bda73d35bd571b7dc166bcb9ab9985cf04a4.zip
Include libprofile-extras to all coverage variants am: 65c95ff1fb am: 865ad54f90
am: ef7a035152 Change-Id: If8958a71e5110651c883eee91597251845a02be5
Diffstat (limited to 'cc')
-rw-r--r--cc/binary.go4
-rw-r--r--cc/cc.go11
-rw-r--r--cc/coverage.go26
-rw-r--r--cc/library.go7
-rw-r--r--cc/llndk_library.go4
-rw-r--r--cc/ndk_library.go4
-rw-r--r--cc/object.go4
-rw-r--r--cc/prebuilt.go4
-rw-r--r--cc/toolchain_library.go4
9 files changed, 64 insertions, 4 deletions
diff --git a/cc/binary.go b/cc/binary.go
index 60ef2ce4..51e68fcd 100644
--- a/cc/binary.go
+++ b/cc/binary.go
@@ -417,6 +417,10 @@ func (binary *binaryDecorator) symlinkList() []string {
return binary.symlinks
}
+func (binary *binaryDecorator) nativeCoverage() bool {
+ return true
+}
+
// /system/bin/linker -> /apex/com.android.runtime/bin/linker
func (binary *binaryDecorator) installSymlinkToRuntimeApex(ctx ModuleContext, file android.Path) {
dir := binary.baseInstaller.installDir(ctx)
diff --git a/cc/cc.go b/cc/cc.go
index a7f1417c..f5a15678 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -267,6 +267,7 @@ type ModuleContextIntf interface {
isStubs() bool
bootstrap() bool
mustUseVendorVariant() bool
+ nativeCoverage() bool
}
type ModuleContext interface {
@@ -312,6 +313,8 @@ type linker interface {
link(ctx ModuleContext, flags Flags, deps PathDeps, objs Objects) android.Path
appendLdflags([]string)
unstrippedOutputFilePath() android.Path
+
+ nativeCoverage() bool
}
type installer interface {
@@ -604,6 +607,10 @@ func (c *Module) bootstrap() bool {
return Bool(c.Properties.Bootstrap)
}
+func (c *Module) nativeCoverage() bool {
+ return c.linker != nil && c.linker.nativeCoverage()
+}
+
func isBionic(name string) bool {
switch name {
case "libc", "libm", "libdl", "linker":
@@ -794,6 +801,10 @@ func (ctx *moduleContextImpl) bootstrap() bool {
return ctx.mod.bootstrap()
}
+func (ctx *moduleContextImpl) nativeCoverage() bool {
+ return ctx.mod.nativeCoverage()
+}
+
func newBaseModule(hod android.HostOrDeviceSupported, multilib android.Multilib) *Module {
return &Module{
hod: hod,
diff --git a/cc/coverage.go b/cc/coverage.go
index fabcbf4d..9dc7f06b 100644
--- a/cc/coverage.go
+++ b/cc/coverage.go
@@ -42,6 +42,23 @@ func (cov *coverage) props() []interface{} {
}
func (cov *coverage) deps(ctx BaseModuleContext, deps Deps) Deps {
+ if cov.Properties.NeedCoverageBuild {
+ // Link libprofile-extras/libprofile-extras_ndk when coverage
+ // variant is required. This is a no-op unless coverage is
+ // actually enabled during linking, when
+ // '-uinit_profile_extras' is added (in flags()) to force the
+ // setup code in libprofile-extras be linked into the
+ // binary/library.
+ //
+ // We cannot narrow it further to only the 'cov' variant since
+ // the mutator hasn't run (and we don't have the 'cov' variant
+ // yet).
+ if !ctx.useSdk() {
+ deps.LateStaticLibs = append(deps.LateStaticLibs, "libprofile-extras")
+ } else {
+ deps.LateStaticLibs = append(deps.LateStaticLibs, "libprofile-extras_ndk")
+ }
+ }
return deps
}
@@ -96,6 +113,9 @@ func (cov *coverage) flags(ctx ModuleContext, flags Flags) Flags {
if cov.linkCoverage {
flags.LdFlags = append(flags.LdFlags, "--coverage")
+
+ // Force linking of constructor/setup code in libprofile-extras
+ flags.LdFlags = append(flags.LdFlags, "-uinit_profile_extras")
}
return flags
@@ -113,10 +133,8 @@ func (cov *coverage) begin(ctx BaseModuleContext) {
if ctx.Host() {
// TODO(dwillemsen): because of -nodefaultlibs, we must depend on libclang_rt.profile-*.a
// Just turn off for now.
- } else if ctx.isStubs() {
- // Do not enable coverage for platform stub libraries
- } else if ctx.isNDKStubLibrary() {
- // Do not enable coverage for NDK stub libraries
+ } else if !ctx.nativeCoverage() {
+ // Native coverage is not supported for this module type.
} else {
// Check if Native_coverage is set to false. This property defaults to true.
needCoverageVariant = BoolDefault(cov.Properties.Native_coverage, true)
diff --git a/cc/library.go b/cc/library.go
index bb2e1dfe..cab75acb 100644
--- a/cc/library.go
+++ b/cc/library.go
@@ -761,6 +761,13 @@ func (library *libraryDecorator) unstrippedOutputFilePath() android.Path {
return library.unstrippedOutputFile
}
+func (library *libraryDecorator) nativeCoverage() bool {
+ if library.header() || library.buildStubs() {
+ return false
+ }
+ return true
+}
+
func getRefAbiDumpFile(ctx ModuleContext, vndkVersion, fileName string) android.Path {
isLlndk := inList(ctx.baseModuleName(), llndkLibraries) || inList(ctx.baseModuleName(), ndkMigratedLibs)
diff --git a/cc/llndk_library.go b/cc/llndk_library.go
index cdd2c480..5a36b7f2 100644
--- a/cc/llndk_library.go
+++ b/cc/llndk_library.go
@@ -161,6 +161,10 @@ func (stub *llndkStubDecorator) link(ctx ModuleContext, flags Flags, deps PathDe
return stub.libraryDecorator.link(ctx, flags, deps, objs)
}
+func (stub *llndkStubDecorator) nativeCoverage() bool {
+ return false
+}
+
func NewLLndkStubLibrary() *Module {
module, library := NewLibrary(android.DeviceSupported)
library.BuildOnlyShared()
diff --git a/cc/ndk_library.go b/cc/ndk_library.go
index 3ae44525..7199467b 100644
--- a/cc/ndk_library.go
+++ b/cc/ndk_library.go
@@ -338,6 +338,10 @@ func (stub *stubDecorator) link(ctx ModuleContext, flags Flags, deps PathDeps,
return stub.libraryDecorator.link(ctx, flags, deps, objs)
}
+func (stub *stubDecorator) nativeCoverage() bool {
+ return false
+}
+
func (stub *stubDecorator) install(ctx ModuleContext, path android.Path) {
arch := ctx.Target().Arch.ArchType.Name
apiLevel := stub.properties.ApiLevel
diff --git a/cc/object.go b/cc/object.go
index c9ca07ac..50ecc38e 100644
--- a/cc/object.go
+++ b/cc/object.go
@@ -114,3 +114,7 @@ func (object *objectLinker) link(ctx ModuleContext,
func (object *objectLinker) unstrippedOutputFilePath() android.Path {
return nil
}
+
+func (object *objectLinker) nativeCoverage() bool {
+ return true
+}
diff --git a/cc/prebuilt.go b/cc/prebuilt.go
index 4c893d4f..966ec36a 100644
--- a/cc/prebuilt.go
+++ b/cc/prebuilt.go
@@ -108,6 +108,10 @@ func (p *prebuiltLibraryLinker) shared() bool {
return p.libraryDecorator.shared()
}
+func (p *prebuiltLibraryLinker) nativeCoverage() bool {
+ return false
+}
+
func prebuiltSharedLibraryFactory() android.Module {
module, _ := NewPrebuiltSharedLibrary(android.HostAndDeviceSupported)
return module.Init()
diff --git a/cc/toolchain_library.go b/cc/toolchain_library.go
index 5811b01f..ae08b1c7 100644
--- a/cc/toolchain_library.go
+++ b/cc/toolchain_library.go
@@ -77,3 +77,7 @@ func (library *toolchainLibraryDecorator) link(ctx ModuleContext,
return android.PathForSource(ctx, *library.Properties.Src)
}
+
+func (library *toolchainLibraryDecorator) nativeCoverage() bool {
+ return false
+}