Julien Staub 4 лет назад
Родитель
Сommit
57ce44476e
7 измененных файлов с 135 добавлено и 17 удалено
  1. 3 1
      cmake/FindBSP.cmake
  2. 32 7
      cmake/FindCMSIS.cmake
  3. 2 0
      cmake/FindFreeRTOS.cmake
  4. 34 4
      cmake/FindHAL.cmake
  5. 22 5
      cmake/stm32/common.cmake
  6. 20 0
      cmake/stm32/devices.cmake
  7. 22 0
      cmake/stm32/wb.cmake

+ 3 - 1
cmake/FindBSP.cmake

@@ -1,3 +1,5 @@
+# For information about why and how of this file: https://cmake.org/cmake/help/latest/command/find_package.html
+
 set(BSP_F0_BOARDS 
 set(BSP_F0_BOARDS 
     STM32F0xx_Nucleo_32 STM32F0xx-Nucleo STM32F072B-Discovery 
     STM32F0xx_Nucleo_32 STM32F0xx-Nucleo STM32F072B-Discovery 
     STM32F0308-Discovery STM32072B_EVAL STM32091C_EVAL
     STM32F0308-Discovery STM32072B_EVAL STM32091C_EVAL
@@ -244,7 +246,7 @@ foreach(COMP ${BSP_FIND_COMPONENTS})
     string(TOLOWER ${COMP} COMP_L)
     string(TOLOWER ${COMP} COMP_L)
     string(TOUPPER ${COMP} COMP_U)
     string(TOUPPER ${COMP} COMP_U)
     
     
-    string(REGEX MATCH "^STM32([A-Z][0-9])([0-9A-Z][0-9][A-Z][0-9A-Z])?_?(M[47])?.*$" COMP_U ${COMP_U})
+    string(REGEX MATCH "^STM32([FGHLW][0-9BL])([0-9A-Z][0-9M][A-Z][0-9A-Z])?_?(M[47])?.*$" COMP_U ${COMP_U})
     if(NOT CMAKE_MATCH_1)
     if(NOT CMAKE_MATCH_1)
         message(FATAL_ERROR "Unknown BSP component: ${COMP}")
         message(FATAL_ERROR "Unknown BSP component: ${COMP}")
     endif()
     endif()

+ 32 - 7
cmake/FindCMSIS.cmake

@@ -1,3 +1,5 @@
+# For information about why and how of this file: https://cmake.org/cmake/help/latest/command/find_package.html
+
 if(NOT CMSIS_FIND_COMPONENTS)
 if(NOT CMSIS_FIND_COMPONENTS)
     set(CMSIS_FIND_COMPONENTS ${STM32_SUPPORTED_FAMILIES_LONG_NAME})
     set(CMSIS_FIND_COMPONENTS ${STM32_SUPPORTED_FAMILIES_LONG_NAME})
 endif()
 endif()
@@ -45,8 +47,10 @@ foreach(COMP ${CMSIS_FIND_COMPONENTS})
     string(TOLOWER ${COMP} COMP_L)
     string(TOLOWER ${COMP} COMP_L)
     string(TOUPPER ${COMP} COMP)
     string(TOUPPER ${COMP} COMP)
     
     
-    string(REGEX MATCH "^STM32([A-Z][0-9])([0-9A-Z][0-9][A-Z][0-9A-Z])?_?(M[47])?.*$" COMP ${COMP})
-    
+    string(REGEX MATCH "^STM32([FGHLW][0-9BL])([0-9A-Z][0-9M][A-Z][0-9A-Z])?_?(M[47])?.*$" COMP ${COMP})
+    # CMAKE_MATCH_<n> contains n'th subexpression
+    # CMAKE_MATCH_0 contains full match
+
     if((NOT CMAKE_MATCH_1) AND (NOT CMAKE_MATCH_2))
     if((NOT CMAKE_MATCH_1) AND (NOT CMAKE_MATCH_2))
         message(FATAL_ERROR "Unknown CMSIS component: ${COMP}")
         message(FATAL_ERROR "Unknown CMSIS component: ${COMP}")
     endif()
     endif()
@@ -54,24 +58,31 @@ foreach(COMP ${CMSIS_FIND_COMPONENTS})
     if(CMAKE_MATCH_2)
     if(CMAKE_MATCH_2)
         set(FAMILY ${CMAKE_MATCH_1})
         set(FAMILY ${CMAKE_MATCH_1})
         set(DEVICES "${CMAKE_MATCH_1}${CMAKE_MATCH_2}")
         set(DEVICES "${CMAKE_MATCH_1}${CMAKE_MATCH_2}")
+        message(TRACE "FindCMSIS: full device name match for COMP ${COMP}, DEVICES is ${DEVICES}")
     else()
     else()
         set(FAMILY ${CMAKE_MATCH_1})
         set(FAMILY ${CMAKE_MATCH_1})
-        stm32_get_devices_by_family(DEVICES FAMILY ${FAMILY} CORE ${CORE})
+        stm32_get_devices_by_family(DEVICES FAMILY ${FAMILY})
+        message(TRACE "FindCMSIS: family only match for COMP ${COMP}, DEVICES is ${DEVICES}")
     endif()
     endif()
     
     
     if(CMAKE_MATCH_3)
     if(CMAKE_MATCH_3)
         set(CORE ${CMAKE_MATCH_3})
         set(CORE ${CMAKE_MATCH_3})
         set(CORE_C "::${CORE}")
         set(CORE_C "::${CORE}")
         set(CORE_U "_${CORE}")
         set(CORE_U "_${CORE}")
+        set(CORE_Ucm "_c${CORE}")
+        string(TOLOWER ${CORE_Ucm} CORE_Ucm)
+        message(TRACE "FindCMSIS: core match in component name for COMP ${COMP}. CORE is ${CORE}")
     else()
     else()
         unset(CORE)
         unset(CORE)
         unset(CORE_C)
         unset(CORE_C)
         unset(CORE_U)
         unset(CORE_U)
+        unset(CORE_Ucm)
     endif()
     endif()
     
     
     string(TOLOWER ${FAMILY} FAMILY_L)
     string(TOLOWER ${FAMILY} FAMILY_L)
     
     
     if((NOT STM32_CMSIS_${FAMILY}_PATH) AND (NOT STM32_CUBE_${FAMILY}_PATH))
     if((NOT STM32_CMSIS_${FAMILY}_PATH) AND (NOT STM32_CUBE_${FAMILY}_PATH))
+        # try to set path from environment variable. Note it could be ...-NOT-FOUND and it's fine
         set(STM32_CUBE_${FAMILY}_PATH $ENV{STM32_CUBE_${FAMILY}_PATH} CACHE PATH "Path to STM32Cube${FAMILY}")
         set(STM32_CUBE_${FAMILY}_PATH $ENV{STM32_CUBE_${FAMILY}_PATH} CACHE PATH "Path to STM32Cube${FAMILY}")
     endif()
     endif()
 
 
@@ -79,22 +90,26 @@ foreach(COMP ${CMSIS_FIND_COMPONENTS})
         set(STM32_CUBE_${FAMILY}_PATH /opt/STM32Cube${FAMILY} CACHE PATH "Path to STM32Cube${FAMILY}")
         set(STM32_CUBE_${FAMILY}_PATH /opt/STM32Cube${FAMILY} CACHE PATH "Path to STM32Cube${FAMILY}")
         message(STATUS "Neither STM32_CUBE_${FAMILY}_PATH nor STM32_CMSIS_${FAMILY}_PATH specified using default  STM32_CUBE_${FAMILY}_PATH: ${STM32_CUBE_${FAMILY}_PATH}")
         message(STATUS "Neither STM32_CUBE_${FAMILY}_PATH nor STM32_CMSIS_${FAMILY}_PATH specified using default  STM32_CUBE_${FAMILY}_PATH: ${STM32_CUBE_${FAMILY}_PATH}")
     endif()
     endif()
-        
+     
+    # search for Include/cmsis_gcc.h
     find_path(CMSIS_${FAMILY}${CORE_U}_CORE_PATH
     find_path(CMSIS_${FAMILY}${CORE_U}_CORE_PATH
         NAMES Include/cmsis_gcc.h
         NAMES Include/cmsis_gcc.h
         PATHS "${STM32_CMSIS_PATH}" "${STM32_CUBE_${FAMILY}_PATH}/Drivers/CMSIS"
         PATHS "${STM32_CMSIS_PATH}" "${STM32_CUBE_${FAMILY}_PATH}/Drivers/CMSIS"
         NO_DEFAULT_PATH
         NO_DEFAULT_PATH
     )
     )
     if (NOT CMSIS_${FAMILY}${CORE_U}_CORE_PATH)
     if (NOT CMSIS_${FAMILY}${CORE_U}_CORE_PATH)
+        message(VERBOSE "TODO meaning full message 1")
         continue()
         continue()
     endif()
     endif()
 	
 	
+    # search for Include/stm32[XX]xx.h
     find_path(CMSIS_${FAMILY}${CORE_U}_PATH
     find_path(CMSIS_${FAMILY}${CORE_U}_PATH
         NAMES Include/stm32${FAMILY_L}xx.h
         NAMES Include/stm32${FAMILY_L}xx.h
         PATHS "${STM32_CMSIS_${FAMILY}_PATH}" "${STM32_CUBE_${FAMILY}_PATH}/Drivers/CMSIS/Device/ST/STM32${FAMILY}xx"
         PATHS "${STM32_CMSIS_${FAMILY}_PATH}" "${STM32_CUBE_${FAMILY}_PATH}/Drivers/CMSIS/Device/ST/STM32${FAMILY}xx"
         NO_DEFAULT_PATH
         NO_DEFAULT_PATH
     )
     )
     if (NOT CMSIS_${FAMILY}${CORE_U}_PATH)
     if (NOT CMSIS_${FAMILY}${CORE_U}_PATH)
+        message(VERBOSE "TODO meaning full message 2")
         continue()
         continue()
     endif()
     endif()
     list(APPEND CMSIS_INCLUDE_DIRS "${CMSIS_${FAMILY}${CORE_U}_CORE_PATH}/Include" "${CMSIS_${FAMILY}${CORE_U}_PATH}/Include")
     list(APPEND CMSIS_INCLUDE_DIRS "${CMSIS_${FAMILY}${CORE_U}_CORE_PATH}/Include" "${CMSIS_${FAMILY}${CORE_U}_PATH}/Include")
@@ -117,7 +132,8 @@ foreach(COMP ${CMSIS_FIND_COMPONENTS})
     
     
     set(CMSIS_${COMP}_VERSION ${CMSIS_${FAMILY}${CORE_U}_VERSION})
     set(CMSIS_${COMP}_VERSION ${CMSIS_${FAMILY}${CORE_U}_VERSION})
     set(CMSIS_VERSION ${CMSIS_${COMP}_VERSION})
     set(CMSIS_VERSION ${CMSIS_${COMP}_VERSION})
-        
+
+    # search for system_stm32[XX]xx.c
     find_file(CMSIS_${FAMILY}${CORE_U}_SOURCE
     find_file(CMSIS_${FAMILY}${CORE_U}_SOURCE
         NAMES system_stm32${FAMILY_L}xx.c
         NAMES system_stm32${FAMILY_L}xx.c
         PATHS "${CMSIS_${FAMILY}${CORE_U}_PATH}/Source/Templates"
         PATHS "${CMSIS_${FAMILY}${CORE_U}_PATH}/Source/Templates"
@@ -125,11 +141,13 @@ foreach(COMP ${CMSIS_FIND_COMPONENTS})
     )
     )
     list(APPEND CMSIS_SOURCES "${CMSIS_${FAMILY}${CORE_U}_SOURCE}")
     list(APPEND CMSIS_SOURCES "${CMSIS_${FAMILY}${CORE_U}_SOURCE}")
     
     
-    if (NOT CMSIS_${FAMILY}${CORE_U}_SOURCE)
+    if(NOT CMSIS_${FAMILY}${CORE_U}_SOURCE)
+        message(VERBOSE "TODO meaning full message 3")
         continue()
         continue()
     endif()
     endif()
 
 
     if(NOT (TARGET CMSIS::STM32::${FAMILY}${CORE_C}))
     if(NOT (TARGET CMSIS::STM32::${FAMILY}${CORE_C}))
+        message(TRACE "FindCMSIS: creating library CMSIS::STM32::${FAMILY}${CORE_C}")
         add_library(CMSIS::STM32::${FAMILY}${CORE_C} INTERFACE IMPORTED)
         add_library(CMSIS::STM32::${FAMILY}${CORE_C} INTERFACE IMPORTED)
         target_link_libraries(CMSIS::STM32::${FAMILY}${CORE_C} INTERFACE STM32::${FAMILY}${CORE_C})
         target_link_libraries(CMSIS::STM32::${FAMILY}${CORE_C} INTERFACE STM32::${FAMILY}${CORE_C})
         target_include_directories(CMSIS::STM32::${FAMILY}${CORE_C} INTERFACE "${CMSIS_${FAMILY}${CORE_U}_CORE_PATH}/Include")
         target_include_directories(CMSIS::STM32::${FAMILY}${CORE_C} INTERFACE "${CMSIS_${FAMILY}${CORE_U}_CORE_PATH}/Include")
@@ -139,8 +157,11 @@ foreach(COMP ${CMSIS_FIND_COMPONENTS})
 
 
     set(DEVICES_FOUND TRUE)
     set(DEVICES_FOUND TRUE)
     foreach(DEVICE ${DEVICES})
     foreach(DEVICE ${DEVICES})
+        message(TRACE "FindCMSIS: Iterating DEVICE ${DEVICE}")
+        
         stm32_get_cores(DEV_CORES FAMILY ${FAMILY} DEVICE ${DEVICE})
         stm32_get_cores(DEV_CORES FAMILY ${FAMILY} DEVICE ${DEVICE})
         if(CORE AND (NOT ${CORE} IN_LIST DEV_CORES))
         if(CORE AND (NOT ${CORE} IN_LIST DEV_CORES))
+            message(TRACE "FindCMSIS: skip device because CORE ${CORE} provided doesn't correspond to FAMILY ${FAMILY} DEVICE ${DEVICE}")
             continue()
             continue()
         endif()
         endif()
                 
                 
@@ -149,17 +170,19 @@ foreach(COMP ${CMSIS_FIND_COMPONENTS})
         string(TOLOWER ${TYPE} TYPE_L)
         string(TOLOWER ${TYPE} TYPE_L)
         
         
         find_file(CMSIS_${FAMILY}${CORE_U}_${TYPE}_STARTUP
         find_file(CMSIS_${FAMILY}${CORE_U}_${TYPE}_STARTUP
-            NAMES startup_stm32${TYPE_L}.s
+            NAMES startup_stm32${TYPE_L}.s startup_stm32${TYPE_L}${CORE_Ucm}.s
             PATHS "${CMSIS_${FAMILY}${CORE_U}_PATH}/Source/Templates/gcc"
             PATHS "${CMSIS_${FAMILY}${CORE_U}_PATH}/Source/Templates/gcc"
             NO_DEFAULT_PATH
             NO_DEFAULT_PATH
         )
         )
         list(APPEND CMSIS_SOURCES "${CMSIS_${FAMILY}${CORE_U}_${TYPE}_STARTUP}")
         list(APPEND CMSIS_SOURCES "${CMSIS_${FAMILY}${CORE_U}_${TYPE}_STARTUP}")
         if(NOT CMSIS_${FAMILY}${CORE_U}_${TYPE}_STARTUP)
         if(NOT CMSIS_${FAMILY}${CORE_U}_${TYPE}_STARTUP)
             set(DEVICES_FOUND FALSE)
             set(DEVICES_FOUND FALSE)
+            message(VERBOSE "FindCMSIS: did not find file: startup_stm32${TYPE_L}.s or startup_stm32${TYPE_L}${CORE_Ucm}.s")
             break()
             break()
         endif()
         endif()
         
         
         if(NOT (TARGET CMSIS::STM32::${TYPE}${CORE_C}))
         if(NOT (TARGET CMSIS::STM32::${TYPE}${CORE_C}))
+            message(TRACE "FindCMSIS: creating library CMSIS::STM32::${TYPE}${CORE_C}")
             add_library(CMSIS::STM32::${TYPE}${CORE_C} INTERFACE IMPORTED)
             add_library(CMSIS::STM32::${TYPE}${CORE_C} INTERFACE IMPORTED)
             target_link_libraries(CMSIS::STM32::${TYPE}${CORE_C} INTERFACE CMSIS::STM32::${FAMILY}${CORE_C} STM32::${TYPE}${CORE_C})
             target_link_libraries(CMSIS::STM32::${TYPE}${CORE_C} INTERFACE CMSIS::STM32::${FAMILY}${CORE_C} STM32::${TYPE}${CORE_C})
             target_sources(CMSIS::STM32::${TYPE}${CORE_C} INTERFACE "${CMSIS_${FAMILY}${CORE_U}_${TYPE}_STARTUP}")
             target_sources(CMSIS::STM32::${TYPE}${CORE_C} INTERFACE "${CMSIS_${FAMILY}${CORE_U}_${TYPE}_STARTUP}")
@@ -172,8 +195,10 @@ foreach(COMP ${CMSIS_FIND_COMPONENTS})
 
 
     if(DEVICES_FOUND)
     if(DEVICES_FOUND)
        set(CMSIS_${COMP}_FOUND TRUE)
        set(CMSIS_${COMP}_FOUND TRUE)
+       message(DEBUG "CMSIS_${COMP}_FOUND TRUE")
     else()
     else()
        set(CMSIS_${COMP}_FOUND FALSE)
        set(CMSIS_${COMP}_FOUND FALSE)
+       message(DEBUG "CMSIS_${COMP}_FOUND FALSE")
     endif()
     endif()
     list(REMOVE_DUPLICATES CMSIS_INCLUDE_DIRS)
     list(REMOVE_DUPLICATES CMSIS_INCLUDE_DIRS)
     list(REMOVE_DUPLICATES CMSIS_SOURCES)
     list(REMOVE_DUPLICATES CMSIS_SOURCES)

+ 2 - 0
cmake/FindFreeRTOS.cmake

@@ -1,3 +1,5 @@
+# For information about why and how of this file: https://cmake.org/cmake/help/latest/command/find_package.html
+
 if(NOT FreeRTOS_FIND_COMPONENTS)
 if(NOT FreeRTOS_FIND_COMPONENTS)
     set(FreeRTOS_FIND_COMPONENTS
     set(FreeRTOS_FIND_COMPONENTS
         ARM_CM0 ARM_CM3 ARM_CM4F ARM_CM7
         ARM_CM0 ARM_CM3 ARM_CM4F ARM_CM7

+ 34 - 4
cmake/FindHAL.cmake

@@ -1,3 +1,5 @@
+# For information about why and how of this file: https://cmake.org/cmake/help/latest/command/find_package.html
+
 set(HAL_DRIVERS_F0
 set(HAL_DRIVERS_F0
     adc can cec comp cortex crc dac dma exti flash gpio i2c i2s irda iwdg pcd 
     adc can cec comp cortex crc dac dma exti flash gpio i2c i2s irda iwdg pcd 
     pwr rcc rtc smartcard smbus spi tim tsc uart usart wwdg
     pwr rcc rtc smartcard smbus spi tim tsc uart usart wwdg
@@ -171,6 +173,20 @@ set(HAL_LL_DRIVERS_L5
     rng rtc sdmmc spi tim ucpd usart usb utils
     rng rtc sdmmc spi tim ucpd usart usb utils
 )
 )
 
 
+set(HAL_DRIVERS_WB
+    adc comp cortex crc cryp dma exti flash gpio hsem 
+    i2c ipcc irda iwdg lcd lptim pcd pka pwr qspi rcc 
+    rng rtc sai smartcard smbus spi sram tim tsc uart usart wwdg
+)
+set(HAL_EX_DRIVERS_WB
+    adc crc cryp dma flash i2c pcd pwr rcc
+    rtc sai smartcard spi tim uart usart
+)
+set(HAL_LL_DRIVERS_WB
+    adc comp crc crs dma exti gpio i2c lptim lpuart pka pwr rcc 
+    rng rtc spi tim usart usb utils
+)
+
 foreach(FAMILY_SUFFIX ${STM32_SUPPORTED_FAMILIES_SHORT_NAME})
 foreach(FAMILY_SUFFIX ${STM32_SUPPORTED_FAMILIES_SHORT_NAME})
     list(APPEND HAL_DRIVERS ${HAL_DRIVERS_${FAMILY_SUFFIX}})
     list(APPEND HAL_DRIVERS ${HAL_DRIVERS_${FAMILY_SUFFIX}})
     list(APPEND HAL_LL_DRIVERS ${HAL_LL_DRIVERS_${FAMILY_SUFFIX}})
     list(APPEND HAL_LL_DRIVERS ${HAL_LL_DRIVERS_${FAMILY_SUFFIX}})
@@ -182,21 +198,24 @@ foreach(COMP ${HAL_FIND_COMPONENTS})
     string(TOLOWER ${COMP} COMP_L)
     string(TOLOWER ${COMP} COMP_L)
     string(TOUPPER ${COMP} COMP_U)
     string(TOUPPER ${COMP} COMP_U)
     
     
-    string(REGEX MATCH "^STM32([A-Z][0-9])([0-9A-Z][0-9][A-Z][0-9A-Z])?_?(M[47])?.*$" COMP_U ${COMP_U})
+    string(REGEX MATCH "^STM32([FGHLW][0-9BL])([0-9A-Z][0-9M][A-Z][0-9A-Z])?_?(M[47])?.*$" COMP_U ${COMP_U})
     if(CMAKE_MATCH_1)
     if(CMAKE_MATCH_1)
         list(APPEND HAL_FIND_COMPONENTS_FAMILIES ${COMP})
         list(APPEND HAL_FIND_COMPONENTS_FAMILIES ${COMP})
+        message(TRACE "FindHAL: append COMP ${COMP} to HAL_FIND_COMPONENTS_FAMILIES")
         continue()
         continue()
     endif()
     endif()
     if(${COMP_L} IN_LIST HAL_DRIVERS)
     if(${COMP_L} IN_LIST HAL_DRIVERS)
         list(APPEND HAL_FIND_COMPONENTS_DRIVERS ${COMP})
         list(APPEND HAL_FIND_COMPONENTS_DRIVERS ${COMP})
+        message(TRACE "FindHAL: append COMP ${COMP} to HAL_FIND_COMPONENTS_DRIVERS")
         continue()
         continue()
     endif()
     endif()
     string(REGEX REPLACE "^ll_" "" COMP_L ${COMP_L})
     string(REGEX REPLACE "^ll_" "" COMP_L ${COMP_L})
     if(${COMP_L} IN_LIST HAL_LL_DRIVERS)
     if(${COMP_L} IN_LIST HAL_LL_DRIVERS)
         list(APPEND HAL_FIND_COMPONENTS_DRIVERS_LL ${COMP})
         list(APPEND HAL_FIND_COMPONENTS_DRIVERS_LL ${COMP})
+        message(TRACE "FindHAL: append COMP ${COMP} to HAL_FIND_COMPONENTS_DRIVERS_LL")
         continue()
         continue()
     endif()
     endif()
-    message(FATAL_ERROR "Unknown HAL component: ${COMP}")
+    message(FATAL_ERROR "FindHAL: unknown HAL component: ${COMP}")
 endforeach()
 endforeach()
 
 
 if(NOT HAL_FIND_COMPONENTS_FAMILIES)
 if(NOT HAL_FIND_COMPONENTS_FAMILIES)
@@ -209,6 +228,8 @@ if(STM32H7 IN_LIST HAL_FIND_COMPONENTS_FAMILIES)
 endif()
 endif()
 list(REMOVE_DUPLICATES HAL_FIND_COMPONENTS_FAMILIES)
 list(REMOVE_DUPLICATES HAL_FIND_COMPONENTS_FAMILIES)
 
 
+# when no explicit driver and driver_ll is given to find_component(HAL )
+# then search for all supported driver and driver_ll
 if((NOT HAL_FIND_COMPONENTS_DRIVERS) AND (NOT HAL_FIND_COMPONENTS_DRIVERS_LL))
 if((NOT HAL_FIND_COMPONENTS_DRIVERS) AND (NOT HAL_FIND_COMPONENTS_DRIVERS_LL))
     set(HAL_FIND_COMPONENTS_DRIVERS ${HAL_DRIVERS})
     set(HAL_FIND_COMPONENTS_DRIVERS ${HAL_DRIVERS})
     set(HAL_FIND_COMPONENTS_DRIVERS_LL ${HAL_LL_DRIVERS})
     set(HAL_FIND_COMPONENTS_DRIVERS_LL ${HAL_LL_DRIVERS})
@@ -223,7 +244,7 @@ message(STATUS "Search for HAL LL drivers: ${HAL_FIND_COMPONENTS_DRIVERS_LL}")
 foreach(COMP ${HAL_FIND_COMPONENTS_FAMILIES})
 foreach(COMP ${HAL_FIND_COMPONENTS_FAMILIES})
     string(TOUPPER ${COMP} COMP_U)
     string(TOUPPER ${COMP} COMP_U)
     
     
-    string(REGEX MATCH "^STM32([A-Z][0-9])([0-9A-Z][0-9][A-Z][0-9A-Z])?_?(M[47])?.*$" COMP_U ${COMP_U})    
+    string(REGEX MATCH "^STM32([FGHLW][0-9BL])([0-9A-Z][0-9M][A-Z][0-9A-Z])?_?(M[47])?.*$" COMP_U ${COMP_U})    
     if(CMAKE_MATCH_3)
     if(CMAKE_MATCH_3)
         set(CORE ${CMAKE_MATCH_3})
         set(CORE ${CMAKE_MATCH_3})
         set(CORE_C "::${CORE}")
         set(CORE_C "::${CORE}")
@@ -270,6 +291,7 @@ foreach(COMP ${HAL_FIND_COMPONENTS_FAMILIES})
         NO_DEFAULT_PATH
         NO_DEFAULT_PATH
     )
     )
     if (NOT HAL_${FAMILY}_PATH)
     if (NOT HAL_${FAMILY}_PATH)
+        message(DEBUG "Missing HAL_${FAMILY}_PATH path")
         continue()
         continue()
     endif()
     endif()
     
     
@@ -286,14 +308,19 @@ foreach(COMP ${HAL_FIND_COMPONENTS_FAMILIES})
     
     
     if ((NOT HAL_${FAMILY}${CORE_U}_INCLUDE) OR (NOT HAL_${FAMILY}${CORE_U}_SOURCE))
     if ((NOT HAL_${FAMILY}${CORE_U}_INCLUDE) OR (NOT HAL_${FAMILY}${CORE_U}_SOURCE))
         set(HAL_${COMP}_FOUND FALSE)
         set(HAL_${COMP}_FOUND FALSE)
+        message(DEBUG "FindHAL: did not find path to HAL /src or /inc dir")
         continue()
         continue()
     endif()
     endif()
 
 
     if(NOT (TARGET HAL::STM32::${FAMILY}${CORE_C}))
     if(NOT (TARGET HAL::STM32::${FAMILY}${CORE_C}))
+        message(TRACE "FindHAL: creating library HAL::STM32::${FAMILY}${CORE_C}")
         add_library(HAL::STM32::${FAMILY}${CORE_C} INTERFACE IMPORTED)
         add_library(HAL::STM32::${FAMILY}${CORE_C} INTERFACE IMPORTED)
-        target_link_libraries(HAL::STM32::${FAMILY}${CORE_C} INTERFACE STM32::${FAMILY}${CORE_C} CMSIS::STM32::${FAMILY}${CORE_C})
+        target_link_libraries(HAL::STM32::${FAMILY}${CORE_C} INTERFACE 
+                                                    STM32::${FAMILY}${CORE_C} 
+                                                    CMSIS::STM32::${FAMILY}${CORE_C})
         target_include_directories(HAL::STM32::${FAMILY}${CORE_C} INTERFACE "${HAL_${FAMILY}${CORE_U}_INCLUDE}")
         target_include_directories(HAL::STM32::${FAMILY}${CORE_C} INTERFACE "${HAL_${FAMILY}${CORE_U}_INCLUDE}")
         target_sources(HAL::STM32::${FAMILY}${CORE_C} INTERFACE "${HAL_${FAMILY}${CORE_U}_SOURCE}")
         target_sources(HAL::STM32::${FAMILY}${CORE_C} INTERFACE "${HAL_${FAMILY}${CORE_U}_SOURCE}")
+        message(TRACE "REMOVE ME: depends STM32::${FAMILY}${CORE_C} CMSIS::STM32::${FAMILY}${CORE_C}")
     endif()
     endif()
     
     
     foreach(DRV_COMP ${HAL_FIND_COMPONENTS_DRIVERS})
     foreach(DRV_COMP ${HAL_FIND_COMPONENTS_DRIVERS})
@@ -318,6 +345,7 @@ foreach(COMP ${HAL_FIND_COMPONENTS_FAMILIES})
                 
                 
         set(HAL_${DRV_COMP}_FOUND TRUE)
         set(HAL_${DRV_COMP}_FOUND TRUE)
         if(HAL_${FAMILY}${CORE_U}_${DRV}_SOURCE AND (NOT (TARGET HAL::STM32::${FAMILY}::${DRV})))
         if(HAL_${FAMILY}${CORE_U}_${DRV}_SOURCE AND (NOT (TARGET HAL::STM32::${FAMILY}::${DRV})))
+            message(TRACE "FindHAL: creating library HAL::STM32::${FAMILY}${CORE_C}::${DRV}")
             add_library(HAL::STM32::${FAMILY}${CORE_C}::${DRV} INTERFACE IMPORTED)
             add_library(HAL::STM32::${FAMILY}${CORE_C}::${DRV} INTERFACE IMPORTED)
             target_link_libraries(HAL::STM32::${FAMILY}${CORE_C}::${DRV} INTERFACE HAL::STM32::${FAMILY}${CORE_C})
             target_link_libraries(HAL::STM32::${FAMILY}${CORE_C}::${DRV} INTERFACE HAL::STM32::${FAMILY}${CORE_C})
             target_sources(HAL::STM32::${FAMILY}${CORE_C}::${DRV} INTERFACE "${HAL_${FAMILY}${CORE_U}_${DRV}_SOURCE}")
             target_sources(HAL::STM32::${FAMILY}${CORE_C}::${DRV} INTERFACE "${HAL_${FAMILY}${CORE_U}_${DRV}_SOURCE}")
@@ -335,6 +363,7 @@ foreach(COMP ${HAL_FIND_COMPONENTS_FAMILIES})
             endif()
             endif()
                         
                         
             if((TARGET HAL::STM32::${FAMILY}${CORE_C}::${DRV}) AND (NOT (TARGET HAL::STM32::${FAMILY}${CORE_C}::${DRV}Ex)))
             if((TARGET HAL::STM32::${FAMILY}${CORE_C}::${DRV}) AND (NOT (TARGET HAL::STM32::${FAMILY}${CORE_C}::${DRV}Ex)))
+                message(TRACE "FindHAL: creating library HAL::STM32::${FAMILY}${CORE_C}::${DRV}Ex")
                 add_library(HAL::STM32::${FAMILY}${CORE_C}::${DRV}Ex INTERFACE IMPORTED)
                 add_library(HAL::STM32::${FAMILY}${CORE_C}::${DRV}Ex INTERFACE IMPORTED)
                 target_link_libraries(HAL::STM32::${FAMILY}${CORE_C}::${DRV}Ex INTERFACE HAL::STM32::${FAMILY}${CORE_C}::${DRV})
                 target_link_libraries(HAL::STM32::${FAMILY}${CORE_C}::${DRV}Ex INTERFACE HAL::STM32::${FAMILY}${CORE_C}::${DRV})
                 target_sources(HAL::STM32::${FAMILY}${CORE_C}::${DRV}Ex INTERFACE "${HAL_${FAMILY}${CORE_U}_${DRV}_EX_SOURCE}")
                 target_sources(HAL::STM32::${FAMILY}${CORE_C}::${DRV}Ex INTERFACE "${HAL_${FAMILY}${CORE_U}_${DRV}_EX_SOURCE}")
@@ -365,6 +394,7 @@ foreach(COMP ${HAL_FIND_COMPONENTS_FAMILIES})
     
     
         set(HAL_${DRV_COMP}_FOUND TRUE)
         set(HAL_${DRV_COMP}_FOUND TRUE)
         if(HAL_${FAMILY}${CORE_U}_${DRV}_LL_SOURCE AND (NOT (TARGET HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV})))
         if(HAL_${FAMILY}${CORE_U}_${DRV}_LL_SOURCE AND (NOT (TARGET HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV})))
+            message(TRACE "FindHAL: creating library HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV}")
             add_library(HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV} INTERFACE IMPORTED)
             add_library(HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV} INTERFACE IMPORTED)
             target_include_directories(HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV} INTERFACE "${HAL_${FAMILY}${CORE_U}_INCLUDE}")
             target_include_directories(HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV} INTERFACE "${HAL_${FAMILY}${CORE_U}_INCLUDE}")
             target_sources(HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV} INTERFACE "${HAL_${FAMILY}${CORE_U}_${DRV}_LL_SOURCE}")
             target_sources(HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV} INTERFACE "${HAL_${FAMILY}${CORE_U}_${DRV}_LL_SOURCE}")

+ 22 - 5
cmake/stm32/common.cmake

@@ -2,10 +2,12 @@ set(STM32_SUPPORTED_FAMILIES_LONG_NAME
     STM32F0 STM32F1 STM32F2 STM32F3 STM32F4 STM32F7
     STM32F0 STM32F1 STM32F2 STM32F3 STM32F4 STM32F7
     STM32G0 STM32G4
     STM32G0 STM32G4
     STM32H7_M4 STM32H7_M7
     STM32H7_M4 STM32H7_M7
-    STM32L0 STM32L1 STM32L4 STM32L5)
+    STM32L0 STM32L1 STM32L4 STM32L5
+    STM32WB STM32WL )
 
 
 foreach(FAMILY ${STM32_SUPPORTED_FAMILIES_LONG_NAME})
 foreach(FAMILY ${STM32_SUPPORTED_FAMILIES_LONG_NAME})
-    string(REGEX MATCH "^STM32([A-Z][0-9])_?(M[47])?" FAMILY ${FAMILY})
+    # append short names (F0, F1, H7_M4, ...) to STM32_SUPPORTED_FAMILIES_SHORT_NAME
+    string(REGEX MATCH "^STM32([FGHLW][0-9BL])_?(M[47])?" FAMILY ${FAMILY})
     list(APPEND STM32_SUPPORTED_FAMILIES_SHORT_NAME ${CMAKE_MATCH_1})
     list(APPEND STM32_SUPPORTED_FAMILIES_SHORT_NAME ${CMAKE_MATCH_1})
 endforeach()
 endforeach()
 list(REMOVE_DUPLICATES STM32_SUPPORTED_FAMILIES_SHORT_NAME)
 list(REMOVE_DUPLICATES STM32_SUPPORTED_FAMILIES_SHORT_NAME)
@@ -75,6 +77,7 @@ function(stm32_generate_hex_file TARGET)
     )
     )
 endfunction()
 endfunction()
 
 
+# This function takes FAMILY (e.g. L4) and DEVICE (e.g. L496VG) to output TYPE (e.g. L496xx)  
 function(stm32_get_chip_type FAMILY DEVICE TYPE)
 function(stm32_get_chip_type FAMILY DEVICE TYPE)
     set(INDEX 0)
     set(INDEX 0)
     foreach(C_TYPE ${STM32_${FAMILY}_TYPES})
     foreach(C_TYPE ${STM32_${FAMILY}_TYPES})
@@ -98,7 +101,7 @@ function(stm32_get_chip_info CHIP)
         
         
     string(TOUPPER ${CHIP} CHIP)
     string(TOUPPER ${CHIP} CHIP)
         
         
-    string(REGEX MATCH "^STM32([A-Z][0-9])([0-9A-Z][0-9][A-Z][0-9A-Z]).*$" CHIP ${CHIP})
+    string(REGEX MATCH "^STM32([FGHLW][0-9BL])([0-9A-Z][0-9M][A-Z][0-9A-Z]).*$" CHIP ${CHIP})
     
     
     if((NOT CMAKE_MATCH_1) OR (NOT CMAKE_MATCH_2))
     if((NOT CMAKE_MATCH_1) OR (NOT CMAKE_MATCH_2))
         message(FATAL_ERROR "Unknown chip ${CHIP}")
         message(FATAL_ERROR "Unknown chip ${CHIP}")
@@ -132,8 +135,10 @@ function(stm32_get_cores CORES)
     cmake_parse_arguments(PARSE_ARGV 1 ARG "${ARG_OPTIONS}" "${ARG_SINGLE}" "${ARG_MULTIPLE}")
     cmake_parse_arguments(PARSE_ARGV 1 ARG "${ARG_OPTIONS}" "${ARG_SINGLE}" "${ARG_MULTIPLE}")
         
         
     if(ARG_CHIP)
     if(ARG_CHIP)
+        # TODO: I don't get why stm32_get_chip_info is called in stm32_get_cores
         stm32_get_chip_info(${ARG_CHIP} FAMILY ARG_FAMILY TYPE ARG_TYPE DEVICE ARG_DEVICE)
         stm32_get_chip_info(${ARG_CHIP} FAMILY ARG_FAMILY TYPE ARG_TYPE DEVICE ARG_DEVICE)
     elseif(ARG_FAMILY AND ARG_DEVICE)
     elseif(ARG_FAMILY AND ARG_DEVICE)
+        # TODO: I don't get why stm32_get_chip_type is called in stm32_get_cores
         stm32_get_chip_type(${ARG_FAMILY} ${ARG_DEVICE} ARG_TYPE)
         stm32_get_chip_type(${ARG_FAMILY} ${ARG_DEVICE} ARG_TYPE)
     elseif(ARG_FAMILY)
     elseif(ARG_FAMILY)
         if(${ARG_FAMILY} STREQUAL "H7")
         if(${ARG_FAMILY} STREQUAL "H7")
@@ -146,8 +151,15 @@ function(stm32_get_cores CORES)
         message(FATAL_ERROR "Either CHIP or FAMILY or FAMILY/DEVICE should be specified for stm32_get_cores()")
         message(FATAL_ERROR "Either CHIP or FAMILY or FAMILY/DEVICE should be specified for stm32_get_cores()")
     endif()
     endif()
     
     
+    # TODO following is the only part really used by FindCMSIS. Maybe a cleanup is needed
     if(${ARG_FAMILY} STREQUAL "H7")
     if(${ARG_FAMILY} STREQUAL "H7")
         stm32h7_get_device_cores(${ARG_DEVICE} ${ARG_TYPE} CORE_LIST)
         stm32h7_get_device_cores(${ARG_DEVICE} ${ARG_TYPE} CORE_LIST)
+    elseif(${ARG_FAMILY} STREQUAL "WB")
+        # note STM32WB have an M0 core but in current state of the art it runs ST stacks and is not needed/allowed to build for customer
+        set(CORE_LIST M4)
+    elseif(${ARG_FAMILY} STREQUAL "WL")
+        message(WARNING "common: WL family stm32_get_cores has not been tested")
+        set(CORE_LIST M4 M0)
     endif()
     endif()
     set(${CORES} "${CORE_LIST}" PARENT_SCOPE)
     set(${CORES} "${CORE_LIST}" PARENT_SCOPE)
 endfunction()
 endfunction()
@@ -168,7 +180,7 @@ function(stm32_get_memory_info)
         stm32_get_chip_type(${INFO_FAMILY} ${INFO_DEVICE} INFO_TYPE)
         stm32_get_chip_type(${INFO_FAMILY} ${INFO_DEVICE} INFO_TYPE)
     endif()
     endif()
     
     
-    string(REGEX REPLACE "^[FGHL][0-9][0-9A-Z][0-9].([3468BCDEFGHIZ])$" "\\1" SIZE_CODE ${INFO_DEVICE})
+    string(REGEX REPLACE "^[FGHLW][0-9BL][0-9A-Z][0-9M].([3468BCDEFGHIYZ])$" "\\1" SIZE_CODE ${INFO_DEVICE})
     
     
     if(SIZE_CODE STREQUAL "3")
     if(SIZE_CODE STREQUAL "3")
         set(FLASH "8K")
         set(FLASH "8K")
@@ -181,6 +193,7 @@ function(stm32_get_memory_info)
     elseif(SIZE_CODE STREQUAL "B")
     elseif(SIZE_CODE STREQUAL "B")
         set(FLASH "128K")
         set(FLASH "128K")
     elseif(SIZE_CODE STREQUAL "C")
     elseif(SIZE_CODE STREQUAL "C")
+        # Note there is a problem with STM32WB15CC (320kB flash)
         set(FLASH "256K")
         set(FLASH "256K")
     elseif(SIZE_CODE STREQUAL "D")
     elseif(SIZE_CODE STREQUAL "D")
         set(FLASH "384K")
         set(FLASH "384K")
@@ -194,6 +207,8 @@ function(stm32_get_memory_info)
         set(FLASH "1536K")
         set(FLASH "1536K")
     elseif(SIZE_CODE STREQUAL "I")
     elseif(SIZE_CODE STREQUAL "I")
         set(FLASH "2048K")
         set(FLASH "2048K")
+    elseif(SIZE_CODE STREQUAL "Y")    
+        set(FLASH "640K")
     elseif(SIZE_CODE STREQUAL "Z")
     elseif(SIZE_CODE STREQUAL "Z")
         set(FLASH "192K")
         set(FLASH "192K")
     else()
     else()
@@ -269,7 +284,7 @@ function(stm32_add_linker_script TARGET VISIBILITY SCRIPT)
 
 
     get_target_property(LINK_DEPENDS ${TARGET} ${INTERFACE_PREFIX}LINK_DEPENDS)
     get_target_property(LINK_DEPENDS ${TARGET} ${INTERFACE_PREFIX}LINK_DEPENDS)
     if(LINK_DEPENDS)
     if(LINK_DEPENDS)
-        list(APPEND LINK_DEPENDS "${SCRIPT}")
+        list(APPEND LINK_DEPENDS "${SCRIPT}")        
     else()
     else()
         set(LINK_DEPENDS "${SCRIPT}")
         set(LINK_DEPENDS "${SCRIPT}")
     endif()
     endif()
@@ -318,3 +333,5 @@ include(stm32/l0)
 include(stm32/l1)
 include(stm32/l1)
 include(stm32/l4)
 include(stm32/l4)
 include(stm32/l5)
 include(stm32/l5)
+include(stm32/wb)
+#include(stm32/wl) #TODO

+ 20 - 0
cmake/stm32/devices.cmake

@@ -1101,7 +1101,10 @@ set(STM32_ALL_DEVICES
     MP153C
     MP153C
     MP157A
     MP157A
     MP157C
     MP157C
+    WB5MMG
     WB50CG
     WB50CG
+    WB30CE
+    WB10CC
     WB55CC
     WB55CC
     WB55CE
     WB55CE
     WB55CG
     WB55CG
@@ -1111,9 +1114,26 @@ set(STM32_ALL_DEVICES
     WB55VC
     WB55VC
     WB55VE
     WB55VE
     WB55VG
     WB55VG
+    WB55VY
+    WB15CC
+    WB35CC
+    WB35CE
+    WL55CC
+    WL54CC
+    WL55JC
+    WL54JC
     WLE5J8
     WLE5J8
     WLE5JB
     WLE5JB
     WLE5JC
     WLE5JC
+    WLE5C8
+    WLE5CB
+    WLE5CC
+    WLE4J8
+    WLE4JB
+    WLE4JC
+    WLE4C8
+    WLE4CB
+    WLE4CC
 )
 )
 
 
 function(stm32_get_devices_by_family DEVICES)
 function(stm32_get_devices_by_family DEVICES)

+ 22 - 0
cmake/stm32/wb.cmake

@@ -0,0 +1,22 @@
+set(STM32_WB_TYPES 
+    WB55xx WB55xx WB35xx WB15xx WB50xx WB30xx WB10xx WB5Mxx
+)
+set(STM32_WB_TYPE_MATCH 
+   "WB55.C" "WB55.[EGY]" "WB35.." "WB15.." "WB50.." "WB30.." "WB10.." "WB5M.."
+)
+
+set(STM32_WB_RAM_SIZES 
+    128K 256K  96K  48K 128K  96K  48K 256K
+)
+set(STM32_WB_CCRAM_SIZES 
+      0K   0K   0K   0K   0K   0K   0K   0K
+)
+
+stm32_util_create_family_targets(WB M4)
+
+target_compile_options(STM32::WB::M4 INTERFACE 
+    -mcpu=cortex-m4 -mfpu=fpv5-sp-d16 -mfloat-abi=hard
+)
+target_link_options(STM32::WB::M4 INTERFACE 
+    -mcpu=cortex-m4 -mfpu=fpv5-sp-d16 -mfloat-abi=hard
+)