66 lines
No EOL
3.3 KiB
CMake
66 lines
No EOL
3.3 KiB
CMake
# Host GCC Toolchain — для сборки и запуска host-тестов (Unity + fff)
|
||
# Используется с пресетами: host-debug, host-release
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# Нативная сборка — система и процессор хоста
|
||
# -----------------------------------------------------------------------------
|
||
set(CMAKE_SYSTEM_NAME ${CMAKE_HOST_SYSTEM_NAME})
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# Компиляторы
|
||
# Clang доступен в devcontainer (clang-17), используем его для
|
||
# совместимости с clangd/clang-tidy. GCC как fallback.
|
||
# -----------------------------------------------------------------------------
|
||
find_program(HOST_C_COMPILER NAMES clang-17 clang gcc)
|
||
find_program(HOST_CXX_COMPILER NAMES clang++-17 clang++ g++)
|
||
|
||
if(NOT HOST_C_COMPILER)
|
||
message(FATAL_ERROR "Host C compiler not found. Install clang or gcc.")
|
||
endif()
|
||
|
||
set(CMAKE_C_COMPILER "${HOST_C_COMPILER}")
|
||
set(CMAKE_CXX_COMPILER "${HOST_CXX_COMPILER}")
|
||
|
||
message(STATUS "Host C compiler: ${CMAKE_C_COMPILER}")
|
||
message(STATUS "Host CXX compiler: ${CMAKE_CXX_COMPILER}")
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# Флаги по типу сборки
|
||
# -----------------------------------------------------------------------------
|
||
set(CMAKE_C_FLAGS_DEBUG "-O0 -g3 -gdwarf-4" CACHE INTERNAL "")
|
||
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3 -gdwarf-4" CACHE INTERNAL "")
|
||
|
||
set(CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG" CACHE INTERNAL "")
|
||
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG" CACHE INTERNAL "")
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# Покрытие кода — включается при Debug сборке для host-тестов
|
||
# Используется с lcov/gcovr для генерации отчётов
|
||
# -----------------------------------------------------------------------------
|
||
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||
set(CMAKE_C_FLAGS_DEBUG
|
||
"${CMAKE_C_FLAGS_DEBUG} --coverage -fprofile-arcs -ftest-coverage"
|
||
CACHE INTERNAL "")
|
||
set(CMAKE_CXX_FLAGS_DEBUG
|
||
"${CMAKE_CXX_FLAGS_DEBUG} --coverage -fprofile-arcs -ftest-coverage"
|
||
CACHE INTERNAL "")
|
||
endif()
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# Санитайзеры для Debug сборки — помогают ловить UB и утечки памяти
|
||
# Отключи если тормозит или конфликтует с тестовым фреймворком
|
||
# -----------------------------------------------------------------------------
|
||
option(ENABLE_SANITIZERS "Enable AddressSanitizer + UBSanitizer" ON)
|
||
|
||
if(ENABLE_SANITIZERS AND CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||
set(SANITIZER_FLAGS "-fsanitize=address,undefined -fno-omit-frame-pointer")
|
||
set(CMAKE_C_FLAGS_DEBUG
|
||
"${CMAKE_C_FLAGS_DEBUG} ${SANITIZER_FLAGS}" CACHE INTERNAL "")
|
||
set(CMAKE_CXX_FLAGS_DEBUG
|
||
"${CMAKE_CXX_FLAGS_DEBUG} ${SANITIZER_FLAGS}" CACHE INTERNAL "")
|
||
set(CMAKE_EXE_LINKER_FLAGS_DEBUG
|
||
"${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${SANITIZER_FLAGS}" CACHE INTERNAL "")
|
||
message(STATUS "Sanitizers: ON (Address + UB)")
|
||
endif()
|
||
|
||
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") |