summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ivan Lozano <ivanlozano@google.com> 2020-11-16 15:21:43 -0500
committer Ivan Lozano <ivanlozano@google.com> 2020-11-17 08:08:21 -0500
commitd7ddf051d3e2353175cbdcee3f4ed03d39bde0c6 (patch)
tree0be798e5268c1af45f70eb2ea8d5873a2bfd7f58
parentaf335a4694c7884bac3b1c90a935177211f4e2a1 (diff)
rust: Fix incorrect expected gcno file for dylibs
For Rust dylibs we generate a file suffix of .dylib.so. rustc seems to split the output filename for the gcno file at the first '.', so instead of libfoo.dylib.gcno (which our build system expects), it produces libfoo.gcno. This fixes the mismatch so the build system can find the gcno file that gets produced for Rust dylibs. Bug: 170983066 Test: CLANG_COVERAGE=true NATIVE_COVERAGE_PATHS=external/rust/crates \ m libandroid_log_sys Change-Id: Icba48bf10ab06c255bd17053d57feb889b1f9ee5
-rw-r--r--rust/builder.go4
-rw-r--r--rust/coverage_test.go2
2 files changed, 4 insertions, 2 deletions
diff --git a/rust/builder.go b/rust/builder.go
index a09b1d1ec..6079e306f 100644
--- a/rust/builder.go
+++ b/rust/builder.go
@@ -200,7 +200,9 @@ func transformSrctoCrate(ctx ModuleContext, main android.Path, deps PathDeps, fl
profileEmitArg := strings.TrimPrefix(cc.PwdPrefix(), "PWD=") + "/"
if outputFile.Ext() != "" {
- gcnoFile = android.PathForModuleOut(ctx, pathtools.ReplaceExtension(outputFile.Base(), "gcno"))
+ // rustc seems to split the output filename at the first '.' when determining the gcno filename
+ // so we need to do the same here.
+ gcnoFile = android.PathForModuleOut(ctx, strings.Split(outputFile.Base(), ".")[0]+".gcno")
rustcFlags = append(rustcFlags, "-Z profile-emit="+profileEmitArg+android.PathForModuleOut(
ctx, pathtools.ReplaceExtension(outputFile.Base(), "gcda")).String())
} else {
diff --git a/rust/coverage_test.go b/rust/coverage_test.go
index 90155ca6e..e7f873e91 100644
--- a/rust/coverage_test.go
+++ b/rust/coverage_test.go
@@ -160,7 +160,7 @@ func TestCoverageZip(t *testing.T) {
t.Fatalf("missing expected coverage files for rust 'fizz' binary: %#v", fizzZipInputs)
}
if !android.SuffixInList(libfooZipInputs, "android_arm64_armv8-a_rlib_dylib-std_cov/librlib.gcno") ||
- !android.SuffixInList(libfooZipInputs, "android_arm64_armv8-a_dylib_cov/libfoo.dylib.gcno") {
+ !android.SuffixInList(libfooZipInputs, "android_arm64_armv8-a_dylib_cov/libfoo.gcno") {
t.Fatalf("missing expected coverage files for rust 'fizz' binary: %#v", libfooZipInputs)
}
if !android.SuffixInList(buzzZipInputs, "android_arm64_armv8-a_cov/obj/foo.gcno") ||