=========================
Cogent Installation Guide
=========================

.. highlight:: bash


In a Nutshell
=============

See :ref:`install-more-details` below for a more elaborate guide.

0. We primarily support Debian-style Linux OS. Other \*nix systems should also work, provided
   your platform supports all the dependencies Cogent needs.
1. Install `GHC <https://www.haskell.org/downloads/>`__. For supported versions of GHC,
   see the ``tested-with`` section of `cogent/cogent.cabal <https://github.com/NICTA/cogent/blob/master/cogent/cogent.cabal>`_.
2. Install `Cabal <https://www.haskell.org/cabal/download.html>`__ *or*
   `Stack <https://docs.haskellstack.org/en/stable/README/>`__.

.. note:: We say ``Cabal`` to mean the ``cabal-install`` tool, which is not the same as
   the ``Cabal`` library. In particular, the version of ``cabal-install`` is not
   necessarily the same as that of the ``Cabal`` library.

3. Install `Alex <https://www.haskell.org/alex/>`__ and `Happy <https://www.haskell.org/happy/>`__.
4. Clone the `Cogent repository <https://github.com/NICTA/cogent>`__.
   Suppose the Cogent repository is located ``$COGENT``. Upon this point you should be able to install
   the Cogent compiler and compile Cogent programs. Move to directory ``$COGENT/cogent``, and use
   either Cabal or Stack to build the Cogent compiler. 

.. note:: For ``cabal`` users, we require cabal version 3.0+ and we use the ``new-*`` commands.

5. As a sanity check, you should be able to run ``make test-compiler`` in the ``$COGENT/cogent`` folder,
   and the tests should pass.
6. To run verification, install `Isabelle-2019 <https://isabelle.in.tum.de/>`_ either from their
   website, or you can simply checkout the ``isabelle`` submodule in the Cogent repository.
   You also need to download `AutoCorres (v1.6) <http://ts.data61.csiro.au/projects/TS/autocorres/>`_.


.. _install-more-details:

Detailed Instructions
=====================

Dependencies
------------

-  `The Glasgow Haskell Compiler (GHC) <https://www.haskell.org/>`__
-  `Cabal <https://www.haskell.org/cabal/>`__  *or*
   `Stack <https://docs.haskellstack.org/en/stable/README/>`__
-  `Alex <https://www.haskell.org/alex/>`__
-  `Happy <https://www.haskell.org/happy/>`__
-  `z3 <https://github.com/Z3Prover/z3>`__ (which is also included
   as a submodule for convenience)

Install Cogent dependencies
---------------------------

The GHC compiler and Cabal
^^^^^^^^^^^^^^^^^^^^^^^^^^

Follow the instructions on the `Haskell Downloads page <https://www.haskell.org/downloads/>`__
to install GHC. Any of the options (Minimal installer, Stack, or Haskell Platform) will work.

.. note:: The supported versions of GHC and Cabal are specified
          in `cogent/cogent.cabal <https://github.com/NICTA/cogent/blob/master/cogent/cogent.cabal>`__.

.. note:: On Linux you may also have to install ``libgmp-dev``. This can
          be done with the command

::

  sudo apt-get install libgmp-dev

or the equivalent command for your Linux distribution.

``alex`` and ``happy``
^^^^^^^^^^^^^^^^^^^^^^

::

  cabal new-install alex happy

or the equivalent commands using ``stack``.

Usually, the executables are located ``$HOME/.cabal/bin/``. Make sure
you add them to your ``$PATH``.

``z3`` SMT-solver
^^^^^^^^^^^^^^^^^

.. note:: This is optional. You don’t have to install ``z3`` if you don’t
          plan to use Cogent’s type-level computation features (see :ref:`static-arrays`).

Follow their `README.md <https://github.com/Z3Prover/z3/blob/b79440a21d404bcf0c2e34e83f1c04555342cfb9/README.md>`__.
Make sure that the executable is included in your ``$PATH``. Alternatively you can use the included
`submodule <https://github.com/Z3Prover/z3/tree/b79440a21d404bcf0c2e34e83f1c04555342cfb9>`__ 
by ``git submodule update --init --recursive -- z3``.

.. note:: We only tested against the snapshot checked-in in the
          `submodule <https://github.com/Z3Prover/z3/tree/b79440a21d404bcf0c2e34e83f1c04555342cfb9>`__.
          Similar versions of ``z3`` have a chance to work but is not guaranteed.

Install Cogent
--------------

.. _optional-features:

Optional features
^^^^^^^^^^^^^^^^^

Cogent comes with several experimental (reads: very unstable) or
additional features that you can opt-in. These features are (with the
names of the respective flags in parentheses): 

   1. built-in static arrays (``builtin-arrays``)
   2. documentation generation (``docgent``)
   3. property-based testing in Haskell (``haskell-backend``)

Depending on which (combination of) features are needed, the
dependencies will be different. By default, none of them are enabled. If
you want them enabled, appropriate flags should be given while building
Cogent (see below for instructions).

There are three ways of building the Cogent compiler:

  * Stack (simple, more robust)
  * Makefile (simple, but can be fragile)
  * Cabal (also simple, and more advanced)

Detailed instructions for each of them are given below:

Build with Stack (simple, more robust)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Stack_ is a cross-platform program for developing Haskell projects.
To build Cogent with Stack, simply run ``stack build``.

.. _Stack: https://docs.haskellstack.org/

Build with Makefile (simple, but can be fragile)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

-  To configure, edit `config.mk <https://github.com/NICTA/cogent/blob/master/config.mk>`__. The default values
   should work for most people.
-  Change the flags for building Cogent in that file.
-  Run ``make`` or ``make dev``. The latter builds Cogent instead of
   installing it, which is more suitable for developers.

For more info, run ``make help``.

Build with Cabal (also simple, and more advanced)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The ``Makefile`` calls Cabal under the hood. The new (3.0+) version of Cabal
is made relatively easy to use. You can use ``cabal new-configure`` with relevant options
to set the flags and compiler version that are desired. Or it can be set manually
in a ``cabal.project.local`` file.
After the configuration, Cogent can be easily installed by
``cabal new-install --installdir=<BINDIR>`` command, where ``<BINDIR>`` is the directory
in which you want the ``Cogent`` executable to be placed. This location should be added
to your ``$PATH``.


Test your installation
----------------------

1. Test files are in `cogent/tests <https://github.com/NICTA/cogent/tree/master/cogent/tests>`__.
   Run ``make`` with relevant targets.

-  ``make tests`` runs the entire test suite, which is **not** what you
   would like to do in most cases, as it also tests some Isabelle/HOL proofs, which
   will take very long time.
-  ``make test-compiler`` tests many of the compiler phases without involving Isabelle.
-  There are individual tests that can be triggered by ``make test-*``.
   See ``make help`` for details.
-  ``make examples`` builds a group of small but complete Cogent
   examples.

2. Cogent compiler also comes with a small unit-test module. To run
   that, do this:

::

  $> cabal new-build
  $> cabal new-test



.. _install-macos-hints:

Testing on macOS
^^^^^^^^^^^^^^^^

To run Cogent examples and some tests, you need a GNU compatible version
of ``cpp`` installed in your ``PATH``. The default ``cpp`` installed on
``macOS`` isn't GNU compatible.

A solution:

  1. Install Homebrew
  2. Run ``brew install gcc``. This will create symlinks ``gcc-8`` and ``cpp-8``
     (or whatever the latest gcc version number is) in ``/usr/local/bin`` to the newly installed version
     of ``gcc``.
  3. Provided ``ls /usr/local/bin/cpp`` outputs
     ``No such file or directory``, it should be safe to run
     ``ln -s /usr/local/bin/cpp-8 /usr/local/bin/cpp``.
  4. If ``which cpp`` doesn't print ``/usr/local/bin/cpp``, then running
     ``export PATH=/usr/local/bin:$PATH`` in any shell where you want run the
     examples will ensure that the correct version of ``cpp`` is used.

Running ``make examples`` should now be successful.


Common Issues and Troubleshooting
=================================

Cabal Version
-------------

Cogent currently relies on ``cabal >= 3.0``. Please ensure that you are using version 3. 

Missing Dependencies
--------------------

Before trying to build Cogent, ensure that ``happy`` and ``alex`` are installed with cabal/stack::

  cabal new-install happy
  cabal new-install alex

