CMakeLists.txt 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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 family
  28. # include(${STM32_CMAKE_PATH}/cmake/stm32/devices.cmake)
  29. # stm32_print_devices_by_family(FAMILY H7)
  30. # stm32_print_devices_by_family(FAMILY F4)
  31. set(SUPPORTED_BOARDS F407VG H743ZI)
  32. option(FREERTOS_F407VG_EXAMPLE "Compile FreeRTOS example for the F407VG board" OFF)
  33. option(FREERTOS_H743ZI_EXAMPLE "Compile FreeRTOS example for the H743ZI board" OFF)
  34. if(NOT FREERTOS_F407VG_EXAMPLE AND NOT FREERTOS_H743ZI_EXAMPLE)
  35. message(FATAL_ERROR
  36. "Please select at least one target to compile by passing FREERTOS_<BOARD>_EXAMPLE=ON\n"
  37. "Supported boards: ${SUPPORTED_BOARDS}"
  38. )
  39. endif()
  40. set(HAL_COMP_LIST RCC GPIO CORTEX)
  41. set(CMSIS_COMP_LIST "")
  42. set(FREERTOS_COMP_LIST "")
  43. set(FREERTOS_NAMESPACE FreeRTOS)
  44. if(USE_CMSIS_RTOS)
  45. list(APPEND CMSIS_COMP_LIST RTOS)
  46. endif()
  47. if(USE_CMSIS_RTOS_V2)
  48. list(APPEND CMSIS_COMP_LIST RTOS_V2)
  49. endif()
  50. if(FREERTOS_H743ZI_EXAMPLE)
  51. list(APPEND CMSIS_COMP_LIST STM32H743ZI STM32H7_M7)
  52. list(APPEND HAL_COMP_LIST STM32H7M7 STM32H743ZI)
  53. list(APPEND FREERTOS_COMP_LIST ARM_CM7)
  54. list(APPEND FREERTOS_COMP_LIST STM32H7)
  55. if(USE_CUBE_FREERTOS)
  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_CMSIS_RTOS OR USE_CMSIS_RTOS_V2)
  66. list(APPEND FREERTOS_COMP_LIST STM32F4)
  67. set(FREERTOS_F4_NAMESPACE ${FREERTOS_NAMESPACE}::STM32::F4)
  68. else()
  69. set(FREERTOS_F4_NAMESPACE ${FREERTOS_NAMESPACE})
  70. endif()
  71. endif()
  72. find_package(CMSIS COMPONENTS ${CMSIS_COMP_LIST} REQUIRED)
  73. find_package(HAL COMPONENTS ${HAL_COMP_LIST} REQUIRED)
  74. find_package(FreeRTOS COMPONENTS ${FREERTOS_COMP_LIST} REQUIRED)
  75. set(PROJECT_SOURCES
  76. main.cpp
  77. )
  78. # This is required because FreeRTOSConfig.h, stm32hxx_hal_conf.h and main.h
  79. # need to be included
  80. set(INCLUDE_DIRS
  81. ${CMAKE_CURRENT_SOURCE_DIR}
  82. )
  83. if(FREERTOS_H743ZI_EXAMPLE)
  84. set(TARGET_NAME ${PROJ_NAME}-h743zi)
  85. add_executable(${TARGET_NAME})
  86. target_sources(${TARGET_NAME} PRIVATE ${PROJECT_SOURCES})
  87. target_include_directories(${TARGET_NAME} PRIVATE ${INCLUDE_DIRS})
  88. target_link_libraries(${TARGET_NAME} PRIVATE
  89. ${FREERTOS_H7_NAMESPACE}::Timers
  90. ${FREERTOS_H7_NAMESPACE}::Heap::4
  91. ${FREERTOS_H7_NAMESPACE}::ARM_CM7
  92. HAL::STM32::H7::M7::RCC
  93. HAL::STM32::H7::M7::GPIO
  94. HAL::STM32::H7::M7::CORTEX
  95. CMSIS::STM32::H743ZI::M7
  96. STM32::NoSys
  97. )
  98. if(USE_CMSIS_RTOS)
  99. target_link_libraries(${TARGET_NAME} PRIVATE
  100. CMSIS::STM32::H7::M7::RTOS
  101. )
  102. endif()
  103. if(USE_CMSIS_RTOS_V2)
  104. target_link_libraries(${TARGET_NAME} PRIVATE
  105. CMSIS::STM32::H7::M7::RTOS_V2
  106. )
  107. target_compile_definitions(${TARGET_NAME} PRIVATE
  108. USE_CMSIS_RTOS_V2
  109. CMSIS_RTOS_V2_DEVICE_HEADER="stm32h7xx_hal.h"
  110. )
  111. endif()
  112. stm32_print_size_of_target(${TARGET_NAME})
  113. stm32_generate_binary_file(${TARGET_NAME})
  114. stm32_generate_hex_file(${TARGET_NAME})
  115. endif()
  116. if(FREERTOS_F407VG_EXAMPLE)
  117. set(TARGET_NAME ${PROJ_NAME}-f407vg)
  118. add_executable(${TARGET_NAME})
  119. target_sources(${TARGET_NAME} PRIVATE ${PROJECT_SOURCES})
  120. target_include_directories(${TARGET_NAME} PRIVATE ${INCLUDE_DIRS})
  121. target_link_libraries(${TARGET_NAME} PRIVATE
  122. ${FREERTOS_F4_NAMESPACE}::Timers
  123. ${FREERTOS_F4_NAMESPACE}::Heap::1
  124. ${FREERTOS_F4_NAMESPACE}::ARM_CM4F
  125. HAL::STM32::F4::RCC
  126. HAL::STM32::F4::GPIO
  127. HAL::STM32::F4::CORTEX
  128. CMSIS::STM32::F407VG
  129. STM32::NoSys
  130. )
  131. if(USE_CMSIS_RTOS)
  132. target_link_libraries(${TARGET_NAME} PRIVATE
  133. CMSIS::STM32::F4::RTOS
  134. )
  135. endif()
  136. if(USE_CMSIS_RTOS_V2)
  137. target_link_libraries(${TARGET_NAME} PRIVATE
  138. CMSIS::STM32::F4::RTOS_V2
  139. )
  140. target_compile_definitions(${TARGET_NAME} PRIVATE
  141. USE_CMSIS_RTOS_V2
  142. CMSIS_RTOS_V2_DEVICE_HEADER="stm32f4xx_hal.h"
  143. )
  144. endif()
  145. stm32_print_size_of_target(${TARGET_NAME})
  146. stm32_generate_binary_file(${TARGET_NAME})
  147. stm32_generate_hex_file(${TARGET_NAME})
  148. endif()