blob: b2404cdb3a250fb3a191601fee0589e81653bd0d [file] [log] [blame]
..
************************************************************
Copyright (c) 2021 in-tech GmbH
This program and the accompanying materials are made
available under the terms of the Eclipse Public License 2.0
which is available at https://www.eclipse.org/legal/epl-2.0/
SPDX-License-Identifier: EPL-2.0
************************************************************
.. _prerequisites:
Prerequisites
=============
This section gives detailed information about the prerequisite and tested version.
In short:
.. tabs::
.. tab:: Windows (MSYS2)
.. literalinclude:: _static/msys2_packages.txt
:language: bash
Details: :ref:`building_under_windows`
.. tab:: Linux (Debian Bullseye)
.. code-block:: bash
apt install ccache
apt install cmake
apt install doxygen
apt install googletest
apt install gcc
apt install g++
apt install graphviz
apt install libprotobuf-dev
apt install protobuf-compiler # when building osi
apt install qt5-default
Details: :ref:`building_under_linux`
GNU Compiler Collection (gcc)
-----------------------------
**Version (latest tested):** 10.2.3
|Op| is developed on Linux and Windows (64-Bit) in `C++17 <https://isocpp.org/>`_ using the GNU Compiler Collection (`gcc <https://gcc.gnu.org/>`_).
.. admonition:: Useful hints
- | |op| has been developed using gcc 7.x, 8.x, 9.x, and more recently gcc 10.x.
| There are no known issues regarding the different versions.
- Since no compiler specific features are used, the source should also compile with `clang <https://clang.llvm.org/>`_.
- Generally, there is support for `MSVC <https://docs.microsoft.com/en-us/cpp/build/reference/c-cpp-building-reference>`_ , but currently not actively maintained by the |opwg|.
GNU Debugger (gdb)
------------------
**Version (latest tested):** 9.2
Debugging tools for gcc: https://www.gnu.org/savannah-checkouts/gnu/gdb/index.html
CMake
-----
**Version (latest tested):** 3.18.4
|Op| uses `CMake <https://cmake.org/>`_ for building and testing.
For details on the provided options, see :ref:`cmake`.
.. Note:: The former support for ``qmake`` is expiring and not documented anymore.
.. _prerequisites_ccache:
Ccache
------
**Version (latest tested):** 3.7.11
|Op| supports the compiler cache `Ccache <https://ccache.dev/>`_ for faster recompilation.
Use only, if you need to recompile regularly.
.. admonition:: Useful hints
- The first compilation is definilty slower (e.g. by 30%), as the cache needs to be built.
- If used regularily, increasing the cache size is recommended, e.g.: ``ccache -M 20G``
Doxygen
-------
**Version (latest tested):** 1.8.20
Documentation is created using `Doxygen <https://www.doxygen.nl/index.html>`_.
.. admonition:: Useful hints
- Doxygen introduced support for Markdown with 1.8, which is still in use.
Don't use older versions.
Qt Framework
------------
**Version (officially supported):** 5.12.3
|Op| uses some features from the `Qt <https://www.qt.io/>`_ framework.
While the GUI of |op_oss| heavily relies on it, the simulation core tries to stick to the C++ standard framework as far as possible.
.. admonition:: Note on Versions
| Versions starting from 5.4 should generally work, but are not officially supported anymore/yet.
| Version 5.15.1 has been reported to work well.
Boost C++ Libraries
-------------------
**Version (officially supported):** 1.72.0
Especially for geometrical calculations, |op| uses parts of the `Boost C++ Libraries <https://www.boost.org/>`_.
.. admonition:: Note on Versions
More recent versions should integrate without issues, but 1.74.0 already raise warnings for some deprecated headers.
googletest
----------
**Version (officially supported)** 1.10.0
Tests are written in `googletest <https://github.com/google/googletest>`_ and |Op| makes use of the included *googletest* (gtest) C++ testing framework, as well as the included mocking framework *googlemock* (gmock).
.. note::
The lastest major release brought several API changes, which made some code fixes necessary.
Use newer versions with precaution.
.. _prerequisites_osi:
Open Simulation Interface (OSI)
-------------------------------
**Version (officially supported):** 3.2.0
The internal world representation uses the `Open Simulation Interface <https://github.com/OpenSimulationInterface>`_ (:term:`OSI`) as part of its ground truth (backend storage) and exchange format.
.. figure:: _static/images/osi_in_openpass.png
:align: center
:scale: 60%
:alt: OSI in |op|
Interaction between World and consumers of OSI messages.
Thereby, OSI provides data structures for representation of various objects in traffic simulation environments.
Note that OSI is primarily developed in a sensor centric view, such as lane markings and object boundaries.
Beyond that, |op| holds data for non-sensor centric data, such as metainfo on lanes and roads.
As shown, OSI itself depends on :ref:`prerequisites_protobuf`.
If not already installed, the library and headers have to be built prior to OSI.
.. admonition:: Note on Versions
|Op| supports **integration of custom made or experimental versions** of OSI (see :ref:`building_osi`).
For example, `Algorithm_FmuWrapper` and the wrapped `OSMP` FMUs use the proposed OSI messages `TrafficUpdate` and `TrafficCommand`, not yet defined in OSI 3.2.0.
.. _prerequisites_protobuf:
Protocol Buffers (protobuf)
---------------------------
**Supported Version (officially supported):** 3.12.2
:ref:`prerequisites_osi` uses `Protocol Buffers <https://developers.google.com/protocol-buffers>`_ for describing and serialization of its datastructures.
.. admonition:: Note on Versions
- So far, no version limitations known (including 2.x).
- |Op| lets you integrate your own protobuf libraries if necessary (see :ref:`building_protobuf`).
Modelon FMI Library (FMIL)
--------------------------
**Supported Version:** 2.0.3
For integration of Functional Mock-up Units (FMUs) the `Algorithm_FmuWrapper` uses the `Modelon FMI Library <https://github.com/modelon-community/fmi-library>`_.
As there is no binary available, FMIL needs to be build from scratch before |op| can be compiled (see :ref:`building_fmil`).