Merge branch 'fix/provide-picolibc-timespec_get_v6.1' into 'release/v6.1'

fix(esp_libc): Provide timespec_get missing from the picolibc toolchain (v6.1)

See merge request espressif/esp-idf!51285
This commit is contained in:
Jiang Jiang Jian
2026-08-31 11:24:38 +08:00
3 changed files with 29 additions and 0 deletions
+1
View File
@@ -77,6 +77,7 @@ else()
list(APPEND srcs
"src/picolibc/picolibc_init.c"
"src/picolibc/rand.c"
"src/picolibc/timespec_get.c"
"src/picolibc/open_memstream.c"
"src/picolibc/errno.c"
"src/picolibc/bufio_setvbuf.c") # TODO IDF-15494: remove this and the following lines
@@ -0,0 +1,15 @@
/*
* SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <time.h>
int timespec_get(struct timespec *ts, int base)
{
if (base != TIME_UTC || clock_gettime(CLOCK_REALTIME, ts) < 0) {
return 0;
}
return base;
}
@@ -548,6 +548,19 @@ TEST_CASE("test posix_timers clock_... functions", "[newlib]")
test_posix_timers_clock();
}
#if CONFIG_LIBC_PICOLIBC
TEST_CASE("timespec_get returns UTC time", "[picolibc]")
{
struct timespec ts = {0};
TEST_ASSERT_EQUAL_INT(TIME_UTC, timespec_get(&ts, TIME_UTC));
TEST_ASSERT_GREATER_OR_EQUAL_INT64(0, ts.tv_sec);
TEST_ASSERT_GREATER_OR_EQUAL_INT32(0, ts.tv_nsec);
TEST_ASSERT_LESS_THAN_INT32(1000000000L, ts.tv_nsec);
TEST_ASSERT_EQUAL_INT(0, timespec_get(&ts, -1));
}
#endif
#define TEST_USE_CPU_CYCLES 1
#if TEST_USE_CPU_CYCLES && CONFIG_ESP_SYSTEM_SINGLE_CORE_MODE
#include "esp_cpu.h"