SET(CHIBIOS_HAL_MODULES adc can ext gpt i2c icu mac mmc_spi mmcsd pal pwm rtc sdc serial serial_usb spi tm uart usb) SET(CHIBIOS_VARIOUS_MODULES chprintf chrtclib evtimer memstreams shell syscalls fatfs lwip) SET(CHIBIOS_COMPONENTS kernel hal ${CHIBIOS_HAL_MODULES} ${CHIBIOS_VARIOUS_MODULES}) IF(NOT ChibiOS_FIND_COMPONENTS) SET(ChibiOS_FIND_COMPONENTS kernel) MESSAGE(STATUS "No ChibiOS components specified, using default: ${ChibiOS_FIND_COMPONENTS}") MESSAGE(STATUS "Supported ChibiOS components: ${CHIBIOS_COMPONENTS}") ENDIF() SET(CHIBIOS_HAL_LLD_MODULES adc can ext gpt i2c icu mac pal pwm rtc sdc serial spi uart usb) SET(CHIBIOS_kernel_SEARCH_PATH ${CHIBIOS_ROOT}/os/kernel/include ${CHIBIOS_ROOT}/os/ports/common/ARMCMx ${CHIBIOS_ROOT}/os/ports/GCC/ARMCMx ${CHIBIOS_ROOT}/os/kernel/src ) SET(CHIBIOS_kernel_SEARCH_HEADERS ch.h nvic.h chcore.h ) SET(CHIBIOS_kernel_SOURCES chsys.c chdebug.c chlists.c chvt.c chschd.c chthreads.c chdynamic.c chregistry.c chsem.c chmtx.c chcond.c chevents.c chmsg.c chmboxes.c chqueues.c chmemcore.c chheap.c chmempools.c crt0.c chcore.c chcore_v7m.c nvic.c ) SET(CHIBIOS_hal_SEARCH_PATH ${CHIBIOS_ROOT}/os/hal/include ${CHIBIOS_ROOT}/os/hal/src) SET(CHIBIOS_hal_SEARCH_HEADERS hal.h) SET(CHIBIOS_hal_SOURCES hal.c) FOREACH(module ${CHIBIOS_HAL_MODULES}) SET(CHIBIOS_${module}_SEARCH_PATH ${CHIBIOS_ROOT}/os/hal/src) SET(CHIBIOS_${module}_SOURCES ${module}.c) ENDFOREACH() FOREACH(module ${CHIBIOS_VARIOUS_MODULES}) IF(${module} STREQUAL fatfs) SET(CHIBIOS_${module}_SEARCH_PATH ${CHIBIOS_ROOT}/os/various/fatfs_bindings ${CHIBIOS_ROOT}/ext/fatfs/src/ ${CHIBIOS_ROOT}/ext/fatfs/src/option) SET(CHIBIOS_${module}_SOURCES fatfs_diskio.c fatfs_syscall.c ff.c ccsbcs.c ) SET(CHIBIOS_${module}_SEARCH_HEADERS ff.h) ELSEIF(${module} STREQUAL lwip) SET(CHIBIOS_${module}_SEARCH_PATH ${CHIBIOS_ROOT}/os/various/lwip_bindings ${CHIBIOS_ROOT}/os/various/lwip_bindings/arch ${CHIBIOS_ROOT}/ext/lwip/src/ ${CHIBIOS_ROOT}/ext/lwip/src/include/ ${CHIBIOS_ROOT}/ext/lwip/src/include/ipv4/ ) SET(CHIBIOS_${module}_SOURCES lwipthread.c sys_arch.c netif/etharp.c core/dhcp.c core/dns.c core/init.c core/mem.c core/memp.c core/netif.c core/pbuf.c core/raw.c core/stats.c core/sys.c core/tcp.c core/tcp_in.c core/tcp_out.c core/udp.c core/ipv4/autoip.c core/ipv4/icmp.c core/ipv4/igmp.c core/ipv4/inet.c core/ipv4/inet_chksum.c core/ipv4/ip.c core/ipv4/ip_addr.c core/ipv4/ip_frag.c core/def.c core/timers.c api/api_lib.c api/api_msg.c api/err.c api/netbuf.c api/netdb.c api/netifapi.c api/sockets.c api/tcpip.c ) SET(CHIBIOS_${module}_SEARCH_HEADERS lwipthread.h sys_arch.h lwip/api.h lwip/ip.h ) ELSE() SET(CHIBIOS_${module}_SEARCH_PATH ${CHIBIOS_ROOT}/os/various/) SET(CHIBIOS_${module}_SOURCES ${module}.c) IF(NOT (${module} STREQUAL syscalls)) SET(CHIBIOS_${module}_SEARCH_HEADERS ${module}.h) ENDIF() ENDIF() ENDFOREACH() IF(STM32_FAMILY STREQUAL "F4") SET(CHIBIOS_kernel_PLATFORM_SEARCH_PATH ${CHIBIOS_ROOT}/os/ports/common/ARMCMx/CMSIS/include ${CHIBIOS_ROOT}/os/ports/GCC/ARMCMx/STM32F4xx ) SET(CHIBIOS_kernel_PLATFORM_SOURCES vectors.c ) SET(CHIBIOS_kernel_PLATFORM_SEARCH_HEADERS core_cm4.h cmparams.h ) SET(CHIBIOS_hal_PLATFORM_SEARCH_PATH ${CHIBIOS_ROOT}/os/hal/platforms/STM32F4xx ${CHIBIOS_ROOT}/os/hal/platforms/STM32 ) SET(CHIBIOS_hal_PLATFORM_SEARCH_HEADERS hal_lld.h stm32.h stm32f4xx.h ) SET(CHIBIOS_hal_PLATFORM_SOURCES hal_lld.c stm32_dma.c ) SET(CHIBIOS_HAL_PLATFORM_MODULE_PATHES STM32F4xx STM32 STM32 STM32/TIMv1 STM32/I2Cv1 STM32/TIMv1 STM32 STM32/GPIOv2 STM32/TIMv1 STM32/RTCv2 STM32 STM32/USARTv1 STM32/SPIv1 STM32/USARTv1 STM32/OTGv1 ) IF(NOT ChibiOS_LINKER_SCRIPT) IF(NOT STM32_CHIP_TYPE) STM32_GET_CHIP_TYPE(${STM32_CHIP} STM32_CHIP_TYPE) ENDIF() IF(NOT STM32_FLASH_SIZE) STM32_GET_CHIP_PARAMETERS(${STM32_CHIP} STM32_FLASH_SIZE STM32_RAM_SIZE) ENDIF() IF(${STM32_CHIP_TYPE} STREQUAL 40_41xxx) IF(${STM32_FLASH_SIZE} STREQUAL 1024K) FIND_FILE(ChibiOS_LINKER_SCRIPT NAMES STM32F405xG.ld PATHS ${CHIBIOS_ROOT}/os/ports/GCC/ARMCMx/STM32F4xx/ld NO_DEFAULT_PATH CMAKE_FIND_ROOT_PATH_BOTH) ENDIF() ELSEIF(${STM32_CHIP_TYPE} STREQUAL 429_439xx) IF(${STM32_FLASH_SIZE} STREQUAL 2048K) FIND_FILE(ChibiOS_LINKER_SCRIPT NAMES STM32F429xI.ld PATHS ${CHIBIOS_ROOT}/os/ports/GCC/ARMCMx/STM32F4xx/ld NO_DEFAULT_PATH CMAKE_FIND_ROOT_PATH_BOTH) ENDIF() ENDIF() IF(NOT ChibiOS_LINKER_SCRIPT) MESSAGE(STATUS "ChibiOS doesn't have linker script for your chip, please specify it directly using ChibiOS_LINKER_SCRIPT variable.") ENDIF() ENDIF() ELSEIF(STM32_FAMILY STREQUAL "F1") SET(CHIBIOS_kernel_PLATFORM_SEARCH_PATH ${CHIBIOS_ROOT}/os/ports/common/ARMCMx/CMSIS/include ${CHIBIOS_ROOT}/os/ports/GCC/ARMCMx/STM32F1xx ) SET(CHIBIOS_kernel_PLATFORM_SOURCES vectors.c ) SET(CHIBIOS_kernel_PLATFORM_SEARCH_HEADERS core_cm3.h cmparams.h ) SET(CHIBIOS_hal_PLATFORM_SEARCH_PATH ${CHIBIOS_ROOT}/os/hal/platforms/STM32F1xx ${CHIBIOS_ROOT}/os/hal/platforms/STM32 ) SET(CHIBIOS_hal_PLATFORM_SEARCH_HEADERS hal_lld.h stm32.h stm32f10x.h ) SET(CHIBIOS_hal_PLATFORM_SOURCES hal_lld.c stm32_dma.c ) SET(CHIBIOS_HAL_PLATFORM_MODULE_PATHES STM32F1xx STM32 STM32 STM32/TIMv1 STM32/I2Cv1 STM32/TIMv1 STM32 STM32/GPIOv1 STM32/TIMv1 STM32/RTCv1 STM32 STM32/USARTv1 STM32/SPIv1 STM32/USARTv1 STM32/USBv1 ) IF(NOT ChibiOS_LINKER_SCRIPT) IF(NOT STM32_CHIP_TYPE) STM32_GET_CHIP_TYPE(${STM32_CHIP} STM32_CHIP_TYPE) ENDIF() IF(NOT STM32_FLASH_SIZE) STM32_GET_CHIP_PARAMETERS(${STM32_CHIP} STM32_FLASH_SIZE STM32_RAM_SIZE) ENDIF() IF(${STM32_CHIP_TYPE} STREQUAL MD_VL) IF(${STM32_FLASH_SIZE} STREQUAL 128K) FIND_FILE(ChibiOS_LINKER_SCRIPT NAMES STM32F100xB.ld PATHS ${CHIBIOS_ROOT}/os/ports/GCC/ARMCMx/STM32F1xx/ld NO_DEFAULT_PATH CMAKE_FIND_ROOT_PATH_BOTH) ENDIF() ELSEIF(${STM32_CHIP_TYPE} STREQUAL MD) IF(${STM32_FLASH_SIZE} STREQUAL 128K) FIND_FILE(ChibiOS_LINKER_SCRIPT NAMES STM32F103xB.ld PATHS ${CHIBIOS_ROOT}/os/ports/GCC/ARMCMx/STM32F1xx/ld NO_DEFAULT_PATH CMAKE_FIND_ROOT_PATH_BOTH) ENDIF() ELSEIF(${STM32_CHIP_TYPE} STREQUAL HD) IF(${STM32_FLASH_SIZE} STREQUAL 384K) FIND_FILE(ChibiOS_LINKER_SCRIPT NAMES STM32F103xD.ld PATHS ${CHIBIOS_ROOT}/os/ports/GCC/ARMCMx/STM32F1xx/ld NO_DEFAULT_PATH CMAKE_FIND_ROOT_PATH_BOTH) ELSEIF(${STM32_FLASH_SIZE} STREQUAL 512K) FIND_FILE(ChibiOS_LINKER_SCRIPT NAMES STM32F103xE.ld PATHS ${CHIBIOS_ROOT}/os/ports/GCC/ARMCMx/STM32F1xx/ld NO_DEFAULT_PATH CMAKE_FIND_ROOT_PATH_BOTH) ENDIF() ELSEIF(${STM32_CHIP_TYPE} STREQUAL XL) IF(${STM32_FLASH_SIZE} STREQUAL 1024K) FIND_FILE(ChibiOS_LINKER_SCRIPT NAMES STM32F103xG.ld PATHS ${CHIBIOS_ROOT}/os/ports/GCC/ARMCMx/STM32F1xx/ld NO_DEFAULT_PATH CMAKE_FIND_ROOT_PATH_BOTH) ENDIF() ENDIF() ENDIF() ENDIF() IF(NOT ChibiOS_LINKER_SCRIPT) MESSAGE(STATUS "ChibiOS doesn't have linker script for your chip, please specify it directly using ChibiOS_LINKER_SCRIPT variable.") ENDIF() SET(INDEX 0) FOREACH(module ${CHIBIOS_HAL_LLD_MODULES}) LIST(GET CHIBIOS_HAL_PLATFORM_MODULE_PATHES ${INDEX} path) SET(CHIBIOS_${module}_PLATFORM_SEARCH_PATH ${CHIBIOS_ROOT}/os/hal/platforms/${path}) SET(CHIBIOS_${module}_PLATFORM_SEARCH_HEADERS ${module}_lld.h) SET(CHIBIOS_${module}_PLATFORM_SOURCES ${module}_lld.c) IF(${module} STREQUAL ext) SET(CHIBIOS_${module}_PLATFORM_SEARCH_HEADERS ${CHIBIOS_ext_PLATFORM_SEARCH_HEADERS} ext_lld_isr.h) SET(CHIBIOS_${module}_PLATFORM_SOURCES ${CHIBIOS_ext_PLATFORM_SOURCES} ext_lld_isr.c) ENDIF() MATH(EXPR INDEX "${INDEX} + 1") ENDFOREACH() IF(STM32_FAMILY STREQUAL "F4") SET(CHIBIOS_ext_PLATFORM_SEARCH_PATH ${CHIBIOS_ext_PLATFORM_SEARCH_PATH} ${CHIBIOS_ROOT}/os/hal/platforms/STM32F4xx) ELSEIF(STM32_FAMILY STREQUAL "F1") SET(CHIBIOS_ext_PLATFORM_SEARCH_PATH ${CHIBIOS_ext_PLATFORM_SEARCH_PATH} ${CHIBIOS_ROOT}/os/hal/platforms/STM32F1xx) ENDIF() FOREACH(comp ${ChibiOS_FIND_COMPONENTS}) LIST(FIND CHIBIOS_COMPONENTS ${comp} INDEX) IF(INDEX EQUAL -1) MESSAGE(FATAL_ERROR "Unknown ChibiOS component: ${comp}\nSupported ChibiOS components: ${CHIBIOS_COMPONENTS}") ENDIF() FOREACH(source ${CHIBIOS_${comp}_SOURCES}) FIND_FILE(CHIBIOS_${comp}_${source} NAMES ${source} PATHS ${CHIBIOS_${comp}_SEARCH_PATH} NO_DEFAULT_PATH CMAKE_FIND_ROOT_PATH_BOTH) LIST(APPEND ChibiOS_SOURCES ${CHIBIOS_${comp}_${source}}) ENDFOREACH() IF(CHIBIOS_${comp}_SEARCH_HEADERS) FOREACH(header ${CHIBIOS_${comp}_SEARCH_HEADERS}) FIND_PATH(CHIBIOS_${comp}_${header}_INCLUDE_DIR NAMES ${header} PATHS ${CHIBIOS_${comp}_SEARCH_PATH} NO_DEFAULT_PATH CMAKE_FIND_ROOT_PATH_BOTH) LIST(APPEND ChibiOS_INCLUDE_DIRS ${CHIBIOS_${comp}_${header}_INCLUDE_DIR}) ENDFOREACH() ENDIF() IF(CHIBIOS_${comp}_PLATFORM_SEARCH_HEADERS) FOREACH(header ${CHIBIOS_${comp}_PLATFORM_SEARCH_HEADERS}) FIND_PATH(CHIBIOS_${comp}_PLATFORM_${header}_INCLUDE_DIR NAMES ${header} PATHS ${CHIBIOS_${comp}_PLATFORM_SEARCH_PATH} NO_DEFAULT_PATH CMAKE_FIND_ROOT_PATH_BOTH) LIST(APPEND ChibiOS_INCLUDE_DIRS ${CHIBIOS_${comp}_PLATFORM_${header}_INCLUDE_DIR}) ENDFOREACH() ENDIF() IF(CHIBIOS_${comp}_PLATFORM_SOURCES) FOREACH(source ${CHIBIOS_${comp}_PLATFORM_SOURCES}) FIND_FILE(CHIBIOS_${comp}_PLATFORM_${source} NAMES ${source} PATHS ${CHIBIOS_${comp}_PLATFORM_SEARCH_PATH} NO_DEFAULT_PATH CMAKE_FIND_ROOT_PATH_BOTH) LIST(APPEND ChibiOS_SOURCES ${CHIBIOS_${comp}_PLATFORM_${source}}) ENDFOREACH() ENDIF() ENDFOREACH()