diff --git a/CMakeLists.txt b/CMakeLists.txt index da67e37fc..b65d8bf31 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,10 @@ cmake_minimum_required(VERSION 3.13) + +# Note: this CMakeLists.txt can be used as a top-level CMakeLists.txt for the SDK itself. For all other uses +# it is included as a subdirectory via the pico_sdk_init() method provided by pico_sdk_init.cmake if (NOT TARGET _pico_sdk_inclusion_marker) add_library(_pico_sdk_inclusion_marker INTERFACE) + # This is a no-op unless we are the top-level CMakeLists.txt include(pico_sdk_init.cmake) project(pico_sdk C CXX ASM) @@ -24,6 +28,7 @@ if (NOT TARGET _pico_sdk_inclusion_marker) # allow customization add_sub_list_dirs(PICO_SDK_PRE_LIST_DIRS) + add_sub_list_files(PICO_SDK_PRE_LIST_FILES) add_subdirectory(tools) add_subdirectory(src) @@ -32,6 +37,7 @@ if (NOT TARGET _pico_sdk_inclusion_marker) # allow customization add_sub_list_dirs(PICO_SDK_POST_LIST_DIRS) + add_sub_list_files(PICO_SDK_POST_LIST_FILES) if (PICO_SDK_TOP_LEVEL_PROJECT AND NOT DEFINED PICO_SDK_TESTS_ENABLED) set(PICO_SDK_TESTS_ENABLED 1) diff --git a/cmake/preload/toolchains/pico_arm_gcc.cmake b/cmake/preload/toolchains/pico_arm_gcc.cmake index b0c26488e..533c2a9f6 100644 --- a/cmake/preload/toolchains/pico_arm_gcc.cmake +++ b/cmake/preload/toolchains/pico_arm_gcc.cmake @@ -12,7 +12,7 @@ if (NOT PICO_GCC_TRIPLE) message("PICO_GCC_TRIPLE set from environment: $ENV{PICO_GCC_TRIPLE}") else() set(PICO_GCC_TRIPLE arm-none-eabi) - message("PICO_GCC_TRIPLE defaulted to arm-none-eabi") + message(DEBUG "PICO_GCC_TRIPLE defaulted to arm-none-eabi") endif() endif() diff --git a/pico_sdk_init.cmake b/pico_sdk_init.cmake index 2c501e4f4..879842c34 100644 --- a/pico_sdk_init.cmake +++ b/pico_sdk_init.cmake @@ -1,54 +1,63 @@ -# Initialize the Raspberry Pi Pico SDK +# Pre-initialize the Raspberry Pi Pico SDK, setting up the platform and toolchain and some CMake utility functions # This file must be included prior to the project() call -if (_PICO_SDK_INIT) - return() -endif () -set(_PICO_SDK_INIT 1) - -function(pico_is_top_level_project VAR) - string(TOLOWER ${CMAKE_CURRENT_LIST_DIR} __list_dir) - string(TOLOWER ${CMAKE_SOURCE_DIR} __source_dir) - if (__source_dir STREQUAL __list_dir) - set(${VAR} 1 PARENT_SCOPE) - else() - set(${VAR} 0 PARENT_SCOPE) - endif() -endfunction() - -if (NOT PICO_SDK_PATH) - set(PICO_SDK_PATH ${CMAKE_CURRENT_LIST_DIR}) -endif () - -get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}") - -set(PICO_SDK_PATH ${CMAKE_CURRENT_LIST_DIR} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE) - -list(APPEND CMAKE_MODULE_PATH ${PICO_SDK_PATH}/cmake) - -include(${CMAKE_CURRENT_LIST_DIR}/pico_sdk_version.cmake) -include(pico_utils) - -message("PICO_SDK_PATH is ${CMAKE_CURRENT_LIST_DIR}") - -include(pico_pre_load_platform) - -# todo perhaps this should be included by the platform instead? -# We want to configure correct toolchain prior to project load -include(pico_pre_load_toolchain) - -macro(pico_sdk_init) - if (NOT CMAKE_PROJECT_NAME) - message(WARNING "pico_sdk_init() should be called after the project is created (and languages added)") - endif() - add_subdirectory(${PICO_SDK_PATH} pico-sdk) -endmacro() - -macro(add_sub_list_dirs var) - foreach(LIST_DIR IN LISTS ${var}) - get_filename_component(SHORT_NAME "${LIST_DIR}" NAME) - message("Including custom CMakeLists.txt ${SHORT_NAME}") - add_subdirectory(${LIST_DIR} ${SHORT_NAME}) - endforeach() -endmacro() - +# Note: this file is perhaps named badly, as it provides a method pico_sdk_init which +# the enclosing project calls LATER to actually "initialize" the SDK (by including the CMakeLists.txt from this +# same directory) + +if (NOT TARGET _pico_sdk_pre_init_marker) + add_library(_pico_sdk_pre_init_marker INTERFACE) + + function(pico_is_top_level_project VAR) + string(TOLOWER ${CMAKE_CURRENT_LIST_DIR} __list_dir) + string(TOLOWER ${CMAKE_SOURCE_DIR} __source_dir) + if (__source_dir STREQUAL __list_dir) + set(${VAR} 1 PARENT_SCOPE) + else() + set(${VAR} 0 PARENT_SCOPE) + endif() + endfunction() + + if (NOT PICO_SDK_PATH) + set(PICO_SDK_PATH ${CMAKE_CURRENT_LIST_DIR}) + endif () + + get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}") + + set(PICO_SDK_PATH ${CMAKE_CURRENT_LIST_DIR} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE) + + list(APPEND CMAKE_MODULE_PATH ${PICO_SDK_PATH}/cmake) + + include(${CMAKE_CURRENT_LIST_DIR}/pico_sdk_version.cmake) + include(pico_utils) + + message("PICO_SDK_PATH is ${CMAKE_CURRENT_LIST_DIR}") + + include(pico_pre_load_platform) + + # todo perhaps this should be included by the platform instead? + # We want to configure correct toolchain prior to project load + include(pico_pre_load_toolchain) + + macro(pico_sdk_init) + if (NOT CMAKE_PROJECT_NAME) + message(WARNING "pico_sdk_init() should be called after the project is created (and languages added)") + endif() + add_subdirectory(${PICO_SDK_PATH} pico-sdk) + endmacro() + + macro(add_sub_list_dirs var) + foreach(LIST_DIR IN LISTS ${var}) + get_filename_component(SHORT_NAME "${LIST_DIR}" NAME) + message(DEBUG "Including custom CMakeLists.txt ${SHORT_NAME}") + add_subdirectory(${LIST_DIR} ${SHORT_NAME}) + endforeach() + endmacro() + + macro(add_sub_list_files var) + foreach(LIST_FILE IN LISTS ${var}) + message(DEBUG "Including custom CMake file ${LIST_FILE}") + include(${LIST_FILE}) + endforeach() + endmacro() +endif() diff --git a/src/common/pico_sync/sem.c b/src/common/pico_sync/sem.c index 195cd9ad9..3ad981634 100644 --- a/src/common/pico_sync/sem.c +++ b/src/common/pico_sync/sem.c @@ -6,6 +6,7 @@ #include "pico/sem.h" #include "pico/time.h" +#include "sys/select.h" void sem_init(semaphore_t *sem, int16_t initial_permits, int16_t max_permits) { lock_init(&sem->core, next_striped_spin_lock_num());