utilities.cmake 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. FetchContent_Declare(
  43. STM32CubeF0
  44. GIT_REPOSITORY https://github.com/STMicroelectronics/STM32CubeF0/
  45. GIT_TAG v1.11.1
  46. GIT_PROGRESS TRUE
  47. )
  48. FetchContent_Declare(
  49. STM32CubeF1
  50. GIT_REPOSITORY https://github.com/STMicroelectronics/STM32CubeF1/
  51. GIT_TAG v1.8.1
  52. GIT_PROGRESS TRUE
  53. )
  54. FetchContent_Declare(
  55. STM32CubeF2
  56. GIT_REPOSITORY https://github.com/STMicroelectronics/STM32CubeF2/
  57. GIT_TAG v1.9.0
  58. GIT_PROGRESS TRUE
  59. )
  60. FetchContent_Declare(
  61. STM32CubeF3
  62. GIT_REPOSITORY https://github.com/STMicroelectronics/STM32CubeF3/
  63. GIT_TAG v1.11.1
  64. GIT_PROGRESS TRUE
  65. )
  66. FetchContent_Declare(
  67. STM32CubeF4
  68. GIT_REPOSITORY https://github.com/STMicroelectronics/STM32CubeF4/
  69. GIT_TAG v1.25.1
  70. GIT_PROGRESS TRUE
  71. )
  72. FetchContent_Declare(
  73. STM32CubeF7
  74. GIT_REPOSITORY https://github.com/STMicroelectronics/STM32CubeF7/
  75. GIT_TAG v1.16.0
  76. GIT_PROGRESS TRUE
  77. )
  78. FetchContent_Declare(
  79. STM32CubeG0
  80. GIT_REPOSITORY https://github.com/STMicroelectronics/STM32CubeG0/
  81. GIT_TAG v1.3.0
  82. GIT_PROGRESS TRUE
  83. )
  84. FetchContent_Declare(
  85. STM32CubeG4
  86. GIT_REPOSITORY https://github.com/STMicroelectronics/STM32CubeG4/
  87. GIT_TAG v1.3.0
  88. GIT_PROGRESS TRUE
  89. )
  90. FetchContent_Declare(
  91. STM32CubeH7
  92. GIT_REPOSITORY https://github.com/STMicroelectronics/STM32CubeH7/
  93. GIT_TAG v1.8.0
  94. GIT_PROGRESS TRUE
  95. )
  96. FetchContent_Declare(
  97. STM32CubeL0
  98. GIT_REPOSITORY https://github.com/STMicroelectronics/STM32CubeL0/
  99. GIT_TAG v1.11.3
  100. GIT_PROGRESS TRUE
  101. )
  102. FetchContent_Declare(
  103. STM32CubeL1
  104. GIT_REPOSITORY https://github.com/STMicroelectronics/STM32CubeL1/
  105. GIT_TAG v1.10.0
  106. GIT_PROGRESS TRUE
  107. )
  108. FetchContent_Declare(
  109. STM32CubeL4
  110. GIT_REPOSITORY https://github.com/STMicroelectronics/STM32CubeL4/
  111. GIT_TAG v1.16.0
  112. GIT_PROGRESS TRUE
  113. )
  114. function(stm32_fetch_cube)
  115. foreach(FAMILY ${ARGV})
  116. set(CUBE_NAME STM32Cube${FAMILY})
  117. string(TOLOWER ${CUBE_NAME} CUBE_NAME_L)
  118. if(${STM32_CUBE_${FAMILY}_PATH})
  119. message(INFO "STM32_CUBE_${FAMILY}_PATH specified, skipping fetch for ${CUBE_NAME}")
  120. continue()
  121. endif()
  122. if(NOT ${CUBE_NAME}_POPULATED)
  123. set(FETCHCONTENT_QUIET FALSE) # To see progress
  124. FetchContent_Populate(${CUBE_NAME})
  125. endif()
  126. set(STM32_CUBE_${FAMILY}_PATH ${${CUBE_NAME_L}_SOURCE_DIR} PARENT_SCOPE)
  127. endforeach()
  128. endfunction()