flake.nix (3048B)
1 { 2 description = "Pure Haskell HMAC-DRBG"; 3 4 inputs = { 5 ppad-nixpkgs = { 6 type = "git"; 7 url = "git://git.ppad.tech/nixpkgs.git"; 8 ref = "master"; 9 }; 10 ppad-base16 = { 11 type = "git"; 12 url = "git://git.ppad.tech/base16.git"; 13 ref = "master"; 14 inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; 15 }; 16 ppad-sha256 = { 17 type = "git"; 18 url = "git://git.ppad.tech/sha256.git"; 19 ref = "master"; 20 inputs.ppad-base16.follows = "ppad-base16"; 21 inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; 22 }; 23 ppad-sha512 = { 24 type = "git"; 25 url = "git://git.ppad.tech/sha512.git"; 26 ref = "master"; 27 inputs.ppad-base16.follows = "ppad-base16"; 28 inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; 29 }; 30 flake-utils.follows = "ppad-nixpkgs/flake-utils"; 31 nixpkgs.follows = "ppad-nixpkgs/nixpkgs"; 32 }; 33 34 outputs = { self, nixpkgs, flake-utils, ppad-nixpkgs 35 , ppad-base16, ppad-sha256, ppad-sha512 36 }: 37 flake-utils.lib.eachDefaultSystem (system: 38 let 39 lib = "ppad-hmac-drbg"; 40 41 pkgs = import nixpkgs { inherit system; }; 42 hlib = pkgs.haskell.lib; 43 llvm = pkgs.llvmPackages_19.llvm; 44 clang = pkgs.llvmPackages_19.clang; 45 46 base16 = ppad-base16.packages.${system}.default; 47 base16-llvm = 48 hlib.addBuildTools 49 (hlib.enableCabalFlag base16 "llvm") 50 [ llvm clang ]; 51 52 sha512 = ppad-sha512.packages.${system}.default; 53 sha512-llvm = 54 hlib.addBuildTools 55 (hlib.enableCabalFlag sha512 "llvm") 56 [ llvm clang ]; 57 58 sha256 = ppad-sha256.packages.${system}.default; 59 sha256-llvm = 60 hlib.addBuildTools 61 (hlib.enableCabalFlag sha256 "llvm") 62 [ llvm clang ]; 63 64 hpkgs = pkgs.haskell.packages.ghc910.extend (new: old: { 65 ppad-base16 = base16-llvm; 66 ppad-sha256 = sha256-llvm; 67 ppad-sha512 = sha512-llvm; 68 ${lib} = new.callCabal2nix lib ./. { 69 ppad-base16 = new.ppad-base16; 70 ppad-sha256 = new.ppad-sha256; 71 ppad-sha512 = new.ppad-sha512; 72 }; 73 }); 74 75 cc = pkgs.stdenv.cc; 76 ghc = hpkgs.ghc; 77 cabal = hpkgs.cabal-install; 78 in 79 { 80 packages.default = hpkgs.${lib}; 81 82 devShells.default = hpkgs.shellFor { 83 packages = p: [ 84 (hlib.doBenchmark p.${lib}) 85 ]; 86 87 buildInputs = [ 88 cabal 89 cc 90 llvm 91 ]; 92 93 doBenchmark = true; 94 95 shellHook = '' 96 PS1="[${lib}] \w$ " 97 echo "entering ${system} shell, using" 98 echo "cc: $(${cc}/bin/cc --version)" 99 echo "ghc: $(${ghc}/bin/ghc --version)" 100 echo "cabal: $(${cabal}/bin/cabal --version)" 101 echo "llc: $(${llvm}/bin/llc --version | head -2 | tail -1)" 102 ''; 103 }; 104 } 105 ); 106 } 107