BMW IDC23 (IDC23H) next-generation infotainment head unit developed as Harman Becker/Garmin JV — GEN22 platform. Source: git@cc-github.bmwgroup.net:icgen5/idc-project.git Branch: master (gen22 release line) Submodules pinned at gen22-11.8.0-internal-rc (April 2021) Components: - ioc: I/O Controller (AUTOSAR, CommonAPI) - hmi: HMI framework (Qt/QML-based cluster graphics) - ic-hmi: Instrument Cluster HMI - sqhmi: Safety-Qualified HMI - hudd: Head-Up Display driver - muniic: Multi-NIC communication - fubi: Functional Bus (check control, DIM, ECI, ELC, ERM, BC, CBS, CC, ATP) - ramses: Runtimes for Adaptive AUTOSAR Middleware Services - cidd: CID Driver (SP21) - safegfxcmp: Safety GFX comparison - sim-gc: Simulation Graphics Compositor - sim-ui: UI Simulation harness - idc-app: Application layer - bin: Build toolchains (excluded from git) Build system: CMake + doit (Python task runner) Toolchain: GHS ARM32 for AUTOSAR, MSVC/Ninja for unittest CI: Zuul (zuul.d/) + stale-branch management
181 lines
6.2 KiB
CMake
181 lines
6.2 KiB
CMake
####################################################################################################
|
|
# Instrument cluster project definition
|
|
####################################################################################################
|
|
cmake_minimum_required(VERSION 3.14)
|
|
|
|
project(icci-gen5-idc C CXX)
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL AutosarOs)
|
|
enable_language(ASM_GHS_ARM32)
|
|
endif()
|
|
|
|
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/util/icci-common/cmake)
|
|
|
|
include(config-${ICCI_VARIANT})
|
|
include(build_version)
|
|
include(unittest)
|
|
include(verification)
|
|
include(build_utils)
|
|
|
|
if(DEFINED ENV{SDKTARGETSYSROOT})
|
|
message(STATUS "MGU22 SDK environment detected.")
|
|
# Teach CMake about both <sysroot>/usr/{include,lib} and
|
|
# <sysroot>/lib as search roots. The Yocto SDKs copy of
|
|
# pkg-config considers each of these as well-known locations
|
|
# whose corresponding -I and -L compiler switches do not have
|
|
# to be explicitly printed out.
|
|
list(APPEND CMAKE_FIND_ROOT_PATH $ENV{SDKTARGETSYSROOT} $ENV{SDKTARGETSYSROOT}/usr)
|
|
|
|
# we want to use our own build tools (cmake, conan, python, ...) from path, not from SDK:
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
|
|
|
# we want to use build resources from SDK only, not from host system:
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
|
|
|
|
# Set the CommonAPI and IuK version used by all all ramses variants
|
|
set(ramses-sdk_CAPI_VERSION "-3.2.3-34.2.0" CACHE STRING "")
|
|
endif()
|
|
|
|
icci_initialize()
|
|
icci_protect_cmake_variables()
|
|
|
|
# check and verify the status of the working copy
|
|
icci_process_working_copy_status()
|
|
|
|
# map internal variables to publicly available switches:
|
|
if(ICCI_VARIANT STREQUAL Unittest)
|
|
set(ICCI_UNITTEST ON)
|
|
endif()
|
|
|
|
if(ICCI_VARIANT MATCHES .*IntegrationTest$)
|
|
set(ICCI_INTEGRATION_TEST ON)
|
|
endif()
|
|
|
|
if(ICCI_VARIANT STREQUAL IdcSimulation OR ICCI_VARIANT STREQUAL IdcMiniSimulation)
|
|
set(ICCI_SIMULATION ON)
|
|
endif()
|
|
|
|
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
|
if(ICCI_SIMULATION)
|
|
set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/simulation CACHE PATH "" FORCE)
|
|
else()
|
|
# SOC tgz deployed to bin directly for now:
|
|
set(CMAKE_INSTALL_PREFIX ${PROJECT_SOURCE_DIR}/bin CACHE PATH "" FORCE)
|
|
endif()
|
|
endif()
|
|
|
|
# after all settings are known, initialize modules:
|
|
if(ICCI_INTEGRATION_TEST OR ICCI_UNITTEST)
|
|
icci_unittest_initialize()
|
|
endif()
|
|
|
|
# set C++ standard for supported compilers:
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
# global compiler and linker switches for target builds:
|
|
if(CMAKE_SYSTEM_NAME STREQUAL AutosarOs)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --c++14")
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --c++14")
|
|
endif()
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL Linux)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
|
|
# use ccache for GCC in local developer, i.e. non-CI, build if available
|
|
# disable it in '--coverage' to avoid interference with possible future
|
|
# activation of CTC on Linux which also uses of CMAKE_<LANG>_COMPILER_LAUNCER
|
|
if(CMAKE_CXX_COMPILER_ID STREQUAL GNU AND ICCI_SW_VERSION_PRERELEASE MATCHES ^dev AND NOT ICCI_COVERAGE)
|
|
find_program(CCACHE_FOUND ccache)
|
|
if(CCACHE_FOUND)
|
|
set(CMAKE_C_COMPILER_LAUNCHER ccache)
|
|
set(CMAKE_CXX_COMPILER_LAUNCHER ccache)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
# enable generation of warnings for GHS toolchain:
|
|
if(CMAKE_COMPILER_IS_GHS)
|
|
add_compile_options(--warnings)
|
|
add_compile_options(-linker-warnings)
|
|
add_compile_options(--ghstd=2010)
|
|
endif()
|
|
|
|
if(ICCI_VARIANT STREQUAL Idc OR ICCI_VARIANT STREQUAL Mgu22 OR ICCI_VARIANT STREQUAL Rse22)
|
|
include(ioc/repo/common-compiler-options.cmake)
|
|
endif()
|
|
|
|
# activate gcc stack-protector for unit tests
|
|
if(CMAKE_CXX_COMPILER_ID STREQUAL GNU AND (ICCI_INTEGRATION_TEST OR ICCI_UNITTEST))
|
|
add_compile_options(-fstack-protector-strong)
|
|
endif()
|
|
|
|
if(ICCI_SIMULATION)
|
|
check_pie_supported(OUTPUT_VARIABLE output LANGUAGES CXX C)
|
|
if(CMAKE_CXX_LINK_PIE_SUPPORTED AND CMAKE_C_LINK_PIE_SUPPORTED)
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
endif()
|
|
endif()
|
|
|
|
if(ICCI_SIMULATION OR ICCI_INTEGRATION_TEST OR ICCI_UNITTEST)
|
|
add_subdirectory(sim-gc)
|
|
endif()
|
|
|
|
if(ICCI_VARIANT STREQUAL Idc OR ICCI_VARIANT STREQUAL IdcSoc OR ICCI_VARIANT STREQUAL IdcMiniSoc OR ICCI_SIMULATION OR ICCI_INTEGRATION_TEST OR ICCI_UNITTEST)
|
|
add_subdirectory(muniic)
|
|
endif()
|
|
|
|
if(ICCI_VARIANT STREQUAL Idc OR ICCI_VARIANT STREQUAL Mgu22 OR ICCI_VARIANT STREQUAL Rse22 OR ICCI_UNITTEST)
|
|
add_subdirectory(ioc)
|
|
add_subdirectory(cidd)
|
|
endif()
|
|
|
|
if(ICCI_VARIANT STREQUAL Idc OR ICCI_VARIANT STREQUAL IdcSoc OR ICCI_VARIANT STREQUAL IdcMiniSoc OR ICCI_SIMULATION OR ICCI_INTEGRATION_TEST OR ICCI_UNITTEST)
|
|
add_subdirectory(fubi)
|
|
endif()
|
|
|
|
if(ICCI_VARIANT STREQUAL Idc OR ICCI_UNITTEST)
|
|
add_subdirectory(inc)
|
|
add_subdirectory(hudd)
|
|
endif()
|
|
|
|
if(ICCI_VARIANT STREQUAL IdcSoc OR ICCI_VARIANT STREQUAL IdcSimulation OR ICCI_VARIANT STREQUAL BmwIntegrationTest OR ICCI_UNITTEST)
|
|
add_subdirectory(ramses)
|
|
endif()
|
|
|
|
if(ICCI_VARIANT STREQUAL IdcSoc OR ICCI_VARIANT STREQUAL IdcMiniSoc OR ICCI_UNITTEST)
|
|
add_subdirectory(mgu22sdk)
|
|
endif()
|
|
|
|
if(ICCI_VARIANT STREQUAL IdcSoc OR ICCI_VARIANT STREQUAL IdcSimulation OR ICCI_VARIANT STREQUAL BmwIntegrationTest OR ICCI_UNITTEST)
|
|
add_subdirectory(hmi)
|
|
endif()
|
|
|
|
if(ICCI_VARIANT STREQUAL IdcMiniSoc OR ICCI_VARIANT STREQUAL IdcMiniSimulation OR ICCI_VARIANT STREQUAL MiniIntegrationTest OR ICCI_UNITTEST)
|
|
add_subdirectory(ic-hmi)
|
|
endif()
|
|
|
|
if(ICCI_VARIANT STREQUAL IdcSoc OR ICCI_VARIANT STREQUAL IdcMiniSoc OR ICCI_UNITTEST)
|
|
add_subdirectory(safegfxcmp)
|
|
endif()
|
|
|
|
if(ICCI_VARIANT STREQUAL IdcSoc OR ICCI_VARIANT STREQUAL IdcMiniSoc OR ICCI_SIMULATION OR ICCI_INTEGRATION_TEST OR ICCI_UNITTEST)
|
|
add_subdirectory(sqhmi)
|
|
endif()
|
|
|
|
if(ICCI_VARIANT STREQUAL IdcSoc OR ICCI_VARIANT STREQUAL IdcMiniSoc OR ICCI_UNITTEST)
|
|
add_subdirectory(idc-app)
|
|
endif()
|
|
|
|
if(ICCI_SIMULATION)
|
|
add_subdirectory(sim-ui)
|
|
endif()
|
|
|
|
# finally add sample application, to prevent others depend on it:
|
|
add_subdirectory(sample)
|
|
|
|
# wrap up module responsibilities:
|
|
if(ICCI_INTEGRATION_TEST OR ICCI_UNITTEST)
|
|
icci_unittest_finalize()
|
|
endif()
|