CMakeLists.txt 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. if(BOOTLOADER_BUILD)
  2. # bootloader only needs FreeRTOS for config, not for anything else
  3. idf_component_register()
  4. return()
  5. endif()
  6. idf_build_get_property(target IDF_TARGET)
  7. if(CONFIG_IDF_RTOS_RTTHREAD)
  8. set(srcs
  9. "${freertos_root}/portable/esp-idf/riscv/port.c")
  10. set(include_dirs
  11. "${freertos_root}/include"
  12. esp_additions/include
  13. esp_additions/include/freertos
  14. "${freertos_root}/portable/esp-idf/riscv/include")
  15. set(private_include_dirs
  16. "${freertos_root}/portable/esp-idf/riscv/include/freertos")
  17. list(APPEND srcs
  18. "${freertos_root}/portable/esp-idf/port_common.c"
  19. "${freertos_root}/portable/esp-idf/port_rt.c"
  20. "${freertos_root}/event_groups.c"
  21. "${freertos_root}/queue.c"
  22. "${freertos_root}/tasks.c"
  23. "${freertos_root}/timers.c"
  24. "${freertos_root}/list.c"
  25. "FreeRTOS-openocd.c"
  26. "esp_additions/freertos_v8_compat.c")
  27. list(APPEND private_include_dirs
  28. "${freertos_root}/include/freertos"
  29. "esp_additions/private_include")
  30. elseif(CONFIG_FREERTOS_SMP)
  31. set(ldfragments linker_smp.lf)
  32. if(CONFIG_IDF_TARGET_ARCH_XTENSA)
  33. set(srcs
  34. "FreeRTOS-Kernel-SMP/portable/xtensa/port.c"
  35. "FreeRTOS-Kernel-SMP/portable/xtensa/portasm.S"
  36. "FreeRTOS-Kernel-SMP/portable/xtensa/xtensa_context.S"
  37. "FreeRTOS-Kernel-SMP/portable/xtensa/xtensa_init.c"
  38. "FreeRTOS-Kernel-SMP/portable/xtensa/xtensa_overlay_os_hook.c"
  39. "FreeRTOS-Kernel-SMP/portable/xtensa/xtensa_vector_defaults.S"
  40. "FreeRTOS-Kernel-SMP/portable/xtensa/xtensa_vectors.S")
  41. set(include_dirs
  42. "FreeRTOS-Kernel-SMP/include" # FreeRTOS headers via #include "freertos/xxx.h"
  43. "esp_additions/include/freertos" # For config via #include "FreeRTOSConfig.h"
  44. "FreeRTOS-Kernel-SMP/portable/xtensa/include" # Xtensa/Arch Config headers via #include "freertos/xxx.h"
  45. "esp_additions/include" # For #include "freertos/task_snapshot.h" and #include "freertos/FreeRTOSConfig.h"
  46. "FreeRTOS-Kernel-SMP/portable/xtensa/include/freertos") # Xtensa headers via #include "xxx.h"
  47. set(private_include_dirs
  48. "FreeRTOS-Kernel-SMP/portable/xtensa/include/freertos"
  49. "FreeRTOS-Kernel-SMP/portable/xtensa"
  50. .)
  51. elseif(CONFIG_IDF_TARGET_ARCH_RISCV)
  52. set(srcs
  53. "FreeRTOS-Kernel-SMP/portable/riscv/port.c"
  54. "FreeRTOS-Kernel-SMP/portable/riscv/portasm.S")
  55. set(include_dirs
  56. FreeRTOS-Kernel-SMP/include
  57. esp_additions/include/freertos # For files with #include "FreeRTOSConfig.h"
  58. FreeRTOS-Kernel-SMP/portable/riscv/include
  59. esp_additions/include # For files with #include "freertos/FreeRTOSConfig.h"
  60. FreeRTOS-Kernel-SMP/portable/riscv/include/freertos)
  61. set(private_include_dirs
  62. FreeRTOS-Kernel-SMP/portable/riscv/include/freertos
  63. FreeRTOS-Kernel-SMP/portable/riscv
  64. .)
  65. endif()
  66. list(APPEND srcs
  67. "FreeRTOS-Kernel-SMP/croutine.c"
  68. "FreeRTOS-Kernel-SMP/event_groups.c"
  69. "FreeRTOS-Kernel-SMP/list.c"
  70. "FreeRTOS-Kernel-SMP/queue.c"
  71. "FreeRTOS-Kernel-SMP/tasks.c"
  72. "FreeRTOS-Kernel-SMP/timers.c"
  73. "FreeRTOS-Kernel-SMP/stream_buffer.c"
  74. "FreeRTOS-openocd.c"
  75. )
  76. list(APPEND private_include_dirs
  77. "FreeRTOS-Kernel-SMP/include/freertos" # FreeRTOS headers via #include "xxx.h"
  78. "esp_additions/private_include") # For include "freertos_tasks_c_additions.h"
  79. if(CONFIG_ESP32_IRAM_AS_8BIT_ACCESSIBLE_MEMORY)
  80. list(APPEND srcs "FreeRTOS-Kernel-SMP/portable/xtensa/xtensa_loadstore_handler.S")
  81. endif()
  82. else()
  83. set(ldfragments linker.lf)
  84. if(CONFIG_IDF_TARGET_ARCH_XTENSA)
  85. set(srcs
  86. "FreeRTOS-Kernel/portable/xtensa/port.c"
  87. "FreeRTOS-Kernel/portable/xtensa/portasm.S"
  88. "FreeRTOS-Kernel/portable/xtensa/xtensa_context.S"
  89. "FreeRTOS-Kernel/portable/xtensa/xtensa_init.c"
  90. "FreeRTOS-Kernel/portable/xtensa/xtensa_overlay_os_hook.c"
  91. "FreeRTOS-Kernel/portable/xtensa/xtensa_vector_defaults.S"
  92. "FreeRTOS-Kernel/portable/xtensa/xtensa_vectors.S")
  93. set(include_dirs
  94. FreeRTOS-Kernel/include
  95. esp_additions/include/freertos # For files with #include "FreeRTOSConfig.h"
  96. FreeRTOS-Kernel/portable/xtensa/include # For arch-specific FreeRTOSConfig_arch.h in portable/<arch>/include
  97. esp_additions/include) # For files with #include "freertos/FreeRTOSConfig.h"
  98. set(private_include_dirs
  99. FreeRTOS-Kernel/portable/xtensa/include/freertos
  100. FreeRTOS-Kernel/portable/xtensa
  101. FreeRTOS-Kernel/portable/priv_include
  102. .)
  103. elseif(CONFIG_IDF_TARGET_ARCH_RISCV)
  104. set(srcs
  105. "FreeRTOS-Kernel/portable/riscv/port.c"
  106. "FreeRTOS-Kernel/portable/riscv/portasm.S")
  107. set(include_dirs
  108. FreeRTOS-Kernel/include
  109. esp_additions/include/freertos # For files with #include "FreeRTOSConfig.h"
  110. FreeRTOS-Kernel/portable/riscv/include # For arch-specific FreeRTOSConfig_arch.h in portable/<arch>/include
  111. esp_additions/include) # For files with #include "freertos/FreeRTOSConfig.h"
  112. set(private_include_dirs
  113. FreeRTOS-Kernel/portable/riscv/include/freertos
  114. FreeRTOS-Kernel/portable/riscv
  115. FreeRTOS-Kernel/portable/priv_include
  116. .)
  117. endif()
  118. list(APPEND srcs
  119. "FreeRTOS-Kernel/portable/port_common.c"
  120. "FreeRTOS-Kernel/portable/port_systick.c"
  121. "FreeRTOS-Kernel/croutine.c"
  122. "FreeRTOS-Kernel/event_groups.c"
  123. "FreeRTOS-Kernel/list.c"
  124. "FreeRTOS-Kernel/queue.c"
  125. "FreeRTOS-Kernel/tasks.c"
  126. "FreeRTOS-Kernel/timers.c"
  127. "FreeRTOS-Kernel/stream_buffer.c"
  128. "FreeRTOS-openocd.c"
  129. "esp_additions/freertos_v8_compat.c")
  130. list(APPEND private_include_dirs
  131. "FreeRTOS-Kernel/include/freertos"
  132. "esp_additions/private_include") # For include "freertos_tasks_c_additions.h"
  133. if(CONFIG_ESP32_IRAM_AS_8BIT_ACCESSIBLE_MEMORY)
  134. list(APPEND srcs "FreeRTOS-Kernel/portable/xtensa/xtensa_loadstore_handler.S")
  135. endif()
  136. endif()
  137. if(CONFIG_IDF_RTOS_RTTHREAD)
  138. idf_component_register(SRCS "${srcs}"
  139. INCLUDE_DIRS ${include_dirs}
  140. PRIV_INCLUDE_DIRS ${private_include_dirs}
  141. PRIV_REQUIRES soc esp_pm)
  142. else()
  143. idf_component_register(SRCS "${srcs}"
  144. INCLUDE_DIRS ${include_dirs}
  145. PRIV_INCLUDE_DIRS ${private_include_dirs}
  146. LDFRAGMENTS "${ldfragments}"
  147. REQUIRES main
  148. PRIV_REQUIRES soc esp_pm)
  149. endif()
  150. idf_component_get_property(COMPONENT_DIR freertos COMPONENT_DIR)
  151. if(CONFIG_FREERTOS_SMP)
  152. idf_component_set_property(freertos ORIG_INCLUDE_PATH "${COMPONENT_DIR}/FreeRTOS-Kernel-SMP/include/freertos/")
  153. else()
  154. idf_component_set_property(freertos ORIG_INCLUDE_PATH "${COMPONENT_DIR}/FreeRTOS-Kernel/include/freertos/")
  155. endif()
  156. if(CONFIG_FREERTOS_DEBUG_OCDAWARE)
  157. target_link_libraries(${COMPONENT_LIB} INTERFACE "-Wl,--undefined=uxTopUsedPriority") #will be removed
  158. target_link_libraries(${COMPONENT_LIB} INTERFACE "-Wl,--undefined=FreeRTOS_openocd_params")
  159. idf_build_set_property(COMPILE_OPTIONS "-DconfigENABLE_FREERTOS_DEBUG_OCDAWARE=1" APPEND)
  160. endif()
  161. if(CONFIG_IDF_RTOS_RTTHREAD)
  162. set_source_files_properties(
  163. tasks.c
  164. event_groups.c
  165. timers.c
  166. queue.c
  167. PROPERTIES COMPILE_DEFINITIONS
  168. _ESP_FREERTOS_INTERNAL
  169. )
  170. else()
  171. set_source_files_properties(
  172. tasks.c
  173. event_groups.c
  174. timers.c
  175. queue.c
  176. stream_buffer.c
  177. PROPERTIES COMPILE_DEFINITIONS
  178. _ESP_FREERTOS_INTERNAL
  179. )
  180. endif()
  181. # The freertos component provides the `start_app` and `start_app_other_cores`
  182. # if it is included in the build. It then calls `app_main`
  183. # from the main task created, which must be provided by the user.
  184. # Like for `start_app` and `start_app_other_cores`,
  185. # we can't establish dependency on what we don't yet know, so we force the
  186. # linker to not drop this symbol.
  187. target_link_libraries(${COMPONENT_LIB} INTERFACE "-u app_main")
  188. if(CONFIG_APPTRACE_SV_ENABLE)
  189. # FreeRTOS headers have a dependency on app_trace when SystemView tracing is enabled
  190. idf_component_optional_requires(PUBLIC app_trace)
  191. elseif(CONFIG_APPTRACE_ENABLE)
  192. # [refactor-todo]: port.c has a dependency on esp_apptrace_init, for running it on APP CPU.
  193. # this should be resolved when link-time registration of startup functions is added.
  194. idf_component_optional_requires(PRIVATE app_trace)
  195. endif()
  196. if(CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME)
  197. # [refactor-todo]: port.c esp_startup_start_app_common() calls esp_gdbstub_init()
  198. idf_component_optional_requires(PRIVATE esp_gdbstub)
  199. endif()
  200. if(CONFIG_FREERTOS_RUN_TIME_STATS_USING_ESP_TIMER)
  201. # [refactor-todo]: esp_timer is required by FreeRTOS when we use esp_timer_get_time() to do profiling
  202. # Introduce a port wrapper function to avoid including esp_timer.h into the public header
  203. idf_component_optional_requires(PUBLIC esp_timer)
  204. endif()
  205. if(CONFIG_SPIRAM)
  206. idf_component_optional_requires(PRIVATE esp_psram)
  207. endif()