Refactor libprofile-extras to be added as a whole static library am: 2363a2b162
Change-Id: Ic7b0c632eed10248906eb5a36a40f7afa1c659ce
This commit is contained in:
3
cc/cc.go
3
cc/cc.go
@@ -360,6 +360,7 @@ var (
|
|||||||
ndkLateStubDepTag = dependencyTag{name: "ndk late stub", library: true}
|
ndkLateStubDepTag = dependencyTag{name: "ndk late stub", library: true}
|
||||||
vndkExtDepTag = dependencyTag{name: "vndk extends", library: true}
|
vndkExtDepTag = dependencyTag{name: "vndk extends", library: true}
|
||||||
runtimeDepTag = dependencyTag{name: "runtime lib"}
|
runtimeDepTag = dependencyTag{name: "runtime lib"}
|
||||||
|
coverageDepTag = dependencyTag{name: "coverage"}
|
||||||
)
|
)
|
||||||
|
|
||||||
// Module contains the properties and members used by all C/C++ module types, and implements
|
// Module contains the properties and members used by all C/C++ module types, and implements
|
||||||
@@ -955,7 +956,7 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) {
|
|||||||
flags = c.sanitize.flags(ctx, flags)
|
flags = c.sanitize.flags(ctx, flags)
|
||||||
}
|
}
|
||||||
if c.coverage != nil {
|
if c.coverage != nil {
|
||||||
flags = c.coverage.flags(ctx, flags)
|
flags, deps = c.coverage.flags(ctx, flags, deps)
|
||||||
}
|
}
|
||||||
if c.lto != nil {
|
if c.lto != nil {
|
||||||
flags = c.lto.flags(ctx, flags)
|
flags = c.lto.flags(ctx, flags)
|
||||||
|
@@ -17,6 +17,8 @@ package cc
|
|||||||
import (
|
import (
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
|
"github.com/google/blueprint"
|
||||||
|
|
||||||
"android/soong/android"
|
"android/soong/android"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -41,30 +43,28 @@ func (cov *coverage) props() []interface{} {
|
|||||||
return []interface{}{&cov.Properties}
|
return []interface{}{&cov.Properties}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cov *coverage) deps(ctx BaseModuleContext, deps Deps) Deps {
|
func getProfileLibraryName(ctx ModuleContextIntf) string {
|
||||||
if cov.Properties.NeedCoverageBuild {
|
// This function should only ever be called for a cc.Module, so the
|
||||||
// Link libprofile-extras/libprofile-extras_ndk when coverage
|
// following statement should always succeed.
|
||||||
// variant is required. This is a no-op unless coverage is
|
if ctx.useSdk() {
|
||||||
// actually enabled during linking, when
|
return "libprofile-extras_ndk"
|
||||||
// '-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 {
|
} else {
|
||||||
deps.LateStaticLibs = append(deps.LateStaticLibs, "libprofile-extras_ndk")
|
return "libprofile-extras"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (cov *coverage) deps(ctx DepsContext, deps Deps) Deps {
|
||||||
|
if cov.Properties.NeedCoverageVariant {
|
||||||
|
ctx.AddVariationDependencies([]blueprint.Variation{
|
||||||
|
{Mutator: "link", Variation: "static"},
|
||||||
|
}, coverageDepTag, getProfileLibraryName(ctx))
|
||||||
|
}
|
||||||
return deps
|
return deps
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cov *coverage) flags(ctx ModuleContext, flags Flags) Flags {
|
func (cov *coverage) flags(ctx ModuleContext, flags Flags, deps PathDeps) (Flags, PathDeps) {
|
||||||
if !ctx.DeviceConfig().NativeCoverageEnabled() {
|
if !ctx.DeviceConfig().NativeCoverageEnabled() {
|
||||||
return flags
|
return flags, deps
|
||||||
}
|
}
|
||||||
|
|
||||||
if cov.Properties.CoverageEnabled {
|
if cov.Properties.CoverageEnabled {
|
||||||
@@ -114,11 +114,11 @@ func (cov *coverage) flags(ctx ModuleContext, flags Flags) Flags {
|
|||||||
if cov.linkCoverage {
|
if cov.linkCoverage {
|
||||||
flags.LdFlags = append(flags.LdFlags, "--coverage")
|
flags.LdFlags = append(flags.LdFlags, "--coverage")
|
||||||
|
|
||||||
// Force linking of constructor/setup code in libprofile-extras
|
coverage := ctx.GetDirectDepWithTag(getProfileLibraryName(ctx), coverageDepTag).(*Module)
|
||||||
flags.LdFlags = append(flags.LdFlags, "-uinit_profile_extras")
|
deps.WholeStaticLibs = append(deps.WholeStaticLibs, coverage.OutputFile().Path())
|
||||||
}
|
}
|
||||||
|
|
||||||
return flags
|
return flags, deps
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cov *coverage) begin(ctx BaseModuleContext) {
|
func (cov *coverage) begin(ctx BaseModuleContext) {
|
||||||
|
Reference in New Issue
Block a user