utilities.cmake 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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. # Set compiler flags for target
  16. # -Wall: all warnings activated
  17. # -ffunction-sections -fdata-sections: remove unused code
  18. target_compile_options(STM32::${FAMILY}${CORE_C} INTERFACE
  19. --sysroot="${TOOLCHAIN_SYSROOT}"
  20. -mthumb -Wall -ffunction-sections -fdata-sections
  21. )
  22. # Set linker flags
  23. # -mthumb: Generate thumb code
  24. # -Wl,--gc-sections: Remove unused code
  25. target_link_options(STM32::${FAMILY}${CORE_C} INTERFACE
  26. --sysroot="${TOOLCHAIN_SYSROOT}"
  27. -mthumb -Wl,--gc-sections
  28. )
  29. target_compile_definitions(STM32::${FAMILY}${CORE_C} INTERFACE
  30. STM32${FAMILY}
  31. )
  32. endif()
  33. foreach(TYPE ${STM32_${FAMILY}_TYPES})
  34. if(NOT (TARGET STM32::${TYPE}${CORE_C}))
  35. add_library(STM32::${TYPE}${CORE_C} INTERFACE IMPORTED)
  36. target_link_libraries(STM32::${TYPE}${CORE_C} INTERFACE STM32::${FAMILY}${CORE_C})
  37. target_compile_definitions(STM32::${TYPE}${CORE_C} INTERFACE
  38. STM32${TYPE}
  39. )
  40. endif()
  41. endforeach()
  42. endfunction()
  43. include(FetchContent)
  44. set(STM32_FETCH_FAMILIES F0 F1 F2 F3 F4 F7 G0 G4 H7 L0 L1 L4 L5 WB WL )
  45. set(STM32_FETCH_CUBE_VERSIONS v1.11.2 v1.8.4 v1.9.3 v1.11.2 v1.26.1 v1.16.1 v1.4.1 v1.4.0 v1.9.0 v1.12.0 v1.10.3 v1.17.0 v1.4.0 v1.11.1 v1.0.0)
  46. set(STM32_FETCH_CMSIS_VERSIONS v2.3.5 v4.3.3 v2.2.5 v2.3.5 v2.6.6 v1.2.6 v1.4.0 v1.2.1 v1.10.0 v1.9.1 v2.3.2 v1.7.1 v1.0.4 v1.8.0 v1.0.0)
  47. set(STM32_FETCH_HAL_VERSIONS v1.7.5 v1.1.8 v1.2.7 v1.5.5 v1.7.12 v1.2.9 v1.4.1 v1.2.1 v1.10.0 v1.10.4 v1.4.4 v1.13.0 v1.0.4 v1.8.0 v1.0.0)
  48. FetchContent_Declare(
  49. STM32-CMSIS
  50. GIT_REPOSITORY https://github.com/STMicroelectronics/cmsis_core/
  51. GIT_TAG v5.6.0
  52. GIT_PROGRESS TRUE
  53. )
  54. set(IDX 0)
  55. foreach(FAMILY ${STM32_FETCH_FAMILIES})
  56. string(TOLOWER ${FAMILY} FAMILY_L)
  57. list(GET STM32_FETCH_CUBE_VERSIONS ${IDX} CUBE_VERSION)
  58. list(GET STM32_FETCH_CMSIS_VERSIONS ${IDX} CMSIS_VERSION)
  59. list(GET STM32_FETCH_HAL_VERSIONS ${IDX} HAL_VERSION)
  60. FetchContent_Declare(
  61. STM32Cube${FAMILY}
  62. GIT_REPOSITORY https://github.com/STMicroelectronics/STM32Cube${FAMILY}/
  63. GIT_TAG ${CUBE_VERSION}
  64. GIT_PROGRESS TRUE
  65. )
  66. FetchContent_Declare(
  67. STM32-CMSIS-${FAMILY}
  68. GIT_REPOSITORY https://github.com/STMicroelectronics/cmsis_device_${FAMILY_L}/
  69. GIT_TAG ${CMSIS_VERSION}
  70. GIT_PROGRESS TRUE
  71. )
  72. FetchContent_Declare(
  73. STM32-HAL-${FAMILY}
  74. GIT_REPOSITORY https://github.com/STMicroelectronics/stm32${FAMILY_L}xx_hal_driver/
  75. GIT_TAG ${HAL_VERSION}
  76. GIT_PROGRESS TRUE
  77. )
  78. math(EXPR IDX "${IDX} + 1")
  79. endforeach()
  80. function(stm32_fetch_cube)
  81. foreach(FAMILY ${ARGV})
  82. set(CUBE_NAME STM32Cube${FAMILY})
  83. string(TOLOWER ${CUBE_NAME} CUBE_NAME_L)
  84. if(STM32_CUBE_${FAMILY}_PATH)
  85. message(INFO "STM32_CUBE_${FAMILY}_PATH specified, skipping fetch for ${CUBE_NAME}")
  86. continue()
  87. endif()
  88. FetchContent_GetProperties(${CUBE_NAME} POPULATED CUBE_POPULATED)
  89. if(NOT CUBE_POPULATED)
  90. set(FETCHCONTENT_QUIET FALSE) # To see progress
  91. FetchContent_Populate(${CUBE_NAME})
  92. endif()
  93. set(STM32_CUBE_${FAMILY}_PATH ${${CUBE_NAME_L}_SOURCE_DIR} PARENT_SCOPE)
  94. endforeach()
  95. endfunction()
  96. function(stm32_fetch_cmsis)
  97. if(NOT STM32_CMSIS_PATH)
  98. if(NOT STM32-CMSIS_POPULATED)
  99. set(FETCHCONTENT_QUIET FALSE) # To see progress
  100. FetchContent_Populate(STM32-CMSIS)
  101. endif()
  102. set(STM32_CMSIS_PATH ${stm32-cmsis_SOURCE_DIR} PARENT_SCOPE)
  103. else()
  104. message(INFO "STM32_CMSIS_PATH specified, skipping fetch for STM32-CMSIS")
  105. endif()
  106. foreach(FAMILY ${ARGV})
  107. set(CMSIS_NAME STM32-CMSIS-${FAMILY})
  108. string(TOLOWER ${CMSIS_NAME} CMSIS_NAME_L)
  109. if(STM32_CMSIS_${FAMILY}_PATH)
  110. message(INFO "STM32_CMSIS_${FAMILY}_PATH specified, skipping fetch for ${CMSIS_NAME}")
  111. continue()
  112. endif()
  113. FetchContent_GetProperties(${CMSIS_NAME_L} POPULATED CMSIS_POPULATED)
  114. if(NOT CMSIS_POPULATED)
  115. set(FETCHCONTENT_QUIET FALSE) # To see progress
  116. FetchContent_Populate(${CMSIS_NAME})
  117. endif()
  118. set(STM32_CMSIS_${FAMILY}_PATH ${${CMSIS_NAME_L}_SOURCE_DIR} PARENT_SCOPE)
  119. endforeach()
  120. endfunction()
  121. function(stm32_fetch_hal)
  122. foreach(FAMILY ${ARGV})
  123. set(HAL_NAME STM32-HAL-${FAMILY})
  124. string(TOLOWER ${HAL_NAME} HAL_NAME_L)
  125. if(STM32_HAL_${FAMILY}_PATH)
  126. message(INFO "STM32_HAL_${FAMILY}_PATH specified, skipping fetch for ${HAL_NAME}")
  127. continue()
  128. endif()
  129. FetchContent_GetProperties(${HAL_NAME} POPULATED HAL_POPULATED)
  130. if(NOT HAL_POPULATED)
  131. set(FETCHCONTENT_QUIET FALSE) # To see progress
  132. FetchContent_Populate(${HAL_NAME})
  133. endif()
  134. set(STM32_HAL_${FAMILY}_PATH ${${HAL_NAME_L}_SOURCE_DIR} PARENT_SCOPE)
  135. endforeach()
  136. endfunction()