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