From 16f3c7ebcbf08cfdab815c225f3858fbb7eef545 Mon Sep 17 00:00:00 2001 From: Nathan Henrie Date: Sun, 14 Jul 2024 09:14:59 -0600 Subject: [PATCH] rustPlatform.buildRustPackage: provide debug symbols on darwin Currently we cannot debug rust binaries on darwin (via lldb). The debug symbols seem to be provided by default in a number of files in `target/debug/deps/*.rcgu.o`. As far as I can tell these have hardcoded paths referring to the ephemeral build directory. However, `split-debuginfo=packed` conveniently produces a `.dSYM` file that can be copied to `$out/bin/` and immediately provide debugging information. Fixes https://github.com/NixOS/nixpkgs/issues/262131 --- pkgs/build-support/rust/build-rust-package/default.nix | 5 +++++ pkgs/build-support/rust/hooks/cargo-install-hook.sh | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/pkgs/build-support/rust/build-rust-package/default.nix b/pkgs/build-support/rust/build-rust-package/default.nix index a1727c91ba36..1698ed90eeb3 100644 --- a/pkgs/build-support/rust/build-rust-package/default.nix +++ b/pkgs/build-support/rust/build-rust-package/default.nix @@ -97,6 +97,11 @@ assert useSysroot -> !(args.doCheck or true); stdenv.mkDerivation ((removeAttrs args [ "depsExtraArgs" "cargoUpdateHook" "cargoLock" ]) // lib.optionalAttrs useSysroot { RUSTFLAGS = "--sysroot ${sysroot} " + (args.RUSTFLAGS or ""); +} // lib.optionalAttrs (stdenv.isDarwin && buildType == "debug") { + RUSTFLAGS = + "-C split-debuginfo=packed " + + lib.optionalString useSysroot "--sysroot ${sysroot} " + + (args.RUSTFLAGS or ""); } // { inherit buildAndTestSubdir cargoDeps; diff --git a/pkgs/build-support/rust/hooks/cargo-install-hook.sh b/pkgs/build-support/rust/hooks/cargo-install-hook.sh index 24a6e6fa9eb3..4cf7840220a5 100644 --- a/pkgs/build-support/rust/hooks/cargo-install-hook.sh +++ b/pkgs/build-support/rust/hooks/cargo-install-hook.sh @@ -36,6 +36,11 @@ cargoInstallHook() { -maxdepth 1 \ -regex ".*\.\(so.[0-9.]+\|so\|a\|dylib\)" \ -print0 | xargs -r -0 cp -t $out/lib + + # If present, copy any .dSYM directories for debugging on darwin + # https://github.com/NixOS/nixpkgs/issues/330036 + find "${releaseDir}" -maxdepth 1 -name '*.dSYM' -exec cp -RLt $out/bin/ {} + + rmdir --ignore-fail-on-non-empty $out/lib $out/bin runHook postInstall