1# Copyright (C) 2015-2017 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) 2# This Source Code Form is subject to the terms of the Mozilla Public 3# License, v. 2.0. If a copy of the MPL was not distributed with this 4# file, You can obtain one at http://mozilla.org/MPL/2.0/. 5 6cmake_minimum_required (VERSION 2.8.12...3.23.3) 7project (vsomeip) 8 9set (VSOMEIP_NAME vsomeip3) 10set (VSOMEIP_COMPAT_NAME vsomeip) 11 12set (VSOMEIP_MAJOR_VERSION 3) 13set (VSOMEIP_MINOR_VERSION 1) 14set (VSOMEIP_PATCH_VERSION 37) 15set (VSOMEIP_HOTFIX_VERSION 1) 16 17set (VSOMEIP_VERSION ${VSOMEIP_MAJOR_VERSION}.${VSOMEIP_MINOR_VERSION}.${VSOMEIP_PATCH_VERSION}) 18set (PACKAGE_VERSION ${VSOMEIP_VERSION}) # Used in documentation/doxygen.in 19set (CMAKE_VERBOSE_MAKEFILE off) 20 21if (NOT GTEST_ROOT) 22 if (DEFINED ENV{GTEST_ROOT}) 23 set(GTEST_ROOT $ENV{GTEST_ROOT}) 24 else() 25 set(GTEST_ROOT "n/a" CACHE STRING "Path to root folder of googletest. Must be set for building the tests.") 26 endif() 27endif() 28 29################################################################################################### 30# see http://www.cmake.org/Wiki/CMake/Tutorials/How_to_create_a_ProjectConfig.cmake_file 31################################################################################################### 32 33# Offer the user the choice of overriding the installation directories 34set (INSTALL_LIB_DIR lib CACHE STRING "Installation directory for libraries") 35set (INSTALL_BIN_DIR bin CACHE STRING "Installation directory for executables") 36set (INSTALL_INCLUDE_DIR include CACHE STRING "Installation directory for header files") 37 38if (WIN32 AND NOT CYGWIN) 39 set (DEF_INSTALL_CMAKE_DIR CMake) 40else () 41 set (DEF_INSTALL_CMAKE_DIR lib/cmake/${VSOMEIP_NAME}) 42endif () 43 44set (INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE STRING "Installation directory for CMake files") 45 46################################################################################################### 47# Set a default build type if none was specified 48set(default_build_type "RelWithDebInfo") 49if(NOT CMAKE_BUILD_TYPE) 50 message(STATUS "Setting build type to '${default_build_type}' as none was specified.") 51 set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING "Choose the type of build." FORCE) 52 # Set the possible values of build type for cmake-gui 53 set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") 54endif() 55 56# OS 57if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") 58 set(OS "LINUX") 59 set(DL_LIBRARY "dl") 60 set(EXPORTSYMBOLS "-Wl,-export-dynamic -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/exportmap.gcc") 61 set(NO_DEPRECATED "") 62 set(OPTIMIZE "") 63 set(OS_CXX_FLAGS "-D_GLIBCXX_USE_NANOSLEEP -pthread -O -Wall -Wextra -Wformat -Wformat-security -Wconversion -fexceptions -fstrict-aliasing -fstack-protector-strong -fasynchronous-unwind-tables -fno-omit-frame-pointer -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -fPIE -pie -Wl,-z,relro,-z,now") 64endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux") 65 66if (${CMAKE_SYSTEM_NAME} MATCHES "Android") 67 set(OS "ANDROID") 68 set(DL_LIBRARY "") 69 set(EXPORTSYMBOLS "") 70 set(NO_DEPRECATED "") 71 set(OPTIMIZE "") 72 73 find_library(ANDROID_LOG_LIB log) 74 set(OS_LIBS ${ANDROID_LOG_LIB}) 75endif(${CMAKE_SYSTEM_NAME} MATCHES "Android") 76 77if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") 78 set(OS "FREEBSD") 79 set(DL_LIBRARY "") 80 set(EXPORTSYMBOLS "") 81 set(NO_DEPRECATED "-Wno-deprecated") 82 set(OPTIMIZE "") 83 set(OS_CXX_FLAGS "-pthread") 84endif (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") 85 86################################################################################ 87# Options 88################################################################################ 89 90# DLT 91if (DISABLE_DLT) 92set (VSOMEIP_ENABLE_DLT 0) 93else () 94set (VSOMEIP_ENABLE_DLT 1) 95endif () 96 97# Signal handling 98if (ENABLE_SIGNAL_HANDLING) 99set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVSOMEIP_ENABLE_SIGNAL_HANDLING") 100endif () 101 102# Sanitizer 103if (ENABLE_THREAD_SANITIZER) 104set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread") 105endif () 106 107if (ENABLE_LEAK_SANITIZER) 108set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=leak") 109endif () 110 111# Configuration overlays 112if (ENABLE_CONFIGURATION_OVERLAYS) 113set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVSOMEIP_ENABLE_CONFIGURATION_OVERLAYS") 114endif () 115 116# Compatibility 117if (ENABLE_COMPAT) 118set (VSOMEIP_ENABLE_COMPAT 1) 119else () 120set (VSOMEIP_ENABLE_COMPAT 0) 121endif () 122 123# Multiple routing managers 124if (ENABLE_MULTIPLE_ROUTING_MANAGERS) 125set (VSOMEIP_ENABLE_MULTIPLE_ROUTING_MANAGERS 1) 126else () 127set (VSOMEIP_ENABLE_MULTIPLE_ROUTING_MANAGERS 0) 128endif () 129 130# Session handling configuration 131if (ENABLE_SESSION_HANDLING_CONFIG) 132set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVSOMEIP_HAS_SESSION_HANDLING_CONFIG") 133endif () 134 135################################################################################ 136# Dependencies 137################################################################################ 138 139# Threads 140find_package(Threads REQUIRED) 141 142# Boost 143find_package( Boost 1.55 COMPONENTS system thread filesystem REQUIRED ) 144include_directories(SYSTEM ${Boost_INCLUDE_DIR} ) 145 146if(Boost_FOUND) 147 if(Boost_LIBRARY_DIR) 148 MESSAGE( STATUS "Boost_LIBRARY_DIR not empty using it: ${Boost_LIBRARY_DIR}" ) 149 else() 150 if(BOOST_LIBRARYDIR) 151 MESSAGE( STATUS "Boost_LIBRARY_DIR empty but BOOST_LIBRARYDIR is set setting Boost_LIBRARY_DIR to: ${BOOST_LIBRARYDIR}" ) 152 set(Boost_LIBRARY_DIR ${BOOST_LIBRARYDIR}) 153 endif() 154 endif() 155else() 156 MESSAGE( STATUS "Boost was not found!") 157endif() 158 159# cmake 3.15 introduced a new variable and a new format for the old one 160if (DEFINED Boost_VERSION_MACRO) 161 set(VSOMEIP_BOOST_VERSION ${Boost_VERSION_MACRO}) 162else() 163 set(VSOMEIP_BOOST_VERSION ${Boost_VERSION}) 164endif() 165 166message( STATUS "Using boost version: ${VSOMEIP_BOOST_VERSION}" ) 167if (${VSOMEIP_BOOST_VERSION} GREATER 107600) 168message( ERROR "boost version ${VSOMEIP_BOOST_VERSION} is not (yet) supported. Latest supported version is 1.76.0" ) 169elseif(${VSOMEIP_BOOST_VERSION} GREATER 107500) 170set(VSOMEIP_BOOST_HELPER implementation/helper/1.76) 171elseif(${VSOMEIP_BOOST_VERSION} GREATER 107300) 172set(VSOMEIP_BOOST_HELPER implementation/helper/1.74) 173elseif(${VSOMEIP_BOOST_VERSION} GREATER 106999) 174set(VSOMEIP_BOOST_HELPER implementation/helper/1.70) 175elseif(${VSOMEIP_BOOST_VERSION} GREATER 106599) 176set(VSOMEIP_BOOST_HELPER implementation/helper/1.66) 177else() 178set(VSOMEIP_BOOST_HELPER implementation/helper/1.55) 179endif() 180 181find_package(PkgConfig) 182 183# DLT 184if(VSOMEIP_ENABLE_DLT EQUAL 1) 185pkg_check_modules(DLT "automotive-dlt >= 2.11") 186if(DLT_FOUND) 187 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUSE_DLT") 188endif(DLT_FOUND) 189endif() 190 191# SystemD 192pkg_check_modules(SystemD "libsystemd") 193 194if(NOT SystemD_FOUND OR ${CMAKE_SYSTEM_NAME} MATCHES "Android") 195MESSAGE( STATUS "Systemd was not found, watchdog disabled!") 196set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWITHOUT_SYSTEMD") 197else() 198list(APPEND OS_LIBS ${SystemD_LIBRARIES}) 199endif(NOT SystemD_FOUND OR ${CMAKE_SYSTEM_NAME} MATCHES "Android") 200 201# Multiple routing managers 202if (VSOMEIP_ENABLE_MULTIPLE_ROUTING_MANAGERS EQUAL 1) 203set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVSOMEIP_ENABLE_MULTIPLE_ROUTING_MANAGERS") 204endif () 205 206################################################################################ 207# Directories 208################################################################################ 209 210include_directories( 211 interface 212) 213 214include_directories(SYSTEM 215 ${VSOMEIP_BOOST_HELPER} 216 ${DLT_INCLUDE_DIRS} 217) 218 219link_directories( 220 ${DLT_LIBDIR} 221) 222 223if (${VSOMEIP_HOTFIX_VERSION} EQUAL 0) 224add_definitions(-DVSOMEIP_VERSION="${VSOMEIP_VERSION}") 225else() 226add_definitions(-DVSOMEIP_VERSION="${VSOMEIP_VERSION}.${VSOMEIP_HOTFIX_VERSION}") 227endif() 228 229if (MSVC) 230 message("using MSVC Compiler") 231 # add_definitions(-DVSOMEIP_DLL_COMPILATION) now it is controlled per target 232 SET(BOOST_WINDOWS_VERSION "0x600" CACHE STRING "Set the same Version as the Version with which Boost was built, otherwise there will be errors. (normaly 0x600 is for Windows 7 and 0x501 is for Windows XP)") 233 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_WINSOCK_DEPRECATED_NO_WARNINGS -D_WIN32_WINNT=${BOOST_WINDOWS_VERSION} -DWIN32 -DBOOST_ASIO_DISABLE_IOCP /EHsc") 234 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS -D_WINSOCK_DEPRECATED_NO_WARNINGS -D_WIN32_WINNT=${BOOST_WINDOWS_VERSION} -DWIN32 -DBOOST_ASIO_DISABLE_IOCP /EHsc") 235 set(USE_RT "") 236 link_directories(${Boost_LIBRARY_DIR_DEBUG}) 237 ADD_DEFINITIONS( -DBOOST_ALL_DYN_LINK ) 238else() 239 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D${OS} ${OS_CXX_FLAGS} -g ${OPTIMIZE} -std=c++11 ${NO_DEPRECATED} ${EXPORTSYMBOLS}") 240 if (NOT ${CMAKE_SYSTEM_NAME} MATCHES "Android") 241 set(USE_RT "rt") 242 endif() 243endif() 244 245################################################################################ 246# Configuration library 247################################################################################ 248file(GLOB ${VSOMEIP_NAME}-cfg_SRC 249 "implementation/configuration/src/*.cpp" 250) 251list(SORT ${VSOMEIP_NAME}-cfg_SRC) 252if (VSOMEIP_ENABLE_MULTIPLE_ROUTING_MANAGERS EQUAL 0) 253 add_library(${VSOMEIP_NAME}-cfg SHARED ${${VSOMEIP_NAME}-cfg_SRC}) 254 set_target_properties (${VSOMEIP_NAME}-cfg PROPERTIES VERSION ${VSOMEIP_VERSION} SOVERSION ${VSOMEIP_MAJOR_VERSION}) 255 if (MSVC) 256 set_target_properties(${VSOMEIP_NAME}-cfg PROPERTIES COMPILE_DEFINITIONS "VSOMEIP_DLL_COMPILATION_PLUGIN") 257 endif() 258 259 target_link_libraries(${VSOMEIP_NAME}-cfg ${VSOMEIP_NAME} ${Boost_LIBRARIES} ${USE_RT} ${DL_LIBRARY} ${OS_LIBS}) 260endif () 261 262################################################################################ 263# Base library 264################################################################################ 265file(GLOB ${VSOMEIP_NAME}_SRC 266 "implementation/endpoints/src/*.cpp" 267 "implementation/logger/src/*.cpp" 268 "implementation/tracing/src/*.cpp" 269 "implementation/message/src/*.cpp" 270 "implementation/plugin/src/*.cpp" 271 "implementation/routing/src/*.cpp" 272 "implementation/runtime/src/*.cpp" 273 "implementation/security/src/*.cpp" 274 "implementation/utility/src/*.cpp" 275) 276if (VSOMEIP_ENABLE_MULTIPLE_ROUTING_MANAGERS EQUAL 1) 277list(APPEND ${VSOMEIP_NAME}_SRC "implementation/configuration/src/configuration_impl.cpp") 278endif() 279list(SORT ${VSOMEIP_NAME}_SRC) 280 281add_library(${VSOMEIP_NAME} SHARED ${${VSOMEIP_NAME}_SRC}) 282set_target_properties (${VSOMEIP_NAME} PROPERTIES VERSION ${VSOMEIP_VERSION} SOVERSION ${VSOMEIP_MAJOR_VERSION}) 283if (MSVC) 284 set_target_properties(${VSOMEIP_NAME} PROPERTIES COMPILE_DEFINITIONS "VSOMEIP_DLL_COMPILATION") 285endif () 286target_include_directories(${VSOMEIP_NAME} INTERFACE 287 $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/interface> 288 $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}> 289 $<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>) 290# PRIVATE means the listed libraries won't be included in the "link interface", 291# meaning the exported vsomeip3Targets.cmake targets won't try to link against 292# them (which shouldn't be required). ${Boost_LIBRARIES} includes absolute 293# build host paths as of writing, which also makes this important as it breaks 294# the build. 295target_link_libraries(${VSOMEIP_NAME} PRIVATE ${Boost_LIBRARIES} ${USE_RT} ${DL_LIBRARY} ${DLT_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${OS_LIBS}) 296 297################################################################################ 298# Service Discovery library 299################################################################################ 300file(GLOB ${VSOMEIP_NAME}-sd_SRC 301 "implementation/service_discovery/src/*.cpp" 302) 303list(SORT ${VSOMEIP_NAME}-sd_SRC) 304 305add_library(${VSOMEIP_NAME}-sd SHARED ${${VSOMEIP_NAME}-sd_SRC}) 306set_target_properties (${VSOMEIP_NAME}-sd PROPERTIES VERSION ${VSOMEIP_VERSION} SOVERSION ${VSOMEIP_MAJOR_VERSION}) 307if (MSVC) 308 set_target_properties(${VSOMEIP_NAME}-sd PROPERTIES COMPILE_DEFINITIONS "VSOMEIP_DLL_COMPILATION_PLUGIN") 309endif () 310 311target_link_libraries(${VSOMEIP_NAME}-sd ${VSOMEIP_NAME} ${Boost_LIBRARIES} ${USE_RT} ${DL_LIBRARY} ${CMAKE_THREAD_LIBS_INIT} ${OS_LIBS}) 312 313 314################################################################################ 315# E2E library 316################################################################################ 317file(GLOB_RECURSE ${VSOMEIP_NAME}-e2e_SRC 318 "implementation/e2e_protection/src/*.cpp" 319) 320list(SORT ${VSOMEIP_NAME}-e2e_SRC) 321 322add_library(${VSOMEIP_NAME}-e2e SHARED ${${VSOMEIP_NAME}-e2e_SRC}) 323set_target_properties (${VSOMEIP_NAME}-e2e PROPERTIES VERSION ${VSOMEIP_VERSION} SOVERSION ${VSOMEIP_MAJOR_VERSION}) 324if (MSVC) 325 set_target_properties(${VSOMEIP_NAME}-e2e PROPERTIES COMPILE_DEFINITIONS "VSOMEIP_DLL_COMPILATION_PLUGIN") 326endif () 327 328target_link_libraries(${VSOMEIP_NAME}-e2e ${VSOMEIP_NAME} ${Boost_LIBRARIES} ${USE_RT} ${DL_LIBRARY} ${OS_LIBS}) 329 330################################################################################ 331# Compatibility library 332################################################################################ 333if (VSOMEIP_ENABLE_COMPAT EQUAL 1) 334set (VSOMEIP_COMPAT_MAJOR_VERSION 2) 335set (VSOMEIP_COMPAT_VERSION ${VSOMEIP_COMPAT_MAJOR_VERSION}.99.99) 336 337set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVSOMEIP_ENABLE_COMPAT") 338 339file(GLOB_RECURSE ${VSOMEIP_COMPAT_NAME}_SRC 340 "implementation/compat/logging/src/*.cpp" 341 "implementation/compat/message/src/*.cpp" 342 "implementation/compat/runtime/src/*.cpp" 343) 344list(SORT ${VSOMEIP_COMPAT_NAME}_SRC) 345 346add_library(${VSOMEIP_COMPAT_NAME} SHARED ${${VSOMEIP_COMPAT_NAME}_SRC}) 347set_target_properties (${VSOMEIP_COMPAT_NAME} PROPERTIES VERSION ${VSOMEIP_COMPAT_VERSION} SOVERSION ${VSOMEIP_COMPAT_MAJOR_VERSION}) 348if (MSVC) 349 set_target_properties(${VSOMEIP_COMPAT_NAME} PROPERTIES COMPILE_DEFINITIONS "VSOMEIP_DLL_COMPILATION_PLUGIN") 350endif () 351 352target_include_directories( 353 ${VSOMEIP_COMPAT_NAME} 354 PUBLIC 355 $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/interface/compat> 356 $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}> # for generated files in build mode 357 $<INSTALL_INTERFACE:include/compat> # for clients in install mode 358) 359target_link_libraries(${VSOMEIP_COMPAT_NAME} PRIVATE ${VSOMEIP_NAME} ${Boost_LIBRARIES} ${USE_RT} ${DL_LIBRARY} ${OS_LIBS}) 360 361endif () 362 363################################################################################ 364# Configuration files 365################################################################################ 366set(EXAMPLE_CONFIG_FILES 367 "config/vsomeip.json" 368 "config/vsomeip-local.json" 369 "config/vsomeip-tcp-client.json" 370 "config/vsomeip-tcp-service.json" 371 "config/vsomeip-udp-client.json" 372 "config/vsomeip-udp-service.json" 373) 374 375################################################################################ 376# Configuration parameters 377################################################################################ 378set (VSOMEIP_BASE_PATH "/tmp") 379if (BASE_PATH) 380set (VSOMEIP_BASE_PATH ${BASE_PATH}) 381endif () 382set (VSOMEIP_DIAGNOSIS_ADDRESS "0x01") 383if (DIAGNOSIS_ADDRESS) 384set (VSOMEIP_DIAGNOSIS_ADDRESS ${DIAGNOSIS_ADDRESS}) 385endif () 386set (VSOMEIP_UNICAST_ADDRESS "127.0.0.1") 387if (UNICAST_ADDRESS) 388set (VSOMEIP_UNICAST_ADDRESS ${UNICAST_ADDRESS}) 389endif () 390set (VSOMEIP_ROUTING_READY_MESSAGE "SOME/IP routing ready.") 391if (ROUTING_READY_MESSAGE) 392set (VSOMEIP_ROUTING_READY_MESSAGE ${ROUTING_READY_MESSAGE}) 393endif () 394 395set(DEFAULT_CONFIGURATION_FOLDER "/etc/vsomeip" CACHE PATH "Default configuration folder") 396message(STATUS "Default configuration folder: ${DEFAULT_CONFIGURATION_FOLDER}") 397 398set(DEFAULT_CONFIGURATION_FILE "/etc/vsomeip.json" CACHE FILEPATH "Default configuration file") 399message(STATUS "Default configuration file: ${DEFAULT_CONFIGURATION_FILE}") 400 401message("Predefined base path: ${VSOMEIP_BASE_PATH}") 402message("Predefined unicast address: ${VSOMEIP_UNICAST_ADDRESS}") 403message("Predefined diagnosis address: ${VSOMEIP_DIAGNOSIS_ADDRESS}") 404 405################################################################################ 406# Installation 407################################################################################ 408set(INCLUDE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/interface/vsomeip") 409 410file (GLOB_RECURSE vsomeip_INCLUDE RELATIVE ${INCLUDE_PATH} "interface/*.hpp" ) 411list (SORT vsomeip_INCLUDE) 412 413foreach ( file ${vsomeip_INCLUDE} ) 414 get_filename_component( dir ${file} DIRECTORY ) 415 install( FILES "${INCLUDE_PATH}/${file}" DESTINATION "${INSTALL_INCLUDE_DIR}/vsomeip/${dir}" COMPONENT dev) 416endforeach() 417 418install ( 419 TARGETS ${VSOMEIP_NAME} 420 # IMPORTANT: Add the vsomeip library to the "export-set" 421 EXPORT vsomeip3Targets 422 RUNTIME DESTINATION "${INSTALL_BIN_DIR}" COMPONENT 423 LIBRARY DESTINATION "${INSTALL_LIB_DIR}" COMPONENT 424 ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" 425 COMPONENT dev 426) 427 428install ( 429 TARGETS ${VSOMEIP_NAME}-e2e 430 LIBRARY DESTINATION "${INSTALL_LIB_DIR}" COMPONENT shlib 431 RUNTIME DESTINATION "${INSTALL_BIN_DIR}" COMPONENT bin 432) 433 434if (VSOMEIP_ENABLE_MULTIPLE_ROUTING_MANAGERS EQUAL 0) 435install ( 436 TARGETS ${VSOMEIP_NAME}-cfg 437 LIBRARY DESTINATION "${INSTALL_LIB_DIR}" COMPONENT shlib 438 RUNTIME DESTINATION "${INSTALL_BIN_DIR}" COMPONENT bin 439) 440endif () 441 442install ( 443 TARGETS ${VSOMEIP_NAME}-sd 444 LIBRARY DESTINATION "${INSTALL_LIB_DIR}" COMPONENT shlib 445 RUNTIME DESTINATION "${INSTALL_BIN_DIR}" COMPONENT bin 446) 447 448if (VSOMEIP_ENABLE_COMPAT EQUAL 1) 449install ( 450 TARGETS ${VSOMEIP_COMPAT_NAME} 451 EXPORT vsomeipTargets 452 LIBRARY DESTINATION "${INSTALL_LIB_DIR}" COMPONENT shlib 453 RUNTIME DESTINATION "${INSTALL_BIN_DIR}" COMPONENT bin 454) 455 456export (TARGETS ${VSOMEIP_COMPAT_NAME} FILE "${PROJECT_BINARY_DIR}/vsomeipTargets.cmake") 457export (PACKAGE ${VSOMEIP_COMPAT_NAME}) 458 459configure_file (vsomeipConfig.cmake.in "${PROJECT_BINARY_DIR}/vsomeipConfig.cmake" @ONLY) 460configure_file (vsomeipConfigVersion.cmake.in "${PROJECT_BINARY_DIR}/vsomeipConfigVersion.cmake" @ONLY) 461 462set (COMPAT_INSTALL_CMAKE_DIR "lib/cmake/${VSOMEIP_COMPAT_NAME}") 463 464install ( 465 EXPORT vsomeipTargets 466 DESTINATION "${COMPAT_INSTALL_CMAKE_DIR}" 467 COMPONENT dev 468) 469 470install ( 471 FILES 472 "${PROJECT_BINARY_DIR}/vsomeipConfig.cmake" 473 "${PROJECT_BINARY_DIR}/vsomeipConfigVersion.cmake" 474 DESTINATION "${COMPAT_INSTALL_CMAKE_DIR}" 475 COMPONENT dev 476) 477 478configure_file(vsomeip.pc.in ${PROJECT_BINARY_DIR}/vsomeip.pc @ONLY) 479install(FILES ${PROJECT_BINARY_DIR}/vsomeip.pc DESTINATION lib/pkgconfig) 480 481endif () 482 483install ( 484 FILES ${EXAMPLE_CONFIG_FILES} DESTINATION etc/vsomeip COMPONENT config 485) 486 487# Add all targets to the build-tree export set 488export (TARGETS ${VSOMEIP_NAME} FILE "${PROJECT_BINARY_DIR}/vsomeip3Targets.cmake") 489 490# Export the package for use from the build-tree 491# (this registers the build-tree with a global CMake-registry) 492export (PACKAGE ${VSOMEIP_NAME}) 493 494# Create the vsomeip3Config.cmake and vsomeip3ConfigVersion files 495configure_file (vsomeip3Config.cmake.in "${PROJECT_BINARY_DIR}/vsomeip3Config.cmake" @ONLY) 496configure_file (vsomeip3ConfigVersion.cmake.in "${PROJECT_BINARY_DIR}/vsomeip3ConfigVersion.cmake" @ONLY) 497 498# configure internal.hpp for correct version number 499configure_file ( 500 "${PROJECT_SOURCE_DIR}/implementation/configuration/include/internal.hpp.in" 501 "${PROJECT_SOURCE_DIR}/implementation/configuration/include/internal.hpp" 502) 503 504# Install the vsomeip3Config.cmake and vsomeip3ConfigVersion.cmake 505install ( 506 FILES 507 "${PROJECT_BINARY_DIR}/vsomeip3Config.cmake" 508 "${PROJECT_BINARY_DIR}/vsomeip3ConfigVersion.cmake" 509 DESTINATION "${INSTALL_CMAKE_DIR}" 510 COMPONENT dev 511) 512 513# Install the export set for use with the install-tree 514install ( 515 EXPORT vsomeip3Targets 516 DESTINATION "${INSTALL_CMAKE_DIR}" 517 COMPONENT dev 518) 519 520############################################################################## 521# build documentation 522############################################################################## 523add_custom_target(doc) 524 525find_package(Doxygen) 526if (NOT DOXYGEN_FOUND) 527 message(WARNING "Doxygen is not installed. Documentation can not be built.") 528else() 529 # set configuration variables for doxygen.in 530 set(PROJECT "vsomeip") 531 set(DOCDIR documentation) 532 set(SRCDIR .) 533 set(GENERATE_HTML YES) 534 set(GENERATE_HTMLHELP NO) 535 set(GENERATE_CHI NO) 536 set(GENERATE_LATEX NO) 537 set(GENERATE_PDF NO) 538 set(GENERATE_RTF NO) 539 set(GENERATE_MAN NO) 540 set(GENERATE_XML NO) 541 set(HAVE_DOT YES) 542 543 if(HAVE_DOT) 544 # Note: the @DOT_PATH@ variable won't be used in doxygen.in as doxygen 545 # somehow manages to strip the last slash from the path and therfore no 546 # graphs are generated. Therefore dot should be available in your $PATH 547 FIND_PROGRAM(DOT_PATH dot) 548 if ("${DOT_PATH}" STREQUAL "DOT_PATH-NOTFOUND") 549 message(WARNING "dot (graphviz) is not installed. Graphs in documentation can't be generated.") 550 else() 551 message("dot found") 552 endif() 553 endif() 554 555 configure_file(documentation/doxygen.in ${PROJECT_BINARY_DIR}/Doxyfile @ONLY) 556 add_custom_target(doxygen-doc 557 COMMAND ${DOXYGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/Doxyfile 558 SOURCES ${PROJECT_BINARY_DIR}/Doxyfile) 559 560 add_dependencies(doc doxygen-doc) 561endif() 562 563find_program(ASCIIDOC_PATH asciidoc) 564find_program(SOURCE_HIGHLIGHT_PATH source-highlight) 565if ("${ASCIIDOC_PATH}" STREQUAL "ASCIIDOC_PATH-NOTFOUND") 566 message(WARNING "asciidoc is not installed. Readme can not be built.") 567elseif("${SOURCE_HIGHLIGHT_PATH}" STREQUAL "SOURCE_HIGHLIGHT_PATH-NOTFOUND") 568 message(WARNING "source-highlight is not installed. Readme can not be built.") 569else() 570 message("asciidoc found") 571 message("source-highlight found") 572 add_custom_command(TARGET doc 573 POST_BUILD 574 COMMAND asciidoc 575 -a version=${VSOMEIP_VERSION} 576 -b html 577 -o documentation/vsomeipUserGuide.html 578 ${PROJECT_SOURCE_DIR}/documentation/vsomeipUserGuide) 579endif() 580 581############################################################################## 582# create pkg-config file 583if(NOT WIN32) 584 configure_file(vsomeip3.pc.in ${PROJECT_BINARY_DIR}/vsomeip3.pc @ONLY) 585 install(FILES ${PROJECT_BINARY_DIR}/vsomeip3.pc DESTINATION lib/pkgconfig) 586endif() 587 588############################################################################## 589if (NOT ${CMAKE_SYSTEM_NAME} MATCHES "Android") 590 # build routing manager daemon (Non-Windows only) 591 if (NOT MSVC) 592 add_subdirectory( examples/routingmanagerd ) 593 endif() 594 595 # build tools 596 add_custom_target( tools ) 597 add_subdirectory( tools ) 598 599 # build examples 600 add_custom_target( examples ) 601 add_subdirectory( examples EXCLUDE_FROM_ALL ) 602 add_custom_target( hello_world ) 603 add_subdirectory( examples/hello_world EXCLUDE_FROM_ALL ) 604endif() 605 606############################################################################## 607# Test section 608############################################################################## 609 610############################################################################## 611# google test 612 613# check for set environment variable 614if(${GTEST_ROOT} STREQUAL "n/a") 615 message(STATUS "GTEST_ROOT is not defined. For building the tests the variable 616 GTEST_ROOT has to be defined. Tests can not be built.") 617 # early exit 618 return() # test can not be build -> make commands build_tests and check are not available 619else() 620 message(STATUS "GTEST_ROOT is set. gtest root path set to ${GTEST_ROOT}") 621endif() 622 623# build google test as static library (always) -> therefore deactivate BUILD_SHARED_LIBS in case it is active 624set(BUILD_SHARED_LIBS_AUTOMATIC_OFF 0) 625if ("${BUILD_SHARED_LIBS}" STREQUAL "ON") 626 set(BUILD_SHARED_LIBS OFF) 627 set(BUILD_SHARED_LIBS_AUTOMATIC_OFF 1) 628endif() 629add_subdirectory(${GTEST_ROOT} ${CMAKE_CURRENT_BINARY_DIR}/gtest EXCLUDE_FROM_ALL) 630if ("${BUILD_SHARED_LIBS_AUTOMATIC_OFF}" STREQUAL "1") 631 set(BUILD_SHARED_LIBS ON) 632 set(BUILD_SHARED_LIBS_AUTOMATIC_OFF 0) 633endif() 634 635 636 637############################################################################## 638# build tests 639 640enable_testing() 641SET(TESTS_BAT "OFF" CACHE BOOL 642 "Controls whether only BAT tests should be build or not") 643SET(TEST_SYMLINK_CONFIG_FILES "OFF" CACHE BOOL 644 "Controls if the json and scripts needed needed to run the tests are copied or symlinked into the build directroy (ignored on Windows)") 645SET(TEST_SYMLINK_CONFIG_FILES_RELATIVE "OFF" CACHE BOOL 646 "Controls if the json and scripts needed needed to run the tests are symlinked relatively into the build directroy (ignored on Windows)") 647 648SET(TEST_IP_DEFAULT_VALUE "XXX.XXX.XXX.XXX") 649SET(TEST_IP_MASTER "${TEST_IP_DEFAULT_VALUE}" CACHE STRING 650 "The IP address of the interface which will act as test master") 651SET(TEST_IP_SLAVE "${TEST_IP_DEFAULT_VALUE}" CACHE STRING 652 "The IP address of the interface which will act as test slave") 653 654if((${TEST_IP_MASTER} STREQUAL ${TEST_IP_DEFAULT_VALUE}) OR 655 (${TEST_IP_SLAVE} STREQUAL ${TEST_IP_DEFAULT_VALUE})) 656 message(WARNING "TEST_IP_MASTER and/or TEST_IP_SLAVE isn't set. " 657 "Only local tests will be runnable " 658 "Please specify them via for example " 659 "-DTEST_IP_MASTER=10.0.3.1 -DTEST_IP_SLAVE=10.0.3.125") 660endif() 661 662SET(TEST_IP_SLAVE_SECOND "${TEST_IP_DEFAULT_VALUE}" CACHE STRING 663 "The second IP address of the interface which will act as test slave") 664set(TEST_SECOND_ADDRESS "OFF" CACHE BOOL 665 "Controls whether second address tests should run or not") 666 667if(${TEST_IP_SLAVE_SECOND} STREQUAL ${TEST_IP_DEFAULT_VALUE}) 668 message(WARNING "TEST_IP_SLAVE_SECOND isn't set. " 669 "Test with more than one IP address on same interface is not enabled." 670 "Please specify them via for example " 671 "-TEST_IP_SLAVE_SECOND=10.0.3.126") 672else() 673 set(TEST_SECOND_ADDRESS "ON") 674endif() 675 676set(TEST_E2E_PROFILE_04 "OFF" CACHE BOOL 677 "Controls whether E2E Profile 04 tests should run or not") 678if (ENABLE_SESSION_HANDLING_CONFIG) 679 set(TEST_E2E_PROFILE_04 "ON") 680else () 681 message(WARNING "ENABLE_SESSION_HANDLING_CONFIG isn't set. " 682 "Test of E2E Profile 04 is not enabled.") 683endif () 684 685 686SET(TEST_UID_DEFAULT_VALUE "123456789") 687SET(TEST_UID "${TEST_UID_DEFAULT_VALUE}" CACHE STRING 688 "The User ID of the user running the test: Needed for security") 689SET(TEST_GID_DEFAULT_VALUE "123456789") 690SET(TEST_GID "${TEST_GID_DEFAULT_VALUE}" CACHE STRING 691 "The Group ID of the user running the test: Needed for security") 692 693SET(TEST_SECURITY "ON" CACHE BOOL 694 "Controls whether security tests should run or not") 695 696if((${TEST_UID} STREQUAL ${TEST_UID_DEFAULT_VALUE}) OR 697 (${TEST_GID} STREQUAL ${TEST_GID_DEFAULT_VALUE})) 698 message(WARNING "TEST_UID and/or TEST_GID isn't set. " 699 "Security Tests are not runnable " 700 "Please specify them for example " 701 "-DTEST_UID=1000 -DTEST_GID=1000") 702 SET(TEST_SECURITY "OFF") 703endif() 704 705add_custom_target(build_tests) 706add_dependencies(build_tests vsomeip3) 707add_dependencies(build_tests vsomeip3-e2e) 708add_dependencies(build_tests vsomeip3-sd) 709 710set(CMAKE_CTEST_COMMAND ctest -V) 711add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) 712add_dependencies(check build_tests) 713 714############################################################################## 715# add test directory 716 717add_subdirectory( test EXCLUDE_FROM_ALL ) 718