{ description = "Lean development flake. Not intended for end users."; # We use channels so we're not affected by GitHub's rate limits inputs.nixpkgs.url = "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz"; # old nixpkgs used for portable release with older glibc (2.27) inputs.nixpkgs-old.url = "https://channels.nixos.org/nixos-19.03/nixexprs.tar.xz"; inputs.nixpkgs-old.flake = false; # old nixpkgs used for portable release with older glibc (2.26) inputs.nixpkgs-older.url = "https://channels.nixos.org/nixos-18.03/nixexprs.tar.xz"; inputs.nixpkgs-older.flake = false; outputs = inputs: builtins.foldl' inputs.nixpkgs.lib.attrsets.recursiveUpdate {} (builtins.map (system: let pkgs = import inputs.nixpkgs { inherit system; }; # An old nixpkgs for creating releases with an old glibc pkgsDist-old = import inputs.nixpkgs-older { inherit system; }; # An old nixpkgs for creating releases with an old glibc pkgsDist-old-aarch = import inputs.nixpkgs-old { localSystem.config = "aarch64-unknown-linux-gnu"; }; llvmPackages = pkgs.llvmPackages_19; devShellWithDist = pkgsDist: pkgs.mkShell.override { stdenv = pkgs.overrideCC pkgs.stdenv llvmPackages.clang; } ({ buildInputs = with pkgs; [ cmake gmp libuv ccache pkg-config llvmPackages.bintools # wrapped lld llvmPackages.llvm # llvm-symbolizer for asan/lsan gdb tree # for CI ]; # https://github.com/NixOS/nixpkgs/issues/60919 hardeningDisable = [ "all" ]; # more convenient `ctest` output CTEST_OUTPUT_ON_FAILURE = 1; } // pkgs.lib.optionalAttrs pkgs.stdenv.isLinux { GMP = (pkgsDist.gmp.override { withStatic = true; }).overrideAttrs (attrs: pkgs.lib.optionalAttrs (pkgs.stdenv.system == "aarch64-linux") { # would need additional linking setup on Linux aarch64, we don't use it anywhere else either hardeningDisable = [ "stackprotector" ]; }); LIBUV = pkgsDist.libuv.overrideAttrs (attrs: { configureFlags = ["--enable-static"]; hardeningDisable = [ "stackprotector" ]; # Sync version with CMakeLists.txt version = "1.48.0"; src = pkgs.fetchFromGitHub { owner = "libuv"; repo = "libuv"; rev = "v1.48.0"; sha256 = "100nj16fg8922qg4m2hdjh62zv4p32wyrllsvqr659hdhjc03bsk"; }; doCheck = false; }); GLIBC = pkgsDist.glibc; GLIBC_DEV = pkgsDist.glibc.dev; GCC_LIB = pkgsDist.gcc.cc.lib; ZLIB = pkgsDist.zlib; # for CI coredumps GDB = pkgsDist.gdb; }); in { devShells.${system} = { # The default development shell for working on lean itself default = devShellWithDist pkgs; oldGlibc = devShellWithDist pkgsDist-old; oldGlibcAArch = devShellWithDist pkgsDist-old-aarch; }; }) ["x86_64-linux" "aarch64-linux"]); }