cmake_minimum_required(VERSION 3.20)
project(tft_firmware C ASM)

# -----------------------------------------------------------------------------
# Глобальные опции — управляются через пресеты
# -----------------------------------------------------------------------------
option(BUILD_TESTS_HOST "Build host unit tests" OFF)
option(BUILD_TESTS_TARGET "Build on-target tests" OFF)
option(SEGGER_RTT_ENABLED "Enable SEGGER RTT" OFF)
option(UNITY_TESTING_ENABLED "Enable Unity framework" OFF)

# -----------------------------------------------------------------------------
# Общие настройки для ARM сборки
# -----------------------------------------------------------------------------
if(NOT BUILD_TESTS_HOST)
  set(CMAKE_EXECUTABLE_SUFFIX ".elf")
  set(CMAKE_C_STANDARD 11)
  set(CMAKE_C_STANDARD_REQUIRED ON)
  set(CMAKE_C_EXTENSIONS OFF)
  set(BSP_SYSCALLS_FILE
    "${CMAKE_SOURCE_DIR}/bsp/generated/syscalls.c"
    CACHE FILEPATH "Заглушки системных вызовов newlib")
  set(BSP_GENERATED
    "${CMAKE_SOURCE_DIR}/bsp/generated"
    CACHE PATH "Путь до сгенерированных ConfigTools файлов")
  set(BSP_STARTUP_FILE
    "${BSP_GENERATED}/startup/startup_MIMXRT1052.S"
    CACHE FILEPATH "Путь до стартап файла")
endif()

# -----------------------------------------------------------------------------
# SDK и BSP — всегда подключаются, но содержат защиту от host сборки внутри
# -----------------------------------------------------------------------------
add_subdirectory(sdk)
add_subdirectory(utils)
add_subdirectory(bsp)
add_subdirectory(port)

# -----------------------------------------------------------------------------
# Сторонние и внутренние библиотеки
# -----------------------------------------------------------------------------
add_subdirectory(lib)

# -----------------------------------------------------------------------------
# Firmware проекты — только для ARM сборки
# -----------------------------------------------------------------------------
if(NOT BUILD_TESTS_HOST)
  add_subdirectory(firmware/test)
  add_subdirectory(firmware/bootloader)
  # Заглушка tft_app для аппаратной верификации bootutil (Фаза 2) — удалить,
  # когда появится реальный firmware/tft_app. См. firmware/bootloader/PLAN.md.
  add_subdirectory(firmware/bootloader/test_stub)
endif()

# -----------------------------------------------------------------------------
# Тесты
# -----------------------------------------------------------------------------
if(BUILD_TESTS_HOST OR BUILD_TESTS_TARGET)
  enable_testing()
  add_subdirectory(tests)
endif()
