Platform support
Safe DDS is designed to be highly portable, with support for a range of platforms and toolchains, including multiple RTOSes and bare metal environments. By default, Safe DDS provides out-of-the-box support for the set of platforms listed in Supported platforms, but it can be ported to other platforms with ease, provided that the requirements outlined in Minimum Requirements are satisfied.
Supported platforms
High portability is a key feature of Safe DDS, as it is designed for compatibility with a range of platforms, including multiple RTOSes and bare metal environments.
While out-of-the-box support is provided for a select set of platforms, porting the library to other platforms can be accomplished with ease, provided that the requirements outlined in Minimum Requirements are satisfied.
The table below summarizes Safe DDS’ supported platforms:
Platform |
Architecture |
Compiler |
CMake version |
Safety Level |
|---|---|---|---|---|
Ubuntu 22.04 |
x86_64 |
GCC 12.1.0 |
3.5.0 |
None |
QNX Neutrino 7.1 |
x86_64 |
QCC 8.3.0 |
3.5.0 |
|
FreeRTOS v11.1 |
ARM Cortex-M |
ARM GCC 10.3.1 |
3.5.0 |
None |
NuttX v12.6 |
RISC-V 32 bits |
RISC-V GCC 13.2.0 |
3.5.0 |
None |
Thread X v6.4.1 |
ARM Cortex-M |
ARM GCC 10.3.1 |
3.5.0 |
None |
Bare Metal |
ARM Cortex-M |
ARM GCC 10.3.1 |
3.5.0 |
None |
Linux 6.9.9 |
ARM Cortex-A |
Linux ARM GCC 11.4.0 |
3.5.0 |
None |
The table below summarizes Safe DDS’ supplied transports:
Communication stack |
Transport type |
Safety Level |
|---|---|---|
UDPv4 |
None |
|
UDPv4 |
||
UDPv4 |
None |
|
UDPv4 |
None |
|
UDPv4 |
None |
Portability
Safe DDS interfaces with three main elements during its deployment procedure: the platform, the transport, and the toolchain.
During the build procedure, Safe DDS’s C++ code will need to be built using a C++ compiler, which is a requirement for the library’s operation. During the execution of the library, Safe DDS will interact with the platform’s execution environment, which will provide the necessary services for the library’s operation, and with the transport, which will provide the necessary communication services.
Platform dependencies
As stated in Platform module section, Safe DDS operates with an abstraction on top of the underlaying execution platform. This way, Safe DDS will use the IPlatform interface to get access to:
the system monotonic clock reference,
underlaying memory allocators,
and error handling for stopping the execution in case of a fatal error.
Note
For more details about how to customize the platform, please check the Platform module section.
For reference, Supported platforms use the following APIs:
Ubuntu 22.04 uses the POSIX API:
clock_gettime(),calloc(), andstd::exit().QNX Neutrino 7.1 uses the POSIX API:
clock_gettime(),calloc(), andstd::exit().FreeRTOS v11 uses the FreeRTOS API:
xTaskGetTickCount()andpvPortMalloc(), andstd::exit().Other supported platforms will use the corresponding APIs for the underlaying execution environment.
Transport dependencies
As stated in Transport module section, Safe DDS provides a set of transports that encapsulate the dependencies with the underlaying communication stack. In general, Safe DDS will use the ITransport interface to be able to send and receive messages from and to locators.
Note
For more details about how to customize the transport, please check the Transport module section.
For reference, Supported platforms use the following transports:
Ubuntu 22.04 uses the POSIX sockets API:
socket(),bind(),sendmsg(), andrecvfrom(), among others.QNX Neutrino 7.1 uses the QNX Neutrino sockets API:
socket(),bind(),sendmsg(), andrecvfrom(), among others.FreeRTOS v11 uses the FreeRTOS-Plus-TCP API:
FreeRTOS_socket(),FreeRTOS_bind(),FreeRTOS_sendto(), andFreeRTOS_recvfrom(), among others.Other supported platforms will use the corresponding APIs for the underlaying communication stack.
Toolchain dependencies
During the build procedure, Safe DDS will need to be built using a C++11 compliant compiler.
As stated in Portable module section, Safe DDS provides a set of header files that encapsulate the dependencies with the C and C++ standard libraries. Those files provide default implementations assuming a standard C++11 compliant compiler but they can be overwritten to provide a custom implementation.
A complete list of the dependencies that can be overwritten or customized in Safe DDS can be found in the Portable module section.
Note
For more details about how to override the toolchain dependencies, please check the Override C++ Standard Library and Portable module section.