FindHAL.cmake 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. set(HAL_DRIVERS_F4
  2. adc can cec cortex crc cryp dac dcmi dfsdm dma dma2d dsi eth exti flash
  3. flash_ramfunc fmpi2c gpio hash hcd i2c i2s irda iwdg lptim ltdc mmc nand nor
  4. pccard pcd pwr qspi rcc rng rtc sai sd sdram smartcard smbus spdifrx spi
  5. sram tim uart usart wwdg
  6. )
  7. set(HAL_EX_DRIVERS_F4
  8. adc cryp dac dcmi dma flash fmpi2c hash i2c i2s ltdc pcd pwr rcc rtc sai tim
  9. )
  10. set(HAL_LL_DRIVERS_F4
  11. adc crc dac dma dma2d exti fmc fsmc gpio i2c lptim pwr rcc rng rtc sdmmc spi
  12. tim usart usb utils
  13. )
  14. set(HAL_DRIVERS_F0
  15. adc can cec comp cortex crc dac dma exti flash gpio i2c i2s irda iwdg pcd
  16. pwr rcc rtc smartcard smbus spi tim tsc uart usart wwdg
  17. )
  18. set(HAL_EX_DRIVERS_F0
  19. adc crc dac flash i2c pcd pwr rcc rtc smartcard spi tim uart usart
  20. )
  21. set(HAL_LL_DRIVERS_F0
  22. adc comp crc crs dac dma exti gpio i2c pwr rcc rtc spi tim usart usb utils
  23. )
  24. set(HAL_DRIVERS_G0
  25. adc cec comp cortex crc cryp dac dma exti flash gpio i2c i2s irda iwdg lptim
  26. pwr rcc rng rtc smartcard smbus spi tim uart usart wwdg
  27. )
  28. set(HAL_EX_DRIVERS_G0
  29. adc crc cryp dac dma flash i2c pwr rcc rtc smartcard spi tim uart usart
  30. )
  31. set(HAL_LL_DRIVERS_G0
  32. adc comp crc dac dma exti gpio i2c lptim lpuart pwr rcc rng rtc spi tim ucpd
  33. usart utils
  34. )
  35. set(HAL_DRIVERS_L0
  36. adc comp cortex crc cryp dac dma firewall flash flash_ramfunc gpio i2c i2s
  37. irda iwdg lcd lptim pcd pwr rcc rng rtc smartcard smbus spi tim tsc uart
  38. usart wwdg
  39. )
  40. set(HAL_EX_DRIVERS_L0
  41. adc comp crc cryp dac flash i2c pcd pwr rcc rtc smartcard tim uart
  42. )
  43. set(HAL_LL_DRIVERS_L0
  44. adc comp crc crs dac dma exti gpio i2c lptim lpuart pwr rcc rng rtc spi tim
  45. usart usb utils
  46. )
  47. set(HAL_DRIVERS_F1
  48. adc can cec cortex crc dac dma eth exti flash gpio hcd i2c i2s irda iwdg
  49. mmc nand nor pccard pcd pwr rcc rtc sd smartcard spi sram tim uart usart
  50. wwdg
  51. )
  52. set(HAL_EX_DRIVERS_F1
  53. adc dac flash gpio pcd rcc rtc tim
  54. )
  55. set(HAL_LL_DRIVERS_F1
  56. adc crc dac dma exti fsmc gpio i2c pwr rcc rtc sdmmc spi tim usart usb utils
  57. )
  58. set(HAL_DRIVERS_L1
  59. adc comp cortex crc cryp dac dma flash flash_ramfunc gpio i2c i2s irda iwdg
  60. lcd nor opamp pcd pwr rcc rtc sd smartcard spi sram tim uart usart wwdg
  61. )
  62. set(HAL_EX_DRIVERS_L1
  63. adc cryp dac flash opamp pcd pcd pwr rcc rtc tim
  64. )
  65. set(HAL_LL_DRIVERS_L1
  66. adc comp crc dac dma exti fsmc gpio i2c opamp pwr rcc rtc sdmmc spi tim
  67. usart usb utils
  68. )
  69. set(HAL_DRIVERS_F2
  70. adc can cortex crc cryp dac dcmi dma eth exti flash gpio hash hcd i2c i2s
  71. irda iwdg mmc nand nor pccard pcd pwr rcc rng rtc sd smartcard spi sram tim
  72. uart usart wwdg
  73. )
  74. set(HAL_EX_DRIVERS_F2
  75. adc dac dcmi dma flash pcd pwr rcc rtc tim
  76. )
  77. set(HAL_LL_DRIVERS_F2
  78. adc crc dac dma exti fsmc gpio i2c pwr rcc rng rtc sdmmc spi tim usart usb
  79. utils
  80. )
  81. set(HAL_DRIVERS_F3
  82. adc can cec comp cortex crc dac dma exti flash gpio hrtim i2c i2s irda iwdg
  83. nand nor opamp pccard pcd pwr rcc rtc sdadc smartcard smbus spi sram tim tsc
  84. uart usart wwdg
  85. )
  86. set(HAL_EX_DRIVERS_F3
  87. adc crc dac flash i2c i2s opamp pcd pwr rcc rtc smartcard spi tim uart usart
  88. )
  89. set(HAL_LL_DRIVERS_F3
  90. adc comp crc dac dma exti fmc gpio hrtim i2c opamp pwr rcc rtc spi tim usart
  91. usb utils
  92. )
  93. set(HAL_DRIVERS_G4
  94. adc comp cordic cortex crc cryp dac dma exti fdcan flash flash_ramfunc fmac
  95. gpio hrtim i2c i2s irda iwdg lptim nand nor opamp pcd pwr qspi rcc rng rtc
  96. sai smartcard smbus spi sram tim uart usart wwdg
  97. )
  98. set(HAL_EX_DRIVERS_G4
  99. adc crc cryp dac dma flash i2c opamp pcd pwr rcc rtc sai smartcard spi tim
  100. uart usart
  101. )
  102. set(HAL_LL_DRIVERS_G4
  103. adc comp cordic crc crs dac dma exti fmac fmc gpio hrtim i2c lptim lpuart
  104. opamp pwr rcc rng rtc spi tim ucpd usart usb utils
  105. )
  106. set(HAL_DRIVERS_L4
  107. adc can comp cortex crc cryp dac dcmi dfsdm dma dma2d dsi exti firewall
  108. flash flash_ramfunc gfxmmu gpio hash hcd i2c irda iwdg lcd lptim ltdc mmc
  109. nand nor opamp ospi pcd pka pssi pwr qspi rcc rng rtc sai sd smartcard smbus
  110. spi sram swpmi tim tsc uart usart wwdg
  111. )
  112. set(HAL_EX_DRIVERS_L4
  113. adc crc cryp dac dfsdm dma flash hash i2c ltdc mmc opamp pcd pwr rcc rng rtc
  114. sai sd smartcard spi tim uart usart
  115. )
  116. set(HAL_LL_DRIVERS_L4
  117. adc comp crc crs dac dma dma2d exti fmc gpio i2c lptim lpuart opamp pka pwr
  118. rcc rng rtc sdmmc spi swpmi tim usart usb utils
  119. )
  120. set(HAL_DRIVERS_F7
  121. adc can cec cortex crc cryp dac dcmi dfsdm dma dma2d dsi eth exti flash
  122. gpio hash hcd i2c i2s irda iwdg jpeg lptim ltdc mdios mmc nand nor pcd pwr
  123. qspi rcc rng rtc sai sd sdram smartcard smbus spdifrx spi sram tim uart
  124. usart wwdg
  125. )
  126. set(HAL_EX_DRIVERS_F7
  127. adc crc cryp dac dcmi dma flash hash i2c ltdc pcd pwr rcc rtc sai smartcard
  128. spi tim uart
  129. )
  130. set(HAL_LL_DRIVERS_F7
  131. adc crc dac dma dma2d exti fmc gpio i2c lptim pwr rcc rng rtc sdmmc spi tim
  132. usart usb utils
  133. )
  134. set(HAL_DRIVERS_H7
  135. adc cec comp cortex crc cryp dac dcmi dfsdm dma dma2d dsi dts eth exti fdcan
  136. flash gfxmmu gpio hash hrtim hsem i2c i2s irda iwdg jpeg lptim ltdc mdios
  137. mdma mmc nand nor opamp ospi otfdec pcd pssi pwr qspi ramecc rcc rng rtc sai
  138. sd sdram smartcard smbus spdifrx spi sram swpmi tim uart usart wwdg
  139. )
  140. set(HAL_EX_DRIVERS_H7
  141. adc crc cryp dac dfsdm dma eth flash hash i2c i2s ltdc mmc opamp pcd pwr rcc
  142. rng rtc sai sd smartcard spi tim uart usart
  143. )
  144. set(HAL_LL_DRIVERS_H7
  145. adc bdma comp crc crs dac delayblock dma dma2d exti fmc gpio hrtim i2c lptim
  146. lpuart mdma opamp pwr rcc rng rtc sdmmc spi swpmi tim usart usb utils
  147. )
  148. if(NOT HAL_FIND_COMPONENTS)
  149. set(HAL_FIND_COMPONENTS
  150. STM32F0 STM32G0 STM32L0 STM32F1 STM32L1 STM32F2 STM32F3 STM32F4 STM32G4
  151. STM32L4 STM32F7 STM32H7
  152. )
  153. endif()
  154. foreach(COMP ${HAL_FIND_COMPONENTS})
  155. string(TOLOWER ${COMP} COMP_L)
  156. string(TOUPPER ${COMP} COMP_U)
  157. string(REGEX MATCH "^STM32([FGHL][0-9]).*$" COMP_U ${COMP_U})
  158. if(NOT CMAKE_MATCH_1)
  159. message(FATAL_ERROR "Unknown HAL component: ${COMP}")
  160. endif()
  161. set(FAMILY ${CMAKE_MATCH_1})
  162. string(TOLOWER ${FAMILY} FAMILY_L)
  163. if(NOT STM32_CUBE_${FAMILY}_PATH)
  164. set(STM32_CUBE_${FAMILY}_PATH /opt/STM32Cube${FAMILY} CACHE PATH "Path to STM32Cube${FAMILY}")
  165. message(STATUS "No STM32_CUBE_${FAMILY}_PATH specified using default: ${STM32_CUBE_${FAMILY}_PATH}")
  166. endif()
  167. find_path(HAL_${FAMILY}_PATH
  168. NAMES Inc/stm32${FAMILY_L}xx_hal.h
  169. PATHS "${STM32_CUBE_${FAMILY}_PATH}/Drivers/STM32${FAMILY}xx_HAL_Driver"
  170. NO_DEFAULT_PATH
  171. )
  172. if (NOT HAL_${FAMILY}_PATH)
  173. continue()
  174. endif()
  175. find_path(HAL_${FAMILY}_INCLUDE
  176. NAMES stm32${FAMILY_L}xx_hal.h
  177. PATHS "${HAL_${FAMILY}_PATH}/Inc"
  178. NO_DEFAULT_PATH
  179. )
  180. find_file(HAL_${FAMILY}_SOURCE
  181. NAMES stm32${FAMILY_L}xx_hal.c
  182. PATHS "${HAL_${FAMILY}_PATH}/Src"
  183. NO_DEFAULT_PATH
  184. )
  185. if ((NOT HAL_${FAMILY}_INCLUDE) OR (NOT HAL_${FAMILY}_SOURCE))
  186. set(HAL_${COMP}_FOUND FALSE)
  187. continue()
  188. endif()
  189. if(NOT (TARGET HAL::STM32::${FAMILY}))
  190. add_library(HAL::STM32::${FAMILY} INTERFACE IMPORTED)
  191. target_link_libraries(HAL::STM32::${FAMILY} INTERFACE STM32::${FAMILY})
  192. target_link_libraries(HAL::STM32::${FAMILY} INTERFACE CMSIS::STM32::${FAMILY})
  193. target_include_directories(HAL::STM32::${FAMILY} INTERFACE "${HAL_${FAMILY}_INCLUDE}")
  194. target_sources(HAL::STM32::${FAMILY} INTERFACE "${HAL_${FAMILY}_SOURCE}")
  195. endif()
  196. foreach(DRV ${HAL_DRIVERS_${FAMILY}})
  197. string(TOLOWER ${DRV} DRV_L)
  198. string(TOUPPER ${DRV} DRV)
  199. find_file(HAL_${FAMILY}_${DRV}_SOURCE
  200. NAMES stm32${FAMILY_L}xx_hal_${DRV_L}.c
  201. PATHS "${HAL_${FAMILY}_PATH}/Src"
  202. NO_DEFAULT_PATH
  203. )
  204. list(APPEND HAL_${FAMILY}_SOURCES "${HAL_${FAMILY}_${DRV}_SOURCE}")
  205. if(NOT HAL_${FAMILY}_${DRV}_SOURCE)
  206. message(WARNING "Cannot found ${DRV} driver for ${COMP}")
  207. endif()
  208. if(HAL_${FAMILY}_${DRV}_SOURCE AND (NOT (TARGET HAL::STM32::${FAMILY}::${DRV})))
  209. add_library(HAL::STM32::${FAMILY}::${DRV} INTERFACE IMPORTED)
  210. target_link_libraries(HAL::STM32::${FAMILY}::${DRV} INTERFACE HAL::STM32::${FAMILY})
  211. target_sources(HAL::STM32::${FAMILY}::${DRV} INTERFACE "${HAL_${FAMILY}_${DRV}_SOURCE}")
  212. endif()
  213. if(HAL_${FAMILY}_${DRV}_SOURCE AND (${DRV_L} IN_LIST HAL_EX_DRIVERS_${FAMILY}))
  214. find_file(HAL_${FAMILY}_${DRV}_EX_SOURCE
  215. NAMES stm32${FAMILY_L}xx_hal_${DRV_L}_ex.c
  216. PATHS "${HAL_${FAMILY}_PATH}/Src"
  217. NO_DEFAULT_PATH
  218. )
  219. list(APPEND HAL_${FAMILY}_SOURCES "${HAL_${FAMILY}_${DRV}_EX_SOURCE}")
  220. if(NOT HAL_${FAMILY}_${DRV}_EX_SOURCE)
  221. message(WARNING "Cannot found ${DRV}Ex driver for ${COMP}")
  222. endif()
  223. if((TARGET HAL::STM32::${FAMILY}::${DRV}) AND (NOT (TARGET HAL::STM32::${FAMILY}::${DRV}Ex)))
  224. add_library(HAL::STM32::${FAMILY}::${DRV}Ex INTERFACE IMPORTED)
  225. target_link_libraries(HAL::STM32::${FAMILY}::${DRV}Ex INTERFACE HAL::STM32::${FAMILY}::${DRV})
  226. target_sources(HAL::STM32::${FAMILY}::${DRV}Ex INTERFACE "${HAL_${FAMILY}_${DRV}_EX_SOURCE}")
  227. endif()
  228. endif()
  229. endforeach()
  230. foreach(DRV ${HAL_LL_DRIVERS_${FAMILY}})
  231. string(TOLOWER ${DRV} DRV_L)
  232. string(TOUPPER ${DRV} DRV)
  233. find_file(HAL_${FAMILY}_${DRV}_LL_SOURCE
  234. NAMES stm32${FAMILY_L}xx_ll_${DRV_L}.c
  235. PATHS "${HAL_${FAMILY}_PATH}/Src"
  236. NO_DEFAULT_PATH
  237. )
  238. list(APPEND HAL_${FAMILY}_SOURCES "${HAL_${FAMILY}_${DRV}_LL_SOURCE}")
  239. if(NOT HAL_${FAMILY}_${DRV}_LL_SOURCE)
  240. message(WARNING "Cannot found LL_${DRV} driver for ${COMP}")
  241. endif()
  242. if(HAL_${FAMILY}_${DRV}_LL_SOURCE AND (NOT (TARGET HAL::STM32::${FAMILY}::LL_${DRV})))
  243. add_library(HAL::STM32::${FAMILY}::LL_${DRV} INTERFACE IMPORTED)
  244. target_link_libraries(HAL::STM32::${FAMILY}::LL_${DRV} INTERFACE HAL::STM32::${FAMILY})
  245. target_sources(HAL::STM32::${FAMILY}::LL_${DRV} INTERFACE "${HAL_${FAMILY}_${DRV}_LL_SOURCE}")
  246. endif()
  247. endforeach()
  248. set(HAL_${COMP}_FOUND TRUE)
  249. foreach(FILE ${HAL_${FAMILY}_SOURCES})
  250. if(NOT FILE)
  251. set(HAL_${COMP}_FOUND FALSE)
  252. break()
  253. endif()
  254. endforeach()
  255. if(HAL_${COMP}_FOUND)
  256. list(APPEND HAL_INCLUDE_DIRS "${HAL_${FAMILY}_INCLUDE}")
  257. list(APPEND HAL_SOURCES HAL_${FAMILY}_SOURCES)
  258. endif()
  259. endforeach()
  260. include(FindPackageHandleStandardArgs)
  261. find_package_handle_standard_args(HAL
  262. REQUIRED_VARS HAL_INCLUDE_DIRS HAL_SOURCES
  263. FOUND_VAR HAL_FOUND
  264. HANDLE_COMPONENTS
  265. )