packages feed

idris-0.12.3: docs/reference/compilation.rst

***********************
Compilation and Logging
***********************

This section provides information about the Idris compilation process, and
provides details over how you can follow the process through logging.

Compilation Process
===================

Idris follows the following compilation process:

#. Parsing
#. Type Checking

   #. Elaboration
   #. Coverage
   #. Unification
   #. Totality Checking
   #. Erasure

#. Code Generation

   #. Defunctionalisation
   #. Inlining
   #. Resolving variables
   #. Code Generation


Type Checking Only
==================

With Idris you can ask it to terminate the compilation process after type checking has completed. This is achieved through use of either:

+ The command line options

  + ``--check`` for files
  + ``--checkpkg`` for packages

+ The REPL command: ``:check``

Use of this option will still result in the generation of the Idris binary ``.ibc`` files, and is suitable if you do not wish to generate code from one of the supported backends.

Logging Output
==============

The internal operation of Idris is captured using a category based logger.
Currently, the logging infrastructure has support for the following categories:

+ Parser
+ Elaborator
+ Code generation
+ Erasure
+ Coverage Checking
+ IBC generation


These categories are specified using the command-line option:
``--logging-categories CATS``, where ``CATS`` is a quoted colon
seperated string of the categories you want to see. By default if this
option is not specified all categories are allowed.  Sub-categories
have yet to be defined but will be in the future, especially for the
elaborator.

Further, the verbosity of logging can be controlled by specifying a
logging level between: 1 to 10 using the command-line option: ``--log
<level>``.

+ Level 0: Show no logging output. Default level
+ Level 1: High level details of the compilation process.
+ Level 2: Provides details of the coverage checking, and further details the elaboration process specifically: Interface, Clauses, Data, Term, and Types,
+ Level 3: Provides details of compilation of the IRTS, erasure, parsing, case splitting, and further details elaboration of: Implementations, Providers, and Values.
+ Level 4: Provides further details on: Erasure, Coverage Checking, Case splitting, and elaboration of clauses.
+ Level 5: Provides details on the prover, and further details elaboration (adding declarations) and compilation of the IRTS.
+ Level 6: Further details elaboration and coverage checking.
+ Level 7:
+ Level 8:
+ Level 9:
+ Level 10: Further details elaboration.

Environment Variables
=====================

Several paths set by default within the Idris compiler can be
overridden through environment variables.  The provided variables are:

* `IDRIS_CC` Change the `C` compiler used by the `C` backend.
* `IDRIS_CFLAGS` Change the `C` flags passed to the `C` compiler.
* `TARGET`   Change the target directory to generate files.
* `IDRIS_LIBRARY_PATH` Change the location of where installed packages are found.

Alternativly, and perhaps a cleaner approach is to configure these
options using the CLI options.  Idris also supports options to augment
the paths used, and pass options to the code generator backend.

The option `--cg-opt <ARG>` can be used to pass options to the code
generator. The format of `<ARG>` is dependent on the selected backend.

Further, Idris does support multiple include paths.  The CLI option
`-i <dir>` allows you to add a directory to the library search path; this
option can be used multiple times. This is a cleaner option when you
wish to add single directories to the `IDRIS_LIBRARY_PATH` than
ammending `IDRIS_LIBRARY_PATH` directly.
To add directories to the source search path, use the `--sourcepath <dir>` option.

Moreover, rather than using `TARGET` the CLI option `--ibcsubdir` can
be used to direct where built IBC files are placed.