Data Structures #
Standard path of elan
in a Elan installation.
Equations
- Lake.elanExe home = (home / { toString := "bin" } / { toString := "elan" }).addExtension System.FilePath.exeExtension
Information about the local Elan setup.
- home : Lake.FilePath
- elan : Lake.FilePath
- binDir : Lake.FilePath
- toolchainsDir : Lake.FilePath
Equations
- Lake.instInhabitedElanInstall = { default := { home := default, elan := default, binDir := default, toolchainsDir := default } }
Equations
- Lake.instReprElanInstall = { reprPrec := Lake.reprElanInstall✝ }
Standard path of lean
in a Lean installation.
Equations
- Lake.leanExe sysroot = (sysroot / { toString := "bin" } / { toString := "lean" }).addExtension System.FilePath.exeExtension
Standard path of leanc
in a Lean installation.
Equations
- Lake.leancExe sysroot = (sysroot / { toString := "bin" } / { toString := "leanc" }).addExtension System.FilePath.exeExtension
Standard path of llvm-ar
in a Lean installation.
Equations
- Lake.leanArExe sysroot = (sysroot / { toString := "bin" } / { toString := "llvm-ar" }).addExtension System.FilePath.exeExtension
Standard path of clang
in a Lean installation.
Equations
- Lake.leanCcExe sysroot = (sysroot / { toString := "bin" } / { toString := "clang" }).addExtension System.FilePath.exeExtension
Path information about the local Lean installation.
- sysroot : Lake.FilePath
- githash : String
- srcDir : Lake.FilePath
- leanLibDir : Lake.FilePath
- includeDir : Lake.FilePath
- systemLibDir : Lake.FilePath
- binDir : Lake.FilePath
- lean : Lake.FilePath
- leanc : Lake.FilePath
- ar : Lake.FilePath
- cc : Lake.FilePath
- customCc : Bool
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lake.instReprLeanInstall = { reprPrec := Lake.reprLeanInstall✝ }
The LEAN_CC
of the Lean installation.
Lake executable file name.
Equations
- Lake.lakeExe = { toString := "lake" }.addExtension System.FilePath.exeExtension
Path information about the local Lake installation.
- home : Lake.FilePath
- srcDir : Lake.FilePath
- binDir : Lake.FilePath
- libDir : Lake.FilePath
- lake : Lake.FilePath
Equations
- Lake.instInhabitedLakeInstall = { default := { home := default, srcDir := default, binDir := default, libDir := default, lake := default } }
Equations
- Lake.instReprLakeInstall = { reprPrec := Lake.reprLakeInstall✝ }
Construct a Lake installation co-located with the specified Lean installation.
Equations
- Lake.LakeInstall.ofLean lean = { home := lean.sysroot, srcDir := lean.srcDir / { toString := "lake" }, binDir := lean.binDir, libDir := lean.leanLibDir, lake := lean.binDir / Lake.lakeExe }
Detection Functions #
Attempt to detect a Elan installation by checking the ELAN_HOME
environment variable for a installation location.
Equations
- One or more equations did not get rendered due to their size.
Construct the LeanInstall
object for the given Lean sysroot.
Does the following:
- Find
lean
's githash. - Finds the
ar
andcc
to use with Lean. - Computes the sub-paths of the Lean install.
For (1), If lake
is not-collocated with lean
, invoke lean --githash
;
otherwise, use Lake's Lean.githash
. If the invocation fails, githash
is
set to the empty string.
For (2), if LEAN_AR
or LEAN_CC
are defined, it uses those paths.
Otherwise, if Lean is packaged with an llvm-ar
and/or clang
, use them.
If not, use the ar
and/or cc
in the system's PATH
. This last step is
needed because internal builds of Lean do not bundle these tools
(unlike user-facing releases).
We also track whether LEAN_CC
was set to determine whether it should
be set in the future for lake env
. This is because if LEAN_CC
was not set,
it needs to remain not set for leanc
to work.
Even setting it to the bundled compiler will break leanc
-- see
leanprover/lean4#1281.
For (3), it assumes that the Lean installation is organized the normal way.
That is, with its binaries located in <lean-sysroot>/bin
, its
Lean libraries in <lean-sysroot>/lib/lean
, and its system libraries in
<lean-sysroot>/lib
.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Attempt to detect the installation of the given lean
command
by calling findLeanCmdHome?
. See LeanInstall.get
for how it assumes the
Lean install is organized.
Equations
- Lake.findLeanCmdInstall? lean = (do let __do_lift ← Lake.findLeanSysroot? lean liftM (Lake.LeanInstall.get __do_lift)).run
Check if the running Lake's executable is co-located with Lean, and, if so,
try to return their joint home by assuming they are both located at <home>/bin
.
Equations
- One or more equations did not get rendered due to their size.
Get the root of Lake's installation by assuming the executable
is located at <lake-home>/.lake/build/bin/lake
.
Equations
- Lake.lakeBuildHome? lake = do let __do_lift ← lake.parent let __do_lift ← __do_lift.parent let __do_lift ← __do_lift.parent __do_lift.parent
Heuristically validate that getLakeBuildHome?
is a proper Lake installation
by check for Lake.olean
in the installation's lib
directory.
Equations
- One or more equations did not get rendered due to their size.
Attempt to detect Lean's installation by first checking the
LEAN_SYSROOT
environment variable and then by trying findLeanCmdHome?
.
See LeanInstall.get
for how it assumes the Lean install is organized.
Equations
- One or more equations did not get rendered due to their size.
Attempt to detect Lake's installation by first checking the lakeBuildHome?
of the running executable, then trying the LAKE_HOME
environment variable.
It assumes that the Lake installation is organized the same way it is built.
That is, with its binary located at <lake-home>/.lake/build/bin/lake
and its
static library and .olean
files in <lake-home>/.lake/build/lib
, and
its source files located directly in <lake-home>
.
Equations
- One or more equations did not get rendered due to their size.
Attempt to automatically detect an Elan, Lake, and Lean installation.
First, it calls findElanInstall?
to detect a Elan installation.
Then it attempts to detect if Lake and Lean are part of a single installation
where the lake
executable is co-located with the lean
executable (i.e., they
are in the same directory). If Lean and Lake are not co-located, Lake will
attempt to find the their installations separately by calling
findLeanInstall?
and findLakeInstall?
.
When co-located, Lake will assume that Lean and Lake's binaries are located in
<sysroot>/bin
, their Lean libraries in <sysroot>/lib/lean
, Lean's source files
in <sysroot>/src/lean
, and Lake's source files in <sysroot>/src/lean/lake
,
following the pattern of a regular Lean toolchain.
Equations
- One or more equations did not get rendered due to their size.