diff --git a/pkgs/build-support/rust/build-rust-crate/build-crate.nix b/pkgs/build-support/rust/build-rust-crate/build-crate.nix index 8f1b69d5a76f..7cfd5f021e68 100644 --- a/pkgs/build-support/rust/build-rust-crate/build-crate.nix +++ b/pkgs/build-support/rust/build-rust-crate/build-crate.nix @@ -9,6 +9,7 @@ { crateName, + version, dependencies, crateFeatures, crateRenames, @@ -33,6 +34,20 @@ let (if release then "-C opt-level=3" else "-C debuginfo=2") "-C codegen-units=${toString codegenUnits}" "--remap-path-prefix=$NIX_BUILD_TOP=/" + # Map the unpacked source root to a stable, crate-identifying path. + # Sources from fetchCrate unpack to $NIX_BUILD_TOP/-, + # so the prefix above already yields /-/src/... and + # this remap is a no-op for them. Sources supplied via a custom `src` + # (lib.fileset.toSource, lib.cleanSource, a flake's `self`) all unpack to + # a fixed basename like `source`, so without this every such crate + # collapses to /source/src/... — losing crate identity in panic + # backtraces, file!() expansions, debuginfo, and coverage maps. rustc + # applies remaps last-match-wins, so this more-specific prefix wins + # for everything under the source root (including OUT_DIR, which + # configure-crate.nix places at $sourceRoot/target/build/); the + # broader $NIX_BUILD_TOP remap above remains as a fallback for any + # path that happens to fall outside $sourceRoot. + "--remap-path-prefix=$NIX_BUILD_TOP/$sourceRoot=/${crateName}-${version}" # When the rust-src component is present (common with rust-overlay # toolchains), rustc unvirtualises libstd source paths. Panic # locations from monomorphised generic std code then embed the diff --git a/pkgs/build-support/rust/build-rust-crate/default.nix b/pkgs/build-support/rust/build-rust-crate/default.nix index 1ebbf97da68e..7a5b9f8c988e 100644 --- a/pkgs/build-support/rust/build-rust-crate/default.nix +++ b/pkgs/build-support/rust/build-rust-crate/default.nix @@ -588,6 +588,7 @@ lib.makeOverridable buildPhase = buildCrate { inherit crateName + version dependencies crateFeatures crateRenames