# 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): 13.2.0

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

Debugging tools for gcc: https://www.gnu.org/savannah-checkouts/gnu/gdb/index.html

### CMake

Version (latest tested): 3.27.3

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

### Ccache

Version (latest tested): 4.7.4

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.9.6

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.15.3

openPASS uses some features from the Qt framework. A previous version of the GUI of openPASS relied on Qt. openPASS 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.

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, 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.14.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 Dependencies 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.6.0

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

OSI in openPASS

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.

### Protocol Buffers (protobuf)

Supported Version (officially supported): 3.20.0

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.

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