Add editable pwndbg into the nix devshell (#2925)

* add editable pwndbg into the nix devshell

* remove repl-flakes, it is deprecated, see https://github.com/NixOS/nix/issues/10103

* formatting

* mipsel -> mips in devshell
pull/2928/head
William Tan 8 months ago committed by GitHub
parent 47107b0aad
commit deb8c43fa3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -25,6 +25,7 @@ let
isLLDB isLLDB
; ;
isDev = true; isDev = true;
isEditable = true;
}; };
jemalloc-static = pkgs.jemalloc.overrideAttrs ( jemalloc-static = pkgs.jemalloc.overrideAttrs (
finalAttrs: previousAttrs: { finalAttrs: previousAttrs: {
@ -51,7 +52,7 @@ let
in in
{ {
default = pkgs.mkShell { default = pkgs.mkShell {
NIX_CONFIG = "extra-experimental-features = nix-command flakes repl-flake"; NIX_CONFIG = "extra-experimental-features = nix-command flakes";
# Anything not handled by the poetry env # Anything not handled by the poetry env
nativeBuildInputs = nativeBuildInputs =
builtins.attrValues { builtins.attrValues {
@ -82,22 +83,34 @@ in
'') '')
pkgs.pkgsCross.aarch64-multiplatform.buildPackages.binutils pkgs.pkgsCross.aarch64-multiplatform.buildPackages.binutils
pkgs.pkgsCross.riscv64.buildPackages.binutils pkgs.pkgsCross.riscv64.buildPackages.binutils
pkgs.pkgsCross.mipsel-linux-gnu.buildPackages.binutils pkgs.pkgsCross.mips-linux-gnu.buildPackages.binutils
(pkgs.writeShellScriptBin "aarch64-linux-gnu-gcc" '' (pkgs.writeShellScriptBin "aarch64-linux-gnu-gcc" ''
exec ${lib.getBin pkgs.pkgsCross.aarch64-multiplatform.buildPackages.gcc}/bin/aarch64-unknown-linux-gnu-gcc "$@" exec ${lib.getBin pkgs.pkgsCross.aarch64-multiplatform.buildPackages.gcc}/bin/aarch64-unknown-linux-gnu-gcc "$@"
'') '')
(pkgs.writeShellScriptBin "riscv64-linux-gnu-gcc" '' (pkgs.writeShellScriptBin "riscv64-linux-gnu-gcc" ''
exec ${lib.getBin pkgs.pkgsCross.riscv64.buildPackages.gcc}/bin/riscv64-unknown-linux-gnu-gcc "$@" exec ${lib.getBin pkgs.pkgsCross.riscv64.buildPackages.gcc}/bin/riscv64-unknown-linux-gnu-gcc "$@"
'') '')
pyEnv pyEnv
(pkgs.writeShellScriptBin "pwndbg" ''
exec ${lib.getBin pkgs.gdb}/bin/gdb --quiet --command="$REPO_ROOT/gdbinit.py" $@
'')
] ]
++ pkgs.lib.optionals isLLDB [ ++ pkgs.lib.optionals isLLDB [
pkgs.lldb_19 pkgs.lldb_20
(pkgs.writeShellScriptBin "pwndbg-lldb" (
(lib.optionalString (!pkgs.stdenv.isDarwin) ''
export LLDB_DEBUGSERVER_PATH=${lib.makeBinPath [ pkgs.lldb_20 ]}/lldb-server
'')
+ ''
exec ${lib.getBin pyEnv}/bin/python3 $REPO_ROOT/pwndbg-lldb.py $@
''
))
]; ];
shellHook = '' shellHook = ''
export PWNDBG_VENV_PATH="PWNDBG_PLEASE_SKIP_VENV" export PWNDBG_NO_AUTOUPDATE=1
export PWNDBG_VENV_PATH="${pyEnv}"
export ZIGPATH="${pkgs.lib.getBin pkgs.zig_0_13}/bin/" export ZIGPATH="${pkgs.lib.getBin pkgs.zig_0_13}/bin/"
export REPO_ROOT=$(git rev-parse --show-toplevel)
''; '';
}; };
} }

@ -4,6 +4,7 @@
python3 ? pkgs.python3, python3 ? pkgs.python3,
isDev ? false, isDev ? false,
isLLDB ? false, isLLDB ? false,
isEditable ? false,
... ...
}: }:
let let
@ -15,6 +16,10 @@ let
sourcePreference = "sdist"; sourcePreference = "sdist";
}; };
editableOverlay = workspace.mkEditablePyprojectOverlay {
root = "$REPO_ROOT";
};
pkgsNeedSetuptools = [ pkgsNeedSetuptools = [
"capstone" "capstone"
"unicorn" "unicorn"
@ -284,6 +289,30 @@ let
python = python3; python = python3;
}; };
pythonSet = baseSet.overrideScope overlays; pythonSet = baseSet.overrideScope overlays;
editablePythonSet = pythonSet.overrideScope (
lib.composeManyExtensions [
inputs.pyproject-build-systems.overlays.default
editableOverlay
pyprojectOverrides1
pyprojectOverrides2
(final: prev: {
pythonPkgsBuildHost = prev.pythonPkgsBuildHost.overrideScope (
lib.composeManyExtensions [
inputs.pyproject-build-systems.overlays.default
]
);
})
(final: prev: {
pwndbg = prev.pwndbg.overrideAttrs (old: {
nativeBuildInputs =
old.nativeBuildInputs
++ final.resolveBuildSystem {
editables = [ ];
};
});
})
]
);
pyenv = pythonSet.mkVirtualEnv "pwndbg-env" { pyenv = pythonSet.mkVirtualEnv "pwndbg-env" {
pwndbg = pwndbg =
@ -298,5 +327,17 @@ let
# "lint" # "lint"
]; ];
}; };
pyenvEditable = editablePythonSet.mkVirtualEnv "pwndbg-editable-env" {
pwndbg =
[ ]
++ lib.optionals isLLDB [
"lldb"
]
++ lib.optionals isDev [
"dev"
"tests"
];
};
in in
pyenv if isEditable then pyenvEditable else pyenv

Loading…
Cancel
Save