| # Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
| # file LICENSE.rst or https://cmake.org/licensing for details. |
| |
| #[=======================================================================[.rst: |
| FindRTI |
| ------- |
| |
| Finds HLA RTI standard libraries and their include directories: |
| |
| .. code-block:: cmake |
| |
| find_package(RTI [...]) |
| |
| `RTI <https://en.wikipedia.org/wiki/Run-time_infrastructure_(simulation)>`_ |
| (Run-Time Infrastructure) is a simulation infrastructure standardized by IEEE |
| and SISO, required when implementing HLA (High Level Architecture). It provides |
| a well-defined C++ API, ensuring that M&S (Modeling and Simulation) applications |
| remain independent of a particular RTI implementation. |
| |
| Result Variables |
| ^^^^^^^^^^^^^^^^ |
| |
| This module defines the following variables: |
| |
| ``RTI_FOUND`` |
| Boolean indicating whether HLA RTI was found. |
| ``RTI_LIBRARIES`` |
| The libraries to link against to use RTI. |
| ``RTI_DEFINITIONS`` |
| Compile definitions for using RTI. Default value is set to |
| ``-DRTI_USES_STD_FSTREAM``. |
| |
| Cache Variables |
| ^^^^^^^^^^^^^^^ |
| |
| The following cache variables may also be set: |
| |
| ``RTI_INCLUDE_DIR`` |
| Directory where RTI include files are found. |
| |
| Examples |
| ^^^^^^^^ |
| |
| Finding RTI and creating an imported interface target for linking it to a |
| project target: |
| |
| .. code-block:: cmake |
| |
| find_package(RTI) |
| |
| if(RTI_FOUND AND NOT TARGET RTI::RTI) |
| add_library(RTI::RTI INTERFACE IMPORTED) |
| set_target_properties( |
| RTI::RTI |
| PROPERTIES |
| INTERFACE_INCLUDE_DIRECTORIES "${RTI_INCLUDE_DIR}" |
| INTERFACE_LINK_LIBRARIES "${RTI_LIBRARIES}" |
| INTERFACE_COMPILE_DEFINITIONS "${RTI_DEFINITIONS}" |
| ) |
| endif() |
| |
| target_link_libraries(example PRIVATE RTI::RTI) |
| #]=======================================================================] |
| |
| macro(RTI_MESSAGE_QUIETLY QUIET TYPE MSG) |
| if(NOT ${QUIET}) |
| message(${TYPE} "${MSG}") |
| endif() |
| endmacro() |
| |
| set(RTI_DEFINITIONS "-DRTI_USES_STD_FSTREAM") |
| |
| # noqa: spellcheck off |
| # Detect the CERTI installation: |
| # - https://www.nongnu.org/certi/ |
| # - Mailing list for reporting issues and development discussions: |
| # <certi-devel@nongnu.org> |
| # Detect the MAK Technologies RTI installation: |
| # - https://www.mak.com/mak-one/tools/mak-rti |
| # note: the following list is ordered to find the most recent version first |
| set(RTI_POSSIBLE_DIRS |
| ENV CERTI_HOME |
| "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MAK Technologies\\MAK RTI 3.2 MSVC++ 8.0;Location]" |
| "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MAK RTI 3.2-win32-msvc++8.0;InstallLocation]" |
| "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MAK Technologies\\MAK RTI 2.2;Location]" |
| "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MAK RTI 2.2;InstallLocation]") |
| |
| set(RTI_OLD_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES}") |
| # The MAK RTI has the "lib" prefix even on Windows. |
| set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "") |
| # noqa: spellcheck on |
| |
| find_library(RTI_LIBRARY |
| NAMES RTI RTI-NG |
| PATHS ${RTI_POSSIBLE_DIRS} |
| PATH_SUFFIXES lib |
| DOC "The RTI Library") |
| |
| if (RTI_LIBRARY) |
| set(RTI_LIBRARIES ${RTI_LIBRARY}) |
| RTI_MESSAGE_QUIETLY(RTI_FIND_QUIETLY STATUS "RTI library found: ${RTI_LIBRARY}") |
| else () |
| RTI_MESSAGE_QUIETLY(RTI_FIND_QUIETLY STATUS "RTI library NOT found") |
| endif () |
| |
| find_library(RTI_FEDTIME_LIBRARY |
| NAMES FedTime |
| PATHS ${RTI_POSSIBLE_DIRS} |
| PATH_SUFFIXES lib |
| DOC "The FedTime Library") |
| |
| if (RTI_FEDTIME_LIBRARY) |
| set(RTI_LIBRARIES ${RTI_LIBRARIES} ${RTI_FEDTIME_LIBRARY}) |
| RTI_MESSAGE_QUIETLY(RTI_FIND_QUIETLY STATUS "RTI FedTime found: ${RTI_FEDTIME_LIBRARY}") |
| endif () |
| |
| find_path(RTI_INCLUDE_DIR |
| NAMES RTI.hh |
| PATHS ${RTI_POSSIBLE_DIRS} |
| PATH_SUFFIXES include |
| DOC "The RTI Include Files") |
| |
| if (RTI_INCLUDE_DIR) |
| RTI_MESSAGE_QUIETLY(RTI_FIND_QUIETLY STATUS "RTI headers found: ${RTI_INCLUDE_DIR}") |
| else () |
| RTI_MESSAGE_QUIETLY(RTI_FIND_QUIETLY STATUS "RTI headers NOT found") |
| endif () |
| |
| # Set the modified system variables back to the original value. |
| set(CMAKE_FIND_LIBRARY_PREFIXES "${RTI_OLD_FIND_LIBRARY_PREFIXES}") |
| |
| include(FindPackageHandleStandardArgs) |
| find_package_handle_standard_args(RTI DEFAULT_MSG |
| RTI_LIBRARY RTI_INCLUDE_DIR) |