180 lines
6.4 KiB
CMake
Executable File
180 lines
6.4 KiB
CMake
Executable File
# -------------------------------------------------------------------------
|
|
# $HeadURL$
|
|
# -------------------------------------------------------------------------
|
|
#!
|
|
# -------------------------------------------------------------------------
|
|
# COPYRIGHT (C) 2008: RHEINMETALL DEFENCE ELECTRONICS GmbH, D-28305 BREMEN
|
|
# -------------------------------------------------------------------------
|
|
#
|
|
# HIER/ITEM : CSU: RP 5187 P 0211 SRC 14001
|
|
# BRIEF DESC: CMake-Findskript
|
|
# AUTHOR : RDE / SGS
|
|
# ORIGIN REF: BWB / Projekt GUEZ-HAS
|
|
#
|
|
# Revision INFO:
|
|
# --------------
|
|
# $Revision$
|
|
# $Date$
|
|
# $Id$
|
|
#
|
|
# LANGUAGE: -
|
|
#
|
|
# PURPOSE:
|
|
# --------
|
|
# Suchen der RTI-Library und Setzen der folgenden CMake-Variablen:
|
|
# RTI_INCLUDE_DIRS - RTI headers location
|
|
# RTI_LIBRARIES - RTI libraries
|
|
# RTI_FOUND - TRUE wenn Library gefunden wurde
|
|
#
|
|
|
|
# RTI_DIR (from environment)
|
|
SET(_rti_gcc_arch "")
|
|
IF(NOT RTI_DIR)
|
|
SET(_arch "unknown")
|
|
IF(WIN32)
|
|
SET(_RTI_DIR $ENV{DDS_PATH})
|
|
IF(NOT _RTI_DIR)
|
|
GET_FILENAME_COMPONENT(_rti_root_path "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Real-Time Innovations\\RTI Connext DDS Pro 5.2.3;Location]" ABSOLUTE)
|
|
SET(_RTI_DIR "${_rti_root_path}")
|
|
ENDIF()
|
|
IF(MSVC_VERSION EQUAL 1900)
|
|
SET(_rti_msvc_ver "VS2015")
|
|
ELSEIF(MSVC_VERSION GREATER_EQUAL 1910)
|
|
SET(_rti_msvc_ver "VS2017")
|
|
ENDIF()
|
|
IF(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
SET(_rti_msvc_ver "x64Win64${_rti_msvc_ver}")
|
|
ELSE()
|
|
SET(_rti_msvc_ver "i86Win32${_rti_msvc_ver}")
|
|
ENDIF()
|
|
IF(NOT ${_rti_root_path})
|
|
SET(_RTI_DIR $ENV{KDEROOT})
|
|
FILE(TO_CMAKE_PATH "${_RTI_DIR}" _RTI_DIR)
|
|
IF(NOT EXISTS "${_RTI_DIR}" OR NOT IS_DIRECTORY "${_RTI_DIR}")
|
|
SET(_RTI_DIR $ENV{WORKSPACE})
|
|
FILE(TO_CMAKE_PATH "${_RTI_DIR}" _RTI_DIR)
|
|
ENDIF()
|
|
IF(NOT EXISTS "${_RTI_DIR}" OR NOT IS_DIRECTORY "${_RTI_DIR}")
|
|
SET(_RTI_DIR ${EXTERNAL_LIBRARY_DIR})
|
|
FILE(TO_CMAKE_PATH "${_RTI_DIR}" _RTI_DIR)
|
|
ENDIF()
|
|
ENDIF()
|
|
SET(_arch "${_rti_msvc_ver}")
|
|
ELSE(WIN32)
|
|
SET(_RTI_DIR $ENV{DDS_PATH})
|
|
IF(NOT _RTI_DIR)
|
|
SET(_RTI_DIR "/opt/RTI")
|
|
ENDIF()
|
|
IF(NOT EXISTS "${_RTI_DIR}" OR NOT IS_DIRECTORY "${_RTI_DIR}")
|
|
MESSAGE(FATAL_ERROR "Umgebungsvariable DDS_PATH nicht gesetzt!")
|
|
ENDIF()
|
|
SET(_rti_gcc_arch "x64Linux3gcc4.8.2")
|
|
IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
|
IF(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.0.0)
|
|
SET(_rti_gcc_arch "x64Linux3gcc5.4.0")
|
|
SET(_tmp "${_RTI_DIR}/lib/${_rti_gcc_arch}")
|
|
IF (NOT EXISTS ${_tmp})
|
|
SET(_rti_gcc_arch "x64Linux4gcc7.3.0")
|
|
ENDIF()
|
|
ENDIF()
|
|
ENDIF()
|
|
SET(_arch "${_rti_gcc_arch}")
|
|
ENDIF()
|
|
SET(RTI_DIR "${_RTI_DIR}" CACHE STRING "RTI base path" FORCE)
|
|
MESSAGE(STATUS "Trying to use RTI from ${RTI_DIR} with arch ${_arch}")
|
|
ENDIF()
|
|
IF(WIN32)
|
|
SET(_rti_include_hint "${RTI_DIR}/include/")
|
|
SET(_rti_library_hint "${RTI_DIR}/lib/${_rti_msvc_ver}/")
|
|
ELSE()
|
|
SET(_rti_include_hint "${RTI_DIR}/include/")
|
|
SET(_rti_library_hint "${RTI_DIR}/lib/")
|
|
ENDIF()
|
|
|
|
# RTI include dir
|
|
IF(NOT RTI_INCLUDE_DIR)
|
|
FIND_PATH(RTI_INCLUDE_DIR ndds/ndds_cpp.h HINTS ${_rti_include_hint})
|
|
IF(RTI_INCLUDE_DIR)
|
|
SET(RTI_INCLUDE_DIRS "${RTI_INCLUDE_DIR}" "${RTI_INCLUDE_DIR}/ndds" "${RTI_INCLUDE_DIR}/ndds/hpp" CACHE STRING "RTI include directories" FORCE)
|
|
MARK_AS_ADVANCED(RTI_INCLUDE_DIRS)
|
|
ELSE()
|
|
MESSAGE(FATAL "Could not find RTI include directory at ${_rti_include_hint}")
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
# rtiddsgen
|
|
IF(NOT RTI_DDSGEN_EXECUTABLE)
|
|
FIND_PROGRAM(RTI_DDSGEN_EXECUTABLE NAMES rtiddsgen rtiddsgen.bat HINTS ${RTI_DIR}/scripts ${RTI_DIR}/bin)
|
|
ENDIF()
|
|
IF(NOT RTI_VERSION_MAJOR)
|
|
EXEC_PROGRAM(${RTI_DDSGEN_EXECUTABLE} ARGS -version OUTPUT_VARIABLE _dds_version_output)
|
|
STRING(REGEX REPLACE ".* ([0-9]\\.[0-9]\\.[0-9]).*" "\\1" _dds_version_output ${_dds_version_output})
|
|
SET(_rti_version_major 5)
|
|
IF(_dds_version_output VERSION_GREATER 2.9.9)
|
|
SET(_rti_version_major 6)
|
|
ENDIF()
|
|
SET(RTI_VERSION_MAJOR ${_rti_version_major} CACHE STRING "RTI version" FORCE)
|
|
ENDIF()
|
|
|
|
INCLUDE(FindLibraryWithDebug)
|
|
INCLUDE(FindPackageHandleStandardArgs)
|
|
|
|
# rti libraries
|
|
SET(_RTI_LIBS nddscore nddsc nddscpp2 rtiroutingservice)
|
|
SET(_libs "")
|
|
SET(_lib_vars "")
|
|
|
|
FOREACH(_lib ${_RTI_LIBS})
|
|
SET(_libname "RTI_${_lib}_LIBRARY")
|
|
IF (NOT ${_libname})
|
|
FIND_LIBRARY_WITH_DEBUG("${_libname}"
|
|
WIN32_DEBUG_POSTFIX d
|
|
NAMES ${_lib}
|
|
HINTS ${_rti_library_hint} ${RTI_DIR}/lib ${RTI_DIR}/lib/${_rti_gcc_arch})
|
|
ENDIF()
|
|
SET(_tgt_name RTI::${_lib})
|
|
|
|
IF(NOT TARGET ${_tgt_name})
|
|
ADD_LIBRARY(${_tgt_name} UNKNOWN IMPORTED)
|
|
SET_PROPERTY(TARGET ${_tgt_name} PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${RTI_INCLUDE_DIRS}")
|
|
SET_PROPERTY(TARGET ${_tgt_name} PROPERTY INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${RTI_INCLUDE_DIRS}")
|
|
|
|
IF(UNIX)
|
|
SET_PROPERTY(TARGET ${_tgt_name} PROPERTY INTERFACE_COMPILE_DEFINITIONS "RTI_UNIX;RTI_LINUX;RTI_64BIT" )
|
|
ENDIF()
|
|
IF(WIN32)
|
|
IF("${_lib}" STREQUAL "rtiroutingservice")
|
|
SET_PROPERTY(TARGET ${_tgt_name} PROPERTY INTERFACE_COMPILE_DEFINITIONS "RTI_WIN32;RTI_routingservice_DLL_VARIABLE" )
|
|
ELSE()
|
|
SET_PROPERTY(TARGET ${_tgt_name} PROPERTY INTERFACE_COMPILE_DEFINITIONS "RTI_WIN32;NDDS_DLL_VARIABLE" )
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
IF(${_libname}_RELEASE)
|
|
SET_PROPERTY(TARGET ${_tgt_name} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
|
|
SET_PROPERTY(TARGET ${_tgt_name} PROPERTY IMPORTED_LOCATION_RELEASE "${${_libname}_RELEASE}")
|
|
ENDIF()
|
|
IF(${_libname}_DEBUG)
|
|
SET_PROPERTY(TARGET ${_tgt_name} APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
|
|
SET_PROPERTY(TARGET ${_tgt_name} PROPERTY IMPORTED_LOCATION_DEBUG "${${_libname}_DEBUG}")
|
|
ENDIF()
|
|
IF(NOT ${_libname}_RELEASE AND NOT ${_libname}_DEBUG)
|
|
SET_PROPERTY(TARGET ${_tgt_name} PROPERTY IMPORTED_LOCATION "${${_libname}}")
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
LIST(APPEND _libs "${${_libname}}")
|
|
LIST(APPEND _lib_vars "${_libname}")
|
|
ENDFOREACH()
|
|
# does not link against dl on unix
|
|
IF(TARGET RTI::nddscore AND UNIX)
|
|
SET_PROPERTY(TARGET RTI::nddscore PROPERTY INTERFACE_LINK_LIBRARIES "dl" )
|
|
ENDIF()
|
|
|
|
SET(RTI_LIBRARIES ${_libs} CACHE STRING "All rti libraries" FORCE)
|
|
MARK_AS_ADVANCED(RTI_LIBRARIES)
|
|
|
|
INCLUDE(FindPackageHandleStandardArgs)
|
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(RTI DEFAULT_MSG RTI_DIR RTI_INCLUDE_DIR RTI_DDSGEN_EXECUTABLE ${_lib_vars})
|
|
|