rust: Fix coverage in no-std crates
Coverage builds for no_std crates currently fail because profiler_builtins are part of libstd and therefore do not get included. When calculating the dependencies for coverage enabled targets, check if the stdlib is being included, and if it is not then pull the profiler_builtins sysroot. Bug: 249551848 Test: CLANG_COVERAGE=true NATIVE_COVERAGE_PATHS='*' make libtinyvec_nostd.rlib-std Change-Id: I73f89bddcb2d4d9c704cb3962ee39b73888c7f3f
This commit is contained in:
@@ -208,6 +208,10 @@ func (compiler *baseCompiler) SetDisabled() {
|
||||
panic("baseCompiler does not implement SetDisabled()")
|
||||
}
|
||||
|
||||
func (compiler *baseCompiler) noStdlibs() bool {
|
||||
return Bool(compiler.Properties.No_stdlibs)
|
||||
}
|
||||
|
||||
func (compiler *baseCompiler) coverageOutputZipPath() android.OptionalPath {
|
||||
panic("baseCompiler does not implement coverageOutputZipPath()")
|
||||
}
|
||||
|
@@ -21,6 +21,7 @@ import (
|
||||
)
|
||||
|
||||
var CovLibraryName = "libprofile-clang-extras"
|
||||
var ProfilerBuiltins = "libprofiler_builtins.rust_sysroot"
|
||||
|
||||
// Add '%c' to default specifier after we resolve http://b/210012154
|
||||
const profileInstrFlag = "-fprofile-instr-generate=/data/misc/trace/clang-%p-%m.profraw"
|
||||
@@ -41,6 +42,11 @@ func (cov *coverage) deps(ctx DepsContext, deps Deps) Deps {
|
||||
ctx.AddVariationDependencies([]blueprint.Variation{
|
||||
{Mutator: "link", Variation: "static"},
|
||||
}, cc.CoverageDepTag, CovLibraryName)
|
||||
|
||||
// no_std modules are missing libprofiler_builtins which provides coverage, so we need to add it as a dependency.
|
||||
if rustModule, ok := ctx.Module().(*Module); ok && rustModule.compiler.noStdlibs() {
|
||||
ctx.AddVariationDependencies([]blueprint.Variation{{Mutator: "rust_libraries", Variation: "rlib"}}, rlibDepTag, ProfilerBuiltins)
|
||||
}
|
||||
}
|
||||
|
||||
return deps
|
||||
@@ -60,6 +66,13 @@ func (cov *coverage) flags(ctx ModuleContext, flags Flags, deps PathDeps) (Flags
|
||||
flags.LinkFlags = append(flags.LinkFlags,
|
||||
profileInstrFlag, "-g", coverage.OutputFile().Path().String(), "-Wl,--wrap,open")
|
||||
deps.StaticLibs = append(deps.StaticLibs, coverage.OutputFile().Path())
|
||||
|
||||
// no_std modules are missing libprofiler_builtins which provides coverage, so we need to add it as a dependency.
|
||||
if rustModule, ok := ctx.Module().(*Module); ok && rustModule.compiler.noStdlibs() {
|
||||
profiler_builtins := ctx.GetDirectDepWithTag(ProfilerBuiltins, rlibDepTag).(*Module)
|
||||
deps.RLibs = append(deps.RLibs, RustLibrary{Path: profiler_builtins.OutputFile().Path(), CrateName: profiler_builtins.CrateName()})
|
||||
}
|
||||
|
||||
if cc.EnableContinuousCoverage(ctx) {
|
||||
flags.RustFlags = append(flags.RustFlags, "-C llvm-args=--runtime-counter-relocation")
|
||||
flags.LinkFlags = append(flags.LinkFlags, "-Wl,-mllvm,-runtime-counter-relocation")
|
||||
|
@@ -490,6 +490,7 @@ type compiler interface {
|
||||
SetDisabled()
|
||||
|
||||
stdLinkage(ctx *depsContext) RustLinkage
|
||||
noStdlibs() bool
|
||||
|
||||
unstrippedOutputFilePath() android.Path
|
||||
strippedOutputFilePath() android.OptionalPath
|
||||
|
Reference in New Issue
Block a user