# Generated Cmake Pico project file
# Сгенерированный файл проекта CMake для Pico

cmake_minimum_required(VERSION 3.13)

# Set standard versions for C and C++
# Установка стандартов языков C и C++
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

# Initialise pico_sdk from installed location
# Инициализация pico_sdk из установленного местоположения
# (note this can come from environment, CMake cache etc)

# == DO NOT EDIT THE FOLLOWING LINES for the Raspberry Pi Pico VS Code Extension to work ==
# == НЕ РЕДАКТИРУЙТЕ СЛЕДУЮЩИЕ СТРОКИ для корректной работы расширения VS Code для Raspberry Pi Pico ==
if(WIN32)
    set(USERHOME $ENV{USERPROFILE})
else()
    set(USERHOME $ENV{HOME})
endif()
set(sdkVersion 2.3.1)
set(toolchainVersion 15_2_Rel1)
set(picotoolVersion 2.3.1)
set(picoVscode ${USERHOME}/.pico-sdk/cmake/pico-vscode.cmake)
if (EXISTS ${picoVscode})
    include(${picoVscode})
endif()
# ====================================================================================

# Define the target board as Pico 2 (RP2350)
# Определение целевой платы как Pico 2 (RP2350)
set(PICO_BOARD pico2 CACHE STRING "Board type")

# Path to the FreeRTOS Kernel sources
# Путь к исходным кодам ядра FreeRTOS
set(PICO_FREERTOS "${CMAKE_CURRENT_LIST_DIR}/freertos_sources/FreeRTOS-Kernel")
message(STATUS "FreeRTOS Path: ${PICO_FREERTOS}")
message(STATUS "Путь к FreeRTOS: ${PICO_FREERTOS}")

# Pull in Raspberry Pi Pico SDK (must be before project)
# Подключение Raspberry Pi Pico SDK (должно быть выполнено до определения проекта)
include(pico_sdk_import.cmake)

project(rtos_sample C CXX ASM)

# Disable standard Pico SDK C++ operator overrides to avoid conflicts with FreeRTOS heap management
# Отключаем стандартные переопределения операторов C++ в Pico SDK, чтобы избежать конфликтов с управлением кучей FreeRTOS
# For Pico SDK 2.x+ the target pico_cxx_options is used
# Для Pico SDK 2.x+ используется таргет pico_cxx_options
add_compile_definitions(PICO_CXX_ENABLE_NEW_DELETE_OVERRIDES=0)

# Initialise the Raspberry Pi Pico SDK
# Инициализация Raspberry Pi Pico SDK
pico_sdk_init()

# Configure FreeRTOS Kernel paths and configuration file location
# Настройка путей ядра FreeRTOS и расположения файла конфигурации
SET(FREERTOS_KERNEL_PATH "${PICO_FREERTOS}" CACHE STRING "MyFreeRTOStutorial")
SET(FREERTOS_CONFIG_FILE_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}/port/FreeRTOS-Kernel" CACHE STRING "Local Config")

# Include FreeRTOS configuration and kernel import scripts
# Подключение конфигурации FreeRTOS и скриптов импорта ядра
include("${FREERTOS_CONFIG_FILE_DIRECTORY}/freertos_config.cmake") 
include(FreeRTOS_Kernel_import.cmake)

# Add the main executable
# Добавление основного исполняемого файла
add_executable(rtos_sample rtos_sample.cpp )

# Set program name and version for the binary
# Установка имени и версии программы для бинарного файла
pico_set_program_name(rtos_sample "rtos_sample")
pico_set_program_version(rtos_sample "0.1")

# Configure standard I/O: Disable UART, Enable USB
# Настройка стандартного ввода-вывода: Отключить UART, Включить USB
pico_enable_stdio_uart(rtos_sample 0)
pico_enable_stdio_usb(rtos_sample 1)

# Link required libraries: FreeRTOS Kernel (Heap 4), config, and Pico stdlib
# Привязка необходимых библиотек: Ядро FreeRTOS (Heap 4), конфигурация и стандартная библиотека Pico
target_link_libraries(rtos_sample
        FreeRTOS-Kernel-Heap4
        freertos_config
        pico_stdlib)

# EXPLICITLY tell Pico SDK not to use its own new_delete.cpp
# ЯВНО ГОВОРИМ PICO SDK НЕ ИСПОЛЬЗОВАТЬ СВОЙ new_delete.cpp
# This line must come AFTER pico_sdk_init()
# Эта строка должна идти ПОСЛЕ pico_sdk_init()
set_target_properties(pico_cxx_options PROPERTIES PICO_CXX_ENABLE_NEW_DELETE_OVERRIDES 0)

# Allow multiple definitions (linker will take the first one found)
# Разрешает множественные определения (линкер возьмет первую попавшуюся функцию)
target_link_options(rtos_sample PRIVATE "-Wl,--allow-multiple-definition")

# Add project root to include directories
# Добавление корня проекта в директории поиска заголовочных файлов
target_include_directories(rtos_sample PRIVATE
        ${CMAKE_CURRENT_LIST_DIR}
)

# Generate extra output files (e.g., .bin, .hex)
# Генерация дополнительных выходных файлов (например, .bin, .hex)
pico_add_extra_outputs(rtos_sample)
