qp2/INSTALL.rst

290 lines
7.3 KiB
ReStructuredText

============
Installation
============
The |qp| can be downloaded on GitHub as an `archive
<https://github.com/LCPQ/quantum_package/releases/latest>`_ or as a `git
repository <https://github.com/LCPQ/quantum_package>`_.
.. code:: bash
git clone https://github.com/LCPQ/quantum_package
Before anything, go into your :file:`quantum_package` directory and run
.. code:: bash
./configure
This script will create the :file:`quantum_package.rc` bash script, which
sets all the environment variables required for the normal operation of the
*Quantum Package*.
Running this script will also tell you which external dependencies are missing
and need to be installed.
When all dependencies have been installed, ( the :command:`configure` will tell you)
source the :file:`quantum_package.rc` in order to load all environment variables and compile the |QP|.
Requirements
============
- Linux OS
- Fortran compiler : GNU Fortran, Intel Fortran or IBM XL Fortran
- `GNU make`_
- `Autoconf`_
- `Python`_ > 2.6
- |IRPF90| : Fortran code generator
- |EZFIO| : Easy Fortran Input/Output library generator
- |BLAS| and |LAPACK|
- `Zlib`_
- `GNU Patch`_
- |ZeroMQ| : networking library
- |OCaml| compiler with |OPAM| package manager
- |Ninja| : a parallel build system
When all the dependencies have been installed, go into the :file:`config`
directory, and copy the configuration file that corresponds to your
architecture. Modify it if needed, and run :command:`configure` with
:option:`configure -c`.
.. code:: bash
cp ./config/gfortran.example config/gfortran.cfg
./configure -c config/gfortran.cfg
.. note::
The ``popcnt`` instruction accelerates *a lot* the programs, so the
SSE4.2, AVX or AVX2 instruction sets should be enabled in the
configuration file if possible.
Help for installing external dependencies
=========================================
Using the :command:`configure` executable
-----------------------------------------
The :command:`configure` executable can help you in installing the minimal dependencies you will need to compile the |QP|.
The command is to be used as follows:
.. code:: bash
./configure --install <package>
The following packages are supported by the :command:`configure` installer:
* ninja
* irpf90
* zeromq
* f77zmq
* ocaml ( :math:`\approx` 10 minutes)
* ezfio
* docopt
* resultsFile
* bats
Example:
.. code:: bash
./configure -i ezfio
.. note::
When installing the ocaml package, you will be asked the location of where it should be installed.
A safe option is to enter the path proposed by the |QP|:
QP>> Please install it here: /your_quantum_package_directory/bin
So just enter the proposition of the |QP| and press enter.
If the :command:`configure` executable fails to install a specific dependency
-----------------------------------------------------------------------------
If the :command:`configure` executable does not succeed to install a specific dependency,
there are some proposition of how to download and install the minimal dependencies to compile and use the |QP|
Before doing anything below, try to install the packages with your package manager
(:command:`apt`, :command:`yum`, etc)
Ninja
-----
*Ninja* is a build system (like GNU make), with a focus on speed.
* Download the latest binary version of Ninja
here : `<https://github.com/ninja-build/ninja/releases/latest>`_
* Unzip the ninja-linux.zip file, and move the ninja binary into
the :file:`${QP_ROOT}/bin` directory.
IRPF90
------
*IRPF90* is a Fortran code generator for programming using the Implicit Reference
to Parameters (IRP) method.
* Download the latest version of IRPF90
here : `<https://github.com/scemama/irpf90/releases/latest>`_ and move
the downloaded archive in the :file:`${QP_ROOT}/external` directory
* Extract the archive and go into the :file:`irpf90-*` directory to run
:command:`make`
.. note::
The :envvar:`IRPF90_PATH` variable may need to be updated in the configuration
file :file:`${QP_ROOT}/etc/irpf90.rc`.
ZeroMQ and its Fortran binding
------------------------------
*ZeroMQ* is a high-performance asynchronous messaging library.
* Download the latest stable version of ZeroMQ
here : `<https://github.com/zeromq/libzmq/releases/latest>`_ and move the
downloaded archive in the :file:`${QP_ROOT}/external` directory
* Extract the archive, go into the :file:`zeromq-*` directory and run
the following commands
.. code:: bash
./configure --prefix="${QP_ROOT}" --without-libsodium
make
make install
* Download the Fortran binding
here : `<https://github.com/zeromq/f77_zmq/releases/latest>`_ and move
the downloaded archive in the :file:`${QP_ROOT}/external` directory
* Extract the archive, go into the :file:`f77_zmq-*` directory and run
the following commands
.. code:: bash
export ZMQ_H=${QP_ROOT}/include/zmq.h
make
cp libf77zmq.a ${QP_ROOT}/lib
cp libf77zmq.so ${QP_ROOT}/lib
* Copy the :file:`f77_zmq_free.h` file in the ``ZMQ`` module as follows:
.. code:: bash
cp f77_zmq_free.h ${QP_ROOT}/src/ZMQ/f77_zmq.h
Zlib
----
*Zlib* is the compression library used by *gzip*.
* Download the latest version of Zlib here:
`<https://www.zlib.net/zlib-1.2.11.tar.gz>`_
and move it in the :file:`${QP_ROOT}/external` directory
* Extract the archive, go into the :file:`zlib-*` directory and run
the following commands
.. code:: bash
./configure --prefix=${QP_ROOT}
make
make install
OCaml
-----
*OCaml* is a general purpose programming language with an emphasis on expressiveness and safety.
* Download the installer of the OPAM package manager here :
`<https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh>`_
and move it in the :file:`${QP_ROOT}/external` directory
* If you use OCaml only with the |qp|, you can install the OPAM directory
containing the compiler and all the installed libraries in the
:file:`${QP_ROOT}/external` directory as
.. code:: bash
export OPAMROOT=${QP_ROOT}/external/opam
* Run the installer
.. code:: bash
echo ${QP_ROOT}/bin
${QP_ROOT}/external/opam_installer.sh --no-backup --fresh
You the :command:`opam` command can be installed in the :file:`${QP_ROOT}/bin`
directory. To do this, take the output of ``echo ${QP_ROOT}/bin`` and
use it as an answer to where :command:`opam` should be installed.
* Install the OCaml compiler
.. code:: bash
opam init --disable-sandboxing --comp=4.07.0
eval `${QP_ROOT}/bin/opam env`
* Install the required external OCaml libraries
.. code:: bash
opam install ocamlbuild cryptokit zmq core sexplib ppx_sexp_conv ppx_deriving getopt
EZFIO
-----
*EZFIO* is the Easy Fortran Input/Output library generator.
* Download EZFIO here : `<https://gitlab.com/scemama/EZFIO/-/archive/master/EZFIO-master.tar.gz>`_ and move
the downloaded archive in the :file:`${QP_ROOT}/external` directory
* Extract the archive, and rename it as :file:`${QP_ROOT}/external/ezfio`
Docopt
------
*Docopt* is a Python package defining a command-line interface description language.
If you have *pip* for Python2, you can do
.. code:: bash
pip2 install --user docopt
Otherwise,
* Download the archive here : `<https://github.com/docopt/docopt/releases/tag/0.6.2>`_
* Extract the archive
* Copy :file:`docopt-0.6.2/docopt.py` in the :file:`${QP_ROOT}/scripts` directory