FindChibiOS.cmake 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. IF(NOT CHIBIOS_ROOT)
  2. SET(CHIBIOS_ROOT /usr/src/chibios)
  3. MESSAGE(STATUS "No CHIBIOS_ROOT specified, using default: ${CHIBIOS_ROOT}")
  4. ENDIF()
  5. 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)
  6. SET(CHIBIOS_VARIOUS_MODULES chprintf chrtclib evtimer memstreams shell syscalls fatfs lwip)
  7. SET(CHIBIOS_COMPONENTS kernel hal ${CHIBIOS_HAL_MODULES} ${CHIBIOS_VARIOUS_MODULES})
  8. IF(NOT ChibiOS_FIND_COMPONENTS)
  9. SET(ChibiOS_FIND_COMPONENTS kernel)
  10. MESSAGE(STATUS "No ChibiOS components specified, using default: ${ChibiOS_FIND_COMPONENTS}")
  11. MESSAGE(STATUS "Supported ChibiOS components: ${CHIBIOS_COMPONENTS}")
  12. ENDIF()
  13. SET(CHIBIOS_HAL_LLD_MODULES adc can ext gpt i2c icu mac pal pwm rtc sdc serial spi uart usb)
  14. SET(CHIBIOS_kernel_SEARCH_PATH
  15. ${CHIBIOS_ROOT}/os/kernel/include
  16. ${CHIBIOS_ROOT}/os/ports/common/ARMCMx
  17. ${CHIBIOS_ROOT}/os/ports/GCC/ARMCMx
  18. ${CHIBIOS_ROOT}/os/kernel/src
  19. )
  20. SET(CHIBIOS_kernel_SEARCH_HEADERS
  21. ch.h
  22. nvic.h
  23. chcore.h
  24. )
  25. SET(CHIBIOS_kernel_SOURCES
  26. chsys.c
  27. chdebug.c
  28. chlists.c
  29. chvt.c
  30. chschd.c
  31. chthreads.c
  32. chdynamic.c
  33. chregistry.c
  34. chsem.c
  35. chmtx.c
  36. chcond.c
  37. chevents.c
  38. chmsg.c
  39. chmboxes.c
  40. chqueues.c
  41. chmemcore.c
  42. chheap.c
  43. chmempools.c
  44. crt0.c
  45. chcore.c
  46. chcore_v7m.c
  47. nvic.c
  48. )
  49. SET(CHIBIOS_hal_SEARCH_PATH ${CHIBIOS_ROOT}/os/hal/include ${CHIBIOS_ROOT}/os/hal/src)
  50. SET(CHIBIOS_hal_SEARCH_HEADERS hal.h)
  51. SET(CHIBIOS_hal_SOURCES hal.c)
  52. FOREACH(module ${CHIBIOS_HAL_MODULES})
  53. SET(CHIBIOS_${module}_SEARCH_PATH ${CHIBIOS_ROOT}/os/hal/src)
  54. SET(CHIBIOS_${module}_SOURCES ${module}.c)
  55. ENDFOREACH()
  56. FOREACH(module ${CHIBIOS_VARIOUS_MODULES})
  57. IF(${module} STREQUAL fatfs)
  58. SET(CHIBIOS_${module}_SEARCH_PATH ${CHIBIOS_ROOT}/os/various/fatfs_bindings ${CHIBIOS_ROOT}/ext/fatfs/src/ ${CHIBIOS_ROOT}/ext/fatfs/src/option)
  59. SET(CHIBIOS_${module}_SOURCES
  60. fatfs_diskio.c
  61. fatfs_syscall.c
  62. ff.c
  63. ccsbcs.c
  64. )
  65. SET(CHIBIOS_${module}_SEARCH_HEADERS ff.h)
  66. ELSEIF(${module} STREQUAL lwip)
  67. SET(CHIBIOS_${module}_SEARCH_PATH
  68. ${CHIBIOS_ROOT}/os/various/lwip_bindings
  69. ${CHIBIOS_ROOT}/os/various/lwip_bindings/arch
  70. ${CHIBIOS_ROOT}/ext/lwip/src/
  71. ${CHIBIOS_ROOT}/ext/lwip/src/include/
  72. ${CHIBIOS_ROOT}/ext/lwip/src/include/ipv4/
  73. )
  74. SET(CHIBIOS_${module}_SOURCES
  75. lwipthread.c
  76. sys_arch.c
  77. netif/etharp.c
  78. core/dhcp.c
  79. core/dns.c
  80. core/init.c
  81. core/mem.c
  82. core/memp.c
  83. core/netif.c
  84. core/pbuf.c
  85. core/raw.c
  86. core/stats.c
  87. core/sys.c
  88. core/tcp.c
  89. core/tcp_in.c
  90. core/tcp_out.c
  91. core/udp.c
  92. core/ipv4/autoip.c
  93. core/ipv4/icmp.c
  94. core/ipv4/igmp.c
  95. core/ipv4/inet.c
  96. core/ipv4/inet_chksum.c
  97. core/ipv4/ip.c
  98. core/ipv4/ip_addr.c
  99. core/ipv4/ip_frag.c
  100. core/def.c
  101. core/timers.c
  102. api/api_lib.c
  103. api/api_msg.c
  104. api/err.c
  105. api/netbuf.c
  106. api/netdb.c
  107. api/netifapi.c
  108. api/sockets.c
  109. api/tcpip.c
  110. )
  111. SET(CHIBIOS_${module}_SEARCH_HEADERS
  112. lwipthread.h
  113. sys_arch.h
  114. lwip/api.h
  115. lwip/ip.h
  116. )
  117. ELSE()
  118. SET(CHIBIOS_${module}_SEARCH_PATH ${CHIBIOS_ROOT}/os/various/)
  119. SET(CHIBIOS_${module}_SOURCES ${module}.c)
  120. IF(NOT (${module} STREQUAL syscalls))
  121. SET(CHIBIOS_${module}_SEARCH_HEADERS ${module}.h)
  122. ENDIF()
  123. ENDIF()
  124. ENDFOREACH()
  125. IF(STM32_FAMILY STREQUAL "F4")
  126. SET(CHIBIOS_kernel_PLATFORM_SEARCH_PATH
  127. ${CHIBIOS_ROOT}/os/ports/common/ARMCMx/CMSIS/include
  128. ${CHIBIOS_ROOT}/os/ports/GCC/ARMCMx/STM32F4xx
  129. )
  130. SET(CHIBIOS_kernel_PLATFORM_SOURCES
  131. vectors.c
  132. )
  133. SET(CHIBIOS_kernel_PLATFORM_SEARCH_HEADERS
  134. core_cm4.h
  135. cmparams.h
  136. )
  137. SET(CHIBIOS_hal_PLATFORM_SEARCH_PATH
  138. ${CHIBIOS_ROOT}/os/hal/platforms/STM32F4xx
  139. ${CHIBIOS_ROOT}/os/hal/platforms/STM32
  140. )
  141. SET(CHIBIOS_hal_PLATFORM_SEARCH_HEADERS
  142. hal_lld.h
  143. stm32.h
  144. stm32f4xx.h
  145. )
  146. SET(CHIBIOS_hal_PLATFORM_SOURCES
  147. hal_lld.c
  148. stm32_dma.c
  149. )
  150. SET(CHIBIOS_HAL_PLATFORM_MODULE_PATHES
  151. STM32F4xx
  152. STM32
  153. STM32
  154. STM32/TIMv1
  155. STM32/I2Cv1
  156. STM32/TIMv1
  157. STM32
  158. STM32/GPIOv2
  159. STM32/TIMv1
  160. STM32/RTCv2
  161. STM32
  162. STM32/USARTv1
  163. STM32/SPIv1
  164. STM32/USARTv1
  165. STM32/OTGv1
  166. )
  167. SET(INDEX 0)
  168. FOREACH(module ${CHIBIOS_HAL_LLD_MODULES})
  169. LIST(GET CHIBIOS_HAL_PLATFORM_MODULE_PATHES ${INDEX} path)
  170. SET(CHIBIOS_${module}_PLATFORM_SEARCH_PATH ${CHIBIOS_ROOT}/os/hal/platforms/${path})
  171. SET(CHIBIOS_${module}_PLATFORM_SEARCH_HEADERS ${module}_lld.h)
  172. SET(CHIBIOS_${module}_PLATFORM_SOURCES ${module}_lld.c)
  173. IF(${module} STREQUAL ext)
  174. SET(CHIBIOS_${module}_PLATFORM_SEARCH_HEADERS ${CHIBIOS_ext_PLATFORM_SEARCH_HEADERS} ext_lld_isr.h)
  175. SET(CHIBIOS_${module}_PLATFORM_SEARCH_PATH ${CHIBIOS_ext_PLATFORM_SEARCH_PATH} ${CHIBIOS_ROOT}/os/hal/platforms/STM32F4xx)
  176. SET(CHIBIOS_${module}_PLATFORM_SOURCES ${CHIBIOS_ext_PLATFORM_SOURCES} ext_lld_isr.c)
  177. ENDIF()
  178. MATH(EXPR INDEX "${INDEX} + 1")
  179. ENDFOREACH()
  180. IF(NOT ChibiOS_LINKER_SCRIPT)
  181. IF(NOT STM32_CHIP_TYPE)
  182. STM32_GET_CHIP_TYPE(${STM32_CHIP} STM32_CHIP_TYPE)
  183. ENDIF()
  184. IF(NOT STM32_FLASH_SIZE)
  185. STM32_GET_CHIP_PARAMETERS(${STM32_CHIP} STM32_FLASH_SIZE STM32_RAM_SIZE)
  186. ENDIF()
  187. IF(${STM32_CHIP_TYPE} STREQUAL 40_41xxx)
  188. IF(${STM32_FLASH_SIZE} STREQUAL 1024K)
  189. 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)
  190. ENDIF()
  191. ELSEIF(${STM32_CHIP_TYPE} STREQUAL 429_439xx)
  192. IF(${STM32_FLASH_SIZE} STREQUAL 2048K)
  193. 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)
  194. ENDIF()
  195. ENDIF()
  196. IF(NOT ChibiOS_LINKER_SCRIPT)
  197. MESSAGE(STATUS "ChibiOS doesn't have linker script for your chip, please specify it directly using ChibiOS_LINKER_SCRIPT variable.")
  198. ENDIF()
  199. ENDIF()
  200. ENDIF()
  201. FOREACH(comp ${ChibiOS_FIND_COMPONENTS})
  202. LIST(FIND CHIBIOS_COMPONENTS ${comp} INDEX)
  203. IF(INDEX EQUAL -1)
  204. MESSAGE(FATAL_ERROR "Unknown ChibiOS component: ${comp}\nSupported ChibiOS components: ${CHIBIOS_COMPONENTS}")
  205. ENDIF()
  206. FOREACH(source ${CHIBIOS_${comp}_SOURCES})
  207. FIND_FILE(CHIBIOS_${comp}_${source} NAMES ${source} PATHS ${CHIBIOS_${comp}_SEARCH_PATH} NO_DEFAULT_PATH CMAKE_FIND_ROOT_PATH_BOTH)
  208. LIST(APPEND ChibiOS_SOURCES ${CHIBIOS_${comp}_${source}})
  209. ENDFOREACH()
  210. IF(CHIBIOS_${comp}_SEARCH_HEADERS)
  211. FOREACH(header ${CHIBIOS_${comp}_SEARCH_HEADERS})
  212. FIND_PATH(CHIBIOS_${comp}_${header}_INCLUDE_DIR NAMES ${header} PATHS ${CHIBIOS_${comp}_SEARCH_PATH} NO_DEFAULT_PATH CMAKE_FIND_ROOT_PATH_BOTH)
  213. LIST(APPEND ChibiOS_INCLUDE_DIRS ${CHIBIOS_${comp}_${header}_INCLUDE_DIR})
  214. ENDFOREACH()
  215. ENDIF()
  216. IF(CHIBIOS_${comp}_PLATFORM_SEARCH_HEADERS)
  217. FOREACH(header ${CHIBIOS_${comp}_PLATFORM_SEARCH_HEADERS})
  218. FIND_PATH(CHIBIOS_${comp}_PLATFORM_${header}_INCLUDE_DIR NAMES ${header} PATHS ${CHIBIOS_${comp}_PLATFORM_SEARCH_PATH} NO_DEFAULT_PATH CMAKE_FIND_ROOT_PATH_BOTH)
  219. LIST(APPEND ChibiOS_INCLUDE_DIRS ${CHIBIOS_${comp}_PLATFORM_${header}_INCLUDE_DIR})
  220. ENDFOREACH()
  221. ENDIF()
  222. IF(CHIBIOS_${comp}_PLATFORM_SOURCES)
  223. FOREACH(source ${CHIBIOS_${comp}_PLATFORM_SOURCES})
  224. FIND_FILE(CHIBIOS_${comp}_PLATFORM_${source} NAMES ${source} PATHS ${CHIBIOS_${comp}_PLATFORM_SEARCH_PATH} NO_DEFAULT_PATH CMAKE_FIND_ROOT_PATH_BOTH)
  225. LIST(APPEND ChibiOS_SOURCES ${CHIBIOS_${comp}_PLATFORM_${source}})
  226. ENDFOREACH()
  227. ENDIF()
  228. ENDFOREACH()
  229. LIST(REMOVE_DUPLICATES ChibiOS_INCLUDE_DIRS)
  230. INCLUDE(FindPackageHandleStandardArgs)
  231. FIND_PACKAGE_HANDLE_STANDARD_ARGS(ChibiOS DEFAULT_MSG ChibiOS_SOURCES ChibiOS_INCLUDE_DIRS ChibiOS_LINKER_SCRIPT)