mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-09-01 11:53:53 -04:00
* RP2040: malloc needs to be thread safe for FreeRTOS whether both cores are used or not * RP2040: CMake file had broken left over test code * RP2040: portIS_FREE_RTOS_CORE() returned an incorrect value prior to scheduler init when the application was compiled without multicore support * RP2040: Bad initialization code was causing IRQs to get disabled before main() was called when using non static allocation
61 lines
No EOL
3.3 KiB
CMake
61 lines
No EOL
3.3 KiB
CMake
# This is a copy of <FREERTOS_KERNEL_PATH>/portable/ThirdParty/GCC/RP2040/FREERTOS_KERNEL_import.cmake
|
|
|
|
# This can be dropped into an external project to help locate the FreeRTOS kernel
|
|
# It should be include()ed prior to project(). Alternatively this file may
|
|
# or the CMakeLists.txt in this directory may be included or added via add_subdirectory
|
|
# respectively.
|
|
|
|
if (DEFINED ENV{FREERTOS_KERNEL_PATH} AND (NOT FREERTOS_KERNEL_PATH))
|
|
set(FREERTOS_KERNEL_PATH $ENV{FREERTOS_KERNEL_PATH})
|
|
message("Using FREERTOS_KERNEL_PATH from environment ('${FREERTOS_KERNEL_PATH}')")
|
|
endif ()
|
|
|
|
set(FREERTOS_KERNEL_RP2040_RELATIVE_PATH "portable/ThirdParty/GCC/RP2040")
|
|
# undo the above
|
|
set(FREERTOS_KERNEL_RP2040_BACK_PATH "../../../..")
|
|
|
|
if (NOT FREERTOS_KERNEL_PATH)
|
|
# check if we are inside the FreeRTOS kernel tree (i.e. this file has been included directly)
|
|
get_filename_component(_ACTUAL_PATH ${CMAKE_CURRENT_LIST_DIR} REALPATH)
|
|
get_filename_component(_POSSIBLE_PATH ${CMAKE_CURRENT_LIST_DIR}/${FREERTOS_KERNEL_RP2040_BACK_PATH}/${FREERTOS_KERNEL_RP2040_RELATIVE_PATH} REALPATH)
|
|
if (_ACTUAL_PATH STREQUAL _POSSIBLE_PATH)
|
|
get_filename_component(FREERTOS_KERNEL_PATH ${CMAKE_CURRENT_LIST_DIR}/${FREERTOS_KERNEL_RP2040_BACK_PATH} REALPATH)
|
|
endif()
|
|
if (_ACTUAL_PATH STREQUAL _POSSIBLE_PATH)
|
|
get_filename_component(FREERTOS_KERNEL_PATH ${CMAKE_CURRENT_LIST_DIR}/${FREERTOS_KERNEL_RP2040_BACK_PATH} REALPATH)
|
|
message("Setting FREERTOS_KERNEL_PATH to ${FREERTOS_KERNEL_PATH} based on location of FreeRTOS-Kernel-import.cmake")
|
|
elseif (PICO_SDK_PATH AND EXISTS "${PICO_SDK_PATH}/../FreeRTOS-Kernel")
|
|
set(FREERTOS_KERNEL_PATH ${PICO_SDK_PATH}/../FreeRTOS-Kernel)
|
|
message("Defaulting FREERTOS_KERNEL_PATH as sibling of PICO_SDK_PATH: ${FREERTOS_KERNEL_PATH}")
|
|
endif()
|
|
endif ()
|
|
|
|
if (NOT FREERTOS_KERNEL_PATH)
|
|
foreach(POSSIBLE_SUFFIX Source FreeRTOS-Kernel FreeRTOS/Source)
|
|
# check if FreeRTOS-Kernel exists under directory that included us
|
|
set(SEARCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR})
|
|
get_filename_component(_POSSIBLE_PATH ${SEARCH_ROOT}/${POSSIBLE_SUFFIX} REALPATH)
|
|
if (EXISTS ${_POSSIBLE_PATH}/${FREERTOS_KERNEL_RP2040_RELATIVE_PATH}/CMakeLists.txt)
|
|
get_filename_component(FREERTOS_KERNEL_PATH ${_POSSIBLE_PATH} REALPATH)
|
|
message("Setting FREERTOS_KERNEL_PATH to '${FREERTOS_KERNEL_PATH}' found relative to enclosing project")
|
|
break()
|
|
endif()
|
|
endforeach()
|
|
endif()
|
|
|
|
if (NOT FREERTOS_KERNEL_PATH)
|
|
message(FATAL_ERROR "FreeRTOS location was not specified. Please set FREERTOS_KERNEL_PATH.")
|
|
endif()
|
|
|
|
set(FREERTOS_KERNEL_PATH "${FREERTOS_KERNEL_PATH}" CACHE PATH "Path to the FreeRTOS Kernel")
|
|
|
|
get_filename_component(FREERTOS_KERNEL_PATH "${FREERTOS_KERNEL_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
|
|
if (NOT EXISTS ${FREERTOS_KERNEL_PATH})
|
|
message(FATAL_ERROR "Directory '${FREERTOS_KERNEL_PATH}' not found")
|
|
endif()
|
|
if (NOT EXISTS ${FREERTOS_KERNEL_PATH}/${FREERTOS_KERNEL_RP2040_RELATIVE_PATH}/CMakeLists.txt)
|
|
message(FATAL_ERROR "Directory '${FREERTOS_KERNEL_PATH}' does not contain an RP2040 port here: ${FREERTOS_KERNEL_RP2040_RELATIVE_PATH}")
|
|
endif()
|
|
set(FREERTOS_KERNEL_PATH ${FREERTOS_KERNEL_PATH} CACHE PATH "Path to the FreeRTOS_KERNEL" FORCE)
|
|
|
|
add_subdirectory(${FREERTOS_KERNEL_PATH}/${FREERTOS_KERNEL_RP2040_RELATIVE_PATH} FREERTOS_KERNEL) |