| { src, pkgs, ... } @ args: | |
| with pkgs; | |
| let | |
| # https://github.com/NixOS/nixpkgs/issues/130963 | |
| llvmPackages = if stdenv.isDarwin then llvmPackages_11 else llvmPackages_15; | |
| cc = (ccacheWrapper.override rec { | |
| cc = llvmPackages.clang; | |
| extraConfig = '' | |
| export CCACHE_DIR=/nix/var/cache/ccache | |
| export CCACHE_UMASK=007 | |
| export CCACHE_BASE_DIR=$NIX_BUILD_TOP | |
| # https://github.com/NixOS/nixpkgs/issues/109033 | |
| args=("$@") | |
| for ((i=0; i<"''${#args[@]}"; i++)); do | |
| case ''${args[i]} in | |
| -frandom-seed=*) unset args[i]; break;; | |
| esac | |
| done | |
| set -- "''${args[@]}" | |
| [ -d $CCACHE_DIR ] || exec ${cc}/bin/$(basename "$0") "$@" | |
| ''; | |
| }).overrideAttrs (old: { | |
| # https://github.com/NixOS/nixpkgs/issues/119779 | |
| installPhase = builtins.replaceStrings ["use_response_file_by_default=1"] ["use_response_file_by_default=0"] old.installPhase; | |
| }); | |
| stdenv' = if stdenv.isLinux then useGoldLinker stdenv else stdenv; | |
| lean = callPackage (import ./bootstrap.nix) (args // { | |
| stdenv = overrideCC stdenv' cc; | |
| inherit src buildLeanPackage llvmPackages; | |
| }); | |
| makeOverridableLeanPackage = f: | |
| let newF = origArgs: f origArgs // { | |
| overrideArgs = newArgs: makeOverridableLeanPackage f (origArgs // newArgs); | |
| }; | |
| in lib.setFunctionArgs newF (lib.getFunctionArgs f) // { | |
| override = args: makeOverridableLeanPackage (f.override args); | |
| }; | |
| buildLeanPackage = makeOverridableLeanPackage (callPackage (import ./buildLeanPackage.nix) (args // { | |
| inherit (lean) stdenv; | |
| lean = lean.stage1; | |
| inherit (lean.stage1) leanc; | |
| })); | |
| in { | |
| inherit cc buildLeanPackage llvmPackages; | |
| nixpkgs = pkgs; | |
| ciShell = writeShellScriptBin "ciShell" '' | |
| set -o pipefail | |
| export PATH=${moreutils}/bin:$PATH | |
| # prefix lines with cumulative and individual execution time | |
| "$@" |& ts -i "(%.S)]" | ts -s "[%M:%S" | |
| ''; | |
| } // lean.stage1 |