Building |me_h| with compatibility for |me_cert_h| ================================================== It is possible to compile |me| to support only the same set of APIs and features as |me_cert|. This is useful to enable the development of a safety-certified project using |me| before the certification of |me_cert| is completed. Once |me_cert| certification is finished, it will be easier to switch from |me| to |me_cert| if |me| has been compiled with compatibility for |me_cert|. When compiling |me| with compatibility for |me_cert|, the following restrictions apply: - The C++ API is not supported. - Dynamic Participant Dynamic Endpoint (`DPDE`_) discovery is not compiled by default. To make application development easier, `DPDE`_ can be enabled (any application using this discovery cannot be certified). `DPDE`_ discovery is not certified. - Memory deallocation is not possible. - Any API that deallocates memory is not supported. In other words, any API whose name includes “finalize”, “free”, or “delete” is not supported (such as ``DDS_DomainParticipantFactory_delete_participant()``, ``DDS_DomainParticipantQos_finalize()``, ``OSAPI_Heap_free()``). - Only POSIX®-compliant systems (Linux, macOS, QNX, etc.), VxWorks and AUTOSAR are supported (Windows systems are not supported). - Only static libraries are compiled. Dynamic libraries are not supported. - Only one static library is built. While |me| consists of different libraries for discovery, reader and writer history, etc, |me_cert| consists of only one library. - Code generated by the |me| code generator is compatible with |me_cert|, but the code must be generated again with the |me_cert| code generator. - The Log module is only available in the debug build. - The UDP transport shall be configured statically by using the API ``UDP_InterfaceTable_add_entry()`` and setting ``UDP_InterfaceFactoryProperty.disable_auto_interface_config`` equal to ``RTI_TRUE``. - ``OSAPI_Thread_sleep()`` is not available. - Batching reception is not supported. - UDP Transformations are not supported. To compile |me| with compatibility with |me_cert|, you only need to set the CMake flag RTIME_CERT when compiling. For example, the following command compiles |me| on a Linux system with |me_cert| compatibility: :: resource/scripts/rtime-make --target Linux --name x64Linux4gcc9.3.0 --build --config Debug -DRTIME_CERT=1 The CMake flag RTIME_CERT instructs the build system to build |me| with |me_cert| compatibility. In the previous example, a 64-bit debug library is generated in the directory ``lib/x64Linux4gcc9.3.0``. Instead of using the flag -DRTIME_CERT=1, it is also possible to add the suffix “_cert” to the build name, and the build system will automatically set the RTIME_CERT flag. For example: :: resource/scripts/rtime-make --target Linux --name x64Linux4gcc9.3.0_cert --build --config Release The previous command compiles a 64-bit release library in the directory ``lib/x64Linux4gcc9.3.0_cert``. As mentioned earlier, it is possible to enable `DPDE`_ (Dynamic Participant Dynamic Endpoint) discovery, but this discovery is not certified so any application using it cannot be certified. To enable `DPDE`_ discovery when building |me| with |me_cert| compatibility, simply add the following flag when compiling: **-DRTIME_EXCLUDE_DPDE=0**.