FindChibiOS.cmake 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  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. IF(NOT ChibiOS_LINKER_SCRIPT)
  168. IF(NOT STM32_CHIP_TYPE)
  169. STM32_GET_CHIP_TYPE(${STM32_CHIP} STM32_CHIP_TYPE)
  170. ENDIF()
  171. IF(NOT STM32_FLASH_SIZE)
  172. STM32_GET_CHIP_PARAMETERS(${STM32_CHIP} STM32_FLASH_SIZE STM32_RAM_SIZE)
  173. ENDIF()
  174. IF(${STM32_CHIP_TYPE} STREQUAL 40_41xxx)
  175. IF(${STM32_FLASH_SIZE} STREQUAL 1024K)
  176. 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)
  177. ENDIF()
  178. ELSEIF(${STM32_CHIP_TYPE} STREQUAL 429_439xx)
  179. IF(${STM32_FLASH_SIZE} STREQUAL 2048K)
  180. 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)
  181. ENDIF()
  182. ENDIF()
  183. IF(NOT ChibiOS_LINKER_SCRIPT)
  184. MESSAGE(STATUS "ChibiOS doesn't have linker script for your chip, please specify it directly using ChibiOS_LINKER_SCRIPT variable.")
  185. ENDIF()
  186. ENDIF()
  187. SET(CHIBIOS_${module}_PLATFORM_SEARCH_PATH ${CHIBIOS_ext_PLATFORM_SEARCH_PATH} ${CHIBIOS_ROOT}/os/hal/platforms/STM32F4xx)
  188. ELSEIF(STM32_FAMILY STREQUAL "F1")
  189. SET(CHIBIOS_kernel_PLATFORM_SEARCH_PATH
  190. ${CHIBIOS_ROOT}/os/ports/common/ARMCMx/CMSIS/include
  191. ${CHIBIOS_ROOT}/os/ports/GCC/ARMCMx/STM32F1xx
  192. )
  193. SET(CHIBIOS_kernel_PLATFORM_SOURCES
  194. vectors.c
  195. )
  196. SET(CHIBIOS_kernel_PLATFORM_SEARCH_HEADERS
  197. core_cm3.h
  198. cmparams.h
  199. )
  200. SET(CHIBIOS_hal_PLATFORM_SEARCH_PATH
  201. ${CHIBIOS_ROOT}/os/hal/platforms/STM32F1xx
  202. ${CHIBIOS_ROOT}/os/hal/platforms/STM32
  203. )
  204. SET(CHIBIOS_hal_PLATFORM_SEARCH_HEADERS
  205. hal_lld.h
  206. stm32.h
  207. stm32f10x.h
  208. )
  209. SET(CHIBIOS_hal_PLATFORM_SOURCES
  210. hal_lld.c
  211. stm32_dma.c
  212. )
  213. SET(CHIBIOS_HAL_PLATFORM_MODULE_PATHES
  214. STM32F1xx
  215. STM32
  216. STM32
  217. STM32/TIMv1
  218. STM32/I2Cv1
  219. STM32/TIMv1
  220. STM32
  221. STM32/GPIOv1
  222. STM32/TIMv1
  223. STM32/RTCv1
  224. STM32
  225. STM32/USARTv1
  226. STM32/SPIv1
  227. STM32/USARTv1
  228. STM32/USBv1
  229. )
  230. IF(NOT ChibiOS_LINKER_SCRIPT)
  231. IF(NOT STM32_CHIP_TYPE)
  232. STM32_GET_CHIP_TYPE(${STM32_CHIP} STM32_CHIP_TYPE)
  233. ENDIF()
  234. IF(NOT STM32_FLASH_SIZE)
  235. STM32_GET_CHIP_PARAMETERS(${STM32_CHIP} STM32_FLASH_SIZE STM32_RAM_SIZE)
  236. ENDIF()
  237. IF(${STM32_CHIP_TYPE} STREQUAL MD_VL)
  238. IF(${STM32_FLASH_SIZE} STREQUAL 128K)
  239. 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)
  240. ENDIF()
  241. ELSEIF(${STM32_CHIP_TYPE} STREQUAL MD)
  242. IF(${STM32_FLASH_SIZE} STREQUAL 128K)
  243. 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)
  244. ENDIF()
  245. ELSEIF(${STM32_CHIP_TYPE} STREQUAL HD)
  246. IF(${STM32_FLASH_SIZE} STREQUAL 384K)
  247. 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)
  248. ELSEIF(${STM32_FLASH_SIZE} STREQUAL 512K)
  249. 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)
  250. ENDIF()
  251. ELSEIF(${STM32_CHIP_TYPE} STREQUAL XL)
  252. IF(${STM32_FLASH_SIZE} STREQUAL 1024K)
  253. 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)
  254. ENDIF()
  255. ENDIF()
  256. ENDIF()
  257. SET(CHIBIOS_${module}_PLATFORM_SEARCH_PATH ${CHIBIOS_ext_PLATFORM_SEARCH_PATH} ${CHIBIOS_ROOT}/os/hal/platforms/STM32F1xx)
  258. ENDIF()
  259. IF(NOT ChibiOS_LINKER_SCRIPT)
  260. MESSAGE(STATUS "ChibiOS doesn't have linker script for your chip, please specify it directly using ChibiOS_LINKER_SCRIPT variable.")
  261. ENDIF()
  262. SET(INDEX 0)
  263. FOREACH(module ${CHIBIOS_HAL_LLD_MODULES})
  264. LIST(GET CHIBIOS_HAL_PLATFORM_MODULE_PATHES ${INDEX} path)
  265. SET(CHIBIOS_${module}_PLATFORM_SEARCH_PATH ${CHIBIOS_ROOT}/os/hal/platforms/${path})
  266. SET(CHIBIOS_${module}_PLATFORM_SEARCH_HEADERS ${module}_lld.h)
  267. SET(CHIBIOS_${module}_PLATFORM_SOURCES ${module}_lld.c)
  268. IF(${module} STREQUAL ext)
  269. SET(CHIBIOS_${module}_PLATFORM_SEARCH_HEADERS ${CHIBIOS_ext_PLATFORM_SEARCH_HEADERS} ext_lld_isr.h)
  270. SET(CHIBIOS_${module}_PLATFORM_SOURCES ${CHIBIOS_ext_PLATFORM_SOURCES} ext_lld_isr.c)
  271. ENDIF()
  272. MATH(EXPR INDEX "${INDEX} + 1")
  273. ENDFOREACH()
  274. FOREACH(comp ${ChibiOS_FIND_COMPONENTS})
  275. LIST(FIND CHIBIOS_COMPONENTS ${comp} INDEX)
  276. IF(INDEX EQUAL -1)
  277. MESSAGE(FATAL_ERROR "Unknown ChibiOS component: ${comp}\nSupported ChibiOS components: ${CHIBIOS_COMPONENTS}")
  278. ENDIF()
  279. FOREACH(source ${CHIBIOS_${comp}_SOURCES})
  280. FIND_FILE(CHIBIOS_${comp}_${source} NAMES ${source} PATHS ${CHIBIOS_${comp}_SEARCH_PATH} NO_DEFAULT_PATH CMAKE_FIND_ROOT_PATH_BOTH)
  281. LIST(APPEND ChibiOS_SOURCES ${CHIBIOS_${comp}_${source}})
  282. ENDFOREACH()
  283. IF(CHIBIOS_${comp}_SEARCH_HEADERS)
  284. FOREACH(header ${CHIBIOS_${comp}_SEARCH_HEADERS})
  285. FIND_PATH(CHIBIOS_${comp}_${header}_INCLUDE_DIR NAMES ${header} PATHS ${CHIBIOS_${comp}_SEARCH_PATH} NO_DEFAULT_PATH CMAKE_FIND_ROOT_PATH_BOTH)
  286. LIST(APPEND ChibiOS_INCLUDE_DIRS ${CHIBIOS_${comp}_${header}_INCLUDE_DIR})
  287. ENDFOREACH()
  288. ENDIF()
  289. IF(CHIBIOS_${comp}_PLATFORM_SEARCH_HEADERS)
  290. FOREACH(header ${CHIBIOS_${comp}_PLATFORM_SEARCH_HEADERS})
  291. FIND_PATH(CHIBIOS_${comp}_PLATFORM_${header}_INCLUDE_DIR NAMES ${header} PATHS ${CHIBIOS_${comp}_PLATFORM_SEARCH_PATH} NO_DEFAULT_PATH CMAKE_FIND_ROOT_PATH_BOTH)
  292. LIST(APPEND ChibiOS_INCLUDE_DIRS ${CHIBIOS_${comp}_PLATFORM_${header}_INCLUDE_DIR})
  293. ENDFOREACH()
  294. ENDIF()
  295. IF(CHIBIOS_${comp}_PLATFORM_SOURCES)
  296. FOREACH(source ${CHIBIOS_${comp}_PLATFORM_SOURCES})
  297. FIND_FILE(CHIBIOS_${comp}_PLATFORM_${source} NAMES ${source} PATHS ${CHIBIOS_${comp}_PLATFORM_SEARCH_PATH} NO_DEFAULT_PATH CMAKE_FIND_ROOT_PATH_BOTH)
  298. LIST(APPEND ChibiOS_SOURCES ${CHIBIOS_${comp}_PLATFORM_${source}})
  299. ENDFOREACH()
  300. ENDIF()
  301. ENDFOREACH()
  302. LIST(REMOVE_DUPLICATES ChibiOS_INCLUDE_DIRS)
  303. INCLUDE(FindPackageHandleStandardArgs)
  304. FIND_PACKAGE_HANDLE_STANDARD_ARGS(ChibiOS DEFAULT_MSG ChibiOS_SOURCES ChibiOS_INCLUDE_DIRS ChibiOS_LINKER_SCRIPT)