MANOOL is Not an Object-Oriented Language!”

How to Download and Install MANOOL


To browse the source code of MANOOL on GitHub, please refer to

You can find precompiled binaries for 14 combinations of OSes/ISAs/ABIs at Unpack the corresponding .tar archive manually into the installation root directory, e.g. (for Ubuntu 18.04 LTS, x86-64/lp64):

wget -O- -q |
sudo tar xJv -C /usr/local

Alternatively, you can first build the MANOOL binaries yourself. In any case please refer to Launching MANOOL below for information on running MANOOL after installation.

General Instructions

Try, e.g.:

git clone && cd manool
./mnl <(echo $'{{extern ""} in Out.WriteLine["Hello, world!"]}')

Note that there is no need to run ./configure (though, it's harmless), since the set of supported host/target platforms is more homogeneous than it used to be for GNU tools, and thus all platform-specific tuning can be done in a simpler way (that is, during actual building). In theory, the source file config.tcc is intended to define required platform-specific feature test macros; in practice, there is rarely any need to touch it.

To run MANOOL from within a different directory, point the environment variable MNL_PATH to the library directory (or a search list thereof) and invoke mnlexec as in the following example:

MNL_PATH=<working-tree directory>/build/lib <working-tree directory>/build/mnlexec \
<(echo $'{{extern ""} in Out.WriteLine["Hello, world!"]}')

The section Confirmed Builds provides more specific instructions together with recommended compilation options for 23 combinations of OSes/ISAs/ABIs/compilers.

Build dependencies

Makefile phony targets

Makefile configuration variables

Conditional compilation

MNL_CONFIG is to contain one or more of the following space-separated flags (all features are enabled by default except MNL_USE_DEBUG):

Other preprocessor definitions


To install MANOOL after building, try, e.g. (also read about the PREFIX makefile variable above):

sudo make install

Launching MANOOL

To run installed MANOOL, point the environment variable MNL_PATH to the installed-library directory, e.g.:

MNL_PATH=/usr/local/lib/manool mnlexec \
<(echo $'{{extern ""} in Out.WriteLine["Hello, world!"]}')

To get the mnlexec invocation synopsis and a short description of all recognized environment variables, just run it without arguments: mnlexec.

Note that you can specify a MANOOL script to run on the command line (as in mnlexec hello.mnl if mnlexec is in PATH), or you can use a shebang feature and turn your script into a directly executable file as in the following example (assuming mnlexec is in PATH and MNL_PATH is set accordingly in your environment):

cat >hello && chmod +x hello
#!/usr/bin/env mnlexec
{{extern ""} in Out.WriteLine["Hello, world!"]}

Confirmed Builds

Newer OSes

Older OSes