FindFreeRTOS.cmake 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. # For information about why and how of this file: https://cmake.org/cmake/help/latest/command/find_package.html
  2. if(NOT FreeRTOS_FIND_COMPONENTS)
  3. set(FreeRTOS_FIND_COMPONENTS
  4. ARM_CM0 ARM_CM3 ARM_CM4F ARM_CM7
  5. )
  6. endif()
  7. list(REMOVE_DUPLICATES FreeRTOS_FIND_COMPONENTS)
  8. set(FreeRTOS_HEAPS 1 2 3 4 5)
  9. if(NOT FREERTOS_PATH)
  10. set(FREERTOS_PATH $ENV{FREERTOS_PATH} CACHE PATH "Path to FreeRTOS")
  11. endif()
  12. if(NOT FREERTOS_PATH)
  13. set(FREERTOS_PATH /opt/FreeRTOS CACHE PATH "Path to FreeRTOS")
  14. message(STATUS "No FREERTOS_PATH specified using default: ${FREERTOS_PATH}")
  15. endif()
  16. find_path(FreeRTOS_COMMON_INCLUDE
  17. NAMES FreeRTOS.h
  18. PATHS "${FREERTOS_PATH}" "${FREERTOS_PATH}/FreeRTOS"
  19. PATH_SUFFIXES "Source/include" "include"
  20. NO_DEFAULT_PATH
  21. )
  22. if(NOT FreeRTOS_COMMON_INCLUDE)
  23. message(WARNING "FreeRTOS common include path not found, build might fail")
  24. endif()
  25. list(APPEND FreeRTOS_INCLUDE_DIRS "${FreeRTOS_COMMON_INCLUDE}")
  26. find_path(FreeRTOS_SOURCE_DIR
  27. NAMES tasks.c
  28. PATHS "${FREERTOS_PATH}" "${FREERTOS_PATH}/FreeRTOS"
  29. PATH_SUFFIXES "Source"
  30. NO_DEFAULT_PATH
  31. )
  32. if(NOT (TARGET FreeRTOS))
  33. add_library(FreeRTOS INTERFACE IMPORTED)
  34. target_sources(FreeRTOS INTERFACE
  35. "${FreeRTOS_SOURCE_DIR}/tasks.c"
  36. "${FreeRTOS_SOURCE_DIR}/list.c"
  37. "${FreeRTOS_SOURCE_DIR}/queue.c"
  38. )
  39. target_include_directories(FreeRTOS INTERFACE "${FreeRTOS_COMMON_INCLUDE}")
  40. endif()
  41. if(NOT (TARGET FreeRTOS::Coroutine))
  42. add_library(FreeRTOS::Coroutine INTERFACE IMPORTED)
  43. target_sources(FreeRTOS::Coroutine INTERFACE "${FreeRTOS_SOURCE_DIR}/croutine.c")
  44. target_link_libraries(FreeRTOS::Coroutine INTERFACE FreeRTOS)
  45. endif()
  46. if(NOT (TARGET FreeRTOS::EventGroups))
  47. add_library(FreeRTOS::EventGroups INTERFACE IMPORTED)
  48. target_sources(FreeRTOS::EventGroups INTERFACE "${FreeRTOS_SOURCE_DIR}/event_groups.c")
  49. target_link_libraries(FreeRTOS::EventGroups INTERFACE FreeRTOS)
  50. endif()
  51. if(NOT (TARGET FreeRTOS::StreamBuffer))
  52. add_library(FreeRTOS::StreamBuffer INTERFACE IMPORTED)
  53. target_sources(FreeRTOS::StreamBuffer INTERFACE "${FreeRTOS_SOURCE_DIR}/stream_buffer.c")
  54. target_link_libraries(FreeRTOS::StreamBuffer INTERFACE FreeRTOS)
  55. endif()
  56. if(NOT (TARGET FreeRTOS::Timers))
  57. add_library(FreeRTOS::Timers INTERFACE IMPORTED)
  58. target_sources(FreeRTOS::Timers INTERFACE "${FreeRTOS_SOURCE_DIR}/timers.c")
  59. target_link_libraries(FreeRTOS::Timers INTERFACE FreeRTOS)
  60. endif()
  61. foreach(HEAP ${FreeRTOS_HEAPS})
  62. if(NOT (TARGET FreeRTOS::Heap::${HEAP}))
  63. add_library(FreeRTOS::Heap::${HEAP} INTERFACE IMPORTED)
  64. target_sources(FreeRTOS::Heap::${HEAP} INTERFACE "${FreeRTOS_SOURCE_DIR}/portable/MemMang/heap_${HEAP}.c")
  65. target_link_libraries(FreeRTOS::Heap::${HEAP} INTERFACE FreeRTOS)
  66. endif()
  67. endforeach()
  68. foreach(PORT ${FreeRTOS_FIND_COMPONENTS})
  69. find_path(FreeRTOS_${PORT}_PATH
  70. NAMES portmacro.h
  71. PATHS "${FREERTOS_PATH}" "${FREERTOS_PATH}/FreeRTOS"
  72. PATH_SUFFIXES
  73. "portable/GCC/${PORT}/r0p1"
  74. "portable/GCC/${PORT}"
  75. "Source/portable/GCC/${PORT}"
  76. "Source/portable/GCC/${PORT}/r0p1"
  77. NO_DEFAULT_PATH
  78. )
  79. if(NOT FreeRTOS_${PORT}_PATH)
  80. message(WARNING "FreeRTOS port path not found, build might fail")
  81. endif()
  82. list(APPEND FreeRTOS_INCLUDE_DIRS "${FreeRTOS_${PORT}_PATH}")
  83. find_file(FreeRTOS_${PORT}_SOURCE
  84. NAMES port.c
  85. PATHS "${FreeRTOS_${PORT}_PATH}"
  86. NO_DEFAULT_PATH
  87. )
  88. if(NOT (TARGET FreeRTOS::${PORT}))
  89. add_library(FreeRTOS::${PORT} INTERFACE IMPORTED)
  90. target_link_libraries(FreeRTOS::${PORT} INTERFACE FreeRTOS)
  91. target_sources(FreeRTOS::${PORT} INTERFACE "${FreeRTOS_${PORT}_SOURCE}")
  92. target_include_directories(FreeRTOS::${PORT} INTERFACE "${FreeRTOS_${PORT}_PATH}")
  93. endif()
  94. if(FreeRTOS_${PORT}_PATH AND
  95. FreeRTOS_${PORT}_SOURCE AND
  96. FreeRTOS_COMMON_INCLUDE AND
  97. FreeRTOS_SOURCE_DIR)
  98. set(FreeRTOS_${PORT}_FOUND TRUE)
  99. else()
  100. set(FreeRTOS_${PORT}_FOUND FALSE)
  101. endif()
  102. endforeach()
  103. include(FindPackageHandleStandardArgs)
  104. find_package_handle_standard_args(FreeRTOS
  105. REQUIRED_VARS FreeRTOS_INCLUDE_DIRS
  106. FOUND_VAR FreeRTOS_FOUND
  107. HANDLE_COMPONENTS
  108. )