sistemas-cibernetico-fisicos/infotainment-mvp/CMakeLists.txt
Fábio Coutada 9973823d61 feat(infotainment-mvp): import BMW IDC23 infotainment project
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
2026-07-16 23:07:49 +01:00

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()