|
@@ -0,0 +1,250 @@
|
|
|
|
|
+IF(NOT CHIBIOS_ROOT)
|
|
|
|
|
+ SET(CHIBIOS_ROOT /usr/src/chibios)
|
|
|
|
|
+ MESSAGE(STATUS "No CHIBIOS_ROOT specified, using default: ${CHIBIOS_ROOT}")
|
|
|
|
|
+ENDIF()
|
|
|
|
|
+
|
|
|
|
|
+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/USBv1
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ 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_SEARCH_PATH ${CHIBIOS_ext_PLATFORM_SEARCH_PATH} ${CHIBIOS_ROOT}/os/hal/platforms/STM32F4xx)
|
|
|
|
|
+ SET(CHIBIOS_${module}_PLATFORM_SOURCES ${CHIBIOS_ext_PLATFORM_SOURCES} ext_lld_isr.c)
|
|
|
|
|
+ ENDIF()
|
|
|
|
|
+
|
|
|
|
|
+ MATH(EXPR INDEX "${INDEX} + 1")
|
|
|
|
|
+ ENDFOREACH()
|
|
|
|
|
+
|
|
|
|
|
+ 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()
|
|
|
|
|
+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()
|
|
|
|
|
+
|
|
|
|
|
+LIST(REMOVE_DUPLICATES ChibiOS_INCLUDE_DIRS)
|
|
|
|
|
+
|
|
|
|
|
+INCLUDE(FindPackageHandleStandardArgs)
|
|
|
|
|
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(ChibiOS DEFAULT_MSG ChibiOS_SOURCES ChibiOS_INCLUDE_DIRS ChibiOS_LINKER_SCRIPT)
|