4.1. Introduction

This section provides platform-specific instructions that you will need to build and run RTI Connext Micro applications.

For each supported operating system (OS), this section describes:

  • Supported combinations of OS versions, CPUs, and compilers

  • How to build your application, including:

    • Required Connext Micro and system libraries

    • Required compiler and linker flags

    • Details on how the Connext Micro libraries were built

To see a list of all supported platforms, refer to Supported Platforms and Programming Languages.

4.1.1. Library types

Connext Micro provides precompiled binaries for supported architectures. This section explains the different library types and gives a general description of the binaries shipped by RTI.

In this section, the following terms are used:

  • toolchain refers to the compiler, linker, and archiver for a specific CPU architecture, excluding dependencies in standard header files and libraries.

  • platform refers to the hardware, BSPs, OS kernel, and C/C++ libraries that are not included in the toolchain (such as libc, libc++, and the network stack).

RTI builds two types of binaries for Connext Micro: integrated libraries and split libraries. RTI may include either or both types of binaries for a given target architecture.

4.1.1.1. Integrated libraries

All Connext Micro target packages include a core library called rti_me. The rti_me library includes all the required basic functionality for Connext Micro.

The term “integrated library” refers to an rti_me library where all the OS integration and network stack integration is compiled directly into rti_me. This means that it is not possible to change how the OS and network integration has been written without recompiling the entire library. This is illustrated below:

../_images/IntegratedLibrary_Overview.png

Figure 4.1 An overview of rti_me as an integrated library

Note

All binaries provided for Connext Micro version 4.0.1 and below are integrated libraries.

4.1.1.2. Split libraries

In contrast to an integrated library, split libraries consist of a Platform Independent Library (PIL) and a Platform Support Library (PSL).

The PIL is an rti_me library that includes all functionality for Connext Micro except for platform integration code.

The PSL consists of two libraries that support OS integration and network stack integration:

  • The OS Platform Support Library (ospsl): Contains the required OS support, such as mutex and semaphore support. This library is very limited in functionality.

  • The Network Support Library (netiopsl): Includes support for transports, such as UDPv4.

The ospsl and netiopsl libraries are collectively referred to as the PSL (even though it is more than one library).

This is illustrated below:

../_images/PIL_Overview.png

Figure 4.2 An overview of split libraries

The main benefit of split libraries is that different PSLs can be written for the same PIL without having to recompile the platform-independent code.

Note

The PIL is compiled without standard C header files and is only dependent on the toolchain. This is different from the integrated libraries, which are compiled with standard C header files.

The PSL is always compiled against the standard C header files, as well as other platform-dependent header files.

4.1.2. Library descriptions

The following libraries are included in the target bundle. Note that the names listed below do not include platform-specific prefixes or suffixes.

Depending on the target architecture, the library name is prefixed with lib and the library suffix also varies between target architectures, such as .so and .dylib.

The following naming conventions are also used:

  • Static libraries have a z suffix.

  • Shared libraries do not have an additional suffix.

  • Debug libraries have a d suffix.

  • Release libraries do not have an additional suffix.

For example:

  • rti_mezd indicates a static debug library.

  • rti_me indicates a dynamically linked release library.

Table 4.1 Target Bundle Libraries

Library Name

Description

rti_me

The core library, including the DDS C API.

rti_me_discdpse

The Dynamic Participant Static Endpoint (DPSE) plugin.

rti_me_discdpde

The Dynamic Participant Dynamic Endpoint (DPDE) plugin.

rti_me_rhsm

The Reader History plugin.

rti_me_whsm

The Writer History plugin.

rti_me_netiosdm

The Zero Copy v1 over shared memory transport library plugin.

rti_me_netioshmem

The Shared Memory Transport plugin.

rti_me_appgen

The Application Generation plugin.

rti_me_cpp

The C++ API.

rti_me_ospsl

The OS PSL.

rti_me_netiopsl

The C NETIO PSL.

rti_me_netiopsl_cpp

The C++ NETIO PSL library.

rti_me_netiozcopy

The Zero Copy v2 transport library plugin (not supported on all platforms).

rti_me_ddsfilter

The content filtering library.

rti_me_ddsxtypes

The X-Types library.

rti_me_ddspsk

The Lightweight Security Plugin PIL (installed separately, not supported on all platforms).

rti_me_pskpsl

The Lightweight Security Plugin Transform PSL (installed separately, not supported on all platforms).

4.1.3. Build profiles

You can optionally build Connext Micro with a CERT profile. This restricts Connext Micro to only include features that are available or planned for Connext Cert; for more information, see Building Connext Micro with Compatibility for Connext Cert.

Any architecture ending with CERT is built with the CERT profile enabled.

Some features are only available on specific platforms; see the footnotes in the table below.

Table 4.2 Features by Profile

Feature/Capability

Non-CERT Profile

CERT Profile

Dynamic Participant Discovery

Static Endpoint Discovery

Dynamic Endpoint Discovery

C++ API

Shared Memory Transport (SHMEM)

1

Zero Copy v1

1

Zero Copy v2

1 2

1 2

Micro Application Generator (MAG)

Content Filtering

Lightweight Security Plugin

3

3

X-Types

1(1,2,3,4)

Not supported on FreeRTOS platforms.

2(1,2)

Not supported on Windows and macOS platforms.

3(1,2)

Not supported on macOS and FreeRTOS platforms.

4.1.4. Supported libraries by platform

The following table shows which Connext Micro libraries are supported on each platform (RTI architecture).

Table 4.3 Supported Libraries by Platform

Platform

RTI Architecture

Supported Libraries

Windows 10 x64

x86_64lePEvs2017

rti_me

rti_me_whsm

rti_me_rhsm

rti_me_discdpse

rti_me_discdpde

rti_me_netiosdm

rti_me_netioshmem

rti_me_appgen

rti_me_cpp

rti_me_ddsxtypes

rti_me_ddsfilter

rti_me_ddspsk

x86_64lePEvs2017CERT

rti_me

rti_me_ddspsk

macOS 14 x64

x86_64leMachOclang15.0

rti_me

rti_me_whsm

rti_me_rhsm

rti_me_discdpse

rti_me_discdpde

rti_me_netiosdm

rti_me_netioshmem

rti_me_appgen

rti_me_cpp

rti_me_ddsxtypes

rti_me_ddsfilter

x86_64leMachOclang15.0CERT

rti_me

macOS 14 arm64

armv8leMachOclang15.0

rti_me

rti_me_whsm

rti_me_rhsm

rti_me_discdpse

rti_me_discdpde

rti_me_netiosdm

rti_me_netioshmem

rti_me_appgen

rti_me_cpp

rti_me_ddsxtypes

rti_me_ddsfilter

armv8leMachOclang15.0CERT

rti_me

Ubuntu 22.04 x64

x86_64leElfgcc12.3.0

rti_me

rti_me_whsm

rti_me_rhsm

rti_me_discdpse

rti_me_discdpde

rti_me_netiosdm

rti_me_netioshmem

rti_me_netiozcopy

rti_me_appgen

rti_me_cpp

rti_me_ddsxtypes

rti_me_ddsfilter

rti_me_ddspsk

x86_64leElfgcc12.3.0CERT

rti_me

rti_me_netiozcopy

rti_me_ddspsk

Ubuntu 18.04 ARMv8

armv8leElfgcc7.3.0

rti_me

rti_me_whsm

rti_me_rhsm

rti_me_discdpse

rti_me_discdpde

rti_me_netiosdm

rti_me_netioshmem

rti_me_netiozcopy

rti_me_appgen

rti_me_cpp

rti_me_ddsxtypes

rti_me_ddsfilter

rti_me_ddspsk

armv8leElfgcc7.3.0CERT

rti_me

rti_me_netiozcopy

rti_me_ddspsk

Yocto 5.15.96

armv8aleElfgcc11.3.1

rti_me

rti_me_whsm

rti_me_rhsm

rti_me_discdpse

rti_me_discdpde

rti_me_netiosdm

rti_me_netioshmem

rti_me_netiozcopy

rti_me_appgen

rti_me_cpp

rti_me_ddsxtypes

rti_me_ddsfilter

rti_me_ddspsk

armv8aleElfgcc11.3.1CERT

rti_me

rti_me_netiozcopy

rti_me_ddspsk

QNX 7.1 ARMv8

armv8leElfqnx_qcc8.3.0

rti_me

rti_me_whsm

rti_me_rhsm

rti_me_discdpse

rti_me_discdpde

rti_me_netiosdm

rti_me_netioshmem

rti_me_netiozcopy

rti_me_appgen

rti_me_cpp

rti_me_ddsxtypes

rti_me_ddsfilter

rti_me_ddspsk

armv8leElfqnx_qcc8.3.0CERT

rti_me

rti_me_netiozcopy

rti_me_ddspsk

QOS 2.2.1 (QNX OS for Safety)

armv8leElfqcc8.3.0

rti_me

rti_me_whsm

rti_me_rhsm

rti_me_discdpse

rti_me_discdpde

rti_me_netiosdm

rti_me_netioshmem

rti_me_netiozcopy

rti_me_appgen

rti_me_cpp

rti_me_ddsxtypes

rti_me_ddsfilter

rti_me_ddspsk

armv8leElfqcc8.3.0CERT

rti_me

rti_me_netiozcopy

rti_me_ddspsk

FreeRTOS 10.0.0 ARMv7E-M

armv7emleElfgcc10.3.1

rti_me

rti_me_whsm

rti_me_rhsm

rti_me_discdpse

rti_me_discdpde

rti_me_appgen

rti_me_cpp

rti_me_ddsxtypes

rti_me_ddsfilter

armv7emleElfgcc10.3.1CERT

rti_me

4.1.5. Supported transports by platform

The following table shows which transports are supported on each architecture.

Table 4.4 Supported Transports by Platform

Platform

RTI Architecture

Intra

UDPv4

SHMEM

Zero Copy v1

Zero Copy v2

Windows 10 x64

x86_64lePEvs2017

x86_64lePEvs2017CERT

macOS 14 x64

x86_64leMachOclang15.0

x86_64leMachOclang15.0CERT

macOS 14 arm64

armv8leMachOclang15.0

armv8leMachOclang15.0CERT

Ubuntu 22.04 x64

x86_64leElfgcc12.3.0

x86_64leElfgcc12.3.0CERT

Ubuntu 18.04 ARMv8

armv8leElfgcc7.3.0

armv8leElfgcc7.3.0CERT

Auto Yocto Linux BSP 37.0

armv8aleElfgcc11.3.1

armv8aleElfgcc11.3.1CERT

QNX 7.1 ARMv8

armv8leElfqnx_qcc8.3.0

armv8leElfqnx_qcc8.3.0CERT

QOS 2.2.1 (QNX OS for Safety)

armv8leElfqcc8.3.0

armv8leElfqcc8.3.0CERT

FreeRTOS 10.4.6 ARMv7E-M

armv7emleElfgcc10.3.1

armv7emleElfgcc10.3.1CERT