mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
picolibc: Use most NEWLIB code with picolibc
In most places, picolibc and newlib are the same, so use the existing newlib code when compiling with picolibc. Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
c5079270c9
commit
e215261ced
@ -127,7 +127,7 @@ void bootloader(void)
|
||||
/* cpu specific setup of clocks, peripherals */
|
||||
cpu_init();
|
||||
|
||||
#ifdef MODULE_NEWLIB
|
||||
#if defined(MODULE_NEWLIB) || defined(MODULE_PICOLIBC)
|
||||
extern void __libc_init_array(void);
|
||||
__libc_init_array();
|
||||
#endif
|
||||
|
@ -174,7 +174,7 @@ void reset_handler_default(void)
|
||||
/* initialize the board (which also initiates CPU initialization) */
|
||||
board_init();
|
||||
|
||||
#if MODULE_NEWLIB
|
||||
#if MODULE_NEWLIB || MODULE_PICOLIBC
|
||||
/* initialize std-c library (this must be done after board_init) */
|
||||
extern void __libc_init_array(void);
|
||||
__libc_init_array();
|
||||
|
@ -240,9 +240,9 @@ static int _cat(int argc, char **argv)
|
||||
printf("Usage: %s <file>\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
/* With newlib, low-level syscalls are plugged to RIOT vfs
|
||||
/* With newlib or picolibc, low-level syscalls are plugged to RIOT vfs
|
||||
* on native, open/read/write/close/... are plugged to RIOT vfs */
|
||||
#ifdef MODULE_NEWLIB
|
||||
#if defined(MODULE_NEWLIB) || defined(MODULE_PICOLIBC)
|
||||
FILE *f = fopen(argv[1], "r");
|
||||
if (f == NULL) {
|
||||
printf("file %s does not exist\n", argv[1]);
|
||||
@ -276,7 +276,7 @@ static int _tee(int argc, char **argv)
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifdef MODULE_NEWLIB
|
||||
#if defined(MODULE_NEWLIB) || defined(MODULE_PICOLIBC)
|
||||
FILE *f = fopen(argv[1], "w+");
|
||||
if (f == NULL) {
|
||||
printf("error while trying to create %s\n", argv[1]);
|
||||
|
@ -110,7 +110,7 @@ static inline void log_write(unsigned level, const char *format, ...)
|
||||
va_end(args);
|
||||
printf(LOG_RESET_ANSI_COLOR_CODE);
|
||||
|
||||
#ifdef MODULE_NEWLIB
|
||||
#if defined(MODULE_NEWLIB) || defined(MODULE_PICOLIBC)
|
||||
/* no fflush on msp430 */
|
||||
fflush(stdout);
|
||||
#endif
|
||||
|
@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
#ifndef DOXYGEN
|
||||
#if defined(CPU_NATIVE) || MODULE_NEWLIB
|
||||
#if defined(CPU_NATIVE) || MODULE_NEWLIB || MODULE_PICOLIBC
|
||||
/* If building on native or newlib we need to use the system header instead */
|
||||
#pragma GCC system_header
|
||||
/* without the GCC pragma above #include_next will trigger a pedantic error */
|
||||
|
@ -72,7 +72,7 @@ void progress_bar_print(char *prefix, char *suffix, uint8_t value)
|
||||
/* show cursor */
|
||||
printf("\033[?25h");
|
||||
|
||||
#ifdef MODULE_NEWLIB
|
||||
#if defined(MODULE_NEWLIB) || defined(MODULE_PICOLIBC)
|
||||
fflush(stdout);
|
||||
#endif
|
||||
}
|
||||
|
@ -82,7 +82,7 @@ int _ntpdate(int argc, char **argv)
|
||||
puts("Error in synchronization");
|
||||
return 1;
|
||||
}
|
||||
#ifdef MODULE_NEWLIB
|
||||
#if defined(MODULE_NEWLIB) || defined(MODULE_PICOLIBC)
|
||||
struct tm *tm;
|
||||
time_t time = (time_t)(sntp_get_unix_usec() / US_PER_SEC);
|
||||
|
||||
|
@ -42,11 +42,11 @@
|
||||
#define BS '\x08' /** ASCII "Backspace" */
|
||||
#define DEL '\x7f' /** ASCII "Delete" */
|
||||
|
||||
#ifdef MODULE_NEWLIB
|
||||
#if defined(MODULE_NEWLIB) || defined(MODULE_PICOLIBC)
|
||||
#define flush_if_needed() fflush(stdout)
|
||||
#else
|
||||
#define flush_if_needed()
|
||||
#endif /* MODULE_NEWLIB */
|
||||
#endif /* MODULE_NEWLIB || MODULE_PICOLIBC */
|
||||
|
||||
#ifndef SHELL_NO_ECHO
|
||||
#define ECHO_ON 1
|
||||
|
@ -110,7 +110,7 @@ int main(void)
|
||||
double false_positive_rate = (double) in / (double) lenA;
|
||||
/* Use 'fmt/print_float' to work on all platforms (atmega)
|
||||
* Stdout should be flushed before to prevent garbled output. */
|
||||
#ifdef MODULE_NEWLIB
|
||||
#if defined(MODULE_NEWLIB) || defined(MODULE_PICOLIBC)
|
||||
fflush(stdout);
|
||||
#endif
|
||||
print_float(false_positive_rate, 6);
|
||||
|
@ -325,16 +325,16 @@ static void test_fstat(void)
|
||||
print_test_result("test_stat__umount", vfs_umount(&_test_vfs_mount) == 0);
|
||||
}
|
||||
|
||||
#ifdef MODULE_NEWLIB
|
||||
static void test_newlib(void)
|
||||
#if defined(MODULE_NEWLIB) || defined(MODULE_PICOLIBC)
|
||||
static void test_libc(void)
|
||||
{
|
||||
FILE* fl;
|
||||
char buf[sizeof(test_txt) + sizeof(test_txt2)];
|
||||
print_test_result("test_newlib__mount", vfs_mount(&_test_vfs_mount) == 0);
|
||||
print_test_result("test_libc__mount", vfs_mount(&_test_vfs_mount) == 0);
|
||||
|
||||
/* try to open file that doesn't exist */
|
||||
fl = fopen(FULL_FNAME_NXIST, "r");
|
||||
print_test_result("test_newlib__fopen", fl == NULL);
|
||||
print_test_result("test_libc__fopen", fl == NULL);
|
||||
if (fl) {
|
||||
fclose(fl);
|
||||
}
|
||||
@ -342,52 +342,52 @@ static void test_newlib(void)
|
||||
/* create new file write and check content */
|
||||
remove(FULL_FNAME2);
|
||||
fl = fopen(FULL_FNAME2, "w+");
|
||||
print_test_result("test_newlib__fopen_w", fl != NULL);
|
||||
print_test_result("test_libc__fopen_w", fl != NULL);
|
||||
if (fl) {
|
||||
print_test_result("test_newlib__fputs_w", fputs(test_txt, fl) >= 0);
|
||||
print_test_result("test_libc__fputs_w", fputs(test_txt, fl) >= 0);
|
||||
rewind(fl);
|
||||
print_test_result("test_newlib__fread_w",
|
||||
print_test_result("test_libc__fread_w",
|
||||
fread(buf, sizeof(*buf), sizeof(buf), fl) > 0);
|
||||
print_test_result("test_newlib__strcmp_w", strcmp(test_txt, buf) == 0);
|
||||
print_test_result("test_newlib__fclose_w", fclose(fl) == 0);
|
||||
print_test_result("test_libc__strcmp_w", strcmp(test_txt, buf) == 0);
|
||||
print_test_result("test_libc__fclose_w", fclose(fl) == 0);
|
||||
}
|
||||
|
||||
/* cppcheck-suppress resourceLeak
|
||||
* (reason: cppcheck <2.0 reports a false positive here) */
|
||||
fl = fopen(FULL_FNAME2, "r"); /* open file RO */
|
||||
print_test_result("test_newlib__fopen_r", fl != NULL);
|
||||
print_test_result("test_libc__fopen_r", fl != NULL);
|
||||
if (fl) {
|
||||
print_test_result("test_newlib__fclose_r", fclose(fl) == 0);
|
||||
print_test_result("test_libc__fclose_r", fclose(fl) == 0);
|
||||
}
|
||||
|
||||
/* remove file */
|
||||
print_test_result("test_newlib__remove", remove(FULL_FNAME2) == 0);
|
||||
print_test_result("test_libc__remove", remove(FULL_FNAME2) == 0);
|
||||
|
||||
/* append to non existing file */
|
||||
fl = fopen(FULL_FNAME2, "a");
|
||||
print_test_result("test_newlib__fopen_a", fl != NULL);
|
||||
print_test_result("test_libc__fopen_a", fl != NULL);
|
||||
if (fl) {
|
||||
print_test_result("test_newlib__fputs_a", fputs(test_txt, fl) >= 0);
|
||||
print_test_result("test_newlib__fclose_a", fclose(fl) == 0);
|
||||
print_test_result("test_libc__fputs_a", fputs(test_txt, fl) >= 0);
|
||||
print_test_result("test_libc__fclose_a", fclose(fl) == 0);
|
||||
}
|
||||
|
||||
/* append to existing file and check content */
|
||||
fl = fopen(FULL_FNAME2, "a+");
|
||||
print_test_result("test_newlib__fopen_a2", fl != NULL);
|
||||
print_test_result("test_libc__fopen_a2", fl != NULL);
|
||||
if (fl) {
|
||||
print_test_result("test_newlib__fputs_a2", fputs(test_txt2, fl) >= 0);
|
||||
print_test_result("test_libc__fputs_a2", fputs(test_txt2, fl) >= 0);
|
||||
rewind(fl);
|
||||
print_test_result("test_newlib__fread_a2",
|
||||
print_test_result("test_libc__fread_a2",
|
||||
fread(buf, sizeof(*buf), sizeof(buf), fl) > 0);
|
||||
print_test_result("test_newlib__strcmp_a2",
|
||||
print_test_result("test_libc__strcmp_a2",
|
||||
strncmp(test_txt, buf, strlen(test_txt)) == 0);
|
||||
print_test_result("test_newlib__strcmp_a2", strncmp(test_txt2,
|
||||
print_test_result("test_libc__strcmp_a2", strncmp(test_txt2,
|
||||
&buf[strlen(test_txt)], strlen(test_txt2)) == 0);
|
||||
print_test_result("test_newlib__fclose_a2", fclose(fl) == 0);
|
||||
print_test_result("test_libc__fclose_a2", fclose(fl) == 0);
|
||||
}
|
||||
print_test_result("test_newlib__remove", remove(FULL_FNAME2) == 0);
|
||||
print_test_result("test_libc__remove", remove(FULL_FNAME2) == 0);
|
||||
|
||||
print_test_result("test_newlib__umount", vfs_umount(&_test_vfs_mount) == 0);
|
||||
print_test_result("test_libc__umount", vfs_umount(&_test_vfs_mount) == 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -421,8 +421,8 @@ int main(void)
|
||||
test_mkrmdir();
|
||||
test_create();
|
||||
test_fstat();
|
||||
#ifdef MODULE_NEWLIB
|
||||
test_newlib();
|
||||
#if defined(MODULE_NEWLIB) || defined(MODULE_PICOLIBC)
|
||||
test_libc();
|
||||
#endif
|
||||
|
||||
printf("Test end.\n");
|
||||
|
@ -389,7 +389,7 @@ void test_entropy(uint32_t samples)
|
||||
/* Use 'fmt/print_float' to work on all platforms (atmega)
|
||||
* Stdout should be flushed before to prevent garbled output. */
|
||||
printf("Calculated ");
|
||||
#ifdef MODULE_NEWLIB
|
||||
#if defined(MODULE_NEWLIB) || defined(MODULE_PICOLIBC)
|
||||
/* no fflush on msp430 */
|
||||
fflush(stdout);
|
||||
#endif
|
||||
|
@ -171,7 +171,7 @@ static void test_vfs_constfs_read_lseek(void)
|
||||
TEST_ASSERT_EQUAL_INT(0, res);
|
||||
}
|
||||
|
||||
#if MODULE_NEWLIB || defined(BOARD_NATIVE)
|
||||
#if MODULE_NEWLIB || MODULE_PICOLIBC || defined(BOARD_NATIVE)
|
||||
static void test_vfs_constfs__posix(void)
|
||||
{
|
||||
int res;
|
||||
@ -210,7 +210,7 @@ Test *tests_vfs_mount_constfs_tests(void)
|
||||
new_TestFixture(test_vfs_umount__invalid_mount),
|
||||
new_TestFixture(test_vfs_constfs_open),
|
||||
new_TestFixture(test_vfs_constfs_read_lseek),
|
||||
#if MODULE_NEWLIB || defined(BOARD_NATIVE)
|
||||
#if MODULE_NEWLIB || MODULE_PICOLIBC || defined(BOARD_NATIVE)
|
||||
new_TestFixture(test_vfs_constfs__posix),
|
||||
#endif
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user