************************** Chez Scheme Code Generator ************************** The Chez Scheme code generator is the default, or it can be accessed via a REPL command: :: Main> :set cg chez By default, therefore, to run Idris programs you will need to install `Chez Scheme `_. Chez Scheme is open source, and available via most OS package managers. You can compile an expression ``expr`` of type ``IO ()`` to an executable as follows, at the REPL: :: Main> :c execname expr ...where ``execname`` is the name of the executable file. This will generate the following: * A shell script ``build/exec/execname`` which invokes the program * A subdirectory ``build/exec/execname_app`` which contains all the data necessary to run the program. This includes the Chez Scheme source (``execname.ss``), the compiled Chez Scheme code (``execname.so``) and any shared libraries needed for foreign function definitions. The executable ``execname`` is relocatable to any subdirectory, provided that ``execname_app`` is also in the same subdirectory. You can also execute an expression directly: :: Main> :exec expr Again, ``expr`` must have type ``IO ()``. This will generate a temporary executable script ``_tmpchez`` in the ``build/exec`` directory, and execute that. Chez Scheme is the default code generator, so if you invoke ``idris2`` with the ``-o execname`` flag, it will generate an executable script ``build/exec/execname``, again with support files in ``build/exec/execname_app``. Chez Directives =============== * ``--directive extraRuntime=`` Embed Scheme source from ```` directly into generated output. Can be specified more than once, in which case all given files will be included in the order specified. .. code-block:: scheme ; extensions.scm (define (my-mul a b) (* a b)) .. code-block:: idris -- Main.idr %foreign "scheme:my-mul" myMul : Int -> Int -> Int :: $ idris2 --codegen chez --directive extraRuntime=/path/to/extensions.scm -o main Main.idr Making a freestanding executable ================================ It's possible to embed the Chez Scheme system and the built Idris2 program into a freestanding executable with `chez-exe `_. * Build and install the ``compile-chez-program-tool`` by running the configuration script and then make: :: $ scheme --script gen-config.ss --bootpath where ``