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

Use imported library targets for linker script and compile flags.

Konstantin Oblaukhov 5 лет назад
Родитель
Сommit
576b7380c2

+ 120 - 0
cmake/FindCMSIS.cmake

@@ -0,0 +1,120 @@
+if(NOT CMSIS_FIND_COMPONENTS)
+    set(CMSIS_FIND_COMPONENTS STM32F4)
+endif()
+
+include(stm32/devices)
+    
+function(cmsis_generate_default_linker_script FAMILY DEVICE)    
+    if(${FAMILY} STREQUAL "F4")
+        stm32f4_memory_info(${DEVICE} 
+            FLASH_SIZE RAM_SIZE CCRAM_SIZE STACK_SIZE HEAP_SIZE 
+            FLASH_ORIGIN RAM_ORIGIN CCRAM_ORIGIN
+        )
+    endif()
+    add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${DEVICE}.ld"
+        COMMAND ${CMAKE_COMMAND} 
+            -DFLASH_ORIGIN="${FLASH_ORIGIN}" 
+            -DRAM_ORIGIN="${RAM_ORIGIN}" 
+            -DCCRAM_ORIGIN="${CCRAM_ORIGIN}" 
+            -DFLASH_SIZE="${FLASH_SIZE}" 
+            -DRAM_SIZE="${RAM_SIZE}" 
+            -DCCRAM_SIZE="${CCRAM_SIZE}" 
+            -DSTACK_SIZE="${STACK_SIZE}" 
+            -DHEAP_SIZE="${HEAP_SIZE}" 
+            -DLINKER_SCRIPT="${CMAKE_CURRENT_BINARY_DIR}/${DEVICE}.ld"
+            -P "${STM32_CMAKE_DIR}/stm32/linker_ld.cmake"
+    )
+    add_custom_target(CMSIS_LD_${DEVICE} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${DEVICE}.ld)
+    add_dependencies(CMSIS::STM32::${DEVICE} CMSIS_LD_${DEVICE})
+    target_link_options(CMSIS::STM32::${DEVICE} INTERFACE -T "${CMAKE_CURRENT_BINARY_DIR}/${DEVICE}.ld")
+endfunction() 
+
+foreach(COMP ${CMSIS_FIND_COMPONENTS})
+    string(TOLOWER ${COMP} COMP_L)
+    string(TOUPPER ${COMP} COMP)
+    
+    string(REGEX MATCH "^STM32([A-Z][0-9])([0-9][0-9][A-Z][0-9A-Z])?.*$" COMP ${COMP})
+    
+    if((NOT CMAKE_MATCH_1) AND (NOT CMAKE_MATCH_2))
+        message(FATAL_ERROR "Unknown CMSIS component: ${COMP}")
+    endif()
+    
+    if(CMAKE_MATCH_2)
+        set(FAMILY ${CMAKE_MATCH_1})
+        set(DEVICES "${CMAKE_MATCH_1}${CMAKE_MATCH_2}")
+    else()
+        set(FAMILY ${CMAKE_MATCH_1})
+        stm32_get_devices_by_family(${FAMILY} DEVICES)
+    endif()
+    string(TOLOWER ${FAMILY} FAMILY_L)
+    
+    if(NOT STM32_CUBE_${FAMILY}_PATH)
+        set(STM32_CUBE_${FAMILY}_PATH /opt/STM32Cube_FW_${FAMILY} CACHE PATH "Path to STM32Cube_FW_${FAMILY}")
+        message(STATUS "No STM32_CUBE_${FAMILY}_PATH specified using default: ${STM32_CUBE_${FAMILY}_PATH}")
+    endif()
+    
+    set(CMSIS_PATH "${STM32_CUBE_${FAMILY}_PATH}/Drivers/CMSIS")
+    
+    find_path(CMSIS_${FAMILY}_COMMON_INCLUDE
+        NAMES cmsis_version.h
+        PATHS "${CMSIS_PATH}/Include"
+        NO_DEFAULT_PATH
+    )
+    list(APPEND CMSIS_INCLUDE_DIRS "${CMSIS_${FAMILY}_COMMON_INCLUDE}")
+    
+    find_path(CMSIS_${FAMILY}_INCLUDE
+        NAMES stm32${FAMILY_L}xx.h
+        PATHS "${CMSIS_PATH}/Device/ST/STM32${FAMILY}xx/Include"
+        NO_DEFAULT_PATH
+    )
+    list(APPEND CMSIS_INCLUDE_DIRS "${CMSIS_${FAMILY}_INCLUDE}")
+    
+    find_file(CMSIS_${FAMILY}_SOURCE
+        NAMES system_stm32${FAMILY_L}xx.c
+        PATHS "${CMSIS_PATH}/Device/ST/STM32${FAMILY}xx/Source/Templates"
+        NO_DEFAULT_PATH
+    )
+    list(APPEND CMSIS_SOURCES "${CMSIS_${FAMILY}_SOURCE}")
+
+    set(DEVICES_FOUND TRUE)
+    foreach(DEVICE ${DEVICES})
+        stm32_get_chip_type(${FAMILY} ${DEVICE} TYPE)
+        string(TOLOWER ${DEVICE} DEVICE_L)
+        string(TOLOWER ${TYPE} TYPE_L)
+        
+        find_file(CMSIS_${FAMILY}_${TYPE}_STARTUP
+            NAMES startup_stm32f${TYPE_L}.s
+            PATHS "${CMSIS_PATH}/Device/ST/STM32${FAMILY}xx/Source/Templates/gcc"
+            NO_DEFAULT_PATH
+        )
+        list(APPEND CMSIS_SOURCES "${CMSIS_${FAMILY}_${TYPE}_STARTUP}")
+        if(NOT CMSIS_${FAMILY}_${TYPE}_STARTUP)
+            set(DEVICES_FOUND FALSE)
+            break()
+        endif()
+        
+        add_library(CMSIS::STM32::${DEVICE} INTERFACE IMPORTED)
+        target_link_libraries(CMSIS::STM32::${DEVICE} INTERFACE STM32::${FAMILY}::${TYPE})
+        target_include_directories(CMSIS::STM32::${DEVICE} INTERFACE "${CMSIS_${FAMILY}_COMMON_INCLUDE}")
+        target_include_directories(CMSIS::STM32::${DEVICE} INTERFACE "${CMSIS_${FAMILY}_INCLUDE}")
+        target_sources(CMSIS::STM32::${DEVICE} INTERFACE "${CMSIS_${FAMILY}_SOURCE}")
+        target_sources(CMSIS::STM32::${DEVICE} INTERFACE "${CMSIS_${FAMILY}_${TYPE}_STARTUP}")
+        cmsis_generate_default_linker_script(${FAMILY} ${DEVICE})
+    endforeach()
+        
+    if(CMSIS_${FAMILY}_COMMON_INCLUDE AND 
+       CMSIS_${FAMILY}_INCLUDE AND 
+       CMSIS_${FAMILY}_SOURCE AND
+       DEVICES_FOUND)
+       set(CMSIS_${COMP}_FOUND TRUE)
+    else()
+       set(CMSIS_${COMP}_FOUND FALSE)
+    endif()
+endforeach()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(CMSIS
+    REQUIRED_VARS CMSIS_INCLUDE_DIRS CMSIS_SOURCES
+    FOUND_VAR CMSIS_FOUND
+    HANDLE_COMPONENTS
+)

+ 0 - 50
cmake/stm32/cmsis.cmake

@@ -1,50 +0,0 @@
-function(stm32_add_cmsis TARGET)
-    stm32_get_chip(${TARGET} FAMILY DEVICE) 
-    stm32_get_type(${FAMILY} ${DEVICE} TYPE)
-    string(TOLOWER ${FAMILY} FAMILY_L)
-    string(TOLOWER ${DEVICE} DEVICE_L)
-    string(TOLOWER ${TYPE} TYPE_L)
-    
-    if(NOT STM32_CUBE_${FAMILY}_PATH)
-        set(STM32_CUBE_${FAMILY}_PATH /opt/STM32Cube_FW_${FAMILY} CACHE PATH "Path to STM32Cube_FW_${FAMILY}")
-        message(STATUS "No STM32_CUBE_${FAMILY}_PATH specified using default: ${STM32_CUBE_${FAMILY}_PATH}")
-    endif()
-    
-    set(CMSIS_PATH "${STM32_CUBE_${FAMILY}_PATH}/Drivers/CMSIS")
-    
-    find_path(STM32_CMSIS_${FAMILY}_COMMON_INCLUDE
-        NAMES cmsis_version.h
-        PATHS "${CMSIS_PATH}/Include"
-        NO_DEFAULT_PATH
-    )
-    find_path(STM32_CMSIS_${FAMILY}_INCLUDE
-        NAMES stm32${FAMILY_L}xx.h
-        PATHS "${CMSIS_PATH}/Device/ST/STM32${FAMILY}xx/Include"
-        NO_DEFAULT_PATH
-    )
-    find_file(STM32_CMSIS_${FAMILY}_SOURCE
-        NAMES system_stm32${FAMILY_L}xx.c
-        PATHS "${CMSIS_PATH}/Device/ST/STM32${FAMILY}xx/Source/Templates"
-        NO_DEFAULT_PATH
-    )
-    find_file(STM32_CMSIS_${FAMILY}_${TYPE}_STARTUP
-        NAMES startup_stm32f${TYPE_L}.s
-        PATHS "${CMSIS_PATH}/Device/ST/STM32${FAMILY}xx/Source/Templates/gcc"
-        NO_DEFAULT_PATH
-    )
-    if((NOT STM32_CMSIS_${FAMILY}_COMMON_INCLUDE) OR
-       (NOT STM32_CMSIS_${FAMILY}_INCLUDE) OR
-       (NOT STM32_CMSIS_${FAMILY}_SOURCE) OR
-       (NOT STM32_CMSIS_${FAMILY}_${TYPE}_STARTUP))
-        message(FATAL_ERROR "Cannot find CMSIS. Make sure STM32_CUBE_${FAMILY}_PATH contains path to STM32Cube_FW_${FAMILY}.")
-    endif()
-            
-    target_include_directories(${TARGET} PRIVATE 
-        ${STM32_CMSIS_${FAMILY}_COMMON_INCLUDE} 
-        ${STM32_CMSIS_${FAMILY}_INCLUDE}
-    )
-    target_sources(${TARGET} PRIVATE 
-        ${STM32_CMSIS_${FAMILY}_${TYPE}_STARTUP}
-        ${STM32_CMSIS_${FAMILY}_SOURCE}
-    )    
-endfunction()

+ 33 - 137
cmake/stm32/common.cmake

@@ -26,18 +26,16 @@ find_program(CMAKE_SIZE NAMES ${STM32_TARGET_TRIPLET}-size PATHS ${TOOLCHAIN_BIN
 find_program(CMAKE_DEBUGGER NAMES ${STM32_TARGET_TRIPLET}-gdb PATHS ${TOOLCHAIN_BIN_PATH})
 find_program(CMAKE_CPPFILT NAMES ${STM32_TARGET_TRIPLET}-c++filt PATHS ${TOOLCHAIN_BIN_PATH})
 
-include(stm32/f4)
-include(stm32/linker)
-include(stm32/cmsis)
+function(stm32_get_chip_type FAMILY DEVICE TYPE)
+    if(${FAMILY} STREQUAL "F4")
+        stm32f4_get_type(${DEVICE} T)
+    endif()
+    set(${TYPE} ${T} PARENT_SCOPE)
+endfunction()
 
-function(stm32_get_chip TARGET FAMILY DEVICE)
-    get_target_property(CHIP ${TARGET} STM32_CHIP)
+function(stm32_get_chip_info CHIP FAMILY TYPE DEVICE)
     string(TOUPPER ${CHIP} CHIP)
-    
-    if(NOT CHIP)
-        message(FATAL_ERROR "Please specify STM32 chip for target ${TARGET} using STM32_CHIP property")
-    endif()
-    
+        
     string(REGEX MATCH "^STM32([A-Z][0-9])([0-9][0-9][A-Z][0-9A-Z]).*$" CHIP ${CHIP})
     
     if((NOT CMAKE_MATCH_1) OR (NOT CMAKE_MATCH_2))
@@ -52,138 +50,36 @@ function(stm32_get_chip TARGET FAMILY DEVICE)
         message(FATAL_ERROR "Unsupported family ${STM32_FAMILY} for device ${CHIP}")
     endif()
 
+    stm32_get_chip_type(${STM32_FAMILY} ${STM32_DEVICE} STM32_TYPE)
+    
     set(${FAMILY} ${STM32_FAMILY} PARENT_SCOPE)
     set(${DEVICE} ${STM32_DEVICE} PARENT_SCOPE)
+    set(${TYPE} ${STM32_TYPE} PARENT_SCOPE)
 endfunction()
 
-function(stm32_get_type FAMILY DEVICE TYPE)
-    if(${FAMILY} STREQUAL "F4")
-        stm32f4_get_type(${DEVICE} T)
+foreach(FAMILY ${STM32_SUPPORTED_FAMILIES})
+    if(NOT (TARGET STM32::${FAMILY}))
+        add_library(STM32::${FAMILY} INTERFACE IMPORTED)
+        target_compile_options(STM32::${FAMILY} INTERFACE 
+            --sysroot="${TOOLCHAIN_SYSROOT}"
+            -mthumb -mabi=aapcs -Wall -ffunction-sections -fdata-sections -fno-strict-aliasing -fno-builtin -ffast-math
+            $<$<CONFIG:Debug>:-Og>
+            $<$<CONFIG:Release>:-Os>
+        )
+        target_link_options(STM32::${FAMILY} INTERFACE 
+            --sysroot="${TOOLCHAIN_SYSROOT}"
+            -mthumb -mabi=aapcs -Wl,--gc-sections
+            $<$<CONFIG:Debug>:-Og>
+            $<$<CONFIG:Release>:-Os -s>
+        )
     endif()
-    set(${TYPE} ${T} PARENT_SCOPE)
-endfunction()
-
-function(stm32_configure_compiler TARGET)
-    stm32_get_chip(${TARGET} STM32_FAMILY STM32_DEVICE) 
-    
-    target_compile_options(${TARGET} PRIVATE 
-        --sysroot="${TOOLCHAIN_SYSROOT}"
-        -mthumb -mabi=aapcs -Wall -ffunction-sections -fdata-sections -fno-strict-aliasing -fno-builtin -ffast-math
-        $<$<CONFIG:Debug>:-Og>
-        $<$<CONFIG:Release>:-Os>
-    )
-    target_link_options(${TARGET} PRIVATE 
-        --sysroot="${TOOLCHAIN_SYSROOT}"
-        -mthumb -mabi=aapcs -Wl,--gc-sections
-        $<$<CONFIG:Debug>:-Og>
-        $<$<CONFIG:Release>:-Os -s>
-    )
+endforeach()
 
-    get_target_property(SPECS ${TARGET} STM32_GCC_SPECS)
-    if(SPECS)
-        target_compile_options(${TARGET} PRIVATE $<$<C_COMPILER_ID:GNU>:--specs=${SPECS}.specs>)
-        target_link_options(${TARGET} PRIVATE $<$<C_COMPILER_ID:GNU>:--specs=${SPECS}.specs>)
-    endif()
-    
-    if(${STM32_FAMILY} STREQUAL "F4")
-        stm32f4_configure_compiler(${TARGET})
-    endif()
-endfunction()
+if(NOT (TARGET STM32::NoSys))
+    add_library(STM32::NoSys INTERFACE IMPORTED)
+    target_compile_options(STM32::NoSys INTERFACE $<$<C_COMPILER_ID:GNU>:--specs=nosys.specs>)
+    target_link_options(STM32::NoSys INTERFACE $<$<C_COMPILER_ID:GNU>:--specs=nosys.specs>)
+endif()
 
-function(stm32_target TARGET)
-    get_target_property(TARGET_TYPE ${TARGET} TYPE)
-    stm32_configure_compiler(${TARGET})
-    if(TARGET_TYPE STREQUAL EXECUTABLE)
-        get_target_property(NO_LINKER_SCRIPT ${TARGET} STM32_NO_LINKER_SCRIPT)
-        if(NOT NO_LINKER_SCRIPT)
-            stm32_generate_linker_script(${TARGET})
-        endif()
-        get_target_property(NO_CMSIS ${TARGET} STM32_NO_CMSIS)
-        if(NOT NO_CMSIS)
-            stm32_add_cmsis(${TARGET})
-        endif()
-    endif()
-endfunction()
+include(stm32/f4)
 
-# function(nrf52_add_sdk_startup TARGET)
-#     get_target_property(TARGET_NO_SDK ${TARGET} STM32_NO_SDK)
-#     if(TARGET_NO_SDK)
-#         return()
-#     endif()
-# 
-#     target_include_directories(${TARGET} PRIVATE "${NRF5_SDK_PATH}/components/toolchain/cmsis/include")
-#     target_include_directories(${TARGET} PRIVATE "${NRF5_SDK_PATH}/modules/nrfx/mdk")
-#     
-#     nrf52_get_chip(${TARGET} STM32_CHIP STM32_CHIP_VARIANT)
-#     
-#     unset(STM32_STARTUP_FILE CACHE)
-#     find_file(STM32_STARTUP_FILE
-#         NAMES gcc_startup_nrf52${STM32_CHIP}.S gcc_startup_nrf52.S
-#         PATHS "${NRF5_SDK_PATH}/modules/nrfx/mdk"
-#         NO_DEFAULT_PATH
-#     )
-#     
-#     unset(STM32_SYSTEM_FILE CACHE)
-#     find_file(STM32_SYSTEM_FILE
-#         NAMES system_nrf52${STM32_CHIP}.c system_nrf52.c
-#         PATHS "${NRF5_SDK_PATH}/modules/nrfx/mdk"
-#         NO_DEFAULT_PATH
-#     )
-#     
-#     if((NOT STM32_STARTUP_FILE) OR (NOT STM32_SYSTEM_FILE))
-#         message(WARNING "Cannot find startup sources for target ${TARGET}, check NRF5_SDK_PATH variable")
-#     else()
-#         target_sources(${TARGET} PRIVATE "${STM32_STARTUP_FILE}" "${STM32_SYSTEM_FILE}")
-#     endif()
-# endfunction()
-# 
-# function(nrf52_add_linker_script TARGET SCRIPT)
-#     target_link_options(${TARGET} PRIVATE -T "${SCRIPT}")
-#     target_link_options(${TARGET} PRIVATE -L "${NRF5_SDK_PATH}/modules/nrfx/mdk")
-# endfunction()
-# 
-# function(nrf52_generate_linker_script TARGET)
-#     get_target_property(TARGET_NO_LINKER_SCRIPT ${TARGET} STM32_NO_LINKER_SCRIPT)
-#     if(TARGET_NO_LINKER_SCRIPT)
-#         return()
-#     endif()
-#     set(STM32_LINKER_FILE ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}.ld)
-#     nrf52_linker_generate_script(${TARGET} "${STM32_LINKER_FILE}")
-#     nrf52_add_linker_script(${TARGET} "${STM32_LINKER_FILE}")
-# endfunction()
-# 
-# function(nrf52_configure_compiler TARGET)
-#     nrf52_get_chip(${TARGET} STM32_CHIP STM32_CHIP_VARIANT)
-#     
-#     if(STM32_CHIP EQUAL 840)
-#         target_compile_options(${TARGET} PRIVATE -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16)
-#         target_compile_definitions(${TARGET} PRIVATE -DFLOAT_ABI_HARD)
-#         target_link_options(${TARGET} PRIVATE -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16)
-#     elseif(STM32_CHIP EQUAL 832)
-#         target_compile_options(${TARGET} PRIVATE -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16)
-#         target_link_options(${TARGET} PRIVATE -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16)
-#         target_compile_definitions(${TARGET} PRIVATE -DFLOAT_ABI_HARD)
-#     elseif(STM32_CHIP EQUAL 811)
-#         target_compile_options(${TARGET} PRIVATE -mcpu=cortex-m4 -mfloat-abi=soft)
-#         target_compile_definitions(${TARGET} PRIVATE -DFLOAT_ABI_SOFT)
-#         target_link_options(${TARGET} PRIVATE -mcpu=cortex-m4 -mfloat-abi=soft)
-#     elseif(STM32_CHIP EQUAL 810)
-#         target_compile_options(${TARGET} PRIVATE -mcpu=cortex-m4 -mfloat-abi=soft)
-#         target_compile_definitions(${TARGET} PRIVATE -DFLOAT_ABI_SOFT)
-#         target_link_options(${TARGET} PRIVATE -mcpu=cortex-m4 -mfloat-abi=soft)
-#     endif()
-#     
-#     target_compile_options(${TARGET} PRIVATE -mthumb -mabi=aapcs -Wall -ffunction-sections -fdata-sections -fno-strict-aliasing -fno-builtin -fshort-enums $<$<CONFIG:Release>:-Os>)
-#     target_compile_definitions(${TARGET} PRIVATE -DSTM32${STM32_CHIP}_XX${STM32_CHIP_VARIANT})
-#     target_link_options(${TARGET} PRIVATE -mthumb -mabi=aapcs -Wl,--gc-sections --specs=nano.specs $<$<CONFIG:Release>:-Os>)
-# endfunction()
-# 
-# function(nrf52_target TARGET)
-#     get_target_property(TARGET_TYPE ${TARGET} TYPE)    
-#     nrf52_configure_compiler(${TARGET})
-#     if(TARGET_TYPE STREQUAL EXECUTABLE)
-#         nrf52_add_sdk_startup(${TARGET})
-#         nrf52_generate_linker_script(${TARGET})
-#         target_link_libraries(${TARGET} PRIVATE -lc -lnosys -lm)
-#     endif()
-# endfunction()

+ 1060 - 0
cmake/stm32/devices.cmake

@@ -0,0 +1,1060 @@
+set(STM32_ALL_DEVICES
+    F030C6
+    F030C8
+    F030CC
+    F030F4
+    F030K6
+    F030R8
+    F030RC
+    F031C4
+    F031C6
+    F031E6
+    F031F4
+    F031F6
+    F031G4
+    F031G6
+    F031K4
+    F031K6
+    F038C6
+    F038E6
+    F038F6
+    F038G6
+    F038K6
+    F042C4
+    F042C6
+    F042F4
+    F042F6
+    F042G4
+    F042G6
+    F042K4
+    F042K6
+    F042T6
+    F048C6
+    F048G6
+    F048T6
+    F051C4
+    F051C6
+    F051C8
+    F051K4
+    F051K6
+    F051K8
+    F051R4
+    F051R6
+    F051R8
+    F051T8
+    F058C8
+    F058R8
+    F058T8
+    F070C6
+    F070CB
+    F070F6
+    F070RB
+    F071C8
+    F071CB
+    F071RB
+    F071V8
+    F071VB
+    F072C8
+    F072CB
+    F072R8
+    F072RB
+    F072V8
+    F072VB
+    F078CB
+    F078RB
+    F078VB
+    F091CB
+    F091CC
+    F091RB
+    F091RC
+    F091VB
+    F091VC
+    F098CC
+    F098RC
+    F098VC
+    F100C4
+    F100C6
+    F100C8
+    F100CB
+    F100R4
+    F100R6
+    F100R8
+    F100RB
+    F100RC
+    F100RD
+    F100RE
+    F100V8
+    F100VB
+    F100VC
+    F100VD
+    F100VE
+    F100ZC
+    F100ZD
+    F100ZE
+    F101C4
+    F101C6
+    F101C8
+    F101CB
+    F101R4
+    F101R6
+    F101R8
+    F101RB
+    F101RC
+    F101RD
+    F101RE
+    F101RF
+    F101RG
+    F101T4
+    F101T6
+    F101T8
+    F101TB
+    F101V8
+    F101VB
+    F101VC
+    F101VD
+    F101VE
+    F101VF
+    F101VG
+    F101ZC
+    F101ZD
+    F101ZE
+    F101ZF
+    F101ZG
+    F102C4
+    F102C6
+    F102C8
+    F102CB
+    F102R4
+    F102R6
+    F102R8
+    F102RB
+    F103C4
+    F103C6
+    F103C8
+    F103CB
+    F103R4
+    F103R6
+    F103R8
+    F103RB
+    F103RC
+    F103RD
+    F103RE
+    F103RF
+    F103RG
+    F103T4
+    F103T6
+    F103T8
+    F103TB
+    F103V8
+    F103VB
+    F103VC
+    F103VD
+    F103VE
+    F103VF
+    F103VG
+    F103ZC
+    F103ZD
+    F103ZE
+    F103ZF
+    F103ZG
+    F105R8
+    F105RB
+    F105RC
+    F105V8
+    F105VB
+    F105VC
+    F107RB
+    F107RC
+    F107VB
+    F107VC
+    F205RB
+    F205RC
+    F205RE
+    F205RF
+    F205RG
+    F205VB
+    F205VC
+    F205VE
+    F205VF
+    F205VG
+    F205ZC
+    F205ZE
+    F205ZF
+    F205ZG
+    F207IC
+    F207IE
+    F207IF
+    F207IG
+    F207VC
+    F207VE
+    F207VF
+    F207VG
+    F207ZC
+    F207ZE
+    F207ZF
+    F207ZG
+    F215RE
+    F215RG
+    F215VE
+    F215VG
+    F215ZE
+    F215ZG
+    F217IE
+    F217IG
+    F217VE
+    F217VG
+    F217ZE
+    F217ZG
+    F301C6
+    F301C8
+    F301K6
+    F301K8
+    F301R6
+    F301R8
+    F302C6
+    F302C8
+    F302CB
+    F302CC
+    F302K6
+    F302K8
+    F302R6
+    F302R8
+    F302RB
+    F302RC
+    F302RD
+    F302RE
+    F302VB
+    F302VC
+    F302VD
+    F302VE
+    F302ZD
+    F302ZE
+    F303C6
+    F303C8
+    F303CB
+    F303CC
+    F303K6
+    F303K8
+    F303R6
+    F303R8
+    F303RB
+    F303RC
+    F303RD
+    F303RE
+    F303VB
+    F303VC
+    F303VD
+    F303VE
+    F303ZD
+    F303ZE
+    F318C8
+    F318K8
+    F328C8
+    F334C4
+    F334C6
+    F334C8
+    F334K4
+    F334K6
+    F334K8
+    F334R6
+    F334R8
+    F358CC
+    F358RC
+    F358VC
+    F373C8
+    F373CB
+    F373CC
+    F373R8
+    F373RB
+    F373RC
+    F373V8
+    F373VB
+    F373VC
+    F378CC
+    F378RC
+    F378VC
+    F398VE
+    F401CB
+    F401CC
+    F401CD
+    F401CE
+    F401RB
+    F401RC
+    F401RD
+    F401RE
+    F401VB
+    F401VC
+    F401VD
+    F401VE
+    F405OE
+    F405OG
+    F405RG
+    F405VG
+    F405ZG
+    F407IE
+    F407IG
+    F407VE
+    F407VG
+    F407ZE
+    F407ZG
+    F410C8
+    F410CB
+    F410R8
+    F410RB
+    F410T8
+    F410TB
+    F411CC
+    F411CE
+    F411RC
+    F411RE
+    F411VC
+    F411VE
+    F412CE
+    F412CG
+    F412RE
+    F412RG
+    F412VE
+    F412VG
+    F412ZE
+    F412ZG
+    F413CG
+    F413CH
+    F413MG
+    F413MH
+    F413RG
+    F413RH
+    F413VG
+    F413VH
+    F413ZG
+    F413ZH
+    F415OG
+    F415RG
+    F415VG
+    F415ZG
+    F417IE
+    F417IG
+    F417VE
+    F417VG
+    F417ZE
+    F417ZG
+    F423CH
+    F423MH
+    F423RH
+    F423VH
+    F423ZH
+    F427AG
+    F427AI
+    F427IG
+    F427II
+    F427VG
+    F427VI
+    F427ZG
+    F427ZI
+    F429AG
+    F429AI
+    F429BE
+    F429BG
+    F429BI
+    F429IE
+    F429IG
+    F429II
+    F429NE
+    F429NG
+    F429NI
+    F429VE
+    F429VG
+    F429VI
+    F429ZE
+    F429ZG
+    F429ZI
+    F437AI
+    F437IG
+    F437II
+    F437VG
+    F437VI
+    F437ZG
+    F437ZI
+    F439AI
+    F439BG
+    F439BI
+    F439IG
+    F439II
+    F439NG
+    F439NI
+    F439VG
+    F439VI
+    F439ZG
+    F439ZI
+    F446MC
+    F446ME
+    F446RC
+    F446RE
+    F446VC
+    F446VE
+    F446ZC
+    F446ZE
+    F469AE
+    F469AG
+    F469AI
+    F469BE
+    F469BG
+    F469BI
+    F469IE
+    F469IG
+    F469II
+    F469NE
+    F469NG
+    F469NI
+    F469VE
+    F469VG
+    F469VI
+    F469ZE
+    F469ZG
+    F469ZI
+    F479AG
+    F479AI
+    F479BG
+    F479BI
+    F479IG
+    F479II
+    F479NG
+    F479NI
+    F479VG
+    F479VI
+    F479ZG
+    F479ZI
+    F722IC
+    F722IE
+    F722RC
+    F722RE
+    F722VC
+    F722VE
+    F722ZC
+    F722ZE
+    F723IC
+    F723IE
+    F723VE
+    F723ZC
+    F723ZE
+    F730I8
+    F730R8
+    F730V8
+    F730Z8
+    F732IE
+    F732RE
+    F732VE
+    F732ZE
+    F733IE
+    F733VE
+    F733ZE
+    F745IE
+    F745IG
+    F745VE
+    F745VG
+    F745ZE
+    F745ZG
+    F746BE
+    F746BG
+    F746IE
+    F746IG
+    F746NE
+    F746NG
+    F746VE
+    F746VG
+    F746ZE
+    F746ZG
+    F750N8
+    F750V8
+    F750Z8
+    F756BG
+    F756IG
+    F756NG
+    F756VG
+    F756ZG
+    F765BG
+    F765BI
+    F765IG
+    F765II
+    F765NG
+    F765NI
+    F765VG
+    F765VI
+    F765ZG
+    F765ZI
+    F767BG
+    F767BI
+    F767IG
+    F767II
+    F767NG
+    F767NI
+    F767VG
+    F767VI
+    F767ZG
+    F767ZI
+    F769AI
+    F769BG
+    F769BI
+    F769IG
+    F769II
+    F769NG
+    F769NI
+    F777BI
+    F777II
+    F777NI
+    F777VI
+    F777ZI
+    F778AI
+    F779AI
+    F779BI
+    F779II
+    F779NI
+    G030C6
+    G030C8
+    G030F6
+    G030J6
+    G030K6
+    G030K8
+    G031C4
+    G031C6
+    G031C8
+    G031F4
+    G031F6
+    G031F8
+    G031G4
+    G031G6
+    G031G8
+    G031J4
+    G031J6
+    G031K4
+    G031K6
+    G031K8
+    G031Y8
+    G041C6
+    G041C8
+    G041F6
+    G041F8
+    G041G6
+    G041G8
+    G041J6
+    G041K6
+    G041K8
+    G041Y8
+    G070CB
+    G070KB
+    G070RB
+    G071C6
+    G071C8
+    G071CB
+    G071EB
+    G071G6
+    G071G8
+    G071GB
+    G071K6
+    G071K8
+    G071KB
+    G071R6
+    G071R8
+    G071RB
+    G081CB
+    G081EB
+    G081GB
+    G081KB
+    G081RB
+    G431C6
+    G431C8
+    G431CB
+    G431K6
+    G431K8
+    G431KB
+    G431M6
+    G431M8
+    G431MB
+    G431R6
+    G431R8
+    G431RB
+    G431V6
+    G431V8
+    G431VB
+    G441CB
+    G441KB
+    G441MB
+    G441RB
+    G441VB
+    G471CC
+    G471CE
+    G471MC
+    G471ME
+    G471QC
+    G471QE
+    G471RC
+    G471RE
+    G471VC
+    G471VE
+    G473CB
+    G473CC
+    G473CE
+    G473MB
+    G473MC
+    G473ME
+    G473QB
+    G473QC
+    G473QE
+    G473RB
+    G473RC
+    G473RE
+    G473VB
+    G473VC
+    G473VE
+    G474CB
+    G474CC
+    G474CE
+    G474MB
+    G474MC
+    G474ME
+    G474QB
+    G474QC
+    G474QE
+    G474RB
+    G474RC
+    G474RE
+    G474VB
+    G474VC
+    G474VE
+    G483CE
+    G483ME
+    G483QE
+    G483RE
+    G483VE
+    G484CE
+    G484ME
+    G484QE
+    G484RE
+    G484VE
+    GBK1CB
+    H742AG
+    H742AI
+    H742BG
+    H742BI
+    H742IG
+    H742II
+    H742VG
+    H742VI
+    H742XG
+    H742XI
+    H742ZG
+    H742ZI
+    H743AG
+    H743AI
+    H743BG
+    H743BI
+    H743IG
+    H743II
+    H743VG
+    H743VI
+    H743XG
+    H743XI
+    H743ZG
+    H743ZI
+    H745BG
+    H745BI
+    H745IG
+    H745II
+    H745XG
+    H745XI
+    H745ZG
+    H745ZI
+    H747AG
+    H747AI
+    H747BG
+    H747BI
+    H747IG
+    H747II
+    H747XG
+    H747XI
+    H747ZI
+    H750IB
+    H750VB
+    H750XB
+    H750ZB
+    H753AI
+    H753BI
+    H753II
+    H753VI
+    H753XI
+    H753ZI
+    H755BI
+    H755II
+    H755XI
+    H755ZI
+    H757AI
+    H757BI
+    H757II
+    H757XI
+    H757ZI
+    H7A3AG
+    H7A3AI
+    H7A3IG
+    H7A3II
+    H7A3LG
+    H7A3LI
+    H7A3NG
+    H7A3NI
+    H7A3QI
+    H7A3RG
+    H7A3RI
+    H7A3VG
+    H7A3VI
+    H7A3ZG
+    H7A3ZI
+    H7B0AB
+    H7B0IB
+    H7B0RB
+    H7B0VB
+    H7B0ZB
+    H7B3AI
+    H7B3II
+    H7B3LI
+    H7B3NI
+    H7B3QI
+    H7B3RI
+    H7B3VI
+    H7B3ZI
+    L010C6
+    L010F4
+    L010K4
+    L010K8
+    L010R8
+    L010RB
+    L011D3
+    L011D4
+    L011E3
+    L011E4
+    L011F3
+    L011F4
+    L011G3
+    L011G4
+    L011K3
+    L011K4
+    L021D4
+    L021F4
+    L021G4
+    L021K4
+    L031C4
+    L031C6
+    L031E4
+    L031E6
+    L031F4
+    L031F6
+    L031G4
+    L031G6
+    L031K4
+    L031K6
+    L041C6
+    L041E6
+    L041F6
+    L041G6
+    L041K6
+    L051C6
+    L051C8
+    L051K6
+    L051K8
+    L051R6
+    L051R8
+    L051T6
+    L051T8
+    L052C6
+    L052C8
+    L052K6
+    L052K8
+    L052R6
+    L052R8
+    L052T6
+    L052T8
+    L053C6
+    L053C8
+    L053R6
+    L053R8
+    L062C8
+    L062K8
+    L063C8
+    L063R8
+    L071C8
+    L071CB
+    L071CZ
+    L071K8
+    L071KB
+    L071KZ
+    L071RB
+    L071RZ
+    L071V8
+    L071VB
+    L071VZ
+    L072CB
+    L072CZ
+    L072KB
+    L072KZ
+    L072RB
+    L072RZ
+    L072V8
+    L072VB
+    L072VZ
+    L073CB
+    L073CZ
+    L073RB
+    L073RZ
+    L073V8
+    L073VB
+    L073VZ
+    L081CB
+    L081CZ
+    L081KZ
+    L082CZ
+    L082KZ
+    L083CB
+    L083CZ
+    L083RB
+    L083RZ
+    L083V8
+    L083VB
+    L083VZ
+    L100C6
+    L100R8
+    L100RB
+    L100RC
+    L151C6
+    L151C8
+    L151CB
+    L151CC
+    L151QC
+    L151QD
+    L151QE
+    L151R6
+    L151R8
+    L151RB
+    L151RC
+    L151RD
+    L151RE
+    L151UC
+    L151V8
+    L151VB
+    L151VC
+    L151VD
+    L151VE
+    L151ZC
+    L151ZD
+    L151ZE
+    L152C6
+    L152C8
+    L152CB
+    L152CC
+    L152QC
+    L152QD
+    L152QE
+    L152R6
+    L152R8
+    L152RB
+    L152RC
+    L152RD
+    L152RE
+    L152UC
+    L152V8
+    L152VB
+    L152VC
+    L152VD
+    L152VE
+    L152ZC
+    L152ZD
+    L152ZE
+    L162QC
+    L162QD
+    L162RC
+    L162RD
+    L162RE
+    L162VC
+    L162VD
+    L162VE
+    L162ZC
+    L162ZD
+    L162ZE
+    L412C8
+    L412CB
+    L412K8
+    L412KB
+    L412R8
+    L412RB
+    L412T8
+    L412TB
+    L422CB
+    L422KB
+    L422RB
+    L422TB
+    L431CB
+    L431CC
+    L431KB
+    L431KC
+    L431RB
+    L431RC
+    L431VC
+    L432KB
+    L432KC
+    L433CB
+    L433CC
+    L433RB
+    L433RC
+    L433VC
+    L442KC
+    L443CC
+    L443RC
+    L443VC
+    L451CC
+    L451CE
+    L451RC
+    L451RE
+    L451VC
+    L451VE
+    L452CC
+    L452CE
+    L452RC
+    L452RE
+    L452VC
+    L452VE
+    L462CE
+    L462RE
+    L462VE
+    L471QE
+    L471QG
+    L471RE
+    L471RG
+    L471VE
+    L471VG
+    L471ZE
+    L471ZG
+    L475RC
+    L475RE
+    L475RG
+    L475VC
+    L475VE
+    L475VG
+    L476JE
+    L476JG
+    L476ME
+    L476MG
+    L476QE
+    L476QG
+    L476RC
+    L476RE
+    L476RG
+    L476VC
+    L476VE
+    L476VG
+    L476ZE
+    L476ZG
+    L486JG
+    L486QG
+    L486RG
+    L486VG
+    L486ZG
+    L496AE
+    L496AG
+    L496QE
+    L496QG
+    L496RE
+    L496RG
+    L496VE
+    L496VG
+    L496ZE
+    L496ZG
+    L4A6AG
+    L4A6QG
+    L4A6RG
+    L4A6VG
+    L4A6ZG
+    L4P5AE
+    L4P5AG
+    L4P5CE
+    L4P5CG
+    L4P5QE
+    L4P5QG
+    L4P5RE
+    L4P5RG
+    L4P5VE
+    L4P5VG
+    L4P5ZE
+    L4P5ZG
+    L4Q5AG
+    L4Q5CG
+    L4Q5QG
+    L4Q5RG
+    L4Q5VG
+    L4Q5ZG
+    L4R5AG
+    L4R5AI
+    L4R5QG
+    L4R5QI
+    L4R5VG
+    L4R5VI
+    L4R5ZG
+    L4R5ZI
+    L4R7AI
+    L4R7VI
+    L4R7ZI
+    L4R9AG
+    L4R9AI
+    L4R9VG
+    L4R9VI
+    L4R9ZG
+    L4R9ZI
+    L4S5AI
+    L4S5QI
+    L4S5VI
+    L4S5ZI
+    L4S7AI
+    L4S7VI
+    L4S7ZI
+    L4S9AI
+    L4S9VI
+    L4S9ZI
+    L552CC
+    L552CE
+    L552ME
+    L552QC
+    L552QE
+    L552RC
+    L552RE
+    L552VC
+    L552VE
+    L552ZC
+    L552ZE
+    L562CE
+    L562ME
+    L562QE
+    L562RE
+    L562VE
+    L562ZE
+    MP151A
+    MP151C
+    MP153A
+    MP153C
+    MP157A
+    MP157C
+    WB50CG
+    WB55CC
+    WB55CE
+    WB55CG
+    WB55RC
+    WB55RE
+    WB55RG
+    WB55VC
+    WB55VE
+    WB55VG
+    WLE5J8
+    WLE5JB
+    WLE5JC
+)
+
+function(stm32_get_devices_by_family FAMILY DEVICES)
+    set(LIST ${STM32_ALL_DEVICES})
+    list(FILTER LIST INCLUDE REGEX "^${FAMILY}")
+    set(${DEVICES} ${LIST} PARENT_SCOPE)
+endfunction()
+

+ 29 - 17
cmake/stm32/f4.cmake

@@ -20,6 +20,26 @@ set(STM32F4_CCRAM_SIZES
     64K 64K 64K 64K  0K 64K 64K
 )
 
+target_compile_options(STM32::F4 INTERFACE 
+    -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
+)
+target_link_options(STM32::F4 INTERFACE 
+    -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
+)
+target_compile_definitions(STM32::F4 INTERFACE 
+    STM32F4
+)
+
+foreach(TYPE ${STM32F4_TYPES})
+    if(NOT (TARGET STM32::F4::${TYPE}))
+        add_library(STM32::F4::${TYPE} INTERFACE IMPORTED)
+        target_link_libraries(STM32::F4::${TYPE} INTERFACE STM32::F4)
+        target_compile_definitions(STM32::F4::${TYPE} INTERFACE 
+            STM32F${TYPE}
+        )
+    endif()
+endforeach()
+
 function(stm32f4_get_type DEVICE TYPE)
     set(INDEX 0)
     foreach(C_TYPE ${STM32F4_TYPES})
@@ -35,7 +55,10 @@ function(stm32f4_get_type DEVICE TYPE)
     set(${TYPE} ${RESULT_TYPE} PARENT_SCOPE)
 endfunction()
 
-function(stm32f4_memory_size DEVICE FLASH_SIZE RAM_SIZE CCRAM_SIZE)
+function(stm32f4_memory_info DEVICE 
+        FLASH_SIZE RAM_SIZE CCRAM_SIZE STACK_SIZE HEAP_SIZE 
+        FLASH_ORIGIN RAM_ORIGIN CCRAM_ORIGIN
+)
     string(REGEX REPLACE "^F4[0-9][0-9].([8BCDEGHI])$" "\\1" SIZE_CODE ${DEVICE})
     
     if(SIZE_CODE STREQUAL "8")
@@ -67,20 +90,9 @@ function(stm32f4_memory_size DEVICE FLASH_SIZE RAM_SIZE CCRAM_SIZE)
     set(${FLASH_SIZE} ${FLASH} PARENT_SCOPE)
     set(${RAM_SIZE} ${RAM} PARENT_SCOPE)
     set(${CCRAM_SIZE} ${CCRAM} PARENT_SCOPE)
-endfunction()
-
-function(stm32f4_configure_compiler TARGET)
-    stm32_get_chip(${TARGET} FAMILY DEVICE)
-    stm32f4_get_type(${DEVICE} TYPE)
-    
-    target_compile_options(${TARGET} PRIVATE 
-        -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
-    )
-    target_link_options(${TARGET} PRIVATE 
-        -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
-    )
-    target_compile_definitions(${TARGET} PRIVATE 
-        STM32F4 
-        STM32F${TYPE}
-    )
+    set(${STACK_SIZE} 0x400 PARENT_SCOPE)
+    set(${HEAP_SIZE} 0x200 PARENT_SCOPE)
+    set(${FLASH_ORIGIN} 0x8000000 PARENT_SCOPE)
+    set(${RAM_ORIGIN} 0x20000000 PARENT_SCOPE)
+    set(${CCRAM_ORIGIN} 0x10000000 PARENT_SCOPE)
 endfunction()

+ 0 - 63
cmake/stm32/linker.cmake

@@ -1,63 +0,0 @@
-function(stm32_set_linker_script TARGET SCRIPT)
-    target_link_options(${TARGET} PRIVATE -T "${SCRIPT}")
-endfunction()
-
-function(stm32_generate_linker_script TARGET)
-    stm32_get_chip(${TARGET} FAMILY DEVICE)
-    
-    get_target_property(FLASH_ORIGIN ${TARGET} STM32_FLASH_ORIGIN)
-    get_target_property(RAM_ORIGIN ${TARGET} STM32_RAM_ORIGIN)
-    get_target_property(CCRAM_ORIGIN ${TARGET} STM32_CCRAM_ORIGIN)
-    get_target_property(FLASH_SIZE ${TARGET} STM32_FLASH_SIZE)
-    get_target_property(RAM_SIZE ${TARGET} STM32_RAM_SIZE)
-    get_target_property(CCRAM_SIZE ${TARGET} STM32_CCRAM_SIZE)
-    get_target_property(STACK_SIZE ${TARGET} STM32_STACK_SIZE)
-    get_target_property(HEAP_SIZE ${TARGET} STM32_HEAP_SIZE)
-    
-    if(NOT FLASH_ORIGIN)
-        set(FLASH_ORIGIN 0x8000000)
-    endif()
-    if(NOT RAM_ORIGIN)
-        set(RAM_ORIGIN 0x20000000)
-    endif()
-    if(NOT CCRAM_ORIGIN)
-        set(CCRAM_ORIGIN 0x10000000)
-    endif()
-    
-    if(${FAMILY} STREQUAL "F4")
-        stm32f4_memory_size(${DEVICE} DEF_FLASH DEF_RAM DEF_CCRAM)
-    endif()
-    
-    if(NOT FLASH_SIZE)
-        set(FLASH_SIZE ${DEF_FLASH})
-    endif()
-    if(NOT RAM_SIZE)
-        set(RAM_SIZE ${DEF_RAM})
-    endif()
-    if(NOT CCRAM_SIZE)
-        set(CCRAM_SIZE ${DEF_CCRAM})
-    endif()
-    if(NOT STACK_SIZE)
-        set(STACK_SIZE 0x400)
-    endif()
-    if(NOT HEAP_SIZE)
-        set(HEAP_SIZE 0x200)
-    endif()
-    
-    add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_flash.ld"
-        COMMAND ${CMAKE_COMMAND} 
-            -DFLASH_ORIGIN="${FLASH_ORIGIN}" 
-            -DRAM_ORIGIN="${RAM_ORIGIN}" 
-            -DCCRAM_ORIGIN="${CCRAM_ORIGIN}" 
-            -DFLASH_SIZE="${FLASH_SIZE}" 
-            -DRAM_SIZE="${RAM_SIZE}" 
-            -DCCRAM_SIZE="${CCRAM_SIZE}" 
-            -DSTACK_SIZE="${STACK_SIZE}" 
-            -DHEAP_SIZE="${HEAP_SIZE}" 
-            -DLINKER_SCRIPT="${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_flash.ld"
-            -P "${STM32_CMAKE_DIR}/stm32/linker_ld.cmake"
-    )
-    add_custom_target(${TARGET}_linker_script DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_flash.ld)
-    add_dependencies(${TARGET} ${TARGET}_linker_script)
-    stm32_set_linker_script(${TARGET} ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_flash.ld)
-endfunction() 

+ 3 - 5
stm32-template/CMakeLists.txt

@@ -3,13 +3,11 @@ cmake_minimum_required(VERSION 3.8)
 
 project(stm32-template C ASM)
 
+find_package(CMSIS COMPONENTS STM32F407VG REQUIRED)
+
 set(PROJECT_SOURCES
     main.c
 )
 
 add_executable(stm32-template.elf ${PROJECT_SOURCES})
-set_target_properties(stm32-template.elf PROPERTIES 
-    STM32_CHIP STM32F407IG
-    STM32_GCC_SPECS nosys
-)
-stm32_target(stm32-template.elf)
+target_link_libraries(stm32-template.elf CMSIS::STM32::F407VG STM32::NoSys)

+ 7 - 13
tests/cmsis/CMakeLists.txt

@@ -3,20 +3,14 @@ cmake_minimum_required(VERSION 3.8)
 
 project(cmsis-test C ASM)
 
+find_package(CMSIS COMPONENTS STM32F4 REQUIRED)
+
 set(SOURCES main.c)
 
-include(${CMAKE_SOURCE_DIR}/../stm32_devices.cmake)
-stm32_get_devices_by_family(F4 DEVICES)
+include(stm32/devices)
 
-foreach(DEVICE ${DEVICES})
-    string(TOLOWER ${DEVICE} DEVICE_L)
-    set(TARGET cmsis-test-${DEVICE_L})
-    
-    message(STATUS "Testing ${DEVICE}...")
-    add_executable(${TARGET} ${SOURCES})
-    set_target_properties(${TARGET} PROPERTIES 
-        STM32_CHIP ${DEVICE}
-        STM32_GCC_SPECS nosys
-    )
-    stm32_target(${TARGET})
+stm32_get_devices_by_family(F4 DEVICES)
+foreach(DEVICE ${DEVICES})    
+    add_executable(cmsis-test-${DEVICE} ${SOURCES})
+    target_link_libraries(cmsis-test-${DEVICE} CMSIS::STM32::${DEVICE} STM32::NoSys)
 endforeach()

+ 0 - 1060
tests/stm32_devices.cmake

@@ -1,1060 +0,0 @@
-set(STM32_ALL_DEVICES
-    STM32F030C6
-    STM32F030C8
-    STM32F030CC
-    STM32F030F4
-    STM32F030K6
-    STM32F030R8
-    STM32F030RC
-    STM32F031C4
-    STM32F031C6
-    STM32F031E6
-    STM32F031F4
-    STM32F031F6
-    STM32F031G4
-    STM32F031G6
-    STM32F031K4
-    STM32F031K6
-    STM32F038C6
-    STM32F038E6
-    STM32F038F6
-    STM32F038G6
-    STM32F038K6
-    STM32F042C4
-    STM32F042C6
-    STM32F042F4
-    STM32F042F6
-    STM32F042G4
-    STM32F042G6
-    STM32F042K4
-    STM32F042K6
-    STM32F042T6
-    STM32F048C6
-    STM32F048G6
-    STM32F048T6
-    STM32F051C4
-    STM32F051C6
-    STM32F051C8
-    STM32F051K4
-    STM32F051K6
-    STM32F051K8
-    STM32F051R4
-    STM32F051R6
-    STM32F051R8
-    STM32F051T8
-    STM32F058C8
-    STM32F058R8
-    STM32F058T8
-    STM32F070C6
-    STM32F070CB
-    STM32F070F6
-    STM32F070RB
-    STM32F071C8
-    STM32F071CB
-    STM32F071RB
-    STM32F071V8
-    STM32F071VB
-    STM32F072C8
-    STM32F072CB
-    STM32F072R8
-    STM32F072RB
-    STM32F072V8
-    STM32F072VB
-    STM32F078CB
-    STM32F078RB
-    STM32F078VB
-    STM32F091CB
-    STM32F091CC
-    STM32F091RB
-    STM32F091RC
-    STM32F091VB
-    STM32F091VC
-    STM32F098CC
-    STM32F098RC
-    STM32F098VC
-    STM32F100C4
-    STM32F100C6
-    STM32F100C8
-    STM32F100CB
-    STM32F100R4
-    STM32F100R6
-    STM32F100R8
-    STM32F100RB
-    STM32F100RC
-    STM32F100RD
-    STM32F100RE
-    STM32F100V8
-    STM32F100VB
-    STM32F100VC
-    STM32F100VD
-    STM32F100VE
-    STM32F100ZC
-    STM32F100ZD
-    STM32F100ZE
-    STM32F101C4
-    STM32F101C6
-    STM32F101C8
-    STM32F101CB
-    STM32F101R4
-    STM32F101R6
-    STM32F101R8
-    STM32F101RB
-    STM32F101RC
-    STM32F101RD
-    STM32F101RE
-    STM32F101RF
-    STM32F101RG
-    STM32F101T4
-    STM32F101T6
-    STM32F101T8
-    STM32F101TB
-    STM32F101V8
-    STM32F101VB
-    STM32F101VC
-    STM32F101VD
-    STM32F101VE
-    STM32F101VF
-    STM32F101VG
-    STM32F101ZC
-    STM32F101ZD
-    STM32F101ZE
-    STM32F101ZF
-    STM32F101ZG
-    STM32F102C4
-    STM32F102C6
-    STM32F102C8
-    STM32F102CB
-    STM32F102R4
-    STM32F102R6
-    STM32F102R8
-    STM32F102RB
-    STM32F103C4
-    STM32F103C6
-    STM32F103C8
-    STM32F103CB
-    STM32F103R4
-    STM32F103R6
-    STM32F103R8
-    STM32F103RB
-    STM32F103RC
-    STM32F103RD
-    STM32F103RE
-    STM32F103RF
-    STM32F103RG
-    STM32F103T4
-    STM32F103T6
-    STM32F103T8
-    STM32F103TB
-    STM32F103V8
-    STM32F103VB
-    STM32F103VC
-    STM32F103VD
-    STM32F103VE
-    STM32F103VF
-    STM32F103VG
-    STM32F103ZC
-    STM32F103ZD
-    STM32F103ZE
-    STM32F103ZF
-    STM32F103ZG
-    STM32F105R8
-    STM32F105RB
-    STM32F105RC
-    STM32F105V8
-    STM32F105VB
-    STM32F105VC
-    STM32F107RB
-    STM32F107RC
-    STM32F107VB
-    STM32F107VC
-    STM32F205RB
-    STM32F205RC
-    STM32F205RE
-    STM32F205RF
-    STM32F205RG
-    STM32F205VB
-    STM32F205VC
-    STM32F205VE
-    STM32F205VF
-    STM32F205VG
-    STM32F205ZC
-    STM32F205ZE
-    STM32F205ZF
-    STM32F205ZG
-    STM32F207IC
-    STM32F207IE
-    STM32F207IF
-    STM32F207IG
-    STM32F207VC
-    STM32F207VE
-    STM32F207VF
-    STM32F207VG
-    STM32F207ZC
-    STM32F207ZE
-    STM32F207ZF
-    STM32F207ZG
-    STM32F215RE
-    STM32F215RG
-    STM32F215VE
-    STM32F215VG
-    STM32F215ZE
-    STM32F215ZG
-    STM32F217IE
-    STM32F217IG
-    STM32F217VE
-    STM32F217VG
-    STM32F217ZE
-    STM32F217ZG
-    STM32F301C6
-    STM32F301C8
-    STM32F301K6
-    STM32F301K8
-    STM32F301R6
-    STM32F301R8
-    STM32F302C6
-    STM32F302C8
-    STM32F302CB
-    STM32F302CC
-    STM32F302K6
-    STM32F302K8
-    STM32F302R6
-    STM32F302R8
-    STM32F302RB
-    STM32F302RC
-    STM32F302RD
-    STM32F302RE
-    STM32F302VB
-    STM32F302VC
-    STM32F302VD
-    STM32F302VE
-    STM32F302ZD
-    STM32F302ZE
-    STM32F303C6
-    STM32F303C8
-    STM32F303CB
-    STM32F303CC
-    STM32F303K6
-    STM32F303K8
-    STM32F303R6
-    STM32F303R8
-    STM32F303RB
-    STM32F303RC
-    STM32F303RD
-    STM32F303RE
-    STM32F303VB
-    STM32F303VC
-    STM32F303VD
-    STM32F303VE
-    STM32F303ZD
-    STM32F303ZE
-    STM32F318C8
-    STM32F318K8
-    STM32F328C8
-    STM32F334C4
-    STM32F334C6
-    STM32F334C8
-    STM32F334K4
-    STM32F334K6
-    STM32F334K8
-    STM32F334R6
-    STM32F334R8
-    STM32F358CC
-    STM32F358RC
-    STM32F358VC
-    STM32F373C8
-    STM32F373CB
-    STM32F373CC
-    STM32F373R8
-    STM32F373RB
-    STM32F373RC
-    STM32F373V8
-    STM32F373VB
-    STM32F373VC
-    STM32F378CC
-    STM32F378RC
-    STM32F378VC
-    STM32F398VE
-    STM32F401CB
-    STM32F401CC
-    STM32F401CD
-    STM32F401CE
-    STM32F401RB
-    STM32F401RC
-    STM32F401RD
-    STM32F401RE
-    STM32F401VB
-    STM32F401VC
-    STM32F401VD
-    STM32F401VE
-    STM32F405OE
-    STM32F405OG
-    STM32F405RG
-    STM32F405VG
-    STM32F405ZG
-    STM32F407IE
-    STM32F407IG
-    STM32F407VE
-    STM32F407VG
-    STM32F407ZE
-    STM32F407ZG
-    STM32F410C8
-    STM32F410CB
-    STM32F410R8
-    STM32F410RB
-    STM32F410T8
-    STM32F410TB
-    STM32F411CC
-    STM32F411CE
-    STM32F411RC
-    STM32F411RE
-    STM32F411VC
-    STM32F411VE
-    STM32F412CE
-    STM32F412CG
-    STM32F412RE
-    STM32F412RG
-    STM32F412VE
-    STM32F412VG
-    STM32F412ZE
-    STM32F412ZG
-    STM32F413CG
-    STM32F413CH
-    STM32F413MG
-    STM32F413MH
-    STM32F413RG
-    STM32F413RH
-    STM32F413VG
-    STM32F413VH
-    STM32F413ZG
-    STM32F413ZH
-    STM32F415OG
-    STM32F415RG
-    STM32F415VG
-    STM32F415ZG
-    STM32F417IE
-    STM32F417IG
-    STM32F417VE
-    STM32F417VG
-    STM32F417ZE
-    STM32F417ZG
-    STM32F423CH
-    STM32F423MH
-    STM32F423RH
-    STM32F423VH
-    STM32F423ZH
-    STM32F427AG
-    STM32F427AI
-    STM32F427IG
-    STM32F427II
-    STM32F427VG
-    STM32F427VI
-    STM32F427ZG
-    STM32F427ZI
-    STM32F429AG
-    STM32F429AI
-    STM32F429BE
-    STM32F429BG
-    STM32F429BI
-    STM32F429IE
-    STM32F429IG
-    STM32F429II
-    STM32F429NE
-    STM32F429NG
-    STM32F429NI
-    STM32F429VE
-    STM32F429VG
-    STM32F429VI
-    STM32F429ZE
-    STM32F429ZG
-    STM32F429ZI
-    STM32F437AI
-    STM32F437IG
-    STM32F437II
-    STM32F437VG
-    STM32F437VI
-    STM32F437ZG
-    STM32F437ZI
-    STM32F439AI
-    STM32F439BG
-    STM32F439BI
-    STM32F439IG
-    STM32F439II
-    STM32F439NG
-    STM32F439NI
-    STM32F439VG
-    STM32F439VI
-    STM32F439ZG
-    STM32F439ZI
-    STM32F446MC
-    STM32F446ME
-    STM32F446RC
-    STM32F446RE
-    STM32F446VC
-    STM32F446VE
-    STM32F446ZC
-    STM32F446ZE
-    STM32F469AE
-    STM32F469AG
-    STM32F469AI
-    STM32F469BE
-    STM32F469BG
-    STM32F469BI
-    STM32F469IE
-    STM32F469IG
-    STM32F469II
-    STM32F469NE
-    STM32F469NG
-    STM32F469NI
-    STM32F469VE
-    STM32F469VG
-    STM32F469VI
-    STM32F469ZE
-    STM32F469ZG
-    STM32F469ZI
-    STM32F479AG
-    STM32F479AI
-    STM32F479BG
-    STM32F479BI
-    STM32F479IG
-    STM32F479II
-    STM32F479NG
-    STM32F479NI
-    STM32F479VG
-    STM32F479VI
-    STM32F479ZG
-    STM32F479ZI
-    STM32F722IC
-    STM32F722IE
-    STM32F722RC
-    STM32F722RE
-    STM32F722VC
-    STM32F722VE
-    STM32F722ZC
-    STM32F722ZE
-    STM32F723IC
-    STM32F723IE
-    STM32F723VE
-    STM32F723ZC
-    STM32F723ZE
-    STM32F730I8
-    STM32F730R8
-    STM32F730V8
-    STM32F730Z8
-    STM32F732IE
-    STM32F732RE
-    STM32F732VE
-    STM32F732ZE
-    STM32F733IE
-    STM32F733VE
-    STM32F733ZE
-    STM32F745IE
-    STM32F745IG
-    STM32F745VE
-    STM32F745VG
-    STM32F745ZE
-    STM32F745ZG
-    STM32F746BE
-    STM32F746BG
-    STM32F746IE
-    STM32F746IG
-    STM32F746NE
-    STM32F746NG
-    STM32F746VE
-    STM32F746VG
-    STM32F746ZE
-    STM32F746ZG
-    STM32F750N8
-    STM32F750V8
-    STM32F750Z8
-    STM32F756BG
-    STM32F756IG
-    STM32F756NG
-    STM32F756VG
-    STM32F756ZG
-    STM32F765BG
-    STM32F765BI
-    STM32F765IG
-    STM32F765II
-    STM32F765NG
-    STM32F765NI
-    STM32F765VG
-    STM32F765VI
-    STM32F765ZG
-    STM32F765ZI
-    STM32F767BG
-    STM32F767BI
-    STM32F767IG
-    STM32F767II
-    STM32F767NG
-    STM32F767NI
-    STM32F767VG
-    STM32F767VI
-    STM32F767ZG
-    STM32F767ZI
-    STM32F769AI
-    STM32F769BG
-    STM32F769BI
-    STM32F769IG
-    STM32F769II
-    STM32F769NG
-    STM32F769NI
-    STM32F777BI
-    STM32F777II
-    STM32F777NI
-    STM32F777VI
-    STM32F777ZI
-    STM32F778AI
-    STM32F779AI
-    STM32F779BI
-    STM32F779II
-    STM32F779NI
-    STM32G030C6
-    STM32G030C8
-    STM32G030F6
-    STM32G030J6
-    STM32G030K6
-    STM32G030K8
-    STM32G031C4
-    STM32G031C6
-    STM32G031C8
-    STM32G031F4
-    STM32G031F6
-    STM32G031F8
-    STM32G031G4
-    STM32G031G6
-    STM32G031G8
-    STM32G031J4
-    STM32G031J6
-    STM32G031K4
-    STM32G031K6
-    STM32G031K8
-    STM32G031Y8
-    STM32G041C6
-    STM32G041C8
-    STM32G041F6
-    STM32G041F8
-    STM32G041G6
-    STM32G041G8
-    STM32G041J6
-    STM32G041K6
-    STM32G041K8
-    STM32G041Y8
-    STM32G070CB
-    STM32G070KB
-    STM32G070RB
-    STM32G071C6
-    STM32G071C8
-    STM32G071CB
-    STM32G071EB
-    STM32G071G6
-    STM32G071G8
-    STM32G071GB
-    STM32G071K6
-    STM32G071K8
-    STM32G071KB
-    STM32G071R6
-    STM32G071R8
-    STM32G071RB
-    STM32G081CB
-    STM32G081EB
-    STM32G081GB
-    STM32G081KB
-    STM32G081RB
-    STM32G431C6
-    STM32G431C8
-    STM32G431CB
-    STM32G431K6
-    STM32G431K8
-    STM32G431KB
-    STM32G431M6
-    STM32G431M8
-    STM32G431MB
-    STM32G431R6
-    STM32G431R8
-    STM32G431RB
-    STM32G431V6
-    STM32G431V8
-    STM32G431VB
-    STM32G441CB
-    STM32G441KB
-    STM32G441MB
-    STM32G441RB
-    STM32G441VB
-    STM32G471CC
-    STM32G471CE
-    STM32G471MC
-    STM32G471ME
-    STM32G471QC
-    STM32G471QE
-    STM32G471RC
-    STM32G471RE
-    STM32G471VC
-    STM32G471VE
-    STM32G473CB
-    STM32G473CC
-    STM32G473CE
-    STM32G473MB
-    STM32G473MC
-    STM32G473ME
-    STM32G473QB
-    STM32G473QC
-    STM32G473QE
-    STM32G473RB
-    STM32G473RC
-    STM32G473RE
-    STM32G473VB
-    STM32G473VC
-    STM32G473VE
-    STM32G474CB
-    STM32G474CC
-    STM32G474CE
-    STM32G474MB
-    STM32G474MC
-    STM32G474ME
-    STM32G474QB
-    STM32G474QC
-    STM32G474QE
-    STM32G474RB
-    STM32G474RC
-    STM32G474RE
-    STM32G474VB
-    STM32G474VC
-    STM32G474VE
-    STM32G483CE
-    STM32G483ME
-    STM32G483QE
-    STM32G483RE
-    STM32G483VE
-    STM32G484CE
-    STM32G484ME
-    STM32G484QE
-    STM32G484RE
-    STM32G484VE
-    STM32GBK1CB
-    STM32H742AG
-    STM32H742AI
-    STM32H742BG
-    STM32H742BI
-    STM32H742IG
-    STM32H742II
-    STM32H742VG
-    STM32H742VI
-    STM32H742XG
-    STM32H742XI
-    STM32H742ZG
-    STM32H742ZI
-    STM32H743AG
-    STM32H743AI
-    STM32H743BG
-    STM32H743BI
-    STM32H743IG
-    STM32H743II
-    STM32H743VG
-    STM32H743VI
-    STM32H743XG
-    STM32H743XI
-    STM32H743ZG
-    STM32H743ZI
-    STM32H745BG
-    STM32H745BI
-    STM32H745IG
-    STM32H745II
-    STM32H745XG
-    STM32H745XI
-    STM32H745ZG
-    STM32H745ZI
-    STM32H747AG
-    STM32H747AI
-    STM32H747BG
-    STM32H747BI
-    STM32H747IG
-    STM32H747II
-    STM32H747XG
-    STM32H747XI
-    STM32H747ZI
-    STM32H750IB
-    STM32H750VB
-    STM32H750XB
-    STM32H750ZB
-    STM32H753AI
-    STM32H753BI
-    STM32H753II
-    STM32H753VI
-    STM32H753XI
-    STM32H753ZI
-    STM32H755BI
-    STM32H755II
-    STM32H755XI
-    STM32H755ZI
-    STM32H757AI
-    STM32H757BI
-    STM32H757II
-    STM32H757XI
-    STM32H757ZI
-    STM32H7A3AG
-    STM32H7A3AI
-    STM32H7A3IG
-    STM32H7A3II
-    STM32H7A3LG
-    STM32H7A3LI
-    STM32H7A3NG
-    STM32H7A3NI
-    STM32H7A3QI
-    STM32H7A3RG
-    STM32H7A3RI
-    STM32H7A3VG
-    STM32H7A3VI
-    STM32H7A3ZG
-    STM32H7A3ZI
-    STM32H7B0AB
-    STM32H7B0IB
-    STM32H7B0RB
-    STM32H7B0VB
-    STM32H7B0ZB
-    STM32H7B3AI
-    STM32H7B3II
-    STM32H7B3LI
-    STM32H7B3NI
-    STM32H7B3QI
-    STM32H7B3RI
-    STM32H7B3VI
-    STM32H7B3ZI
-    STM32L010C6
-    STM32L010F4
-    STM32L010K4
-    STM32L010K8
-    STM32L010R8
-    STM32L010RB
-    STM32L011D3
-    STM32L011D4
-    STM32L011E3
-    STM32L011E4
-    STM32L011F3
-    STM32L011F4
-    STM32L011G3
-    STM32L011G4
-    STM32L011K3
-    STM32L011K4
-    STM32L021D4
-    STM32L021F4
-    STM32L021G4
-    STM32L021K4
-    STM32L031C4
-    STM32L031C6
-    STM32L031E4
-    STM32L031E6
-    STM32L031F4
-    STM32L031F6
-    STM32L031G4
-    STM32L031G6
-    STM32L031K4
-    STM32L031K6
-    STM32L041C6
-    STM32L041E6
-    STM32L041F6
-    STM32L041G6
-    STM32L041K6
-    STM32L051C6
-    STM32L051C8
-    STM32L051K6
-    STM32L051K8
-    STM32L051R6
-    STM32L051R8
-    STM32L051T6
-    STM32L051T8
-    STM32L052C6
-    STM32L052C8
-    STM32L052K6
-    STM32L052K8
-    STM32L052R6
-    STM32L052R8
-    STM32L052T6
-    STM32L052T8
-    STM32L053C6
-    STM32L053C8
-    STM32L053R6
-    STM32L053R8
-    STM32L062C8
-    STM32L062K8
-    STM32L063C8
-    STM32L063R8
-    STM32L071C8
-    STM32L071CB
-    STM32L071CZ
-    STM32L071K8
-    STM32L071KB
-    STM32L071KZ
-    STM32L071RB
-    STM32L071RZ
-    STM32L071V8
-    STM32L071VB
-    STM32L071VZ
-    STM32L072CB
-    STM32L072CZ
-    STM32L072KB
-    STM32L072KZ
-    STM32L072RB
-    STM32L072RZ
-    STM32L072V8
-    STM32L072VB
-    STM32L072VZ
-    STM32L073CB
-    STM32L073CZ
-    STM32L073RB
-    STM32L073RZ
-    STM32L073V8
-    STM32L073VB
-    STM32L073VZ
-    STM32L081CB
-    STM32L081CZ
-    STM32L081KZ
-    STM32L082CZ
-    STM32L082KZ
-    STM32L083CB
-    STM32L083CZ
-    STM32L083RB
-    STM32L083RZ
-    STM32L083V8
-    STM32L083VB
-    STM32L083VZ
-    STM32L100C6
-    STM32L100R8
-    STM32L100RB
-    STM32L100RC
-    STM32L151C6
-    STM32L151C8
-    STM32L151CB
-    STM32L151CC
-    STM32L151QC
-    STM32L151QD
-    STM32L151QE
-    STM32L151R6
-    STM32L151R8
-    STM32L151RB
-    STM32L151RC
-    STM32L151RD
-    STM32L151RE
-    STM32L151UC
-    STM32L151V8
-    STM32L151VB
-    STM32L151VC
-    STM32L151VD
-    STM32L151VE
-    STM32L151ZC
-    STM32L151ZD
-    STM32L151ZE
-    STM32L152C6
-    STM32L152C8
-    STM32L152CB
-    STM32L152CC
-    STM32L152QC
-    STM32L152QD
-    STM32L152QE
-    STM32L152R6
-    STM32L152R8
-    STM32L152RB
-    STM32L152RC
-    STM32L152RD
-    STM32L152RE
-    STM32L152UC
-    STM32L152V8
-    STM32L152VB
-    STM32L152VC
-    STM32L152VD
-    STM32L152VE
-    STM32L152ZC
-    STM32L152ZD
-    STM32L152ZE
-    STM32L162QC
-    STM32L162QD
-    STM32L162RC
-    STM32L162RD
-    STM32L162RE
-    STM32L162VC
-    STM32L162VD
-    STM32L162VE
-    STM32L162ZC
-    STM32L162ZD
-    STM32L162ZE
-    STM32L412C8
-    STM32L412CB
-    STM32L412K8
-    STM32L412KB
-    STM32L412R8
-    STM32L412RB
-    STM32L412T8
-    STM32L412TB
-    STM32L422CB
-    STM32L422KB
-    STM32L422RB
-    STM32L422TB
-    STM32L431CB
-    STM32L431CC
-    STM32L431KB
-    STM32L431KC
-    STM32L431RB
-    STM32L431RC
-    STM32L431VC
-    STM32L432KB
-    STM32L432KC
-    STM32L433CB
-    STM32L433CC
-    STM32L433RB
-    STM32L433RC
-    STM32L433VC
-    STM32L442KC
-    STM32L443CC
-    STM32L443RC
-    STM32L443VC
-    STM32L451CC
-    STM32L451CE
-    STM32L451RC
-    STM32L451RE
-    STM32L451VC
-    STM32L451VE
-    STM32L452CC
-    STM32L452CE
-    STM32L452RC
-    STM32L452RE
-    STM32L452VC
-    STM32L452VE
-    STM32L462CE
-    STM32L462RE
-    STM32L462VE
-    STM32L471QE
-    STM32L471QG
-    STM32L471RE
-    STM32L471RG
-    STM32L471VE
-    STM32L471VG
-    STM32L471ZE
-    STM32L471ZG
-    STM32L475RC
-    STM32L475RE
-    STM32L475RG
-    STM32L475VC
-    STM32L475VE
-    STM32L475VG
-    STM32L476JE
-    STM32L476JG
-    STM32L476ME
-    STM32L476MG
-    STM32L476QE
-    STM32L476QG
-    STM32L476RC
-    STM32L476RE
-    STM32L476RG
-    STM32L476VC
-    STM32L476VE
-    STM32L476VG
-    STM32L476ZE
-    STM32L476ZG
-    STM32L486JG
-    STM32L486QG
-    STM32L486RG
-    STM32L486VG
-    STM32L486ZG
-    STM32L496AE
-    STM32L496AG
-    STM32L496QE
-    STM32L496QG
-    STM32L496RE
-    STM32L496RG
-    STM32L496VE
-    STM32L496VG
-    STM32L496ZE
-    STM32L496ZG
-    STM32L4A6AG
-    STM32L4A6QG
-    STM32L4A6RG
-    STM32L4A6VG
-    STM32L4A6ZG
-    STM32L4P5AE
-    STM32L4P5AG
-    STM32L4P5CE
-    STM32L4P5CG
-    STM32L4P5QE
-    STM32L4P5QG
-    STM32L4P5RE
-    STM32L4P5RG
-    STM32L4P5VE
-    STM32L4P5VG
-    STM32L4P5ZE
-    STM32L4P5ZG
-    STM32L4Q5AG
-    STM32L4Q5CG
-    STM32L4Q5QG
-    STM32L4Q5RG
-    STM32L4Q5VG
-    STM32L4Q5ZG
-    STM32L4R5AG
-    STM32L4R5AI
-    STM32L4R5QG
-    STM32L4R5QI
-    STM32L4R5VG
-    STM32L4R5VI
-    STM32L4R5ZG
-    STM32L4R5ZI
-    STM32L4R7AI
-    STM32L4R7VI
-    STM32L4R7ZI
-    STM32L4R9AG
-    STM32L4R9AI
-    STM32L4R9VG
-    STM32L4R9VI
-    STM32L4R9ZG
-    STM32L4R9ZI
-    STM32L4S5AI
-    STM32L4S5QI
-    STM32L4S5VI
-    STM32L4S5ZI
-    STM32L4S7AI
-    STM32L4S7VI
-    STM32L4S7ZI
-    STM32L4S9AI
-    STM32L4S9VI
-    STM32L4S9ZI
-    STM32L552CC
-    STM32L552CE
-    STM32L552ME
-    STM32L552QC
-    STM32L552QE
-    STM32L552RC
-    STM32L552RE
-    STM32L552VC
-    STM32L552VE
-    STM32L552ZC
-    STM32L552ZE
-    STM32L562CE
-    STM32L562ME
-    STM32L562QE
-    STM32L562RE
-    STM32L562VE
-    STM32L562ZE
-    STM32MP151A
-    STM32MP151C
-    STM32MP153A
-    STM32MP153C
-    STM32MP157A
-    STM32MP157C
-    STM32WB50CG
-    STM32WB55CC
-    STM32WB55CE
-    STM32WB55CG
-    STM32WB55RC
-    STM32WB55RE
-    STM32WB55RG
-    STM32WB55VC
-    STM32WB55VE
-    STM32WB55VG
-    STM32WLE5J8
-    STM32WLE5JB
-    STM32WLE5JC
-)
-
-function(stm32_get_devices_by_family FAMILY DEVICES)
-    set(LIST ${STM32_ALL_DEVICES})
-    list(FILTER LIST INCLUDE REGEX "^STM32${FAMILY}")
-    set(${DEVICES} ${LIST} PARENT_SCOPE)
-endfunction()
-