75 lines
2.7 KiB
Nix
75 lines
2.7 KiB
Nix
{
|
|
description = "Lean interactive theorem prover";
|
|
|
|
inputs.nixpkgs.url = github:NixOS/nixpkgs/nixpkgs-unstable;
|
|
inputs.flake-utils.url = github:numtide/flake-utils;
|
|
inputs.temci = {
|
|
url = github:parttimenerd/temci;
|
|
flake = false;
|
|
};
|
|
inputs.nix.url = github:NixOS/nix;
|
|
inputs.mdBook = {
|
|
url = github:leanprover/mdBook;
|
|
flake = false;
|
|
};
|
|
inputs.lean4-mode = {
|
|
url = github:leanprover/lean4-mode;
|
|
flake = false;
|
|
};
|
|
# used *only* by `stage0-from-input` below
|
|
inputs.lean-stage0 = {
|
|
url = github:leanprover/lean4;
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
inputs.flake-utils.follows = "flake-utils";
|
|
inputs.temci.follows = "temci";
|
|
inputs.nix.follows = "nix";
|
|
inputs.mdBook.follows = "mdBook";
|
|
};
|
|
|
|
outputs = { self, nixpkgs, flake-utils, temci, nix, mdBook, lean4-mode, lean-stage0 }: flake-utils.lib.eachDefaultSystem (system:
|
|
let
|
|
pkgs = import nixpkgs {
|
|
inherit system;
|
|
# for `vscode-with-extensions`
|
|
config.allowUnfree = true;
|
|
};
|
|
lean-packages = pkgs.callPackage (./nix/packages.nix) { inherit nix temci mdBook lean4-mode; };
|
|
in {
|
|
packages = lean-packages // rec {
|
|
debug = lean-packages.override { debug = true; };
|
|
stage0debug = lean-packages.override { stage0debug = true; };
|
|
sanitized = lean-packages.override { extraCMakeFlags = [ "-DLEAN_EXTRA_CXX_FLAGS=-fsanitize=address,undefined" "-DLEANC_EXTRA_FLAGS=-fsanitize=address,undefined" "-DSMALL_ALLOCATOR=OFF" "-DSYMBOLIC=OFF" ]; };
|
|
sandebug = sanitized.override { debug = true; };
|
|
tsan = lean-packages.override {
|
|
extraCMakeFlags = [ "-DLEAN_EXTRA_CXX_FLAGS=-fsanitize=thread" "-DLEANC_EXTRA_FLAGS=-fsanitize=thread" "-DCOMPRESSED_OBJECT_HEADER=OFF" ];
|
|
stage0 = (lean-packages.override {
|
|
# Compressed headers currently trigger data race reports in tsan.
|
|
# Turn them off for stage 0 as well so stage 1 can read its own stdlib.
|
|
extraCMakeFlags = [ "-DCOMPRESSED_OBJECT_HEADER=OFF" ];
|
|
}).stage1;
|
|
};
|
|
tsandebug = tsan.override { debug = true; };
|
|
stage0-from-input = lean-packages.override {
|
|
stage0 = lean-stage0.packages.${system}.lean;
|
|
};
|
|
inherit self;
|
|
};
|
|
defaultPackage = lean-packages.lean-all;
|
|
|
|
devShell = pkgs.mkShell {
|
|
buildInputs = [ lean-packages.nix ];
|
|
shellHook = ''
|
|
export LEAN_SRC_PATH="$PWD/src"
|
|
'';
|
|
};
|
|
|
|
checks.lean = lean-packages.test;
|
|
}) // rec {
|
|
templates.pkg = {
|
|
path = ./nix/templates/pkg;
|
|
description = "A custom Lean package";
|
|
};
|
|
|
|
defaultTemplate = templates.pkg;
|
|
};
|
|
}
|