From e5210aea7b4dd88d5edc598783d2f05d8a73ce24 Mon Sep 17 00:00:00 2001 From: Yuxuan Shui Date: Mon, 8 Apr 2024 09:40:33 +0100 Subject: [PATCH] flake: add a dev shell that has frame pointers Helps tremendously with getting stack trace from ASan, etc. Signed-off-by: Yuxuan Shui --- flake.lock | 18 +++++++++--------- flake.nix | 28 +++++++++++++++++++++------- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/flake.lock b/flake.lock index 4e570b88..a6a77dc6 100644 --- a/flake.lock +++ b/flake.lock @@ -5,11 +5,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1705309234, - "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", "owner": "numtide", "repo": "flake-utils", - "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", "type": "github" }, "original": { @@ -25,11 +25,11 @@ ] }, "locked": { - "lastModified": 1703887061, - "narHash": "sha256-gGPa9qWNc6eCXT/+Z5/zMkyYOuRZqeFZBDbopNZQkuY=", + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", "owner": "hercules-ci", "repo": "gitignore.nix", - "rev": "43e1aa1308018f37118e34d3a9cb4f5e75dc11d5", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", "type": "github" }, "original": { @@ -41,11 +41,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1705856552, - "narHash": "sha256-JXfnuEf5Yd6bhMs/uvM67/joxYKoysyE3M2k6T3eWbg=", + "lastModified": 1712517181, + "narHash": "sha256-NfHaSxL89kX39s1V1/EnnIqBX8LXcc/7ow5fzfCwPrM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "612f97239e2cc474c13c9dafa0df378058c5ad8d", + "rev": "6507feebbd146188300681ca26bac5da3c12b9f1", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 10244ef8..221a1a91 100644 --- a/flake.nix +++ b/flake.nix @@ -38,15 +38,17 @@ inherit system overlays; config.allowBroken = true; }; + profilePkgs = import nixpkgs { + inherit system; + overlays = overlays ++ [ + (final: prev: { + stdenv = prev.withCFlags "-fno-omit-frame-pointer" prev.stdenv; + }) + ]; + }; overlays = [overlay]; - in rec { - inherit - overlay - overlays - ; - defaultPackage = pkgs.picom; - devShells.default = defaultPackage.overrideAttrs (o: { + mkDevShell = p: p.overrideAttrs (o: { nativeBuildInputs = o.nativeBuildInputs ++ (with pkgs; [ clang-tools_17 llvmPackages_17.clang-unwrapped.python @@ -59,8 +61,20 @@ export LD_LIBRARY_PATH+=":/run/opengl-driver/lib" ''; }); + in rec { + inherit + overlay + overlays + ; + defaultPackage = pkgs.picom; + devShells.default = mkDevShell defaultPackage; devShells.useClang = devShells.default.override { inherit (pkgs.llvmPackages_17) stdenv; }; + # build picom and all dependencies with frame pointer, making profiling/debugging easier. + # WARNING! many many rebuilds + devShells.useClangProfile = (mkDevShell profilePkgs.picom).override { + stdenv = profilePkgs.withCFlags "-fno-omit-frame-pointer" profilePkgs.llvmPackages_17.stdenv; + }; }); }