Findchibios.cmake 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. include(ParseMakefile)
  2. # STM32F303
  3. set(MCU "cortex-m4")
  4. set(ARMV 7)
  5. set(MCU_FAMILY "STM32")
  6. set(MCU_SERIES "STM32F3xx")
  7. string(TOUPPER ${MCU_SERIES} MCU_SERIES_UPPER)
  8. set(MCU_LDSCRIPT "STM32F303xC")
  9. set(MCU_STARTUP "stm32f3xx")
  10. set(BOARD "GENERIC_STM32_F303XC")
  11. set(USE_FPU TRUE)
  12. set(UF2_FAMILY "STM32F3")
  13. set(STM32_BOOTLOADER_ADDRESS 0x1FFFD800)
  14. set(EEPROM_DRIVER "wear_leveling" FORCE)
  15. set(WEAR_LEVELING_DRIVER "embedded_flash" FORCE)
  16. target_compile_definitions(qmk PUBLIC
  17. QMK_MCU_FAMILY_${MCU_FAMILY}
  18. QMK_MCU_SERIES_${MCU_SERIES_UPPER}
  19. )
  20. target_compile_options(qmk PUBLIC
  21. -march=armv7-m
  22. )
  23. target_compile_definitions(qmk PUBLIC
  24. MCU_${MCU_FAMILY}
  25. __ARM_ARCH_7M__
  26. )
  27. # platforms/chibios/platform.mk
  28. if(NOT DEFINED USE_PROCESS_STACKSIZE)
  29. set(USE_PROCESS_STACKSIZE 0x800)
  30. endif()
  31. if(NOT DEFINED USE_EXCEPTIONS_STACKSIZE)
  32. set(USE_EXCEPTIONS_STACKSIZE 0x400)
  33. endif()
  34. target_link_options(qmk PUBLIC
  35. -Wl,--defsym=__process_stack_size__=${USE_PROCESS_STACKSIZE},--defsym=__main_stack_size__=${USE_EXCEPTIONS_STACKSIZE}
  36. )
  37. if(NOT DEFINED MCU_PORT_NAME)
  38. set(MCU_PORT_NAME ${MCU_FAMILY})
  39. endif()
  40. set(MCU_ARCH ${MCU})
  41. if(NOT DEFINED CHIBIOS_PORT)
  42. set(CHIBIOS_PORT "ARMv${ARMV}-M")
  43. endif()
  44. if(NOT DEFINED PLATFORM_NAME)
  45. set(PLATFORM_NAME platform)
  46. endif()
  47. set(CHIBIOS ${CMAKE_SOURCE_DIR}/lib/chibios)
  48. set(CHIBIOS_CONTRIB ${CMAKE_SOURCE_DIR}/lib/chibios-contrib)
  49. # port*.mk
  50. include(chibios/ports/${CHIBIOS_PORT})
  51. # platform.mk
  52. include(chibios/ports/${MCU_SERIES})
  53. # startup_*.mk - might need to convert these
  54. find_file(STARTUP_MK startup_${MCU_STARTUP}.mk
  55. ${CHIBIOS}/os/common/ports/ARMCMx/compilers/GCC/mk
  56. ${CHIBIOS}/os/common/startup/ARMCMx/compilers/GCC/mk
  57. ${CHIBIOS_CONTRIB}/os/common/startup/ARMCMx/compilers/GCC/mk
  58. )
  59. get_filename_component(STARTUP_DIR ${STARTUP_MK} DIRECTORY)
  60. ParseMakefile(${STARTUP_MK})
  61. target_sources(qmk PUBLIC ${STARTUPSRC})
  62. target_sources(qmk PUBLIC ${STARTUPASM})
  63. target_include_directories(qmk PUBLIC ${STARTUPINC})
  64. # board paths - we should just standardize these
  65. find_path(BOARD_PATH
  66. NAMES
  67. boards/${BOARD}/board.mk
  68. board/board.mk
  69. PATHS
  70. ${QMK_KEYBOARD_FOLDER}/boards/${BOARD}
  71. ${CMAKE_SOURCE_DIR}/platforms/chibios/boards/${BOARD}
  72. ${CHIBIOS}/os/hal/
  73. ${CHIBIOS_CONTRIB}/os/hal/
  74. )
  75. # if(EXISTS ${BOARD_PATH}/rules.mk)
  76. # ParseMakefile(${BOARD_PATH}/rules.mk)
  77. # endif()
  78. if(EXISTS ${BOARD_PATH}/configs/config.h)
  79. target_precompile_headers(qmk PUBLIC
  80. ${BOARD_PATH}/configs/config.h
  81. )
  82. endif()
  83. if(EXISTS ${BOARD_PATH}/configs/post_config.h)
  84. target_precompile_headers(qmk PUBLIC
  85. ${BOARD_PATH}/configs/post_config.h
  86. )
  87. endif()
  88. find_file(BOARD_MK board.mk
  89. ${BOARD_PATH}/boards/${BOARD}
  90. ${BOARD_PATH}/board
  91. )
  92. ParseMakefile(${BOARD_MK})
  93. target_sources(qmk PUBLIC ${BOARDSRC})
  94. target_include_directories(qmk PUBLIC ${BOARDINC})
  95. # allow board.c to be overriden
  96. file(RELATIVE_PATH INIT_HOOK_RELATIVE ${CMAKE_BINARY_DIR}
  97. "${CMAKE_SOURCE_DIR}/tmk_core/protocol/chibios/init_hooks.h")
  98. set_source_files_properties(${BOARDSRC} TARGET_DIRECTORY qmk PROPERTIES
  99. # COMPILE_OPTIONS "-include ../../../tmk_core/protocol/chibios/init_hooks.h"
  100. COMPILE_OPTIONS "-include ${INIT_HOOK_RELATIVE}"
  101. )
  102. # bootloader
  103. if(DEFINED STM32_BOOTLOADER_ADDRESS)
  104. target_compile_definitions(qmk PUBLIC STM32_BOOTLOADER_ADDRESS=${STM32_BOOTLOADER_ADDRESS})
  105. endif()
  106. if(DEFINED WB32_BOOTLOADER_ADDRESS)
  107. target_compile_definitions(qmk PUBLIC WB32_BOOTLOADER_ADDRESS=${WB32_BOOTLOADER_ADDRESS})
  108. endif()
  109. find_file(BOOTLOADER_DEFS_H bootloader_defs.h
  110. ${QMK_KEYBOARD_FOLDER}
  111. ${QMK_KEYBOARD_FOLDER}/boards/${BOARD}
  112. ${BOARD_PATH}/configs
  113. )
  114. if(EXISTS ${BOOTLOADER_DEFS_H})
  115. target_compile_options(qmk PUBLIC -include ${BOOTLOADER_DEFS_H})
  116. endif()
  117. # chconf directories
  118. find_path(CHCONFDIR chconf.h
  119. ${QMK_KEYBOARD_FOLDER}
  120. ${CMAKE_SOURCE_DIR}/platforms/chibios/boards/${BOARD}/configs
  121. ${CMAKE_SOURCE_DIR}/platforms/chibios/boards/common/configs
  122. )
  123. target_include_directories(qmk PUBLIC ${CHCONFDIR})
  124. # halconf directories
  125. find_path(HALCONFDIR halconf.h
  126. ${QMK_KEYBOARD_FOLDER}
  127. ${CMAKE_SOURCE_DIR}/platforms/chibios/boards/${BOARD}/configs
  128. ${CMAKE_SOURCE_DIR}/platforms/chibios/boards/common/configs
  129. )
  130. target_include_directories(qmk PUBLIC ${HALCONFDIR})
  131. # linker script
  132. find_file(LDSCRIPT ${MCU_LDSCRIPT}.ld
  133. ${QMK_KEYBOARD_FOLDER}/ld
  134. ${CMAKE_SOURCE_DIR}/platforms/chibios/boards/${BOARD}/ld
  135. ${CMAKE_SOURCE_DIR}/platforms/chibios/boards/common/ld
  136. ${STARTUPLD}
  137. ${STARTUPLD_CONTRIB}
  138. )
  139. get_filename_component(LDSCRIPT_PATH ${LDSCRIPT} DIRECTORY)
  140. target_link_options(qmk PUBLIC
  141. -T ${LDSCRIPT}
  142. -L ${LDSCRIPT_PATH}
  143. )
  144. # os/hal/hal.mk
  145. target_sources(qmk PUBLIC
  146. ${CHIBIOS}/os/hal/src/hal.c
  147. ${CHIBIOS}/os/hal/src/hal_st.c
  148. ${CHIBIOS}/os/hal/src/hal_buffers.c
  149. ${CHIBIOS}/os/hal/src/hal_queues.c
  150. ${CHIBIOS}/os/hal/src/hal_flash.c
  151. ${CHIBIOS}/os/hal/src/hal_mmcsd.c
  152. ${CHIBIOS}/os/hal/src/hal_adc.c
  153. ${CHIBIOS}/os/hal/src/hal_can.c
  154. ${CHIBIOS}/os/hal/src/hal_crypto.c
  155. ${CHIBIOS}/os/hal/src/hal_dac.c
  156. ${CHIBIOS}/os/hal/src/hal_efl.c
  157. ${CHIBIOS}/os/hal/src/hal_gpt.c
  158. ${CHIBIOS}/os/hal/src/hal_i2c.c
  159. ${CHIBIOS}/os/hal/src/hal_i2s.c
  160. ${CHIBIOS}/os/hal/src/hal_icu.c
  161. ${CHIBIOS}/os/hal/src/hal_mac.c
  162. ${CHIBIOS}/os/hal/src/hal_mmc_spi.c
  163. ${CHIBIOS}/os/hal/src/hal_pal.c
  164. ${CHIBIOS}/os/hal/src/hal_pwm.c
  165. ${CHIBIOS}/os/hal/src/hal_rtc.c
  166. ${CHIBIOS}/os/hal/src/hal_sdc.c
  167. ${CHIBIOS}/os/hal/src/hal_serial.c
  168. ${CHIBIOS}/os/hal/src/hal_serial_usb.c
  169. ${CHIBIOS}/os/hal/src/hal_sio.c
  170. ${CHIBIOS}/os/hal/src/hal_spi.c
  171. ${CHIBIOS}/os/hal/src/hal_trng.c
  172. ${CHIBIOS}/os/hal/src/hal_uart.c
  173. ${CHIBIOS}/os/hal/src/hal_usb.c
  174. ${CHIBIOS}/os/hal/src/hal_wdg.c
  175. ${CHIBIOS}/os/hal/src/hal_wspi.c
  176. )
  177. target_include_directories(qmk PUBLIC
  178. ${CHIBIOS}/os/hal/include
  179. )
  180. # os/hal/osal/rt-nil/osal.mk
  181. target_sources(qmk PUBLIC
  182. ${CHIBIOS}/os/hal/osal/rt-nil/osal.c
  183. )
  184. target_include_directories(qmk PUBLIC
  185. ${CHIBIOS}/os/hal/osal/rt-nil
  186. )
  187. # os/rt/rt.mk
  188. target_sources(qmk PUBLIC
  189. ${CHIBIOS}/os/rt/src/chsys.c
  190. ${CHIBIOS}/os/rt/src/chrfcu.c
  191. ${CHIBIOS}/os/rt/src/chdebug.c
  192. ${CHIBIOS}/os/rt/src/chtrace.c
  193. ${CHIBIOS}/os/rt/src/chvt.c
  194. ${CHIBIOS}/os/rt/src/chschd.c
  195. ${CHIBIOS}/os/rt/src/chinstances.c
  196. ${CHIBIOS}/os/rt/src/chthreads.c
  197. ${CHIBIOS}/os/rt/src/chsys.c
  198. ${CHIBIOS}/os/rt/src/chrfcu.c
  199. ${CHIBIOS}/os/rt/src/chdebug.c
  200. ${CHIBIOS}/os/rt/src/chtrace.c
  201. ${CHIBIOS}/os/rt/src/chvt.c
  202. ${CHIBIOS}/os/rt/src/chschd.c
  203. ${CHIBIOS}/os/rt/src/chinstances.c
  204. ${CHIBIOS}/os/rt/src/chthreads.c
  205. ${CHIBIOS}/os/rt/src/chtm.c
  206. ${CHIBIOS}/os/rt/src/chstats.c
  207. ${CHIBIOS}/os/rt/src/chregistry.c
  208. ${CHIBIOS}/os/rt/src/chsem.c
  209. ${CHIBIOS}/os/rt/src/chmtx.c
  210. ${CHIBIOS}/os/rt/src/chcond.c
  211. ${CHIBIOS}/os/rt/src/chevents.c
  212. ${CHIBIOS}/os/rt/src/chmsg.c
  213. ${CHIBIOS}/os/rt/src/chdynamic.c
  214. )
  215. target_include_directories(qmk PUBLIC
  216. ${CHIBIOS}/os/rt/include
  217. )
  218. # os/oslib/oslib.mk
  219. target_sources(qmk PUBLIC
  220. ${CHIBIOS}/os/oslib/src/chmboxes.c
  221. ${CHIBIOS}/os/oslib/src/chmemcore.c
  222. ${CHIBIOS}/os/oslib/src/chmemheaps.c
  223. ${CHIBIOS}/os/oslib/src/chmempools.c
  224. ${CHIBIOS}/os/oslib/src/chpipes.c
  225. ${CHIBIOS}/os/oslib/src/chobjcaches.c
  226. ${CHIBIOS}/os/oslib/src/chdelegates.c
  227. ${CHIBIOS}/os/oslib/src/chfactory.c
  228. )
  229. target_include_directories(qmk PUBLIC
  230. ${CHIBIOS}/os/oslib/include
  231. )
  232. # os/hal/lib/streams/streams.mk
  233. target_sources(qmk PUBLIC
  234. ${CHIBIOS}/os/hal/lib/streams/chprintf.c
  235. ${CHIBIOS}/os/hal/lib/streams/chscanf.c
  236. ${CHIBIOS}/os/hal/lib/streams/memstreams.c
  237. ${CHIBIOS}/os/hal/lib/streams/nullstreams.c
  238. ${CHIBIOS}/os/hal/lib/streams/bufstreams.c
  239. )
  240. target_include_directories(qmk PUBLIC
  241. ${CHIBIOS}/os/hal/lib/streams
  242. )
  243. # resume platform.mk
  244. target_sources(qmk PUBLIC
  245. ${CHIBIOS}/os/various/syscalls.c
  246. )
  247. target_include_directories(qmk PUBLIC
  248. ${CHIBIOS}/os/license
  249. ${CHIBIOS}/os/oslib/include
  250. ${CHIBIOS}/os/various
  251. )