utilities.cmake 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. function(stm32_util_create_family_targets FAMILY)
  2. set(CORES ${ARGN})
  3. list(LENGTH CORES NUM_CORES)
  4. if(${NUM_CORES} EQUAL 0)
  5. set(CORE "")
  6. set(CORE_C "")
  7. elseif(${NUM_CORES} EQUAL 1)
  8. set(CORE "_${CORES}")
  9. set(CORE_C "::${CORES}")
  10. else()
  11. message(FATAL_ERROR "Expected at most one core for family ${FAMILY}: ${CORES}")
  12. endif()
  13. if(NOT (TARGET STM32::${FAMILY}${CORE_C}))
  14. add_library(STM32::${FAMILY}${CORE_C} INTERFACE IMPORTED)
  15. target_compile_options(STM32::${FAMILY}${CORE_C} INTERFACE
  16. --sysroot="${TOOLCHAIN_SYSROOT}"
  17. -mthumb -mabi=aapcs -Wall -ffunction-sections -fdata-sections -fno-strict-aliasing -fno-builtin -ffast-math
  18. $<$<CONFIG:Debug>:-Og>
  19. $<$<CONFIG:Release>:-Os>
  20. )
  21. target_link_options(STM32::${FAMILY}${CORE_C} INTERFACE
  22. --sysroot="${TOOLCHAIN_SYSROOT}"
  23. -mthumb -mabi=aapcs -Wl,--gc-sections
  24. $<$<CONFIG:Debug>:-Og>
  25. $<$<CONFIG:Release>:-Os -s>
  26. )
  27. target_compile_definitions(STM32::${FAMILY}${CORE_C} INTERFACE
  28. STM32${FAMILY}
  29. )
  30. endif()
  31. foreach(TYPE ${STM32_${FAMILY}_TYPES})
  32. if(NOT (TARGET STM32::${TYPE}${CORE_C}))
  33. add_library(STM32::${TYPE}${CORE_C} INTERFACE IMPORTED)
  34. target_link_libraries(STM32::${TYPE}${CORE_C} INTERFACE STM32::${FAMILY}${CORE_C})
  35. target_compile_definitions(STM32::${TYPE}${CORE_C} INTERFACE
  36. STM32${TYPE}
  37. )
  38. endif()
  39. endforeach()
  40. endfunction()
  41. include(FetchContent)
  42. set(STM32_FETCH_FAMILIES F0 F1 F2 F3 F4 F7 G0 G4 H7 L0 L1 L4 L5)
  43. set(STM32_FETCH_CUBE_VERSIONS v1.11.1 v1.8.1 v1.9.0 v1.11.1 v1.25.1 v1.16.0 v1.4.0 v1.3.0 v1.8.0 v1.11.3 v1.10.0 v1.16.0 v1.3.1)
  44. set(STM32_FETCH_CMSIS_VERSIONS v2.3.4 v4.3.1 v2.2.4 v2.3.4 v2.6.4 v1.2.5 v1.4.0 v1.2.0 v1.9.0 v1.9.0 v2.3.1 v1.7.0 v1.0.3)
  45. set(STM32_FETCH_HAL_VERSIONS v1.7.4 v1.1.6 v1.2.5 v1.5.4 v1.7.9 v1.2.8 v1.4.0 v1.2.0 v1.9.0 v1.10.3 v1.4.2 v1.12.0 v1.0.3)
  46. FetchContent_Declare(
  47. STM32-CMSIS
  48. GIT_REPOSITORY https://github.com/STMicroelectronics/cmsis_core/
  49. GIT_TAG v5.6.0
  50. GIT_PROGRESS TRUE
  51. )
  52. set(IDX 0)
  53. foreach(FAMILY ${STM32_FETCH_FAMILIES})
  54. string(TOLOWER ${FAMILY} FAMILY_L)
  55. list(GET STM32_FETCH_CUBE_VERSIONS ${IDX} CUBE_VERSION)
  56. list(GET STM32_FETCH_CMSIS_VERSIONS ${IDX} CMSIS_VERSION)
  57. list(GET STM32_FETCH_HAL_VERSIONS ${IDX} HAL_VERSION)
  58. FetchContent_Declare(
  59. STM32Cube${FAMILY}
  60. GIT_REPOSITORY https://github.com/STMicroelectronics/STM32Cube${FAMILY}/
  61. GIT_TAG ${CUBE_VERSION}
  62. GIT_PROGRESS TRUE
  63. )
  64. FetchContent_Declare(
  65. STM32-CMSIS-${FAMILY}
  66. GIT_REPOSITORY https://github.com/STMicroelectronics/cmsis_device_${FAMILY_L}/
  67. GIT_TAG ${CMSIS_VERSION}
  68. GIT_PROGRESS TRUE
  69. )
  70. FetchContent_Declare(
  71. STM32-HAL-${FAMILY}
  72. GIT_REPOSITORY https://github.com/STMicroelectronics/stm32${FAMILY_L}xx_hal_driver/
  73. GIT_TAG ${HAL_VERSION}
  74. GIT_PROGRESS TRUE
  75. )
  76. math(EXPR IDX "${IDX} + 1")
  77. endforeach()
  78. function(stm32_fetch_cube)
  79. foreach(FAMILY ${ARGV})
  80. set(CUBE_NAME STM32Cube${FAMILY})
  81. string(TOLOWER ${CUBE_NAME} CUBE_NAME_L)
  82. if(STM32_CUBE_${FAMILY}_PATH)
  83. message(INFO "STM32_CUBE_${FAMILY}_PATH specified, skipping fetch for ${CUBE_NAME}")
  84. continue()
  85. endif()
  86. FetchContent_GetProperties(${CUBE_NAME} POPULATED CUBE_POPULATED)
  87. if(NOT CUBE_POPULATED)
  88. set(FETCHCONTENT_QUIET FALSE) # To see progress
  89. FetchContent_Populate(${CUBE_NAME})
  90. endif()
  91. set(STM32_CUBE_${FAMILY}_PATH ${${CUBE_NAME_L}_SOURCE_DIR} PARENT_SCOPE)
  92. endforeach()
  93. endfunction()
  94. function(stm32_fetch_cmsis)
  95. if(NOT STM32_CMSIS_PATH)
  96. if(NOT STM32-CMSIS_POPULATED)
  97. set(FETCHCONTENT_QUIET FALSE) # To see progress
  98. FetchContent_Populate(STM32-CMSIS)
  99. endif()
  100. set(STM32_CMSIS_PATH ${stm32-cmsis_SOURCE_DIR} PARENT_SCOPE)
  101. else()
  102. message(INFO "STM32_CMSIS_PATH specified, skipping fetch for STM32-CMSIS")
  103. endif()
  104. foreach(FAMILY ${ARGV})
  105. set(CMSIS_NAME STM32-CMSIS-${FAMILY})
  106. string(TOLOWER ${CMSIS_NAME} CMSIS_NAME_L)
  107. if(STM32_CMSIS_${FAMILY}_PATH)
  108. message(INFO "STM32_CMSIS_${FAMILY}_PATH specified, skipping fetch for ${CMSIS_NAME}")
  109. continue()
  110. endif()
  111. FetchContent_GetProperties(${CMSIS_NAME_L} POPULATED CMSIS_POPULATED)
  112. if(NOT CMSIS_POPULATED)
  113. set(FETCHCONTENT_QUIET FALSE) # To see progress
  114. FetchContent_Populate(${CMSIS_NAME})
  115. endif()
  116. set(STM32_CMSIS_${FAMILY}_PATH ${${CMSIS_NAME_L}_SOURCE_DIR} PARENT_SCOPE)
  117. endforeach()
  118. endfunction()
  119. function(stm32_fetch_hal)
  120. foreach(FAMILY ${ARGV})
  121. set(HAL_NAME STM32-HAL-${FAMILY})
  122. string(TOLOWER ${HAL_NAME} HAL_NAME_L)
  123. if(STM32_HAL_${FAMILY}_PATH)
  124. message(INFO "STM32_HAL_${FAMILY}_PATH specified, skipping fetch for ${HAL_NAME}")
  125. continue()
  126. endif()
  127. FetchContent_GetProperties(${HAL_NAME} POPULATED HAL_POPULATED)
  128. if(NOT HAL_POPULATED)
  129. set(FETCHCONTENT_QUIET FALSE) # To see progress
  130. FetchContent_Populate(${HAL_NAME})
  131. endif()
  132. set(STM32_HAL_${FAMILY}_PATH ${${HAL_NAME_L}_SOURCE_DIR} PARENT_SCOPE)
  133. endforeach()
  134. endfunction()