From d7ddf051d3e2353175cbdcee3f4ed03d39bde0c6 Mon Sep 17 00:00:00 2001 From: Ivan Lozano Date: Mon, 16 Nov 2020 15:21:43 -0500 Subject: [PATCH] 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 --- rust/builder.go | 4 +++- rust/coverage_test.go | 2 +- 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") ||