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"; nixpkgs.url = "github:nixos/nixpkgs/release-25.05";
}; };
outputs = {nixpkgs, self}: { outputs = {nixpkgs, self}: {
packages.x86_64-linux = let lib.mkPkgProcessor = {
pkgs = nixpkgs.legacyPackages.x86_64-linux; cflags ? "",
pkgset-raw = { hardeningDisable ? [],
inherit (pkgs) 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 amtterm
#archdiff
babeltrace babeltrace
#bbe # will not build at -O0?
#bin_replace_string
bsdiff bsdiff
#btyacc
bustle bustle
byacc byacc
complexity complexity
#conf2struct
cppi cppi
cproto cproto
#csup
desktop-file-utils desktop-file-utils
dialog dialog
#diffball
#difffilter
diffstat diffstat
#dissembler
dropwatch dropwatch
dwdiff dwdiff
#edi
elfkickers elfkickers
#ftnchek
#fuzz
global global
gpp gpp
#gtk-update-icon-cache
#hxd
hxtools hxtools
icmake icmake
#intel-graphics-system-controller
libtree libtree
#lsuio
#mingw64-toolchain
numdiff numdiff
ostree ostree
pahole pahole
patchutils patchutils
#ply
#pretrace
#pscan
radare2 radare2
rizin rizin
rt-tests rt-tests
#sel
shc shc
smem smem
statifier statifier
#stubgen
#systemtap
#tinlink
valgrind valgrind
vmtouch vmtouch
vtable-dumper vtable-dumper
wiggle wiggle
#xfce4-dev-tools
xmlindent xmlindent
#yacc
bison bison
diffutils diffutils
bintools-unwrapped bintools-unwrapped
@ -76,63 +76,10 @@
curl curl
file file
strace strace
; xfce.xfce4-dev-tools
inherit (pkgs.xfce) xfce4-dev-tools; (pkgs.coreutils.override { singleBinary = false; })
coreutils = (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