ChibiOS2.cmake 11 KB

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