/ flake.nix
flake.nix
1 { 2 description = "Cornell - Verified Binary Format DSL in Lean4"; 3 4 inputs = { 5 nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; 6 flake-utils.url = "github:numtide/flake-utils"; 7 }; 8 9 outputs = 10 { 11 self, 12 nixpkgs, 13 flake-utils, 14 }: 15 flake-utils.lib.eachDefaultSystem ( 16 system: 17 let 18 pkgs = nixpkgs.legacyPackages.${system}; 19 20 # Use elan to manage Lean toolchain (reads lean-toolchain file) 21 elan = pkgs.elan; 22 23 # C++ build for gRPC client 24 cornell-cpp = pkgs.stdenv.mkDerivation { 25 pname = "cornell-cpp"; 26 version = "0.1.0"; 27 src = ./cpp; 28 29 nativeBuildInputs = with pkgs; [ 30 cmake 31 pkg-config 32 protobuf 33 grpc 34 ]; 35 36 buildInputs = with pkgs; [ 37 protobuf 38 grpc 39 abseil-cpp 40 openssl 41 zlib 42 c-ares 43 re2 44 ]; 45 46 cmakeFlags = [ 47 "-DCMAKE_BUILD_TYPE=Release" 48 ]; 49 50 doCheck = true; 51 checkPhase = '' 52 ctest --output-on-failure 53 ''; 54 }; 55 56 in 57 { 58 packages = { 59 default = pkgs.stdenv.mkDerivation { 60 pname = "cornell"; 61 version = "0.1.0"; 62 src = ./.; 63 64 nativeBuildInputs = [ elan ]; 65 66 buildPhase = '' 67 export HOME=$(mktemp -d) 68 export ELAN_HOME=$HOME/.elan 69 elan default leanprover/lean4:v4.15.0 70 lake build 71 ''; 72 73 installPhase = '' 74 mkdir -p $out 75 cp -r .lake/build/* $out/ 76 ''; 77 }; 78 79 cpp = cornell-cpp; 80 }; 81 82 devShells.default = pkgs.mkShell { 83 buildInputs = [ 84 elan 85 pkgs.git # lake needs git 86 87 # C++ development 88 pkgs.cmake 89 pkgs.pkg-config 90 pkgs.protobuf 91 pkgs.grpc 92 pkgs.abseil-cpp 93 pkgs.openssl 94 pkgs.zlib 95 pkgs.c-ares 96 pkgs.re2 97 ]; 98 shellHook = '' 99 echo "Cornell development environment" 100 echo "Run 'lake build' to build Lean4" 101 echo "Run 'cd cpp && cmake -B build && cmake --build build' to build C++" 102 ''; 103 }; 104 } 105 ); 106 }