FreeRTOS_Kernel_import.cmake 4.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. # This is a copy of <FREERTOS_KERNEL_PATH>/portable/ThirdParty/GCC/RP2040/FREERTOS_KERNEL_import.cmake
  2. # This can be dropped into an external project to help locate the FreeRTOS kernel
  3. # It should be include()ed prior to project(). Alternatively this file may
  4. # or the CMakeLists.txt in this directory may be included or added via add_subdirectory
  5. # respectively.
  6. if (DEFINED ENV{FREERTOS_KERNEL_PATH} AND (NOT FREERTOS_KERNEL_PATH))
  7. set(FREERTOS_KERNEL_PATH $ENV{FREERTOS_KERNEL_PATH})
  8. message("Using FREERTOS_KERNEL_PATH from environment ('${FREERTOS_KERNEL_PATH}')")
  9. endif ()
  10. # first pass we look in old tree; second pass we look in new tree
  11. foreach(SEARCH_PASS RANGE 0 1)
  12. if (SEARCH_PASS)
  13. # ports may be moving to submodule in the future
  14. set(FREERTOS_KERNEL_RP2040_RELATIVE_PATH "portable/ThirdParty/Community-Supported-Ports/GCC")
  15. set(FREERTOS_KERNEL_RP2040_BACK_PATH "../../../../..")
  16. else()
  17. set(FREERTOS_KERNEL_RP2040_RELATIVE_PATH "portable/ThirdParty/GCC")
  18. set(FREERTOS_KERNEL_RP2040_BACK_PATH "../../../..")
  19. endif()
  20. if(PICO_PLATFORM STREQUAL "rp2040")
  21. set(FREERTOS_KERNEL_RP2040_RELATIVE_PATH "${FREERTOS_KERNEL_RP2040_RELATIVE_PATH}/RP2040")
  22. else()
  23. if (PICO_PLATFORM STREQUAL "rp2350-riscv")
  24. set(FREERTOS_KERNEL_RP2040_RELATIVE_PATH "${FREERTOS_KERNEL_RP2040_RELATIVE_PATH}/RP2350_RISC-V")
  25. else()
  26. set(FREERTOS_KERNEL_RP2040_RELATIVE_PATH "${FREERTOS_KERNEL_RP2040_RELATIVE_PATH}/RP2350_ARM_NTZ")
  27. endif()
  28. endif()
  29. if (NOT FREERTOS_KERNEL_PATH)
  30. # check if we are inside the FreeRTOS kernel tree (i.e. this file has been included directly)
  31. get_filename_component(_ACTUAL_PATH ${CMAKE_CURRENT_LIST_DIR} REALPATH)
  32. get_filename_component(_POSSIBLE_PATH ${CMAKE_CURRENT_LIST_DIR}/${FREERTOS_KERNEL_RP2040_BACK_PATH}/${FREERTOS_KERNEL_RP2040_RELATIVE_PATH} REALPATH)
  33. if (_ACTUAL_PATH STREQUAL _POSSIBLE_PATH)
  34. get_filename_component(FREERTOS_KERNEL_PATH ${CMAKE_CURRENT_LIST_DIR}/${FREERTOS_KERNEL_RP2040_BACK_PATH} REALPATH)
  35. endif()
  36. if (_ACTUAL_PATH STREQUAL _POSSIBLE_PATH)
  37. get_filename_component(FREERTOS_KERNEL_PATH ${CMAKE_CURRENT_LIST_DIR}/${FREERTOS_KERNEL_RP2040_BACK_PATH} REALPATH)
  38. message("Setting FREERTOS_KERNEL_PATH to ${FREERTOS_KERNEL_PATH} based on location of FreeRTOS-Kernel-import.cmake")
  39. break()
  40. elseif (PICO_SDK_PATH AND EXISTS "${PICO_SDK_PATH}/../FreeRTOS-Kernel")
  41. set(FREERTOS_KERNEL_PATH ${PICO_SDK_PATH}/../FreeRTOS-Kernel)
  42. message("Defaulting FREERTOS_KERNEL_PATH as sibling of PICO_SDK_PATH: ${FREERTOS_KERNEL_PATH}")
  43. break()
  44. endif()
  45. endif ()
  46. if (NOT FREERTOS_KERNEL_PATH)
  47. foreach(POSSIBLE_SUFFIX Source FreeRTOS-Kernel FreeRTOS/Source)
  48. # check if FreeRTOS-Kernel exists under directory that included us
  49. set(SEARCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR})
  50. get_filename_component(_POSSIBLE_PATH ${SEARCH_ROOT}/${POSSIBLE_SUFFIX} REALPATH)
  51. if (EXISTS ${_POSSIBLE_PATH}/${FREERTOS_KERNEL_RP2040_RELATIVE_PATH}/CMakeLists.txt)
  52. get_filename_component(FREERTOS_KERNEL_PATH ${_POSSIBLE_PATH} REALPATH)
  53. message("Setting FREERTOS_KERNEL_PATH to '${FREERTOS_KERNEL_PATH}' found relative to enclosing project")
  54. break()
  55. endif()
  56. endforeach()
  57. if (FREERTOS_KERNEL_PATH)
  58. break()
  59. endif()
  60. endif()
  61. # user must have specified
  62. if (FREERTOS_KERNEL_PATH)
  63. if (EXISTS "${FREERTOS_KERNEL_PATH}/${FREERTOS_KERNEL_RP2040_RELATIVE_PATH}")
  64. break()
  65. endif()
  66. endif()
  67. endforeach ()
  68. if (NOT FREERTOS_KERNEL_PATH)
  69. message(FATAL_ERROR "FreeRTOS location was not specified. Please set FREERTOS_KERNEL_PATH.")
  70. endif()
  71. set(FREERTOS_KERNEL_PATH "${FREERTOS_KERNEL_PATH}" CACHE PATH "Path to the FreeRTOS Kernel")
  72. get_filename_component(FREERTOS_KERNEL_PATH "${FREERTOS_KERNEL_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
  73. if (NOT EXISTS ${FREERTOS_KERNEL_PATH})
  74. message(FATAL_ERROR "Directory '${FREERTOS_KERNEL_PATH}' not found")
  75. endif()
  76. if (NOT EXISTS ${FREERTOS_KERNEL_PATH}/${FREERTOS_KERNEL_RP2040_RELATIVE_PATH}/CMakeLists.txt)
  77. message(FATAL_ERROR "Directory '${FREERTOS_KERNEL_PATH}' does not contain a '${PICO_PLATFORM}' port here: ${FREERTOS_KERNEL_RP2040_RELATIVE_PATH}")
  78. endif()
  79. set(FREERTOS_KERNEL_PATH ${FREERTOS_KERNEL_PATH} CACHE PATH "Path to the FreeRTOS_KERNEL" FORCE)
  80. add_subdirectory(${FREERTOS_KERNEL_PATH}/${FREERTOS_KERNEL_RP2040_RELATIVE_PATH} FREERTOS_KERNEL)