raspberrypi / pico-sdk

BSD 3-Clause "New" or "Revised" License
3.25k stars 838 forks source link

test/pico_stdlib_test/pico_stdlib_test.c:92:20: error: expected ')' before 'PRIu64' #1690

Closed josch closed 2 months ago

josch commented 2 months ago

Hi,

I'm running cmake on Debian unstable with all its build dependencies from Debian, namely gcc-arm-none-eabi, libnewlib-arm-none-eabi and libstdc++-arm-none-eabi-newlib. I'm getting the following build failure:

[  0%] Building C object test/pico_stdlib_test/CMakeFiles/pico_stdlib_test.dir/pico_stdlib_test.c.obj
cd /<<PKGBUILDDIR>>/obj-aarch64-linux-gnu/test/pico_stdlib_test && /usr/bin/arm-none-eabi-gcc -DLIB_PICO_BIT_OPS=1 -DLIB_PICO_BIT_OPS_PIC
O=1 -DLIB_PICO_DIVIDER=1 -DLIB_PICO_DIVIDER_HARDWARE=1 -DLIB_PICO_DOUBLE=1 -DLIB_PICO_DOUBLE_PICO=1 -DLIB_PICO_FLOAT=1 -DLIB_PICO_FLOAT_P
ICO=1 -DLIB_PICO_INT64_OPS=1 -DLIB_PICO_INT64_OPS_PICO=1 -DLIB_PICO_MALLOC=1 -DLIB_PICO_MEM_OPS=1 -DLIB_PICO_MEM_OPS_PICO=1 -DLIB_PICO_PL
ATFORM=1 -DLIB_PICO_PRINTF=1 -DLIB_PICO_PRINTF_PICO=1 -DLIB_PICO_RUNTIME=1 -DLIB_PICO_STANDARD_LINK=1 -DLIB_PICO_STDIO=1 -DLIB_PICO_STDIO
_UART=1 -DLIB_PICO_STDLIB=1 -DLIB_PICO_SYNC=1 -DLIB_PICO_SYNC_CRITICAL_SECTION=1 -DLIB_PICO_SYNC_MUTEX=1 -DLIB_PICO_SYNC_SEM=1 -DLIB_PICO
_TIME=1 -DLIB_PICO_UTIL=1 -DPICO_BOARD=\"pico\" -DPICO_BUILD=1 -DPICO_CMAKE_BUILD_TYPE=\"None\" -DPICO_COPY_TO_RAM=0 -DPICO_CXX_ENABLE_EX
CEPTIONS=0 -DPICO_NO_FLASH=0 -DPICO_NO_HARDWARE=0 -DPICO_ON_DEVICE=1 -DPICO_TARGET_NAME=\"pico_stdlib_test\" -DPICO_USE_BLOCKED_RAM=0 -I/
<<PKGBUILDDIR>>/src/common/pico_stdlib/include -I/<<PKGBUILDDIR>>/src/rp2_common/hardware_gpio/include -I/<<PKGBUILDDIR>>/src/common/pico
_base/include -I/<<PKGBUILDDIR>>/obj-aarch64-linux-gnu/generated/pico_base -I/<<PKGBUILDDIR>>/src/boards/include -I/<<PKGBUILDDIR>>/src/r
p2_common/pico_platform/include -I/<<PKGBUILDDIR>>/src/rp2040/hardware_regs/include -I/<<PKGBUILDDIR>>/src/rp2_common/hardware_base/inclu
de -I/<<PKGBUILDDIR>>/src/rp2040/hardware_structs/include -I/<<PKGBUILDDIR>>/src/rp2_common/hardware_claim/include -I/<<PKGBUILDDIR>>/src
/rp2_common/hardware_sync/include -I/<<PKGBUILDDIR>>/src/rp2_common/hardware_irq/include -I/<<PKGBUILDDIR>>/src/common/pico_sync/include 
-I/<<PKGBUILDDIR>>/src/common/pico_time/include -I/<<PKGBUILDDIR>>/src/rp2_common/hardware_timer/include -I/<<PKGBUILDDIR>>/src/common/pi
co_util/include -I/<<PKGBUILDDIR>>/src/rp2_common/hardware_uart/include -I/<<PKGBUILDDIR>>/src/rp2_common/hardware_resets/include -I/<<PK
GBUILDDIR>>/src/rp2_common/hardware_clocks/include -I/<<PKGBUILDDIR>>/src/rp2_common/hardware_pll/include -I/<<PKGBUILDDIR>>/src/rp2_comm
on/hardware_vreg/include -I/<<PKGBUILDDIR>>/src/rp2_common/hardware_watchdog/include -I/<<PKGBUILDDIR>>/src/rp2_common/hardware_xosc/incl
ude -I/<<PKGBUILDDIR>>/src/rp2_common/hardware_divider/include -I/<<PKGBUILDDIR>>/src/rp2_common/pico_runtime/include -I/<<PKGBUILDDIR>>/
src/rp2_common/pico_printf/include -I/<<PKGBUILDDIR>>/src/common/pico_bit_ops/include -I/<<PKGBUILDDIR>>/src/common/pico_divider/include 
-I/<<PKGBUILDDIR>>/src/rp2_common/pico_double/include -I/<<PKGBUILDDIR>>/src/rp2_common/pico_float/include -I/<<PKGBUILDDIR>>/src/rp2_com
mon/pico_malloc/include -I/<<PKGBUILDDIR>>/src/rp2_common/pico_bootrom/include -I/<<PKGBUILDDIR>>/src/common/pico_binary_info/include -I/
<<PKGBUILDDIR>>/src/rp2_common/pico_stdio/include -I/<<PKGBUILDDIR>>/src/rp2_common/pico_stdio_uart/include -I/<<PKGBUILDDIR>>/src/rp2_co
mmon/pico_int64_ops/include -I/<<PKGBUILDDIR>>/src/rp2_common/pico_mem_ops/include -I/<<PKGBUILDDIR>>/src/rp2_common/boot_stage2/include 
-g -O2 -Werror=implicit-function-declaration -ffile-prefix-map=/<<PKGBUILDDIR>>=. -Wformat -Werror=format-security -Wdate-time -D_FORTIFY
_SOURCE=2  -mcpu=cortex-m0plus -mthumb -std=gnu11 -ffunction-sections -fdata-sections -MD -MT test/pico_stdlib_test/CMakeFiles/pico_stdli
b_test.dir/pico_stdlib_test.c.obj -MF CMakeFiles/pico_stdlib_test.dir/pico_stdlib_test.c.obj.d -o CMakeFiles/pico_stdlib_test.dir/pico_st
dlib_test.c.obj -c /<<PKGBUILDDIR>>/test/pico_stdlib_test/pico_stdlib_test.c
/<<PKGBUILDDIR>>/test/pico_stdlib_test/pico_stdlib_test.c: In function 'main':
/<<PKGBUILDDIR>>/test/pico_stdlib_test/pico_stdlib_test.c:92:20: error: expected ')' before 'PRIu64'
   92 |         printf( "%" PRIu64 "\n", to_us_since_boot(get_absolute_time()));
      |               ~    ^~~~~~~
      |                    )
/<<PKGBUILDDIR>>/test/pico_stdlib_test/pico_stdlib_test.c:12:1: note: 'PRIu64' is defined in header '<inttypes.h>'; did you forget to '#include <inttypes.h>'?
   11 | #include <stdlib.h>
  +++ |+#include <inttypes.h>
   12 | 
/<<PKGBUILDDIR>>/test/pico_stdlib_test/pico_stdlib_test.c:92:18: warning: spurious trailing '%' in format [-Wformat=]
   92 |         printf( "%" PRIu64 "\n", to_us_since_boot(get_absolute_time()));
      |                  ^
/<<PKGBUILDDIR>>/test/pico_stdlib_test/pico_stdlib_test.c:98:19: error: expected ')' before 'PRIu64'
   98 |         printf("%" PRIu64 "\n", to_us_since_boot(get_absolute_time()));
      |               ~   ^~~~~~~
      |                   )
/<<PKGBUILDDIR>>/test/pico_stdlib_test/pico_stdlib_test.c:98:20: note: 'PRIu64' is defined in header '<inttypes.h>'; did you forget to '#include <inttypes.h>'?
   98 |         printf("%" PRIu64 "\n", to_us_since_boot(get_absolute_time()));
      |                    ^~~~~~
/<<PKGBUILDDIR>>/test/pico_stdlib_test/pico_stdlib_test.c:98:17: warning: spurious trailing '%' in format [-Wformat=]
   98 |         printf("%" PRIu64 "\n", to_us_since_boot(get_absolute_time()));
      |                 ^
make[3]: *** [test/pico_stdlib_test/CMakeFiles/pico_stdlib_test.dir/build.make:79: test/pico_stdlib_test/CMakeFiles/pico_stdlib_test.dir/pico_stdlib_test.c.obj] Error 1
make[3]: Leaving directory '/<<PKGBUILDDIR>>/obj-aarch64-linux-gnu'
make[2]: *** [CMakeFiles/Makefile2:1786: test/pico_stdlib_test/CMakeFiles/pico_stdlib_test.dir/all] Error 2
make[2]: *** Waiting for unfinished jobs....

Alas, including inttypes.h does not fix the problem. Any ideas?

josch commented 2 months ago

Okay, I have a theory. My /usr/include/newlib/inttypes.h contains this block

#if __int64_t_defined
#define PRId64          __PRI64(d)
#define PRIi64          __PRI64(i)
#define PRIo64          __PRI64(o)
#define PRIu64          __PRI64(u)
#define PRIx64          __PRI64(x)
#define PRIX64          __PRI64(X)

#define SCNd64          __SCN64(d)
#define SCNi64          __SCN64(i)
#define SCNo64          __SCN64(o)
#define SCNu64          __SCN64(u)
#define SCNx64          __SCN64(x)
#endif

But when I use /usr/bin/arm-none-eabi-cpp -xc -dM to look at what is defined, then only ___int64_t_defined is defined and set to 1. Note the three underscores in the latter while the check in inttypes.h checks for the variable with two underscores. Or is this a red herring?

lurch commented 2 months ago

That might be a red herring? /usr/include/newlib/sys/_stdint.h contains:

#ifdef ___int64_t_defined
#ifndef _INT64_T_DECLARED
typedef __int64_t int64_t ;
#define _INT64_T_DECLARED
#endif
#ifndef _UINT64_T_DECLARED
typedef __uint64_t uint64_t ;
#define _UINT64_T_DECLARED
#endif
#define __int64_t_defined 1
#endif /* ___int64_t_defined */

Are you following the instructions from the latest version of https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf ?

josch commented 2 months ago

Here is how to reproduce this problem inside a fresh chroot of Debian unstable:

$ apt-get install --yes --no-install-recommends git ca-certificates build-essential cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib python3
[...]
$ git clone https://github.com/raspberrypi/pico-sdk.git
[...]
$ cd pico-sdk/
$ mkdir build
$ cd build
$ cmake ..
PICO_SDK_PATH is /pico-sdk
Defaulting PICO_PLATFORM to rp2040 since not specified.
Defaulting PICO platform compiler to pico_arm_gcc since not specified.
-- Defaulting build type to 'Release' since not specified.
PICO compiler is pico_arm_gcc
-- The C compiler identification is GNU 13.2.1
-- The CXX compiler identification is GNU 13.2.1
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/arm-none-eabi-gcc
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/arm-none-eabi-gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/arm-none-eabi-g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
Build type is Release
Defaulting PICO target board to pico since not specified.
Using board configuration from /pico-sdk/src/boards/include/boards/pico.h
-- Found Python3: /usr/bin/python3 (found version "3.11.9") found components: Interpreter 
CMake Warning at src/rp2_common/tinyusb/CMakeLists.txt:10 (message):
  TinyUSB submodule has not been initialized; USB support will be unavailable

  hint: try 'git submodule update --init' from your SDK directory
  (/pico-sdk).

-- Configuring done (4.0s)
-- Generating done (0.8s)
-- Build files have been written to: /pico-sdk/build
$ make VERBOSE=1
/usr/bin/cmake -S/pico-sdk -B/pico-sdk/build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /pico-sdk/build/CMakeFiles /pico-sdk/build//CMakeFiles/progress.marks
make  -f CMakeFiles/Makefile2 all
make[1]: Entering directory '/pico-sdk/build'
make  -f src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/build.make src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/depend
make[2]: Entering directory '/pico-sdk/build'
cd /pico-sdk/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /pico-sdk /pico-sdk/src/rp2_common/boot_stage2 /pico-sdk/build /pico-sdk/build/src/rp2_common/boot_stage2 /pico-sdk/build/src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/DependInfo.cmake "--color="
Dependee "/pico-sdk/build/src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/DependInfo.cmake" is newer than depender "/pico-sdk/build/src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/depend.internal".
Dependee "/pico-sdk/build/src/rp2_common/boot_stage2/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/pico-sdk/build/src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/depend.internal".
Scanning dependencies of target bs2_default
make[2]: Leaving directory '/pico-sdk/build'
make  -f src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/build.make src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/build
make[2]: Entering directory '/pico-sdk/build'
[  0%] Building ASM object src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/compile_time_choice.S.obj
cd /pico-sdk/build/src/rp2_common/boot_stage2 && /usr/bin/arm-none-eabi-gcc -DPICO_BOARD=\"pico\" -DPICO_BUILD=1 -DPICO_NO_HARDWARE=0 -DPICO_ON_DEVICE=1 -I/pico-sdk/src/rp2_common/boot_stage2/asminclude -I/pico-sdk/src/rp2040/hardware_regs/include -I/pico-sdk/src/rp2_common/hardware_base/include -I/pico-sdk/src/common/pico_base/include -I/pico-sdk/build/generated/pico_base -I/pico-sdk/src/boards/include -I/pico-sdk/src/rp2_common/pico_platform/include -I/pico-sdk/src/rp2_common/boot_stage2/include -mcpu=cortex-m0plus -mthumb -O3 -DNDEBUG -o CMakeFiles/bs2_default.dir/compile_time_choice.S.obj   -c /pico-sdk/src/rp2_common/boot_stage2/compile_time_choice.S
[  0%] Linking ASM executable bs2_default.elf
cd /pico-sdk/build/src/rp2_common/boot_stage2 && /usr/bin/cmake -E cmake_link_script CMakeFiles/bs2_default.dir/link.txt --verbose=1
/usr/bin/arm-none-eabi-gcc -mcpu=cortex-m0plus -mthumb -O3 -DNDEBUG -Wl,--build-id=none --specs=nosys.specs -nostartfiles -Wl,--script=/pico-sdk/src/rp2_common/boot_stage2/boot_stage2.ld -Wl,-Map=bs2_default.elf.map CMakeFiles/bs2_default.dir/compile_time_choice.S.obj -o bs2_default.elf 
cd /pico-sdk/build/src/rp2_common/boot_stage2 && /usr/bin/arm-none-eabi-objdump -h /pico-sdk/build/src/rp2_common/boot_stage2/bs2_default.elf > bs2_default.dis
cd /pico-sdk/build/src/rp2_common/boot_stage2 && /usr/bin/arm-none-eabi-objdump -d /pico-sdk/build/src/rp2_common/boot_stage2/bs2_default.elf >> bs2_default.dis
make[2]: Leaving directory '/pico-sdk/build'
[  0%] Built target bs2_default
make  -f test/pico_stdlib_test/CMakeFiles/ELF2UF2Build.dir/build.make test/pico_stdlib_test/CMakeFiles/ELF2UF2Build.dir/depend
make[2]: Entering directory '/pico-sdk/build'
cd /pico-sdk/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /pico-sdk /pico-sdk/test/pico_stdlib_test /pico-sdk/build /pico-sdk/build/test/pico_stdlib_test /pico-sdk/build/test/pico_stdlib_test/CMakeFiles/ELF2UF2Build.dir/DependInfo.cmake "--color="
make[2]: Leaving directory '/pico-sdk/build'
make  -f test/pico_stdlib_test/CMakeFiles/ELF2UF2Build.dir/build.make test/pico_stdlib_test/CMakeFiles/ELF2UF2Build.dir/build
make[2]: Entering directory '/pico-sdk/build'
[  0%] Creating directories for 'ELF2UF2Build'
cd /pico-sdk/build/test/pico_stdlib_test && /usr/bin/cmake -Dcfgdir= -P /pico-sdk/build/test/pico_stdlib_test/elf2uf2/tmp/ELF2UF2Build-mkdirs.cmake
cd /pico-sdk/build/test/pico_stdlib_test && /usr/bin/cmake -E touch /pico-sdk/build/test/pico_stdlib_test/elf2uf2/src/ELF2UF2Build-stamp/ELF2UF2Build-mkdir
[  0%] No download step for 'ELF2UF2Build'
cd /pico-sdk/build/test/pico_stdlib_test && /usr/bin/cmake -E echo_append
cd /pico-sdk/build/test/pico_stdlib_test && /usr/bin/cmake -E touch /pico-sdk/build/test/pico_stdlib_test/elf2uf2/src/ELF2UF2Build-stamp/ELF2UF2Build-download
[  0%] No update step for 'ELF2UF2Build'
cd /pico-sdk/build/test/pico_stdlib_test && /usr/bin/cmake -E echo_append
cd /pico-sdk/build/test/pico_stdlib_test && /usr/bin/cmake -E touch /pico-sdk/build/test/pico_stdlib_test/elf2uf2/src/ELF2UF2Build-stamp/ELF2UF2Build-update
[  0%] No patch step for 'ELF2UF2Build'
cd /pico-sdk/build/test/pico_stdlib_test && /usr/bin/cmake -E echo_append
cd /pico-sdk/build/test/pico_stdlib_test && /usr/bin/cmake -E touch /pico-sdk/build/test/pico_stdlib_test/elf2uf2/src/ELF2UF2Build-stamp/ELF2UF2Build-patch
[  0%] Performing configure step for 'ELF2UF2Build'
cd /pico-sdk/build/elf2uf2 && /usr/bin/cmake -DCMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/gmake "-GUnix Makefiles" -S /pico-sdk/tools/elf2uf2 -B /pico-sdk/build/elf2uf2
Re-run cmake no build system arguments
-- The C compiler identification is GNU 13.2.0
-- The CXX compiler identification is GNU 13.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done (1.4s)
-- Generating done (0.0s)
-- Build files have been written to: /pico-sdk/build/elf2uf2
cd /pico-sdk/build/elf2uf2 && /usr/bin/cmake -E touch /pico-sdk/build/test/pico_stdlib_test/elf2uf2/src/ELF2UF2Build-stamp/ELF2UF2Build-configure
[  0%] Performing build step for 'ELF2UF2Build'
cd /pico-sdk/build/elf2uf2 && make
make[3]: Entering directory '/pico-sdk/build/elf2uf2'
/usr/bin/cmake -S/pico-sdk/tools/elf2uf2 -B/pico-sdk/build/elf2uf2 --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /pico-sdk/build/elf2uf2/CMakeFiles /pico-sdk/build/elf2uf2//CMakeFiles/progress.marks
make  -f CMakeFiles/Makefile2 all
make[4]: Entering directory '/pico-sdk/build/elf2uf2'
make  -f CMakeFiles/elf2uf2.dir/build.make CMakeFiles/elf2uf2.dir/depend
make[5]: Entering directory '/pico-sdk/build/elf2uf2'
cd /pico-sdk/build/elf2uf2 && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /pico-sdk/tools/elf2uf2 /pico-sdk/tools/elf2uf2 /pico-sdk/build/elf2uf2 /pico-sdk/build/elf2uf2 /pico-sdk/build/elf2uf2/CMakeFiles/elf2uf2.dir/DependInfo.cmake "--color="
make[5]: Leaving directory '/pico-sdk/build/elf2uf2'
make  -f CMakeFiles/elf2uf2.dir/build.make CMakeFiles/elf2uf2.dir/build
make[5]: Entering directory '/pico-sdk/build/elf2uf2'
[ 50%] Building CXX object CMakeFiles/elf2uf2.dir/main.cpp.o
/usr/bin/c++  -I/pico-sdk/src/common/boot_uf2/include -std=gnu++14 -MD -MT CMakeFiles/elf2uf2.dir/main.cpp.o -MF CMakeFiles/elf2uf2.dir/main.cpp.o.d -o CMakeFiles/elf2uf2.dir/main.cpp.o -c /pico-sdk/tools/elf2uf2/main.cpp
[100%] Linking CXX executable elf2uf2
/usr/bin/cmake -E cmake_link_script CMakeFiles/elf2uf2.dir/link.txt --verbose=1
/usr/bin/c++ CMakeFiles/elf2uf2.dir/main.cpp.o -o elf2uf2 
make[5]: Leaving directory '/pico-sdk/build/elf2uf2'
[100%] Built target elf2uf2
make[4]: Leaving directory '/pico-sdk/build/elf2uf2'
/usr/bin/cmake -E cmake_progress_start /pico-sdk/build/elf2uf2/CMakeFiles 0
make[3]: Leaving directory '/pico-sdk/build/elf2uf2'
[  0%] No install step for 'ELF2UF2Build'
cd /pico-sdk/build/elf2uf2 && /usr/bin/cmake -E echo_append
[  0%] Completed 'ELF2UF2Build'
cd /pico-sdk/build/test/pico_stdlib_test && /usr/bin/cmake -E make_directory /pico-sdk/build/test/pico_stdlib_test/CMakeFiles
cd /pico-sdk/build/test/pico_stdlib_test && /usr/bin/cmake -E touch /pico-sdk/build/test/pico_stdlib_test/CMakeFiles/ELF2UF2Build-complete
cd /pico-sdk/build/test/pico_stdlib_test && /usr/bin/cmake -E touch /pico-sdk/build/test/pico_stdlib_test/elf2uf2/src/ELF2UF2Build-stamp/ELF2UF2Build-done
make[2]: Leaving directory '/pico-sdk/build'
[  0%] Built target ELF2UF2Build
make  -f src/rp2_common/boot_stage2/CMakeFiles/bs2_default_padded_checksummed_asm.dir/build.make src/rp2_common/boot_stage2/CMakeFiles/bs2_default_padded_checksummed_asm.dir/depend
make[2]: Entering directory '/pico-sdk/build'
cd /pico-sdk/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /pico-sdk /pico-sdk/src/rp2_common/boot_stage2 /pico-sdk/build /pico-sdk/build/src/rp2_common/boot_stage2 /pico-sdk/build/src/rp2_common/boot_stage2/CMakeFiles/bs2_default_padded_checksummed_asm.dir/DependInfo.cmake "--color="
make[2]: Leaving directory '/pico-sdk/build'
make  -f src/rp2_common/boot_stage2/CMakeFiles/bs2_default_padded_checksummed_asm.dir/build.make src/rp2_common/boot_stage2/CMakeFiles/bs2_default_padded_checksummed_asm.dir/build
make[2]: Entering directory '/pico-sdk/build'
[  0%] Generating bs2_default.bin
cd /pico-sdk/build/src/rp2_common/boot_stage2 && /usr/bin/arm-none-eabi-objcopy -Obinary /pico-sdk/build/src/rp2_common/boot_stage2/bs2_default.elf /pico-sdk/build/src/rp2_common/boot_stage2/bs2_default.bin
[  0%] Generating bs2_default_padded_checksummed.S
cd /pico-sdk/build/src/rp2_common/boot_stage2 && /usr/bin/python3 /pico-sdk/src/rp2_common/boot_stage2/pad_checksum -s 0xffffffff /pico-sdk/build/src/rp2_common/boot_stage2/bs2_default.bin /pico-sdk/build/src/rp2_common/boot_stage2/bs2_default_padded_checksummed.S
make[2]: Leaving directory '/pico-sdk/build'
[  0%] Built target bs2_default_padded_checksummed_asm
make  -f test/pico_stdlib_test/CMakeFiles/pico_stdlib_test.dir/build.make test/pico_stdlib_test/CMakeFiles/pico_stdlib_test.dir/depend
make[2]: Entering directory '/pico-sdk/build'
cd /pico-sdk/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /pico-sdk /pico-sdk/test/pico_stdlib_test /pico-sdk/build /pico-sdk/build/test/pico_stdlib_test /pico-sdk/build/test/pico_stdlib_test/CMakeFiles/pico_stdlib_test.dir/DependInfo.cmake "--color="
Dependee "/pico-sdk/build/test/pico_stdlib_test/CMakeFiles/pico_stdlib_test.dir/DependInfo.cmake" is newer than depender "/pico-sdk/build/test/pico_stdlib_test/CMakeFiles/pico_stdlib_test.dir/depend.internal".
Dependee "/pico-sdk/build/test/pico_stdlib_test/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/pico-sdk/build/test/pico_stdlib_test/CMakeFiles/pico_stdlib_test.dir/depend.internal".
Scanning dependencies of target pico_stdlib_test
make[2]: Leaving directory '/pico-sdk/build'
make  -f test/pico_stdlib_test/CMakeFiles/pico_stdlib_test.dir/build.make test/pico_stdlib_test/CMakeFiles/pico_stdlib_test.dir/build
make[2]: Entering directory '/pico-sdk/build'
[  0%] Building C object test/pico_stdlib_test/CMakeFiles/pico_stdlib_test.dir/pico_stdlib_test.c.obj
cd /pico-sdk/build/test/pico_stdlib_test && /usr/bin/arm-none-eabi-gcc -DLIB_PICO_BIT_OPS=1 -DLIB_PICO_BIT_OPS_PICO=1 -DLIB_PICO_DIVIDER=1 -DLIB_PICO_DIVIDER_HARDWARE=1 -DLIB_PICO_DOUBLE=1 -DLIB_PICO_DOUBLE_PICO=1 -DLIB_PICO_FLOAT=1 -DLIB_PICO_FLOAT_PICO=1 -DLIB_PICO_INT64_OPS=1 -DLIB_PICO_INT64_OPS_PICO=1 -DLIB_PICO_MALLOC=1 -DLIB_PICO_MEM_OPS=1 -DLIB_PICO_MEM_OPS_PICO=1 -DLIB_PICO_PLATFORM=1 -DLIB_PICO_PRINTF=1 -DLIB_PICO_PRINTF_PICO=1 -DLIB_PICO_RUNTIME=1 -DLIB_PICO_STANDARD_LINK=1 -DLIB_PICO_STDIO=1 -DLIB_PICO_STDIO_UART=1 -DLIB_PICO_STDLIB=1 -DLIB_PICO_SYNC=1 -DLIB_PICO_SYNC_CRITICAL_SECTION=1 -DLIB_PICO_SYNC_MUTEX=1 -DLIB_PICO_SYNC_SEM=1 -DLIB_PICO_TIME=1 -DLIB_PICO_UTIL=1 -DPICO_BOARD=\"pico\" -DPICO_BUILD=1 -DPICO_CMAKE_BUILD_TYPE=\"Release\" -DPICO_COPY_TO_RAM=0 -DPICO_CXX_ENABLE_EXCEPTIONS=0 -DPICO_NO_FLASH=0 -DPICO_NO_HARDWARE=0 -DPICO_ON_DEVICE=1 -DPICO_TARGET_NAME=\"pico_stdlib_test\" -DPICO_USE_BLOCKED_RAM=0 -I/pico-sdk/src/common/pico_stdlib/include -I/pico-sdk/src/rp2_common/hardware_gpio/include -I/pico-sdk/src/common/pico_base/include -I/pico-sdk/build/generated/pico_base -I/pico-sdk/src/boards/include -I/pico-sdk/src/rp2_common/pico_platform/include -I/pico-sdk/src/rp2040/hardware_regs/include -I/pico-sdk/src/rp2_common/hardware_base/include -I/pico-sdk/src/rp2040/hardware_structs/include -I/pico-sdk/src/rp2_common/hardware_claim/include -I/pico-sdk/src/rp2_common/hardware_sync/include -I/pico-sdk/src/rp2_common/hardware_irq/include -I/pico-sdk/src/common/pico_sync/include -I/pico-sdk/src/common/pico_time/include -I/pico-sdk/src/rp2_common/hardware_timer/include -I/pico-sdk/src/common/pico_util/include -I/pico-sdk/src/rp2_common/hardware_uart/include -I/pico-sdk/src/rp2_common/hardware_resets/include -I/pico-sdk/src/rp2_common/hardware_clocks/include -I/pico-sdk/src/rp2_common/hardware_pll/include -I/pico-sdk/src/rp2_common/hardware_vreg/include -I/pico-sdk/src/rp2_common/hardware_watchdog/include -I/pico-sdk/src/rp2_common/hardware_xosc/include -I/pico-sdk/src/rp2_common/hardware_divider/include -I/pico-sdk/src/rp2_common/pico_runtime/include -I/pico-sdk/src/rp2_common/pico_printf/include -I/pico-sdk/src/common/pico_bit_ops/include -I/pico-sdk/src/common/pico_divider/include -I/pico-sdk/src/rp2_common/pico_double/include -I/pico-sdk/src/rp2_common/pico_float/include -I/pico-sdk/src/rp2_common/pico_malloc/include -I/pico-sdk/src/rp2_common/pico_bootrom/include -I/pico-sdk/src/common/pico_binary_info/include -I/pico-sdk/src/rp2_common/pico_stdio/include -I/pico-sdk/src/rp2_common/pico_stdio_uart/include -I/pico-sdk/src/rp2_common/pico_int64_ops/include -I/pico-sdk/src/rp2_common/pico_mem_ops/include -I/pico-sdk/src/rp2_common/boot_stage2/include -mcpu=cortex-m0plus -mthumb -O3 -DNDEBUG -std=gnu11 -ffunction-sections -fdata-sections -MD -MT test/pico_stdlib_test/CMakeFiles/pico_stdlib_test.dir/pico_stdlib_test.c.obj -MF CMakeFiles/pico_stdlib_test.dir/pico_stdlib_test.c.obj.d -o CMakeFiles/pico_stdlib_test.dir/pico_stdlib_test.c.obj -c /pico-sdk/test/pico_stdlib_test/pico_stdlib_test.c
/pico-sdk/test/pico_stdlib_test/pico_stdlib_test.c: In function 'main':
/pico-sdk/test/pico_stdlib_test/pico_stdlib_test.c:92:20: error: expected ')' before 'PRIu64'
   92 |         printf( "%" PRIu64 "\n", to_us_since_boot(get_absolute_time()));
      |               ~    ^~~~~~~
      |                    )
/pico-sdk/test/pico_stdlib_test/pico_stdlib_test.c:12:1: note: 'PRIu64' is defined in header '<inttypes.h>'; did you forget to '#include <inttypes.h>'?
   11 | #include <stdlib.h>
  +++ |+#include <inttypes.h>
   12 | 
/pico-sdk/test/pico_stdlib_test/pico_stdlib_test.c:98:19: error: expected ')' before 'PRIu64'
   98 |         printf("%" PRIu64 "\n", to_us_since_boot(get_absolute_time()));
      |               ~   ^~~~~~~
      |                   )
/pico-sdk/test/pico_stdlib_test/pico_stdlib_test.c:98:20: note: 'PRIu64' is defined in header '<inttypes.h>'; did you forget to '#include <inttypes.h>'?
   98 |         printf("%" PRIu64 "\n", to_us_since_boot(get_absolute_time()));
      |                    ^~~~~~
make[2]: *** [test/pico_stdlib_test/CMakeFiles/pico_stdlib_test.dir/build.make:76: test/pico_stdlib_test/CMakeFiles/pico_stdlib_test.dir/pico_stdlib_test.c.obj] Error 1
make[2]: Leaving directory '/pico-sdk/build'
make[1]: *** [CMakeFiles/Makefile2:1783: test/pico_stdlib_test/CMakeFiles/pico_stdlib_test.dir/all] Error 2
make[1]: Leaving directory '/pico-sdk/build'
make: *** [Makefile:91: all] Error 2

What step am I missing?

lurch commented 2 months ago

Debian unstable

:point_up: There's your problem :wink:

I've just done some tests in a fresh docker setup, and if I use a debian:latest image the instructions you mention above work fine; but if I use a debian:unstable image then I get the same error that you do.

Information for @kilograham in case it's useful: in the working case (debian:latest) I have:

apt show gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib | grep -E "(Package|Version):"

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

Package: gcc-arm-none-eabi
Version: 15:12.2.rel1-1
Package: libnewlib-arm-none-eabi
Version: 3.3.0-1.3
Package: libstdc++-arm-none-eabi-newlib
Version: 15:12.2.rel1-1+23

but in the non-working case (debian:unstable) I have:

apt show gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib | grep -E "(Package|Version):"

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

Package: gcc-arm-none-eabi
Version: 15:13.2.rel1-2
Package: libnewlib-arm-none-eabi
Version: 4.4.0.20231231-3
Package: libstdc++-arm-none-eabi-newlib
Version: 15:13.2.rel1-2+26
lurch commented 2 months ago

Ahhh, I just did a bit of searching and found https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=953844 and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1067692

josch commented 2 months ago

Thank you!! :heart:

So this is not a pico-sdk bug at all. Lets close this.

Thanks a lot for digging into this!