# External Dependencies

OpenPASS depends on a number of external dependencies. Installation of those dependencies is described in Installing Prerequisites.

The third party software dependency of openPASS can be divided into:

- Build environment, which manages third party software and is used to compile and install openPASS

- 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): 10.2.3

OpenPASS is developed on Linux and Windows (64-Bit) in C++17 using the GNU Compiler Collection (gcc).

Useful hints

- openPASS 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 openPASS Working Group.

### 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

OpenPASS uses CMake for building and testing. For details on the provided options, see CMake Variables and Options.

### Ccache

Version (latest tested): 3.7.11

OpenPASS supports the compiler cache Ccache for faster recompilation. Use only, if you need to recompile regularly.

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.

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

OpenPASS uses some features from the Qt framework. While the GUI of openPASS (Open Source) heavily relies on it, the simulator tries to stick to the C++ standard framework as far as possible.

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, openPASS uses parts of the Boost C++ Libraries.

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 and OpenPASS 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 Installing the Source Packages for a step-by-step instruction on how to download, build and install needed source packages.

Details on source packages:

### Open Simulation Interface (OSI)

Version (officially supported): 3.3.1

The internal world representation uses the Open Simulation Interface (OSI) as part of its ground truth (backend storage) and exchange format.

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, openPASS holds data for non-sensor centric data, such as metainfo on lanes and roads.

As shown, OSI itself depends on Protocol Buffers (protobuf). If not already installed, the library and headers have to be built prior to OSI.

Note on Versions

OpenPASS supports integration of custom made or experimental versions of OSI (see Build and Install OSI). For example, Algorithm_FmuWrapper and the wrapped OSMP FMUs use the proposed OSI messages MotionCommand and VehicleCommunicationData, not yet defined in OSI 3.3.1.

### Protocol Buffers (protobuf)

Supported Version (officially supported): 3.12.2

Open Simulation Interface (OSI) uses Protocol Buffers for describing and serialization of its datastructures.

Note on Versions

- So far, no version limitations known (including 2.x).

- OpenPASS lets you integrate your own protobuf libraries if necessary (see Custom Protobuf Build).

### 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 openPASS can be compiled (see Build and Install FMIL).