This commit is contained in:
Audrey 2025-07-14 15:02:15 -07:00
parent e78e4f2344
commit 6a07d90f6f
2 changed files with 56 additions and 88 deletions

123
flake.nix
View File

@ -3,71 +3,71 @@
nixpkgs.url = "github:nixos/nixpkgs/release-25.05";
};
outputs = {nixpkgs, self}: {
packages.x86_64-linux = let
pkgs = nixpkgs.legacyPackages.x86_64-linux;
pkgset-raw = {
inherit (pkgs)
lib.mkPkgProcessor = {
cflags ? "",
hardeningDisable ? [],
hardeningEnable ? [],
attrs ? {},
}: pkg: let
inherit (nixpkgs) lib;
overridesFlags = {
env = (pkg.env or {}) // { NIX_CFLAGS_COMPILE = "${(pkg.NIX_CFLAGS_COMPILE or "")} ${cflags}"; };
};
overridesHardening = {
hardeningDisable = (pkg.hardeningDisable or []) ++ hardeningDisable;
hardeningEnable = (pkg.hardeningEnable or []) ++ hardeningEnable;
};
overrides = overridesFlags // overridesHardening // attrs;
overridden = pkg.overrideAttrs overrides;
in lib.warnIf (!(builtins.elem "fortify" hardeningDisable) && (lib.strings.hasInfix "-O0" cflags)) "fortify requires at least -O1" overridden;
packages = nixpkgs.lib.genAttrs nixpkgs.lib.systems.flakeExposed (platform: let pkgs = nixpkgs.legacyPackages.${platform}; in rec {
mkDataset = pkgs.callPackage ./package.nix {};
sampleDataset = mkDataset {
name = "sample";
pkgProcessor = self.lib.mkPkgProcessor {
cflags = "-O0 -g";
# pic maybe leads to some linker errors?
hardeningDisable = [ "fortify" "pic" ];
attrs = {
dontStrip = true;
};
};
pkgList = with nixpkgs.legacyPackages.x86_64-linux; [
amtterm
#archdiff
babeltrace
#bbe # will not build at -O0?
#bin_replace_string
bsdiff
#btyacc
bustle
byacc
complexity
#conf2struct
cppi
cproto
#csup
desktop-file-utils
dialog
#diffball
#difffilter
diffstat
#dissembler
dropwatch
dwdiff
#edi
elfkickers
#ftnchek
#fuzz
global
gpp
#gtk-update-icon-cache
#hxd
hxtools
icmake
#intel-graphics-system-controller
libtree
#lsuio
#mingw64-toolchain
numdiff
ostree
pahole
patchutils
#ply
#pretrace
#pscan
radare2
rizin
rt-tests
#sel
shc
smem
statifier
#stubgen
#systemtap
#tinlink
valgrind
vmtouch
vtable-dumper
wiggle
#xfce4-dev-tools
xmlindent
#yacc
bison
diffutils
bintools-unwrapped
@ -76,63 +76,10 @@
curl
file
strace
;
inherit (pkgs.xfce) xfce4-dev-tools;
coreutils = (pkgs.coreutils.override { singleBinary = false; });
xfce.xfce4-dev-tools
(pkgs.coreutils.override { singleBinary = false; })
];
};
lib = pkgs.lib;
self' = self.packages.x86_64-linux;
pkgsetsDefs = {
"O0" = "-O0 -g";
"O2" = "-O2 -g";
};
forceFlags = drv: flags: let
overridesFlags = {
env = (drv.env or {}) // { NIX_CFLAGS_COMPILE = "${(drv.env.NIX_CFLAGS_COMPILE or "")} ${flags}"; };
};
overridesHardening = {
# fortify requires at least -O1
# pic leads to some linker errors
hardeningDisable = (drv.hardeningDisable or []) ++ [ "fortify" "pic" ];
};
overridesStrip = {
dontStrip = true;
};
overrides = overridesStrip // overridesFlags // overridesHardening;
in drv.overrideAttrs overrides;
in {
default = pkgs.runCommand "binxos.tar.gz" { } ''
declare -A SETS
declare -A TOOBIG
${lib.concatMapAttrsStringSep "\n" (name: pkgset: ''
SETS[${name}]="${lib.concatMapAttrsStringSep " " (_: drv: lib.getBin drv) pkgset}"
'') self'.pkgsets}
for set in "''${!SETS[@]}"; do
mkdir -p $TMP/binxos/$set
for pkg in ''${SETS[$set]}; do
for f in $pkg/bin/*; do
if [[ $(head -c4 $f) != $'\x7fELF' ]]; then
continue
fi
if [[ $(stat --format %s $f) > $((800 * 1024 * 1024)) ]]; then
TOOBIG[$(basename $f)]=1
continue
fi
cp $f $TMP/binxos/$set
done
done
done
for bin in "''${!TOOBIG[@]}"; do
rm -f $TMP/binxos/*/$bin
done
cd $TMP
tar -czf $out binxos
'';
pkgsets = lib.mapAttrs (_: flags: lib.mapAttrs (_: pkg: forceFlags pkg flags) pkgset-raw) pkgsetsDefs;
};
});
};
}

21
package.nix Normal file
View File

@ -0,0 +1,21 @@
{
lib,
runCommand,
}:
{
name,
pkgList,
fileGlobs ? [ "bin/*" "lib/*"],
fileFindPredicates ? "-type f",
pkgProcessor ? pkg: pkg,
}:
let
processedList = map pkgProcessor pkgList;
globPredicates = lib.concatMapStringsSep " " (g: "-find ${g}") fileGlobs;
copiedBins = runCommand name {} ''
mkdir -p $out/bins
find ${lib.concatStringsSep " " processedList} ${globPredicates} ${fileFindPredicates}| while read -r filepath; do
cp "$filepath" $out/bins
done
'';
in copiedBins