lift_indicator_suite/cmake/toolchain_host.cmake
Ezra Maccabee ce717ce9dd # 3
СБорка базового проекта
2026-03-06 15:27:39 +03:00

66 lines
No EOL
3.3 KiB
CMake
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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}")