.. ******************************************************************************* Copyright (c) 2021-2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) 2023 Mercedes-Benz Tech Innovation GmbH This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0. SPDX-License-Identifier: EPL-2.0 ******************************************************************************* External Dependencies ===================== |OP| depends on a number of external dependencies. Installation of those dependencies is described in :ref:`prerequisites`. The third party software dependency of |op| can be divided into: - **Build environment**, which manages third party software and is used to compile and install |op| - **Binary packages**, which can be easily installed via a package manager of the respective build environment - **Source packages**, which need to be built from source code This section gives an overview of the dependencies and how they are used. Information on Binary Packages ------------------------------ GNU Compiler Collection (gcc) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Version (latest tested): 13.2.0 |Op| is developed on Linux and Windows (64-Bit) in `C++17 `_ using the GNU Compiler Collection (`gcc `_). .. 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 `_. - Generally, there is support for `MSVC `_ , but currently not actively maintained by the |opwg|. GNU Debugger (gdb) ~~~~~~~~~~~~~~~~~~ Version (latest tested): 13.2.0 Debugging tools for gcc: https://www.gnu.org/savannah-checkouts/gnu/gdb/index.html CMake ~~~~~ Version (latest tested): 3.27.3 |Op| uses `CMake `_ for building and testing. For details on the provided options, see :ref:`cmake`. .. _prerequisites_ccache: Ccache ~~~~~~ Version (latest tested): 4.7.4 |Op| supports the compiler cache `Ccache `_ 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.9.6 Documentation is created using `Doxygen `_. .. 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.15.3 |Op| uses some features from the `Qt `_ framework. A previous version of the GUI of |op| relied on Qt. |Op| itself tries to stick to the C++ standard framework as far as possible, but still uses the Qt framework for some tasks, e.g. xml parsing. .. admonition:: Note on Versions | Versions starting from 5.4 should generally work, but are not officially supported anymore/yet. Boost C++ Libraries ~~~~~~~~~~~~~~~~~~~ Version (officially supported): 1.72.0 Especially for geometrical calculations, |op| uses parts of the `Boost C++ Libraries `_. .. 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.14.0 Tests are written in `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. Information on Source Packages ------------------------------ The second and last set of dependencies we need to dissolve are based on source packages. Since installing such source packages is not easy, we have dedicated a separate chapter on this topic. See :ref:`building_prerequisites` for a step-by-step instruction on how to download, build and install needed source packages. Details on source packages: .. _prerequisites_osi: Open Simulation Interface (OSI) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Version (officially supported): 3.5.0 The internal world representation uses the `Open Simulation Interface `_ (: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. .. _prerequisites_protobuf: Protocol Buffers (protobuf) ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Supported Version (officially supported): 3.20.0 :ref:`prerequisites_osi` uses `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 `_. As there is no binary available, FMIL needs to be build from scratch before |op| can be compiled (see :ref:`building_fmil`).