This is from a ~~pair~~triple programming session with @tydeu and @mhuisi. If stage 1 is built with `-DUSE_LAKE=ON`, the CMake run will generate `lakefile.toml` files for the root, `src`, and `tests`. These Lake configuration files can then be used to build core oleans. While they do not yet allow Lake to be used to build the Lean binaries. they do allow Lake to be used for working interactively with the Lean source. In our preliminary experiments, this allowed updates to `Init.Data.Nat` to be noticed automatically when reloading downstream files, rather than requiring a full manual compiler rebuild. This will make it easier to work on the system. As part of this change, Lake is added to stage 0. This allows Lake to function in `src`, which uses the stage 0 toolchain. --------- Co-authored-by: Mac Malone <tydeu@hatpress.net> Co-authored-by: Sebastian Ullrich <sebasti@nullri.ch>
33 lines
984 B
Bash
Executable file
33 lines
984 B
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
rm -r stage0 || true
|
|
# don't copy untracked files
|
|
# `:!` is git glob flavor for exclude patterns
|
|
for f in $(git ls-files src ':!:src/lake/*' ':!:src/Leanc.lean'); do
|
|
if [[ $f == *.lean ]]; then
|
|
f=${f#src/}
|
|
f=${f%.lean}.c
|
|
mkdir -p $(dirname stage0/stdlib/$f)
|
|
cp ${CP_C_PARAMS:-} $CSRCS/$f stage0/stdlib/$f
|
|
else
|
|
mkdir -p $(dirname stage0/$f)
|
|
cp $f stage0/$f
|
|
fi
|
|
done
|
|
|
|
# special handling for Lake files due to its nested directory
|
|
# copy the README to ensure the `stage0/src/lake` directory is comitted
|
|
for f in $(git ls-files 'src/lake/Lake/*' src/lake/Lake.lean src/lake/README.md ':!:src/lakefile.toml'); do
|
|
if [[ $f == *.lean ]]; then
|
|
f=${f#src/lake}
|
|
f=${f%.lean}.c
|
|
mkdir -p $(dirname stage0/stdlib/$f)
|
|
cp ${CP_C_PARAMS:-} $CSRCS/$f stage0/stdlib/$f
|
|
else
|
|
mkdir -p $(dirname stage0/$f)
|
|
cp $f stage0/$f
|
|
fi
|
|
done
|
|
|
|
git add stage0
|