diff options
author | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-02-03 19:13:58 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-02-03 19:13:58 +0000 |
commit | 1cb0535e41cff3cfdb9549804380c3cf9fffc0a7 (patch) | |
tree | 47b0c43124304a32d7bc4e78359cd4e94012666b | |
parent | 3756ab846048d0cc0e581ae51706936afd1b6c78 (diff) | |
parent | 2363a2b162cac1946ae4a8677a473890da98dc10 (diff) | |
download | android_build_soong-1cb0535e41cff3cfdb9549804380c3cf9fffc0a7.tar.gz android_build_soong-1cb0535e41cff3cfdb9549804380c3cf9fffc0a7.tar.bz2 android_build_soong-1cb0535e41cff3cfdb9549804380c3cf9fffc0a7.zip |
Refactor libprofile-extras to be added as a whole static library am: 2363a2b162
Change-Id: Ic7b0c632eed10248906eb5a36a40f7afa1c659ce
-rw-r--r-- | cc/cc.go | 3 | ||||
-rw-r--r-- | cc/coverage.go | 44 |
2 files changed, 24 insertions, 23 deletions
@@ -360,6 +360,7 @@ var ( ndkLateStubDepTag = dependencyTag{name: "ndk late stub", library: true} vndkExtDepTag = dependencyTag{name: "vndk extends", library: true} runtimeDepTag = dependencyTag{name: "runtime lib"} + coverageDepTag = dependencyTag{name: "coverage"} ) // 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) } if c.coverage != nil { - flags = c.coverage.flags(ctx, flags) + flags, deps = c.coverage.flags(ctx, flags, deps) } if c.lto != nil { flags = c.lto.flags(ctx, flags) diff --git a/cc/coverage.go b/cc/coverage.go index 9dc7f06b..c189398a 100644 --- a/cc/coverage.go +++ b/cc/coverage.go @@ -17,6 +17,8 @@ package cc import ( "strconv" + "github.com/google/blueprint" + "android/soong/android" ) @@ -41,30 +43,28 @@ func (cov *coverage) props() []interface{} { return []interface{}{&cov.Properties} } -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") - } +func getProfileLibraryName(ctx ModuleContextIntf) string { + // This function should only ever be called for a cc.Module, so the + // following statement should always succeed. + if ctx.useSdk() { + return "libprofile-extras_ndk" + } else { + 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 } -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() { - return flags + return flags, deps } if cov.Properties.CoverageEnabled { @@ -114,11 +114,11 @@ 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") + coverage := ctx.GetDirectDepWithTag(getProfileLibraryName(ctx), coverageDepTag).(*Module) + deps.WholeStaticLibs = append(deps.WholeStaticLibs, coverage.OutputFile().Path()) } - return flags + return flags, deps } func (cov *coverage) begin(ctx BaseModuleContext) { |