CMakeLists.txt 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. cmake_minimum_required(VERSION 3.16)
  2. set(PROJ_NAME stm32-freertos)
  3. set(STM32_CMAKE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../..)
  4. # Please note: When using CMSIS, it is recommended to use the FreeRTOS version supplied in the
  5. # Cube repository because more recent kernels might be incompatible to the CMSIS
  6. # implementation provided by STM
  7. option(USE_CMSIS_RTOS "Use CMSIS RTOS provided by Cube repository" OFF)
  8. option(USE_CMSIS_RTOS_V2 "Use CMSIS RTOS_V2 provided by Cube repository" OFF)
  9. option(USE_CUBE_FREERTOS "Use the FreeRTOS kernel provided by the Cube repository" ON)
  10. if(USE_CUBE_FREERTOS)
  11. message(STATUS "Using FreeRTOS provided by Cube repository")
  12. else()
  13. message(STATUS "Using FreeRTOS from kernel repository")
  14. endif()
  15. if(USE_CMSIS_RTOS AND USE_CMSIS_RTOS_V2)
  16. message(FATAL_ERROR "Can not use USE_CMSIS_RTOS_V2 together with USE_CMSIS_RTOS!")
  17. endif()
  18. if(USE_CMSIS_RTOS)
  19. message(STATUS "Compiling CMSIS RTOS support")
  20. elseif(USE_CMSIS_RTOS_V2)
  21. message(STATUS "Compiling CMSIS RTOS V2 support")
  22. endif()
  23. # This must come before the project call!
  24. set(CMAKE_TOOLCHAIN_FILE ${STM32_CMAKE_PATH}/cmake/stm32_gcc.cmake)
  25. project(${PROJ_NAME} CXX C ASM)
  26. set(CMAKE_INCLUDE_CURRENT_DIR TRUE)
  27. # Can be used to print out all devices for the H7 or/and the F4 family
  28. # stm32_print_devices_by_family(FAMILY H7)
  29. # stm32_print_devices_by_family(FAMILY F4)
  30. set(SUPPORTED_BOARDS F407VG H743ZI)
  31. option(FREERTOS_F407VG_EXAMPLE "Compile FreeRTOS example for the F407VG board" OFF)
  32. option(FREERTOS_H743ZI_EXAMPLE "Compile FreeRTOS example for the H743ZI board" OFF)
  33. if(NOT FREERTOS_F407VG_EXAMPLE AND NOT FREERTOS_H743ZI_EXAMPLE)
  34. message(FATAL_ERROR
  35. "Please select at least one target to compile by passing FREERTOS_<BOARD>_EXAMPLE=ON\n"
  36. "Supported boards: ${SUPPORTED_BOARDS}"
  37. )
  38. endif()
  39. set(HAL_COMP_LIST RCC GPIO CORTEX)
  40. set(CMSIS_COMP_LIST "")
  41. set(FREERTOS_COMP_LIST "")
  42. set(FREERTOS_NAMESPACE FreeRTOS)
  43. if(USE_CMSIS_RTOS)
  44. list(APPEND CMSIS_COMP_LIST RTOS)
  45. endif()
  46. if(USE_CMSIS_RTOS_V2)
  47. list(APPEND CMSIS_COMP_LIST RTOS_V2)
  48. endif()
  49. if(FREERTOS_H743ZI_EXAMPLE)
  50. list(APPEND CMSIS_COMP_LIST STM32H743ZI_M7)
  51. list(APPEND HAL_COMP_LIST STM32H7M7)
  52. list(APPEND FREERTOS_COMP_LIST ARM_CM7)
  53. if(USE_CUBE_FREERTOS)
  54. # The device family needs to be supplied as a component to use the Cube FreeRTOS sources
  55. list(APPEND FREERTOS_COMP_LIST STM32H7)
  56. set(FREERTOS_H7_NAMESPACE ${FREERTOS_NAMESPACE}::STM32::H7::M7)
  57. else()
  58. set(FREERTOS_H7_NAMESPACE ${FREERTOS_NAMESPACE})
  59. endif()
  60. endif()
  61. if(FREERTOS_F407VG_EXAMPLE)
  62. list(APPEND CMSIS_COMP_LIST STM32F407VG)
  63. list(APPEND HAL_COMP_LIST STM32F407VG)
  64. list(APPEND FREERTOS_COMP_LIST ARM_CM4F)
  65. if(USE_CUBE_FREERTOS)
  66. # The device family needs to be supplied as a component to use the Cube FreeRTOS sources
  67. list(APPEND FREERTOS_COMP_LIST STM32F4)
  68. set(FREERTOS_F4_NAMESPACE ${FREERTOS_NAMESPACE}::STM32::F4)
  69. else()
  70. set(FREERTOS_F4_NAMESPACE ${FREERTOS_NAMESPACE})
  71. endif()
  72. endif()
  73. find_package(CMSIS COMPONENTS ${CMSIS_COMP_LIST} REQUIRED)
  74. find_package(HAL COMPONENTS ${HAL_COMP_LIST} REQUIRED)
  75. find_package(FreeRTOS COMPONENTS ${FREERTOS_COMP_LIST} REQUIRED)
  76. set(PROJECT_SOURCES
  77. main.cpp
  78. )
  79. # This is required because FreeRTOSConfig.h, stm32hxx_hal_conf.h and main.h
  80. # need to be included
  81. set(INCLUDE_DIRS
  82. ${CMAKE_CURRENT_SOURCE_DIR}
  83. )
  84. if(FREERTOS_H743ZI_EXAMPLE)
  85. set(TARGET_NAME ${PROJ_NAME}-h743zi)
  86. add_executable(${TARGET_NAME})
  87. target_sources(${TARGET_NAME} PRIVATE ${PROJECT_SOURCES})
  88. target_include_directories(${TARGET_NAME} PRIVATE ${INCLUDE_DIRS})
  89. target_link_libraries(${TARGET_NAME} PRIVATE
  90. ${FREERTOS_H7_NAMESPACE}::Timers
  91. ${FREERTOS_H7_NAMESPACE}::Heap::4
  92. ${FREERTOS_H7_NAMESPACE}::ARM_CM7
  93. HAL::STM32::H7::M7::RCC
  94. HAL::STM32::H7::M7::GPIO
  95. HAL::STM32::H7::M7::CORTEX
  96. CMSIS::STM32::H743ZI::M7
  97. STM32::NoSys
  98. )
  99. if(USE_CMSIS_RTOS)
  100. target_link_libraries(${TARGET_NAME} PRIVATE
  101. CMSIS::STM32::H7::M7::RTOS
  102. )
  103. endif()
  104. if(USE_CMSIS_RTOS_V2)
  105. target_link_libraries(${TARGET_NAME} PRIVATE
  106. CMSIS::STM32::H7::M7::RTOS_V2
  107. )
  108. target_compile_definitions(${TARGET_NAME} PRIVATE
  109. USE_CMSIS_RTOS_V2
  110. CMSIS_RTOS_V2_DEVICE_HEADER="stm32h7xx_hal.h"
  111. )
  112. endif()
  113. stm32_print_size_of_target(${TARGET_NAME})
  114. stm32_generate_binary_file(${TARGET_NAME})
  115. stm32_generate_hex_file(${TARGET_NAME})
  116. endif()
  117. if(FREERTOS_F407VG_EXAMPLE)
  118. set(TARGET_NAME ${PROJ_NAME}-f407vg)
  119. add_executable(${TARGET_NAME})
  120. target_sources(${TARGET_NAME} PRIVATE ${PROJECT_SOURCES})
  121. target_include_directories(${TARGET_NAME} PRIVATE ${INCLUDE_DIRS})
  122. target_link_libraries(${TARGET_NAME} PRIVATE
  123. ${FREERTOS_F4_NAMESPACE}::Timers
  124. ${FREERTOS_F4_NAMESPACE}::Heap::1
  125. ${FREERTOS_F4_NAMESPACE}::ARM_CM4F
  126. HAL::STM32::F4::RCC
  127. HAL::STM32::F4::GPIO
  128. HAL::STM32::F4::CORTEX
  129. CMSIS::STM32::F407VG
  130. STM32::NoSys
  131. )
  132. if(USE_CMSIS_RTOS)
  133. target_link_libraries(${TARGET_NAME} PRIVATE
  134. CMSIS::STM32::F4::RTOS
  135. )
  136. endif()
  137. if(USE_CMSIS_RTOS_V2)
  138. target_link_libraries(${TARGET_NAME} PRIVATE
  139. CMSIS::STM32::F4::RTOS_V2
  140. )
  141. target_compile_definitions(${TARGET_NAME} PRIVATE
  142. USE_CMSIS_RTOS_V2
  143. CMSIS_RTOS_V2_DEVICE_HEADER="stm32f4xx_hal.h"
  144. )
  145. endif()
  146. stm32_print_size_of_target(${TARGET_NAME})
  147. stm32_generate_binary_file(${TARGET_NAME})
  148. stm32_generate_hex_file(${TARGET_NAME})
  149. endif()