Skip to content

Bindgen errors on rp2350 when using Rust #22294

@chrysn

Description

@chrysn

Description

Since (at time of writing: as soon as) #22289, Cortex-M33 would be supported for Rust -- but building fails:

$ make BOARD=rpi-pico-2-arm -C examples/lang_support/official/rust-hello-world
[...]
  cargo:rerun-if-changed=riot-bindgen.h

  --- stderr
  /usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:105:3: error: argument to '__builtin_arm_cdp' must be a constant integer
  /usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:112:3: error: argument to '__builtin_arm_ldc' must be a constant integer
  /usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:119:3: error: argument to '__builtin_arm_ldcl' must be a constant integer
  /usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:126:3: error: argument to '__builtin_arm_stc' must be a constant integer
  /usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:133:3: error: argument to '__builtin_arm_stcl' must be a constant integer
  /usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:141:3: error: argument to '__builtin_arm_mcr' must be a constant integer
  /usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:149:10: error: argument to '__builtin_arm_mrc' must be a constant integer
  /usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:157:3: error: argument to '__builtin_arm_cdp2' must be a constant integer
  /usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:164:3: error: argument to '__builtin_arm_ldc2' must be a constant integer
  /usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:171:3: error: argument to '__builtin_arm_ldc2l' must be a constant integer
  /usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:178:3: error: argument to '__builtin_arm_stc2' must be a constant integer
  /usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:185:3: error: argument to '__builtin_arm_stc2l' must be a constant integer
  /usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:193:3: error: argument to '__builtin_arm_mcr2' must be a constant integer
  /usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:201:10: error: argument to '__builtin_arm_mrc2' must be a constant integer
  /usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:210:3: error: argument to '__builtin_arm_mcrr' must be a constant integer
  /usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:217:10: error: argument to '__builtin_arm_mrrc' must be a constant integer
  /usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:226:3: error: argument to '__builtin_arm_mcrr2' must be a constant integer
  /usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:233:10: error: argument to '__builtin_arm_mrrc2' must be a constant integer
  /home/chrysn/git/RIOT/build/pkg/picosdk/src/rp2_common/cmsis/stub/CMSIS/Core/Include/cmsis_clang.h:173:25: error: call to undeclared function '__isb'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
  fatal error: too many errors emitted, stopping now [-ferror-limit=]

  thread 'main' (2089516) panicked at /home/chrysn/.cargo/git/checkouts/rust-riot-sys-a8915ab6cdde1316/1cac447/build.rs:246:10:
  Unable to generate bindings: ClangDiagnostic("/usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:105:3: error: argument to '__builtin_arm_cdp' must be a constant integer\n/usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:112:3: error: argument to '__builtin_arm_ldc' must be a constant integer\n/usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:119:3: error: argument to '__builtin_arm_ldcl' must be a constant integer\n/usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:126:3: error: argument to '__builtin_arm_stc' must be a constant integer\n/usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:133:3: error: argument to '__builtin_arm_stcl' must be a constant integer\n/usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:141:3: error: argument to '__builtin_arm_mcr' must be a constant integer\n/usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:149:10: error: argument to '__builtin_arm_mrc' must be a constant integer\n/usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:157:3: error: argument to '__builtin_arm_cdp2' must be a constant integer\n/usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:164:3: error: argument to '__builtin_arm_ldc2' must be a constant integer\n/usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:171:3: error: argument to '__builtin_arm_ldc2l' must be a constant integer\n/usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:178:3: error: argument to '__builtin_arm_stc2' must be a constant integer\n/usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:185:3: error: argument to '__builtin_arm_stc2l' must be a constant integer\n/usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:193:3: error: argument to '__builtin_arm_mcr2' must be a constant integer\n/usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:201:10: error: argument to '__builtin_arm_mrc2' must be a constant integer\n/usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:210:3: error: argument to '__builtin_arm_mcrr' must be a constant integer\n/usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:217:10: error: argument to '__builtin_arm_mrrc' must be a constant integer\n/usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:226:3: error: argument to '__builtin_arm_mcrr2' must be a constant integer\n/usr/lib/gcc/arm-none-eabi/14.2.1/include/arm_acle.h:233:10: error: argument to '__builtin_arm_mrrc2' must be a constant integer\n/home/chrysn/git/RIOT/build/pkg/picosdk/src/rp2_common/cmsis/stub/CMSIS/Core/Include/cmsis_clang.h:173:25: error: call to undeclared function '__isb'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]\nfatal error: too many errors emitted, stopping now [-ferror-limit=]\n")
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
make: *** [/home/chrysn/git/RIOT/makefiles/cargo-targets.inc.mk:63: /home/chrysn/git/RIOT/examples/lang_support/official/rust-hello-world/bin/rpi-pico-2-arm/target/thumbv8m.main-none-eabihf/release/librust_hello_world.a] Error 101
make: Leaving directory '/home/chrysn/git/RIOT/examples/lang_support/official/rust-hello-world'

Steps to reproduce the issue

See above, but add CONTINUE_ON_EXPECTED_ERRORS=1 as there is currently a workaround in place to not provide the rust_target FEATURE on that CPU.

Next steps

I'm running out of time to debug this in #22289, and rather enable M33 Rust for those where it works than those where it causes extra troubles. As there is "picosdk" popping up in the error, I feel sufficiently justified to put this on "yeah well that's what we get for SDKs", and leaving it until the its next release is out (given that there are other issues that the unreleased version fixes, eg. #22289 (comment)).

Metadata

Metadata

Assignees

Labels

Area: RustArea: Rust wrapperArea: cpuArea: CPU/MCU portsPlatform: ARMPlatform: This PR/issue effects ARM-based platformsType: enhancementThe issue suggests enhanceable parts / The PR enhances parts of the codebase / documentation

Type

No fields configured for Bug.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions