Просмотр исходного кода

FindHAL: drivers are read from families HAL folders

Hector PHARAM 3 лет назад
Родитель
Сommit
c2c6ad1a24
1 измененных файлов с 28 добавлено и 7 удалено
  1. 28 7
      cmake/FindHAL.cmake

+ 28 - 7
cmake/FindHAL.cmake

@@ -229,13 +229,6 @@ set(HAL_LL_DRIVERS_WL
     rng rtc spi tim usart utils
 )
 
-foreach(FAMILY_SUFFIX ${STM32_SUPPORTED_FAMILIES_SHORT_NAME})
-    list(APPEND HAL_DRIVERS ${HAL_DRIVERS_${FAMILY_SUFFIX}})
-    list(APPEND HAL_LL_DRIVERS ${HAL_LL_DRIVERS_${FAMILY_SUFFIX}})
-endforeach()
-list(REMOVE_DUPLICATES HAL_DRIVERS)
-list(REMOVE_DUPLICATES HAL_LL_DRIVERS)
-
 # This function gets a list of hal_driver using a given prefix and suffix
 #
 # out_list_hal_drivers   list of hal_drivers foud
@@ -281,10 +274,38 @@ foreach(COMP ${HAL_FIND_COMPONENTS})
     endif()
 endforeach()
 
+# If no family requested look for all families
 if(NOT HAL_FIND_COMPONENTS_FAMILIES)
     set(HAL_FIND_COMPONENTS_FAMILIES ${STM32_SUPPORTED_FAMILIES_LONG_NAME})
 endif()
 
+# Look for available drivers for all requested families
+foreach(family_comp ${HAL_FIND_COMPONENTS_FAMILIES})
+    string(TOUPPER ${family_comp} family_comp)
+    string(REGEX MATCH "^STM32([FGHLMUW]P?[0-9BL])([0-9A-Z][0-9M][A-Z][0-9A-Z])?_?(M0PLUS|M4|M7)?.*$" family_comp ${family_comp})
+    find_path(HAL_${FAMILY}_PATH
+        NAMES Inc/stm32${FAMILY_L}xx_hal.h
+        PATHS "${STM32_HAL_${FAMILY}_PATH}" "${STM32_CUBE_${FAMILY}_PATH}/Drivers/STM32${FAMILY}xx_HAL_Driver"
+        NO_DEFAULT_PATH
+        )
+    if(NOT HAL_${FAMILY}_PATH)
+        message(FATAL_ERROR "could not find HAL for family ${FAMILY}")
+    else()
+        set(HAL_${COMP}_FOUND TRUE)
+    endif()
+    if(CMAKE_MATCH_1) #Matches the family part of the provided STM32<FAMILY>[..] component
+        get_list_hal_drivers(HAL_DRIVERS_${FAMILY} ${HAL_${FAMILY}_PATH} "hal")
+        get_list_hal_drivers(HAL_EX_DRIVERS_${FAMILY} ${HAL_${FAMILY}_PATH}  "ex")
+        get_list_hal_drivers(HAL_LL_DRIVERS_${FAMILY} ${HAL_${FAMILY}_PATH} "ll")
+        list(APPEND HAL_DRIVERS ${HAL_DRIVERS_${FAMILY}})
+        list(APPEND HAL_LL_DRIVERS ${HAL_LL_DRIVERS_${FAMILY}})
+    else()
+    endif()
+endforeach()
+message("P2H HAL drivers are ${HAL_DRIVERS}")
+list(REMOVE_DUPLICATES HAL_DRIVERS)
+list(REMOVE_DUPLICATES HAL_LL_DRIVERS)
+
 #Checkinf all the requested drivers
 foreach(COMP ${HAL_FIND_COMPONENTS_UNHANDLED})
     string(TOLOWER ${COMP} COMP_L)