Compiling
=====================================
Dependencies
*************
ZERO requires a few external libraries to work. Most of these are managed via `Conda `__ package manager.
A mandatory requirement to use the software as-it-is is `CMake `__, which will manage the integration with Conan by itself.
The required packages for ZERO are:
- `CMake `__ (Version 3.14 or later)
- `Conda `__ (A somehow recent version)
- `Gurobi `__ (Version 9.2 or later) as a MIP solver.
- `PATH `__ (Version 5.0 or later) as an LCP solver. You can get a license `here `__.
The following packages will be installed by Conda
- `Armadillo `__ (Version 9.8 or later) for the linear algebra.
- `Boost `__ (Version 1.72 or later) required for the shell interfaces and the unit tests.
- `RapidJSON `__ (Version 1.1.0 or later) suggested but not mandatory for easy management of JSON output files.
- `CoinOR `__ Cgl, Osi, and Utils (Builds >= Jan 2021) for cut generation, solver interfaces and utilities.
Recommended but not mandatory for the documentation
- `DOxygen `__ (Version 1.8 or later) to generate the C++ documentation
- `Sphinx `__ (Version 1.8 or later) to render the HTML into a ReadTheDocs template
- `Exhale `__ (Version 0.2.3 or later) and `Breathe `__ (Version 4.10 or later) to integrate Doxygen, Sphinx and the ReadTheDocs template
Downloading and Compiling
*********************************
First, clone the repository of ZERO from GitHub with:
.. code-block:: python
git clone https://github.com/ds4dm/ZERO
To build the targets with CMake, then:
.. code-block:: python
cd ZERO/
cmake .. && make
If the required packages are installed, Conda and CMake will correctly perform the installation by fetching the remaining components.
* You can supply an extra hint for the Gurobi PATH with the CMake argument `-DZERO_GUROBIHINT:STRING=/gurobi_path/distribution`
* You can disable external dependencies install through conda with the CMake argument `-DZERO_INSTALL_DEPS=OFF`