diff --git a/flake.nix b/flake.nix index cc81815..49b561d 100644 --- a/flake.nix +++ b/flake.nix @@ -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; - }; + }); }; } diff --git a/package.nix b/package.nix new file mode 100644 index 0000000..5fb48a1 --- /dev/null +++ b/package.nix @@ -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