{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11"; flake-utils.url = "github:numtide/flake-utils"; zig-overlay.url = "github:mitchellh/zig-overlay"; #zig2nix.url = "github:Cloudef/zig2nix"; #zig2nix.inputs.nixpkgs.follows = "nixpkgs"; }; outputs = inputs: inputs.flake-utils.lib.eachSystem [ "x86_64-linux" ] (system: let pkgs = import inputs.nixpkgs { inherit system; }; zig = pkgs.zig; #zig = inputs.zig-overlay.packages.${system}.master; # Wrap binary package zig on linux so /usr/bin/env can be found inside a sandbox zigBin = pkgs.writeScriptBin "zig" '' args=() for d in /*; do args+=("--dev-bind" "$d" "$d") done ${pkgs.bubblewrap}/bin/bwrap "''${args[@]}" \ --bind ${pkgs.coreutils} /usr \ -- ${pkgs.lib.getExe zig} "$@" ''; postInstall = '' set -x readelf -d $out/bin/test-* | grep RUNPATH lddtree $out/bin/test-* set +x ''; in { packages.test-zig = pkgs.stdenv.mkDerivation { name = "test-zig"; src = ./.; buildInputs = [ zigBin pkgs.gsl pkgs.pkg-config pkgs.llvmPackages.bintools pkgs.pax-utils pkgs.binutils ]; buildPhase = '' set -x export ZIG_GLOBAL_CACHE_DIR=$PWD mkdir -p $out/bin zig build-exe main.c -femit-bin=$out/bin/test-zig $(pkg-config --cflags --libs gsl) set +x ''; inherit postInstall; }; packages.test-gcc = pkgs.stdenv.mkDerivation { name = "test-gcc"; src = ./.; buildInputs = [ pkgs.gsl pkgs.pkg-config pkgs.pax-utils pkgs.binutils ]; buildPhase = '' set -x mkdir -p $out/bin gcc main.c -o $out/bin/test-gcc $(pkg-config --cflags --libs gsl) set +x ''; inherit postInstall; }; devShells.default = pkgs.mkShell { packages = [ zig pkgs.gsl #pkgs.blas pkgs.pkg-config ]; }; }); }