# 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 `_ (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 is 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: # # 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)