diff options
author | Pirama Arumuga Nainar <pirama@google.com> | 2019-03-29 09:22:33 -0700 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2019-03-29 09:22:33 -0700 |
commit | ef7a03515297b8b048b29c0062127cc5b1039220 (patch) | |
tree | f4d635585ba5dfac418593a3f6cebc399886ae70 /cc | |
parent | 2bccc05cbf1a0e0d3ac3d7e06e8073f73ab960c2 (diff) | |
parent | 865ad54f90be70b446ed41a86f743de505758e49 (diff) | |
download | build_soong-ef7a03515297b8b048b29c0062127cc5b1039220.tar.gz build_soong-ef7a03515297b8b048b29c0062127cc5b1039220.tar.bz2 build_soong-ef7a03515297b8b048b29c0062127cc5b1039220.zip |
Include libprofile-extras to all coverage variants am: 65c95ff1fb
am: 865ad54f90
Change-Id: I4afb3bf93ebda7d25957b988bf627481ad7889ca
Diffstat (limited to 'cc')
-rw-r--r-- | cc/binary.go | 4 | ||||
-rw-r--r-- | cc/cc.go | 11 | ||||
-rw-r--r-- | cc/coverage.go | 26 | ||||
-rw-r--r-- | cc/library.go | 7 | ||||
-rw-r--r-- | cc/llndk_library.go | 4 | ||||
-rw-r--r-- | cc/ndk_library.go | 4 | ||||
-rw-r--r-- | cc/object.go | 4 | ||||
-rw-r--r-- | cc/prebuilt.go | 4 | ||||
-rw-r--r-- | cc/toolchain_library.go | 4 |
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) @@ -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 +} |