## MLton 20241230

# Installation

MLton runs on a variety of platforms and is distributed in both source and binary form.

A `.tgz` or `.tbz` binary package can be extracted at any location, yielding `README.adoc` (this file), `CHANGELOG.adoc`, `LICENSE`, `Makefile`, `bin/`, `lib/`, and `share/`. The compiler and tools can be executed in-place (e.g., `./bin/mlton`).

A small set of `Makefile` variables can be used to customize the binary package via `make update`:

- `CC`: Specify C compiler. Can be used for alternative tools (e.g., `CC=clang` or `CC=gcc-7`).

- `WITH_GMP_DIR`, `WITH_GMP_INC_DIR`, `WITH_GMP_LIB_DIR`: Specify GMP include and library paths, if not on default search paths. (If `WITH_GMP_DIR` is set, then `WITH_GMP_INC_DIR` defaults to `$(WITH_GMP_DIR)/include` and `WITH_GMP_LIB_DIR` defaults to `$(WITH_GMP_DIR)/lib`.)

For example:

    $ make CC=clang WITH_GMP_DIR=/opt/gmp update

On typical platforms, installing MLton (after optionally performing `make update`) to `/usr/local` can be accomplished via:

    $ make install

A small set of `Makefile` variables can be used to customize the installation:

- `PREFIX`: Specify the installation prefix.

- `CC`: Specify C compiler. Can be used for alternative tools (e.g., `CC=clang` or `CC=gcc-7`).

- `WITH_GMP_DIR`, `WITH_GMP_INC_DIR`, `WITH_GMP_LIB_DIR`: Specify GMP include and library paths, if not on default search paths. (If `WITH_GMP_DIR` is set, then `WITH_GMP_INC_DIR` defaults to `$(WITH_GMP_DIR)/include` and `WITH_GMP_LIB_DIR` defaults to `$(WITH_GMP_DIR)/lib`.)

For example:

    $ make PREFIX=/opt/mlton install

Installation of MLton creates the following files and directories.

- `prefix/bin/mllex`

  The MLLex lexer generator.

- `prefix/bin/mlnlffigen`

  The ML-NLFFI tool.

- `prefix/bin/mlprof`

  A Profiling tool.

- `prefix/bin/mlton`

  A script to call the compiler. This script may be moved anywhere, however, it makes use of files in `prefix/lib/mlton`.

- `prefix/bin/mlyacc`

  The MLYacc parser generator.

- `prefix/lib/mlton`

  Directory containing libraries and include files needed during compilation.

- `prefix/share/man/man1/{mllex,mlnlffigen,mlprof,mlton,mlyacc}.1`

  Man pages.

- `prefix/share/doc/mlton`

  Directory containing the user guide for MLton, mllex, and mlyacc, as well as example SML programs (in the `examples` directory), and license information.

## Hello, World!

Once you have installed MLton, create a file called `hello-world.sml` with the following contents.

    print "Hello, world!\n";

Now create an executable, `hello-world`, with the following command.

    mlton hello-world.sml

You can now run `hello-world` to verify that it works. There are more small examples in `prefix/share/doc/mlton/examples`.

## Installation on Cygwin

When installing the Cygwin `tgz`, you should use Cygwin’s `bash` and `tar`. The use of an archiving tool that is not aware of Cygwin’s mounts will put the files in the wrong place.