186 lines
9.3 KiB
CMake
186 lines
9.3 KiB
CMake
# sdk/CMakeLists.txt Драйверы NXP MCUXpresso SDK для MIMXRT1052CVJ5B Vendored:
|
||
# стабильная версия, не обновляется
|
||
#
|
||
# Добавление нового драйвера: см. docs/SDK_DRIVERS.md
|
||
|
||
if(BUILD_TESTS_HOST)
|
||
return()
|
||
endif()
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# Макрос для создания SDK драйвер-таргетов Использование: add_sdk_driver(ИМЯ
|
||
# ФАЙЛ_ИСХОДНИКА) Создаёт таргет sdk_ИМЯ с автоматическим подключением
|
||
# sdk_device
|
||
# -----------------------------------------------------------------------------
|
||
macro(add_sdk_driver DRIVER_NAME DRIVER_SOURCE)
|
||
add_library(sdk_${DRIVER_NAME} STATIC
|
||
devices/MIMXRT1052/drivers/${DRIVER_SOURCE})
|
||
target_include_directories(sdk_${DRIVER_NAME}
|
||
PUBLIC devices/MIMXRT1052/drivers)
|
||
target_link_libraries(sdk_${DRIVER_NAME} PUBLIC sdk_device)
|
||
endmacro()
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# Базовый таргет — нужен всегда, подключается транзитивно через bsp_board
|
||
# -----------------------------------------------------------------------------
|
||
add_library(sdk_device STATIC devices/MIMXRT1052/system_MIMXRT1052.c)
|
||
target_include_directories(
|
||
sdk_device PUBLIC devices/MIMXRT1052 devices/MIMXRT1052/drivers
|
||
devices/MIMXRT1052/periph CMSIS/Core/Include/)
|
||
|
||
target_compile_definitions(sdk_device PUBLIC CPU_MIMXRT1052CVJ5B)
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# Утилиты — базовые вещи, нужны большинству драйверов
|
||
# -----------------------------------------------------------------------------
|
||
add_library(sdk_common STATIC devices/MIMXRT1052/drivers/fsl_common.c
|
||
devices/MIMXRT1052/drivers/fsl_common_arm.c)
|
||
target_include_directories(sdk_common PUBLIC devices/MIMXRT1052/drivers)
|
||
target_compile_definitions(
|
||
sdk_common PUBLIC SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY=600000000U
|
||
SDK_DELAY_USE_DWT)
|
||
target_link_libraries(sdk_common PUBLIC sdk_device)
|
||
add_sdk_driver(clock fsl_clock.c)
|
||
|
||
# clock зависит от common
|
||
target_link_libraries(sdk_clock PUBLIC sdk_common)
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# Драйверы периферии
|
||
# -----------------------------------------------------------------------------
|
||
add_sdk_driver(gpio fsl_gpio.c)
|
||
add_sdk_driver(lpuart fsl_lpuart.c)
|
||
add_sdk_driver(flexcan fsl_flexcan.c)
|
||
add_sdk_driver(usdhc fsl_usdhc.c)
|
||
add_sdk_driver(lpi2c fsl_lpi2c.c)
|
||
add_sdk_driver(pwm fsl_pwm.c)
|
||
add_sdk_driver(adc fsl_adc.c)
|
||
add_sdk_driver(elcdif fsl_elcdif.c)
|
||
add_sdk_driver(pxp fsl_pxp.c)
|
||
add_sdk_driver(cache fsl_cache.c)
|
||
add_sdk_driver(sai fsl_sai.c)
|
||
add_sdk_driver(sai_edma fsl_sai_edma.c)
|
||
add_sdk_driver(edma fsl_edma.c)
|
||
add_sdk_driver(dmamux fsl_dmamux.c)
|
||
add_sdk_driver(xbara fsl_xbara.c)
|
||
add_sdk_driver(wdog fsl_wdog.c)
|
||
add_sdk_driver(src fsl_src.c)
|
||
|
||
# Драйверы которые зависят от clock
|
||
target_link_libraries(sdk_lpuart PUBLIC sdk_clock)
|
||
target_link_libraries(sdk_flexcan PUBLIC sdk_clock)
|
||
target_link_libraries(sdk_usdhc PUBLIC sdk_clock)
|
||
target_link_libraries(sdk_lpi2c PUBLIC sdk_clock)
|
||
target_link_libraries(sdk_pwm PUBLIC sdk_clock)
|
||
target_link_libraries(sdk_adc PUBLIC sdk_clock)
|
||
target_link_libraries(sdk_elcdif PUBLIC sdk_clock)
|
||
target_link_libraries(sdk_pxp PUBLIC sdk_clock) # PXP_Init → CLOCK_EnableClock(kCLOCK_Pxp)
|
||
target_link_libraries(sdk_sai PUBLIC sdk_clock)
|
||
target_link_libraries(sdk_sai_edma PUBLIC sdk_sai sdk_edma)
|
||
target_link_libraries(sdk_edma PUBLIC sdk_common)
|
||
target_link_libraries(sdk_xbara PUBLIC sdk_clock)
|
||
# -----------------------------------------------------------------------------
|
||
# SEMC и FlexSPI — инициализируются через DCD и FDCB, драйверы нужны только если
|
||
# обращаешься к ним явно из кода
|
||
# -----------------------------------------------------------------------------
|
||
add_sdk_driver(semc fsl_semc.c)
|
||
add_sdk_driver(flexspi fsl_flexspi.c)
|
||
|
||
target_link_libraries(sdk_semc PUBLIC sdk_clock)
|
||
target_link_libraries(sdk_flexspi PUBLIC sdk_clock)
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# USB middleware — ручные таргеты (middleware/usb/, не drivers/)
|
||
# -----------------------------------------------------------------------------
|
||
|
||
# --- sdk_osa_bm: OS Abstraction Layer (bare-metal) ---
|
||
# Объявлен первым — от него зависят USB таргеты через fsl_os_abstraction.h
|
||
add_library(sdk_osa_bm STATIC components/osa/fsl_os_abstraction_bm.c
|
||
components/lists/fsl_component_generic_list.c)
|
||
target_include_directories(sdk_osa_bm PUBLIC components/osa components/lists)
|
||
target_link_libraries(sdk_osa_bm PUBLIC sdk_device sdk_common sdk_usb_config)
|
||
target_compile_options(sdk_osa_bm PRIVATE -w)
|
||
|
||
# --- sdk_usb_common: заголовки USB стека ---
|
||
add_library(sdk_usb_common INTERFACE)
|
||
target_include_directories(sdk_usb_common SYSTEM
|
||
INTERFACE middleware/usb/include)
|
||
|
||
# --- sdk_usb_config: application-specific конфиги ---
|
||
add_library(sdk_usb_config INTERFACE)
|
||
target_include_directories(sdk_usb_config SYSTEM
|
||
INTERFACE ${CMAKE_SOURCE_DIR}/bsp/usb_cdc/src)
|
||
|
||
# --- sdk_usb_device_ehci: EHCI контроллер + DCI абстракция ---
|
||
add_library(sdk_usb_device_ehci STATIC middleware/usb/device/usb_device_dci.c
|
||
middleware/usb/device/usb_device_ehci.c)
|
||
target_include_directories(sdk_usb_device_ehci PUBLIC middleware/usb/device)
|
||
target_link_libraries(
|
||
sdk_usb_device_ehci PUBLIC sdk_device sdk_common sdk_usb_common
|
||
sdk_usb_config sdk_osa_bm)
|
||
target_compile_options(sdk_usb_device_ehci PRIVATE -w)
|
||
|
||
# --- sdk_usb_phy: USB PHY ---
|
||
add_library(sdk_usb_phy STATIC middleware/usb/phy/usb_phy.c)
|
||
target_include_directories(sdk_usb_phy PUBLIC middleware/usb/phy)
|
||
target_link_libraries(sdk_usb_phy PUBLIC sdk_device sdk_common sdk_usb_common
|
||
sdk_usb_config sdk_osa_bm)
|
||
target_compile_options(sdk_usb_phy PRIVATE -w)
|
||
|
||
# =============================================================================
|
||
# SDMMC middleware — SD-карта через USDHC, non-blocking (interrupt-driven).
|
||
#
|
||
# НЕ зависит от ffconf.h → безопасно компилировать один раз как общую
|
||
# статическую библиотеку. Оба бинарника (firmware_test, tft_app) линкуются к
|
||
# одному и тому же sdk_sdmmc_sd.
|
||
#
|
||
# =============================================================================
|
||
add_library(
|
||
sdk_sdmmc_sd STATIC
|
||
middleware/sdmmc/sd/fsl_sd.c middleware/sdmmc/common/fsl_sdmmc_common.c
|
||
middleware/sdmmc/osa/fsl_sdmmc_osa.c
|
||
middleware/sdmmc/host/usdhc/non_blocking/fsl_sdmmc_host.c)
|
||
|
||
target_include_directories(
|
||
sdk_sdmmc_sd
|
||
PUBLIC middleware/sdmmc/sd middleware/sdmmc/common middleware/sdmmc/osa
|
||
middleware/sdmmc/host/usdhc/non_blocking middleware/sdmmc/host/usdhc)
|
||
|
||
target_link_libraries(sdk_sdmmc_sd PUBLIC sdk_usdhc sdk_osa_bm sdk_cache
|
||
sdk_common)
|
||
|
||
# Подавляем предупреждения SDK — они нам не принадлежат.
|
||
target_compile_options(sdk_sdmmc_sd PRIVATE -w)
|
||
|
||
# =============================================================================
|
||
# FatFS — только заголовки и переменные с путями к исходникам.
|
||
#
|
||
# ff.c и fsl_sd_disk.c НЕ компилируются здесь, потому что оба включают ff.h →
|
||
# ffconf.h, который разный у firmware_test (bare-metal) и tft_app (FreeRTOS).
|
||
# Каждый бинарник сам добавляет их в свои sources.
|
||
#
|
||
# Использование в CMakeLists.txt бинарника:
|
||
# target_link_libraries(my_fatfs_target PRIVATE sdk_fatfs_headers)
|
||
# target_sources(my_fatfs_target PRIVATE ${SDK_FATFS_FF_SRC}
|
||
# ${SDK_FATFS_SD_DISK_SRC})
|
||
# =============================================================================
|
||
add_library(sdk_fatfs_headers INTERFACE)
|
||
target_include_directories(
|
||
sdk_fatfs_headers INTERFACE middleware/fatfs/source
|
||
middleware/fatfs/source/fsl_sd_disk)
|
||
# Транзитивно тащим SDMMC: fsl_sd_disk.c вызывает SD_*() из sdk_sdmmc_sd.
|
||
target_link_libraries(sdk_fatfs_headers INTERFACE sdk_sdmmc_sd)
|
||
|
||
# Пути к исходникам, которые должны компилироваться per-binary. CACHE INTERNAL —
|
||
# видны во всём дереве, не переопределяются.
|
||
set(SDK_FATFS_FF_SRC
|
||
${CMAKE_CURRENT_SOURCE_DIR}/middleware/fatfs/source/ff.c
|
||
CACHE INTERNAL
|
||
"FatFS: путь к ff.c (компилировать per-binary с нужным ffconf.h)")
|
||
|
||
set(SDK_FATFS_SD_DISK_SRC
|
||
${CMAKE_CURRENT_SOURCE_DIR}/middleware/fatfs/source/fsl_sd_disk/fsl_sd_disk.c
|
||
CACHE
|
||
INTERNAL
|
||
"FatFS: путь к fsl_sd_disk.c (компилировать per-binary с нужным ffconf.h)"
|
||
)
|