FindHAL.cmake 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442
  1. # For information about why and how of this file: https://cmake.org/cmake/help/latest/command/find_package.html
  2. set(HAL_DRIVERS_F0
  3. adc can cec comp cortex crc dac dma exti flash gpio i2c i2s irda iwdg pcd
  4. pwr rcc rtc smartcard smbus spi tim tsc uart usart wwdg
  5. )
  6. set(HAL_EX_DRIVERS_F0
  7. adc crc dac flash i2c pcd pwr rcc rtc smartcard spi tim uart usart
  8. )
  9. set(HAL_LL_DRIVERS_F0
  10. adc comp crc crs dac dma exti gpio i2c pwr rcc rtc spi tim usart usb utils
  11. )
  12. set(HAL_DRIVERS_F1
  13. adc can cec cortex crc dac dma eth exti flash gpio hcd i2c i2s irda iwdg
  14. mmc nand nor pccard pcd pwr rcc rtc sd smartcard spi sram tim uart usart
  15. wwdg
  16. )
  17. set(HAL_EX_DRIVERS_F1
  18. adc dac flash gpio pcd rcc rtc tim
  19. )
  20. set(HAL_LL_DRIVERS_F1
  21. adc crc dac dma exti fsmc gpio i2c pwr rcc rtc sdmmc spi tim usart usb utils
  22. )
  23. set(HAL_DRIVERS_F2
  24. adc can cortex crc cryp dac dcmi dma eth exti flash gpio hash hcd i2c i2s
  25. irda iwdg mmc nand nor pccard pcd pwr rcc rng rtc sd smartcard spi sram tim
  26. uart usart wwdg
  27. )
  28. set(HAL_EX_DRIVERS_F2
  29. adc dac dcmi dma flash pcd pwr rcc rtc tim
  30. )
  31. set(HAL_LL_DRIVERS_F2
  32. adc crc dac dma exti fsmc gpio i2c pwr rcc rng rtc sdmmc spi tim usart usb
  33. utils
  34. )
  35. set(HAL_DRIVERS_F3
  36. adc can cec comp cortex crc dac dma exti flash gpio hrtim i2c i2s irda iwdg
  37. nand nor opamp pccard pcd pwr rcc rtc sdadc smartcard smbus spi sram tim tsc
  38. uart usart wwdg
  39. )
  40. set(HAL_EX_DRIVERS_F3
  41. adc crc dac flash i2c i2s opamp pcd pwr rcc rtc smartcard spi tim uart usart
  42. )
  43. set(HAL_LL_DRIVERS_F3
  44. adc comp crc dac dma exti fmc gpio hrtim i2c opamp pwr rcc rtc spi tim usart
  45. usb utils
  46. )
  47. set(HAL_DRIVERS_F4
  48. adc can cec cortex crc cryp dac dcmi dfsdm dma dma2d dsi eth exti flash
  49. flash_ramfunc fmpi2c gpio hash hcd i2c i2s irda iwdg lptim ltdc mmc nand nor
  50. pccard pcd pwr qspi rcc rng rtc sai sd sdram smartcard smbus spdifrx spi
  51. sram tim uart usart wwdg
  52. )
  53. set(HAL_EX_DRIVERS_F4
  54. adc cryp dac dcmi dma flash fmpi2c hash i2c i2s ltdc pcd pwr rcc rtc sai tim
  55. )
  56. set(HAL_LL_DRIVERS_F4
  57. adc crc dac dma dma2d exti fmc fsmc gpio i2c lptim pwr rcc rng rtc sdmmc spi
  58. tim usart usb utils
  59. )
  60. set(HAL_DRIVERS_F7
  61. adc can cec cortex crc cryp dac dcmi dfsdm dma dma2d dsi eth exti flash
  62. gpio hash hcd i2c i2s irda iwdg jpeg lptim ltdc mdios mmc nand nor pcd pwr
  63. qspi rcc rng rtc sai sd sdram smartcard smbus spdifrx spi sram tim uart
  64. usart wwdg
  65. )
  66. set(HAL_EX_DRIVERS_F7
  67. adc crc cryp dac dcmi dma flash hash i2c ltdc pcd pwr rcc rtc sai smartcard
  68. spi tim uart
  69. )
  70. set(HAL_LL_DRIVERS_F7
  71. adc crc dac dma dma2d exti fmc gpio i2c lptim pwr rcc rng rtc sdmmc spi tim
  72. usart usb utils
  73. )
  74. set(HAL_DRIVERS_G0
  75. adc cec comp cortex crc cryp dac dma exti flash gpio i2c i2s irda iwdg lptim
  76. pwr rcc rng rtc smartcard smbus spi tim uart usart wwdg
  77. )
  78. set(HAL_EX_DRIVERS_G0
  79. adc crc cryp dac dma flash i2c pwr rcc rtc smartcard spi tim uart usart
  80. )
  81. set(HAL_LL_DRIVERS_G0
  82. adc comp crc dac dma exti gpio i2c lptim lpuart pwr rcc rng rtc spi tim ucpd
  83. usart utils
  84. )
  85. set(HAL_DRIVERS_G4
  86. adc comp cordic cortex crc cryp dac dma exti fdcan flash flash_ramfunc fmac
  87. gpio hrtim i2c i2s irda iwdg lptim nand nor opamp pcd pwr qspi rcc rng rtc
  88. sai smartcard smbus spi sram tim uart usart wwdg
  89. )
  90. set(HAL_EX_DRIVERS_G4
  91. adc crc cryp dac dma flash i2c opamp pcd pwr rcc rtc sai smartcard spi tim
  92. uart usart
  93. )
  94. set(HAL_LL_DRIVERS_G4
  95. adc comp cordic crc crs dac dma exti fmac fmc gpio hrtim i2c lptim lpuart
  96. opamp pwr rcc rng rtc spi tim ucpd usart usb utils
  97. )
  98. set(HAL_DRIVERS_H7
  99. adc cec comp cordic cortex crc cryp dac dcmi dfsdm dma dma2d dsi dts eth exti fdcan
  100. flash fmac gfxmmu gpio hash hcd hrtim hsem i2c i2s irda iwdg jpeg lptim ltdc mdios
  101. mdma mmc nand nor opamp ospi otfdec pcd pssi pwr qspi ramecc rcc rng rtc sai
  102. sd sdram smartcard smbus spdifrx spi sram swpmi tim uart usart wwdg
  103. )
  104. set(HAL_EX_DRIVERS_H7
  105. adc crc cryp dac dfsdm dma eth flash hash i2c i2s ltdc mmc opamp pcd pwr rcc
  106. rng rtc sai sd smartcard spi tim uart usart
  107. )
  108. set(HAL_LL_DRIVERS_H7
  109. adc bdma comp cordic crc crs dac delayblock dma dma2d exti fmac fmc gpio hrtim i2c lptim
  110. lpuart mdma opamp pwr rcc rng rtc sdmmc spi swpmi tim usart usb utils
  111. )
  112. set(HAL_DRIVERS_L0
  113. adc comp cortex crc cryp dac dma firewall flash flash_ramfunc gpio i2c i2s
  114. irda iwdg lcd lptim pcd pwr rcc rng rtc smartcard smbus spi tim tsc uart
  115. usart wwdg
  116. )
  117. set(HAL_EX_DRIVERS_L0
  118. adc comp crc cryp dac flash i2c pcd pwr rcc rtc smartcard tim uart
  119. )
  120. set(HAL_LL_DRIVERS_L0
  121. adc comp crc crs dac dma exti gpio i2c lptim lpuart pwr rcc rng rtc spi tim
  122. usart usb utils
  123. )
  124. set(HAL_DRIVERS_L1
  125. adc comp cortex crc cryp dac dma flash flash_ramfunc gpio i2c i2s irda iwdg
  126. lcd nor opamp pcd pwr rcc rtc sd smartcard spi sram tim uart usart wwdg
  127. )
  128. set(HAL_EX_DRIVERS_L1
  129. adc cryp dac flash opamp pcd pcd pwr rcc rtc tim
  130. )
  131. set(HAL_LL_DRIVERS_L1
  132. adc comp crc dac dma exti fsmc gpio i2c opamp pwr rcc rtc sdmmc spi tim
  133. usart usb utils
  134. )
  135. set(HAL_DRIVERS_L4
  136. adc can comp cortex crc cryp dac dcmi dfsdm dma dma2d dsi exti firewall
  137. flash flash_ramfunc gfxmmu gpio hash hcd i2c irda iwdg lcd lptim ltdc mmc
  138. nand nor opamp ospi pcd pka pssi pwr qspi rcc rng rtc sai sd smartcard smbus
  139. spi sram swpmi tim tsc uart usart wwdg
  140. )
  141. set(HAL_EX_DRIVERS_L4
  142. adc crc cryp dac dfsdm dma flash hash i2c ltdc mmc opamp pcd pwr rcc rng rtc
  143. sai sd smartcard spi tim uart usart
  144. )
  145. set(HAL_LL_DRIVERS_L4
  146. adc comp crc crs dac dma dma2d exti fmc gpio i2c lptim lpuart opamp pka pwr
  147. rcc rng rtc sdmmc spi swpmi tim usart usb utils
  148. )
  149. set(HAL_DRIVERS_L5
  150. adc comp cortex crc cryp dac dfsdm dma exti fdcan flash flash_ramfunc gpio
  151. gtzc hash i2c icache irda iwdg lptim mmc nand nor opamp ospi pcd pka pwr rcc
  152. rng rtc sai sd smartcard smbus spi sram tim tsc uart usart wwdg
  153. )
  154. set(HAL_EX_DRIVERS_L5
  155. adc crc cryp dac dfsdm dma flash hash i2c mmc opamp pcd pwr rcc
  156. rng rtc sai sd smartcard spi tim uart usart
  157. )
  158. set(HAL_LL_DRIVERS_L5
  159. adc comp crc crs dac dma exti fmc gpio i2c lptim lpuart opamp pka pwr rcc
  160. rng rtc sdmmc spi tim ucpd usart usb utils
  161. )
  162. set(HAL_DRIVERS_WB
  163. adc comp cortex crc cryp dma exti flash gpio hsem
  164. i2c ipcc irda iwdg lcd lptim pcd pka pwr qspi rcc
  165. rng rtc sai smartcard smbus spi tim tsc uart usart wwdg
  166. )
  167. set(HAL_EX_DRIVERS_WB
  168. adc crc cryp dma flash i2c pcd pwr rcc
  169. rtc sai smartcard spi tim uart usart
  170. )
  171. set(HAL_LL_DRIVERS_WB
  172. adc comp crc crs dma exti gpio i2c lptim lpuart pka pwr rcc
  173. rng rtc spi tim usart usb utils
  174. )
  175. set(HAL_DRIVERS_WL
  176. adc comp cortex crc cryp dac dma exti flash gpio gtzc hsem
  177. i2c i2s ipcc irda iwdg lptim pka pwr rcc
  178. rng rtc smartcard smbus spi subghz tim uart usart wwdg
  179. )
  180. set(HAL_EX_DRIVERS_WL
  181. adc crc cryp dma flash i2c pwr rcc
  182. rng rtc smartcard spi tim uart usart
  183. )
  184. set(HAL_LL_DRIVERS_WL
  185. adc comp crc dac dma exti gpio i2c lptim lpuart pka pwr rcc
  186. rng rtc spi tim usart utils
  187. )
  188. foreach(FAMILY_SUFFIX ${STM32_SUPPORTED_FAMILIES_SHORT_NAME})
  189. list(APPEND HAL_DRIVERS ${HAL_DRIVERS_${FAMILY_SUFFIX}})
  190. list(APPEND HAL_LL_DRIVERS ${HAL_LL_DRIVERS_${FAMILY_SUFFIX}})
  191. endforeach()
  192. list(REMOVE_DUPLICATES HAL_DRIVERS)
  193. list(REMOVE_DUPLICATES HAL_LL_DRIVERS)
  194. foreach(COMP ${HAL_FIND_COMPONENTS})
  195. string(TOLOWER ${COMP} COMP_L)
  196. string(TOUPPER ${COMP} COMP_U)
  197. string(REGEX MATCH "^STM32([FGHLW][0-9BL])([0-9A-Z][0-9M][A-Z][0-9A-Z])?_?(M0PLUS|M4|M7)?.*$" COMP_U ${COMP_U})
  198. if(CMAKE_MATCH_1)
  199. list(APPEND HAL_FIND_COMPONENTS_FAMILIES ${COMP})
  200. message(TRACE "FindHAL: append COMP ${COMP} to HAL_FIND_COMPONENTS_FAMILIES")
  201. continue()
  202. endif()
  203. if(${COMP_L} IN_LIST HAL_DRIVERS)
  204. list(APPEND HAL_FIND_COMPONENTS_DRIVERS ${COMP})
  205. message(TRACE "FindHAL: append COMP ${COMP} to HAL_FIND_COMPONENTS_DRIVERS")
  206. continue()
  207. endif()
  208. string(REGEX REPLACE "^ll_" "" COMP_L ${COMP_L})
  209. if(${COMP_L} IN_LIST HAL_LL_DRIVERS)
  210. list(APPEND HAL_FIND_COMPONENTS_DRIVERS_LL ${COMP})
  211. message(TRACE "FindHAL: append COMP ${COMP} to HAL_FIND_COMPONENTS_DRIVERS_LL")
  212. continue()
  213. endif()
  214. message(FATAL_ERROR "FindHAL: unknown HAL component: ${COMP}")
  215. endforeach()
  216. if(NOT HAL_FIND_COMPONENTS_FAMILIES)
  217. set(HAL_FIND_COMPONENTS_FAMILIES ${STM32_SUPPORTED_FAMILIES_LONG_NAME})
  218. endif()
  219. if(STM32H7 IN_LIST HAL_FIND_COMPONENTS_FAMILIES)
  220. list(REMOVE_ITEM HAL_FIND_COMPONENTS_FAMILIES STM32H7)
  221. list(APPEND HAL_FIND_COMPONENTS_FAMILIES STM32H7_M7 STM32H7_M4)
  222. endif()
  223. if(STM32WB IN_LIST HAL_FIND_COMPONENTS_FAMILIES)
  224. list(REMOVE_ITEM HAL_FIND_COMPONENTS_FAMILIES STM32WB)
  225. list(APPEND HAL_FIND_COMPONENTS_FAMILIES STM32WB_M4)
  226. endif()
  227. if(STM32WL IN_LIST HAL_FIND_COMPONENTS_FAMILIES)
  228. list(REMOVE_ITEM HAL_FIND_COMPONENTS_FAMILIES STM32WL)
  229. list(APPEND HAL_FIND_COMPONENTS_FAMILIES STM32WL_M4 STM32WL_M0PLUS)
  230. endif()
  231. list(REMOVE_DUPLICATES HAL_FIND_COMPONENTS_FAMILIES)
  232. # when no explicit driver and driver_ll is given to find_component(HAL )
  233. # then search for all supported driver and driver_ll
  234. if((NOT HAL_FIND_COMPONENTS_DRIVERS) AND (NOT HAL_FIND_COMPONENTS_DRIVERS_LL))
  235. set(HAL_FIND_COMPONENTS_DRIVERS ${HAL_DRIVERS})
  236. set(HAL_FIND_COMPONENTS_DRIVERS_LL ${HAL_LL_DRIVERS})
  237. endif()
  238. list(REMOVE_DUPLICATES HAL_FIND_COMPONENTS_DRIVERS)
  239. list(REMOVE_DUPLICATES HAL_FIND_COMPONENTS_DRIVERS_LL)
  240. message(STATUS "Search for HAL families: ${HAL_FIND_COMPONENTS_FAMILIES}")
  241. message(STATUS "Search for HAL drivers: ${HAL_FIND_COMPONENTS_DRIVERS}")
  242. message(STATUS "Search for HAL LL drivers: ${HAL_FIND_COMPONENTS_DRIVERS_LL}")
  243. foreach(COMP ${HAL_FIND_COMPONENTS_FAMILIES})
  244. string(TOUPPER ${COMP} COMP_U)
  245. string(REGEX MATCH "^STM32([FGHLW][0-9BL])([0-9A-Z][0-9M][A-Z][0-9A-Z])?_?(M0PLUS|M4|M7)?.*$" COMP_U ${COMP_U})
  246. if(CMAKE_MATCH_3)
  247. set(CORE ${CMAKE_MATCH_3})
  248. set(CORE_C "::${CORE}")
  249. set(CORE_U "_${CORE}")
  250. else()
  251. unset(CORE)
  252. unset(CORE_C)
  253. unset(CORE_U)
  254. endif()
  255. set(FAMILY ${CMAKE_MATCH_1})
  256. string(TOLOWER ${FAMILY} FAMILY_L)
  257. if((NOT STM32_HAL_${FAMILY}_PATH) AND (NOT STM32_CUBE_${FAMILY}_PATH) AND (DEFINED ENV{STM32_CUBE_${FAMILY}_PATH}))
  258. set(STM32_CUBE_${FAMILY}_PATH $ENV{STM32_CUBE_${FAMILY}_PATH} CACHE PATH "Path to STM32Cube${FAMILY}")
  259. message(STATUS "ENV STM32_CUBE_${FAMILY}_PATH specified, using STM32_CUBE_${FAMILY}_PATH: ${STM32_CUBE_${FAMILY}_PATH}")
  260. endif()
  261. if((NOT STM32_HAL_${FAMILY}_PATH) AND (NOT STM32_CUBE_${FAMILY}_PATH))
  262. set(STM32_CUBE_${FAMILY}_PATH /opt/STM32Cube${FAMILY} CACHE PATH "Path to STM32Cube${FAMILY}")
  263. message(STATUS "Neither STM32_CUBE_${FAMILY}_PATH nor STM32_HAL_${FAMILY}_PATH specified using default STM32_CUBE_${FAMILY}_PATH: ${STM32_CUBE_${FAMILY}_PATH}")
  264. endif()
  265. #Checking HAL patch or release version
  266. unset(VERSION_INFO)
  267. find_file(PACKAGE_FILE NAMES package.xml PATHS ${STM32_CUBE_${FAMILY}_PATH})
  268. if(PACKAGE_FILE)
  269. file(READ ${PACKAGE_FILE} PACKAGE_FILE_CONTENT)
  270. string(REGEX MATCH "PackDescription Release=\"FW.${FAMILY}.([0-9.]+)\"( Patch=\"FW.${FAMILY}.([0-9.]+)\")?" VERSION_INFO ${PACKAGE_FILE_CONTENT})
  271. if(CMAKE_MATCH_3) # This is the "Patch" revision
  272. set(HAL_${COMP}_VERSION ${CMAKE_MATCH_3})
  273. set(HAL_VERSION ${CMAKE_MATCH_3})
  274. else(CMAKE_MATCH_1) #This is the "Release" version
  275. set(HAL_${COMP}_VERSION ${CMAKE_MATCH_1})
  276. set(HAL_VERSION ${CMAKE_MATCH_1})
  277. endif()
  278. endif()
  279. if(NOT VERSION_INFO)
  280. message(STATUS "Could not read the HAL version from package.xml for ${COMP}")
  281. endif()
  282. find_path(HAL_${FAMILY}_PATH
  283. NAMES Inc/stm32${FAMILY_L}xx_hal.h
  284. PATHS "${STM32_HAL_${FAMILY}_PATH}" "${STM32_CUBE_${FAMILY}_PATH}/Drivers/STM32${FAMILY}xx_HAL_Driver"
  285. NO_DEFAULT_PATH
  286. )
  287. if (NOT HAL_${FAMILY}_PATH)
  288. message(DEBUG "Missing HAL_${FAMILY}_PATH path")
  289. continue()
  290. endif()
  291. find_path(HAL_${FAMILY}${CORE_U}_INCLUDE
  292. NAMES stm32${FAMILY_L}xx_hal.h
  293. PATHS "${HAL_${FAMILY}_PATH}/Inc"
  294. NO_DEFAULT_PATH
  295. )
  296. find_file(HAL_${FAMILY}${CORE_U}_SOURCE
  297. NAMES stm32${FAMILY_L}xx_hal.c
  298. PATHS "${HAL_${FAMILY}_PATH}/Src"
  299. NO_DEFAULT_PATH
  300. )
  301. if ((NOT HAL_${FAMILY}${CORE_U}_INCLUDE) OR (NOT HAL_${FAMILY}${CORE_U}_SOURCE))
  302. set(HAL_${COMP}_FOUND FALSE)
  303. message(DEBUG "FindHAL: did not find path to HAL /src or /inc dir")
  304. continue()
  305. endif()
  306. if(NOT (TARGET HAL::STM32::${FAMILY}${CORE_C}))
  307. message(TRACE "FindHAL: creating library HAL::STM32::${FAMILY}${CORE_C}")
  308. add_library(HAL::STM32::${FAMILY}${CORE_C} INTERFACE IMPORTED)
  309. target_link_libraries(HAL::STM32::${FAMILY}${CORE_C} INTERFACE
  310. STM32::${FAMILY}${CORE_C}
  311. CMSIS::STM32::${FAMILY}${CORE_C})
  312. target_include_directories(HAL::STM32::${FAMILY}${CORE_C} INTERFACE "${HAL_${FAMILY}${CORE_U}_INCLUDE}")
  313. target_sources(HAL::STM32::${FAMILY}${CORE_C} INTERFACE "${HAL_${FAMILY}${CORE_U}_SOURCE}")
  314. endif()
  315. foreach(DRV_COMP ${HAL_FIND_COMPONENTS_DRIVERS})
  316. string(TOLOWER ${DRV_COMP} DRV_L)
  317. string(TOUPPER ${DRV_COMP} DRV)
  318. if(NOT (DRV_L IN_LIST HAL_DRIVERS_${FAMILY}))
  319. continue()
  320. endif()
  321. find_file(HAL_${FAMILY}${CORE_U}_${DRV}_SOURCE
  322. NAMES stm32${FAMILY_L}xx_hal_${DRV_L}.c
  323. PATHS "${HAL_${FAMILY}_PATH}/Src"
  324. NO_DEFAULT_PATH
  325. )
  326. list(APPEND HAL_${FAMILY}${CORE_U}_SOURCES "${HAL_${FAMILY}_${DRV}_SOURCE}")
  327. if(NOT HAL_${FAMILY}${CORE_U}_${DRV}_SOURCE)
  328. message(WARNING "Cannot find ${DRV} driver for ${FAMILY}${CORE_U}")
  329. set(HAL_${DRV_COMP}_FOUND FALSE)
  330. continue()
  331. endif()
  332. set(HAL_${DRV_COMP}_FOUND TRUE)
  333. if(HAL_${FAMILY}${CORE_U}_${DRV}_SOURCE AND (NOT (TARGET HAL::STM32::${FAMILY}::${DRV})))
  334. message(TRACE "FindHAL: creating library HAL::STM32::${FAMILY}${CORE_C}::${DRV}")
  335. add_library(HAL::STM32::${FAMILY}${CORE_C}::${DRV} INTERFACE IMPORTED)
  336. target_link_libraries(HAL::STM32::${FAMILY}${CORE_C}::${DRV} INTERFACE HAL::STM32::${FAMILY}${CORE_C})
  337. target_sources(HAL::STM32::${FAMILY}${CORE_C}::${DRV} INTERFACE "${HAL_${FAMILY}${CORE_U}_${DRV}_SOURCE}")
  338. endif()
  339. if(HAL_${FAMILY}${CORE_U}_${DRV}_SOURCE AND (${DRV_L} IN_LIST HAL_EX_DRIVERS_${FAMILY}))
  340. find_file(HAL_${FAMILY}${CORE_U}_${DRV}_EX_SOURCE
  341. NAMES stm32${FAMILY_L}xx_hal_${DRV_L}_ex.c
  342. PATHS "${HAL_${FAMILY}_PATH}/Src"
  343. NO_DEFAULT_PATH
  344. )
  345. list(APPEND HAL_${FAMILY}${CORE_U}_SOURCES "${HAL_${FAMILY}${CORE_U}_${DRV}_EX_SOURCE}")
  346. if(NOT HAL_${FAMILY}${CORE_U}_${DRV}_EX_SOURCE)
  347. message(WARNING "Cannot find ${DRV}Ex driver for ${FAMILY}${CORE_U}")
  348. endif()
  349. if((TARGET HAL::STM32::${FAMILY}${CORE_C}::${DRV}) AND (NOT (TARGET HAL::STM32::${FAMILY}${CORE_C}::${DRV}Ex)))
  350. message(TRACE "FindHAL: creating library HAL::STM32::${FAMILY}${CORE_C}::${DRV}Ex")
  351. add_library(HAL::STM32::${FAMILY}${CORE_C}::${DRV}Ex INTERFACE IMPORTED)
  352. target_link_libraries(HAL::STM32::${FAMILY}${CORE_C}::${DRV}Ex INTERFACE HAL::STM32::${FAMILY}${CORE_C}::${DRV})
  353. target_sources(HAL::STM32::${FAMILY}${CORE_C}::${DRV}Ex INTERFACE "${HAL_${FAMILY}${CORE_U}_${DRV}_EX_SOURCE}")
  354. endif()
  355. endif()
  356. endforeach()
  357. foreach(DRV_COMP ${HAL_FIND_COMPONENTS_DRIVERS_LL})
  358. string(TOLOWER ${DRV_COMP} DRV_L)
  359. string(REGEX REPLACE "^ll_" "" DRV_L ${DRV_L})
  360. string(TOUPPER ${DRV_L} DRV)
  361. if(NOT (DRV_L IN_LIST HAL_LL_DRIVERS_${FAMILY}))
  362. continue()
  363. endif()
  364. find_file(HAL_${FAMILY}${CORE_U}_${DRV}_LL_SOURCE
  365. NAMES stm32${FAMILY_L}xx_ll_${DRV_L}.c
  366. PATHS "${HAL_${FAMILY}_PATH}/Src"
  367. NO_DEFAULT_PATH
  368. )
  369. list(APPEND HAL_${FAMILY}${CORE_U}_SOURCES "${HAL_${FAMILY}_${DRV}_LL_SOURCE}")
  370. if(NOT HAL_${FAMILY}${CORE_U}_${DRV}_LL_SOURCE)
  371. message(WARNING "Cannot find LL_${DRV} driver for ${FAMILY}${CORE_U}")
  372. set(HAL_${DRV_COMP}_FOUND FALSE)
  373. continue()
  374. endif()
  375. set(HAL_${DRV_COMP}_FOUND TRUE)
  376. if(HAL_${FAMILY}${CORE_U}_${DRV}_LL_SOURCE AND (NOT (TARGET HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV})))
  377. message(TRACE "FindHAL: creating library HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV}")
  378. add_library(HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV} INTERFACE IMPORTED)
  379. target_include_directories(HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV} INTERFACE "${HAL_${FAMILY}${CORE_U}_INCLUDE}")
  380. target_sources(HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV} INTERFACE "${HAL_${FAMILY}${CORE_U}_${DRV}_LL_SOURCE}")
  381. endif()
  382. endforeach()
  383. set(HAL_${COMP}_FOUND TRUE)
  384. list(APPEND HAL_INCLUDE_DIRS "${HAL_${FAMILY}${CORE_U}_INCLUDE}")
  385. list(APPEND HAL_SOURCES "${HAL_${FAMILY}${CORE_U}_SOURCES}")
  386. endforeach()
  387. list(REMOVE_DUPLICATES HAL_INCLUDE_DIRS)
  388. list(REMOVE_DUPLICATES HAL_SOURCES)
  389. include(FindPackageHandleStandardArgs)
  390. find_package_handle_standard_args(HAL
  391. REQUIRED_VARS HAL_INCLUDE_DIRS HAL_SOURCES
  392. FOUND_VAR HAL_FOUND
  393. HANDLE_COMPONENTS
  394. )