#******************************************************************************* # Copyright (c) 2025-2026 ZF Friedrichshafen AG # # This program and the accompanying materials are made available under the # terms of the Apache License Version 2.0 which is available at # https://www.apache.org/licenses/LICENSE-2.0 # # SPDX-License-Identifier: Apache-2.0 # # Contributors: # Sudipta Durjoy - initial API and implementation #******************************************************************************* # Only build on MSVC/Windows or 64-bit Linux (not ARM) if((WIN32 AND MSVC) OR (UNIX AND CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")) # Define project project(can_com_silkit VERSION 1.0 LANGUAGES CXX) # Platform-specific SilKit flavor and library settings if(CMAKE_SYSTEM_NAME STREQUAL "Linux") set(SILKIT_FLAVOR "ubuntu-18.04-x86_64-gcc" CACHE STRING "SIL Kit package flavor for Linux") elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") set(SILKIT_FLAVOR "Win-x86_64-VS2017" CACHE STRING "SIL Kit package flavor for Windows") else() message(FATAL_ERROR "Unsupported platform for SilKit build.") endif() set(SILKIT_VERSION "4.0.37" CACHE STRING "SIL Kit package is specified, this version will be downloaded") message ("Build SilKit component on system: ${CMAKE_SYSTEM_PROCESSOR}") # Fetch SIL Kit from github.com message(STATUS "Attempting to fetch [SilKit-${SILKIT_VERSION}-${SILKIT_FLAVOR}] from github.com") include(FetchContent) FetchContent_Declare( silkit URL https://github.com/vectorgrp/sil-kit/releases/download/sil-kit%2Fv${SILKIT_VERSION}/SilKit-${SILKIT_VERSION}-${SILKIT_FLAVOR}.zip DOWNLOAD_DIR ${CMAKE_CURRENT_LIST_DIR}/sil-kit ) message(STATUS "SIL Kit: fetching [SilKit-${SILKIT_VERSION}-${SILKIT_FLAVOR}]") FetchContent_MakeAvailable(silkit) message(STATUS "SIL Kit: using source code from: \"${silkit_SOURCE_DIR}\"") if(CMAKE_SYSTEM_NAME STREQUAL "Linux") set(SILKIT_LIB "${silkit_SOURCE_DIR}/SilKit/lib/libSilKit.so") message(STATUS "Expecting libSilKit.so at: ${SILKIT_LIB}") elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") set(SILKIT_LIB "${silkit_SOURCE_DIR}/SilKit/lib/SilKit.lib") message(STATUS "Expecting SilKit.lib at: ${SILKIT_LIB}") else() message(FATAL_ERROR "SilKit libraries not found at: ${SILKIT_LIB}. Check the SilKit flavor, version, and extraction path.") endif() set(SilKit_DIR "${silkit_SOURCE_DIR}/SilKit/lib/cmake/SilKit") message(STATUS "SilKit_DIR: ${SilKit_DIR}") find_package(SilKit REQUIRED CONFIG) add_library(can_com_silkit SHARED "can_com_silkit.h" "can_com_silkit.cpp") # Only add -Wno-shadow for GCC or Clang if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") target_compile_options(can_com_silkit PRIVATE -Wno-shadow) endif() target_link_libraries(can_com_silkit PRIVATE "${SILKIT_LIB}" ${CMAKE_THREAD_LIBS_INIT}) target_include_directories(can_com_silkit PRIVATE "${silkit_SOURCE_DIR}/SilKit/include") set_target_properties(can_com_silkit PROPERTIES PREFIX "") set_target_properties(can_com_silkit PROPERTIES SUFFIX ".sdv") add_dependencies(can_com_silkit CompileCoreIDL) # Appending the service in the service list set(SDV_Service_List ${SDV_Service_List} can_com_silkit PARENT_SCOPE) endif() # SilKit library is not compatible for ARM and MINGW