From 5a6fcf6da1db847074d51b3500ccc476f36eaf0a Mon Sep 17 00:00:00 2001 From: graham sanderson Date: Thu, 14 May 2026 14:05:11 -0500 Subject: [PATCH 1/2] Add detection of newlib vs picolibc if not specified --- .../pico_clib_interface/CMakeLists.txt | 39 ++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/src/rp2_common/pico_clib_interface/CMakeLists.txt b/src/rp2_common/pico_clib_interface/CMakeLists.txt index 84d3faf62..3c04fecde 100644 --- a/src/rp2_common/pico_clib_interface/CMakeLists.txt +++ b/src/rp2_common/pico_clib_interface/CMakeLists.txt @@ -36,8 +36,43 @@ if (NOT TARGET pico_clib_interface) if (NOT PICO_CLIB) # PICO_CMAKE_CONFIG: PICO_CLIB, The C library to use e.g. newlib/picolibc/llvm_libc, type=string, default=based on PICO_COMPILER, group=build, docref=cmake-toolchain-config - set(PICO_CLIB newlib) - endif() + set(CLIB_DETECT_CODE " + #include + #ifdef __PICOLIBC__ + #define USING_PICOLIBC 1 + #elif defined(__NEWLIB__) + #define USING_NEWLIB 1 + #endif + + #if (picolibc && !USING_PICOLIBC) || (newlib && !USING_NEWLIB) + #error not using wanted c library + #endif + ") + + # Create a temporary file for the source + set(CLIB_DETECT_SOURCE "${CMAKE_CURRENT_BINARY_DIR}/clib_check.c") + file(WRITE "${CLIB_DETECT_SOURCE}" "${CLIB_DETECT_CODE}") + set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + foreach(CLIB picolibc newlib) + # Attempt to compile the source file + try_compile(CLIB_MATCHED + "${CMAKE_CURRENT_BINARY_DIR}" # Directory for temporary build files + "${CLIB_DETECT_SOURCE}" # Source file to compile + COMPILE_DEFINITIONS "-D${CLIB}=1" + ) + if (CLIB_MATCHED) + set(PICO_CLIB ${CLIB}) + break() + endif() + endforeach () + if (NOT PICO_CLIB) + message("C library not detected; defaulting to newlib") + set(PICO_CLIB newlib) + endif() + file(REMOVE "${CLIB_DETECT_SOURCE}") + set(PICO_CLIB "${PICO_CLIB}" CACHE INTERNAL "") + endif() + message("C library type is ${PICO_CLIB}") target_link_libraries(pico_clib_interface INTERFACE pico_${PICO_CLIB}_interface) endif() From 1d3d6fcc6c7f971f8cb4d1563b2cf0358f626120 Mon Sep 17 00:00:00 2001 From: Graham Sanderson Date: Tue, 19 May 2026 11:36:15 -0500 Subject: [PATCH 2/2] fix search order to be newlib then picolibc for autodetect --- src/rp2_common/pico_clib_interface/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rp2_common/pico_clib_interface/CMakeLists.txt b/src/rp2_common/pico_clib_interface/CMakeLists.txt index 3c04fecde..5fae421e7 100644 --- a/src/rp2_common/pico_clib_interface/CMakeLists.txt +++ b/src/rp2_common/pico_clib_interface/CMakeLists.txt @@ -54,7 +54,7 @@ if (NOT TARGET pico_clib_interface) file(WRITE "${CLIB_DETECT_SOURCE}" "${CLIB_DETECT_CODE}") set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) - foreach(CLIB picolibc newlib) + foreach(CLIB newlib picolibc) # Attempt to compile the source file try_compile(CLIB_MATCHED "${CMAKE_CURRENT_BINARY_DIR}" # Directory for temporary build files