diff --git a/cc/builder.go b/cc/builder.go index e571e5a0c..b4f9947d7 100644 --- a/cc/builder.go +++ b/cc/builder.go @@ -283,16 +283,19 @@ var ( "cFlags") ) +func PwdPrefix() string { + // Darwin doesn't have /proc + if runtime.GOOS != "darwin" { + return "PWD=/proc/self/cwd" + } + return "" +} + func init() { // We run gcc/clang with PWD=/proc/self/cwd to remove $TOP from the // debug output. That way two builds in two different directories will // create the same output. - if runtime.GOOS != "darwin" { - pctx.StaticVariable("relPwd", "PWD=/proc/self/cwd") - } else { - // Darwin doesn't have /proc - pctx.StaticVariable("relPwd", "") - } + pctx.StaticVariable("relPwd", PwdPrefix()) pctx.HostBinToolVariable("SoongZipCmd", "soong_zip") pctx.Import("android/soong/remoteexec") diff --git a/rust/builder.go b/rust/builder.go index fbe0e5372..5069b076a 100644 --- a/rust/builder.go +++ b/rust/builder.go @@ -21,6 +21,7 @@ import ( "github.com/google/blueprint/pathtools" "android/soong/android" + "android/soong/cc" ) var ( @@ -161,11 +162,17 @@ func transformSrctoCrate(ctx android.ModuleContext, main android.Path, deps Path if flags.Coverage { var gcnoFile android.WritablePath + // Provide consistency with cc gcda output, see cc/builder.go init() + profileEmitArg := strings.TrimPrefix("PWD=", cc.PwdPrefix()) + "/" if outputFile.Ext() != "" { gcnoFile = android.PathForModuleOut(ctx, pathtools.ReplaceExtension(outputFile.Base(), "gcno")) + rustcFlags = append(rustcFlags, "-Z profile-emit="+profileEmitArg+android.PathForModuleOut( + ctx, pathtools.ReplaceExtension(outputFile.Base(), "gcda")).String()) } else { gcnoFile = android.PathForModuleOut(ctx, outputFile.Base()+".gcno") + rustcFlags = append(rustcFlags, "-Z profile-emit="+profileEmitArg+android.PathForModuleOut( + ctx, outputFile.Base()+".gcda").String()) } implicitOutputs = append(implicitOutputs, gcnoFile)