mirror of https://github.com/pwndbg/pwndbg.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
223 lines
6.7 KiB
Nix
223 lines
6.7 KiB
Nix
{
|
|
description = "pwndbg";
|
|
|
|
nixConfig = {
|
|
extra-substituters = [
|
|
"https://pwndbg.cachix.org"
|
|
];
|
|
extra-trusted-public-keys = [
|
|
"pwndbg.cachix.org-1:HhtIpP7j73SnuzLgobqqa8LVTng5Qi36sQtNt79cD3k="
|
|
];
|
|
};
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
|
|
|
pyproject-nix = {
|
|
url = "github:pyproject-nix/pyproject.nix";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
uv2nix = {
|
|
url = "github:pyproject-nix/uv2nix";
|
|
inputs.pyproject-nix.follows = "pyproject-nix";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
pyproject-build-systems = {
|
|
url = "github:pyproject-nix/build-system-pkgs";
|
|
inputs.pyproject-nix.follows = "pyproject-nix";
|
|
inputs.uv2nix.follows = "uv2nix";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
};
|
|
|
|
outputs =
|
|
inputs@{
|
|
self,
|
|
nixpkgs,
|
|
...
|
|
}:
|
|
let
|
|
# Self contained packages for: Debian, RHEL-like (yum, rpm), Alpine, Arch packages
|
|
forAllSystems = nixpkgs.lib.genAttrs nixpkgs.lib.systems.flakeExposed;
|
|
forPortables = nixpkgs.lib.genAttrs [
|
|
"deb"
|
|
"rpm"
|
|
"apk"
|
|
"archlinux"
|
|
];
|
|
crossNames = {
|
|
"x86_32" = "gnu32";
|
|
"x86_64" = "gnu64";
|
|
"arm32" = "armv7l-hf-multiplatform";
|
|
"arm64" = "aarch64-multiplatform";
|
|
"riscv64" = "riscv64";
|
|
"s390x" = "s390x";
|
|
"ppc64le" = "powernv";
|
|
"loong64" = "loongarch64-linux";
|
|
};
|
|
mapKeysWithName =
|
|
formatfunc: values:
|
|
(nixpkgs.lib.attrsets.mapAttrs' (
|
|
name: value: {
|
|
name = (formatfunc name);
|
|
value = value;
|
|
}
|
|
))
|
|
values;
|
|
|
|
overlayDarwin =
|
|
final: prev:
|
|
nixpkgs.lib.optionalAttrs prev.stdenv.isDarwin {
|
|
# Internally, apple-libffi uses dlopen() to load "/nix/store/<libffi-name>/lib/libffi-trampoline.dylib".
|
|
# However, to ensure a "portable" build, we want to avoid hardcoded /nix/store paths in binaries.
|
|
#
|
|
# This override will use the system-provided "/usr/lib/libffi-trampoline.dylib" instead of nix compiled version.
|
|
libffi_portable = prev.libffi.overrideAttrs (old: {
|
|
# https://github.com/NixOS/nixpkgs/blob/05248e665c4ce63c65bc729ef5580e02fd29675b/pkgs/os-specific/darwin/apple-source-releases/libffi/package.nix#L32
|
|
# Disable patching trampoline
|
|
postPatch = "";
|
|
});
|
|
};
|
|
pkgsBySystem = forAllSystems (
|
|
system:
|
|
import nixpkgs {
|
|
inherit system;
|
|
overlays = [
|
|
(final: prev: {
|
|
libffi_portable = null;
|
|
})
|
|
overlayDarwin
|
|
];
|
|
}
|
|
);
|
|
pkgUtil = forAllSystems (system: import ./nix/bundle/pkg.nix { pkgs = pkgsBySystem.${system}; });
|
|
|
|
portableDrvLldb =
|
|
system:
|
|
import ./nix/portable.nix {
|
|
pkgs = pkgsBySystem.${system};
|
|
pwndbg = self.packages.${system}.pwndbg-lldb;
|
|
};
|
|
portableDrv =
|
|
system:
|
|
import ./nix/portable.nix {
|
|
pkgs = pkgsBySystem.${system};
|
|
pwndbg = self.packages.${system}.pwndbg;
|
|
};
|
|
portableDrvs =
|
|
system:
|
|
nixpkgs.lib.optionalAttrs pkgsBySystem.${system}.stdenv.isLinux (
|
|
mapKeysWithName (name: "pwndbg-gdb-portable-${name}") (
|
|
forPortables (
|
|
packager:
|
|
pkgUtil.${system}.buildPackagePFPM {
|
|
inherit packager;
|
|
drv = portableDrv system;
|
|
config = ./nix/bundle/nfpm.yaml;
|
|
}
|
|
)
|
|
)
|
|
// mapKeysWithName (name: "pwndbg-lldb-portable-${name}") (
|
|
forPortables (
|
|
packager:
|
|
pkgUtil.${system}.buildPackagePFPM {
|
|
inherit packager;
|
|
drv = portableDrvLldb system;
|
|
config = ./nix/bundle/nfpm-lldb.yaml;
|
|
}
|
|
)
|
|
)
|
|
);
|
|
tarballDrv = system: {
|
|
"pwndbg-gdb-portable-tarball" = pkgUtil.${system}.buildPackageTarball { drv = portableDrv system; };
|
|
"pwndbg-lldb-portable-tarball" = pkgUtil.${system}.buildPackageTarball {
|
|
drv = portableDrvLldb system;
|
|
};
|
|
};
|
|
pwndbg_gdb_drvs = (
|
|
system: {
|
|
pwndbg = import ./nix/pwndbg.nix {
|
|
pkgs = pkgsBySystem.${system};
|
|
inputs = inputs;
|
|
groups = [ "gdb" ];
|
|
};
|
|
pwndbg-dev = import ./nix/pwndbg.nix {
|
|
pkgs = pkgsBySystem.${system};
|
|
inputs = inputs;
|
|
groups = [ "gdb" ];
|
|
isDev = true;
|
|
};
|
|
}
|
|
);
|
|
pwndbg_lldb_drvs = (
|
|
system: {
|
|
pwndbg-lldb = import ./nix/pwndbg.nix {
|
|
pkgs = pkgsBySystem.${system};
|
|
inputs = inputs;
|
|
groups = [ "lldb" ];
|
|
};
|
|
pwndbg-lldb-dev = import ./nix/pwndbg.nix {
|
|
pkgs = pkgsBySystem.${system};
|
|
inputs = inputs;
|
|
groups = [ "lldb" ];
|
|
isDev = true;
|
|
};
|
|
}
|
|
);
|
|
tarballCrossDrv =
|
|
system: cross: attrs:
|
|
(pkgUtil.${system}.buildPackageTarball {
|
|
drv = (
|
|
(import ./nix/portable.nix {
|
|
pkgs = pkgsBySystem.${system}.pkgsCross.${crossNames.${cross}};
|
|
pwndbg = (
|
|
import ./nix/pwndbg.nix (
|
|
{
|
|
pkgs = pkgsBySystem.${system}.pkgsCross.${crossNames.${cross}};
|
|
inputs = inputs;
|
|
}
|
|
// attrs
|
|
)
|
|
);
|
|
})
|
|
);
|
|
});
|
|
crossDrvs =
|
|
system:
|
|
nixpkgs.lib.optionalAttrs pkgsBySystem.${system}.stdenv.isLinux (
|
|
(nixpkgs.lib.attrsets.mapAttrs' (cross: value: {
|
|
name = "pwndbg-gdb-cross-${cross}-tarball";
|
|
value = tarballCrossDrv system cross { groups = [ "gdb" ]; };
|
|
}) crossNames)
|
|
// (nixpkgs.lib.attrsets.mapAttrs' (cross: value: {
|
|
name = "pwndbg-lldb-cross-${cross}-tarball";
|
|
value = tarballCrossDrv system cross { groups = [ "lldb" ]; };
|
|
}) crossNames)
|
|
);
|
|
in
|
|
{
|
|
packages = forAllSystems (
|
|
system:
|
|
{
|
|
default = self.packages.${system}.pwndbg;
|
|
}
|
|
// (crossDrvs system)
|
|
// (portableDrvs system)
|
|
// (tarballDrv system)
|
|
// (pwndbg_gdb_drvs system)
|
|
// (pwndbg_lldb_drvs system)
|
|
);
|
|
|
|
devShells = forAllSystems (
|
|
system:
|
|
import ./nix/devshell.nix {
|
|
pkgs = pkgsBySystem.${system};
|
|
inputs = inputs;
|
|
}
|
|
);
|
|
formatter = forAllSystems (system: pkgsBySystem.${system}.nixfmt-tree);
|
|
};
|
|
}
|