*-nuttx-elf

Tier: 3

Targets for the Apache NuttX.

Apache NuttX is a real-time operating system (RTOS) with an emphasis on standards compliance and small footprint. It is scalable from 8-bit to 64-bit microcontroller environments. The primary governing standards in NuttX are POSIX and ANSI standards.

NuttX adopts additional standard APIs from Unix and other common RTOSs, such as VxWorks. These APIs are used for functionality not available under the POSIX and ANSI standards. However, some APIs, like fork(), are not appropriate for deeply-embedded environments and are not implemented in NuttX.

For brevity, many parts of the documentation will refer to Apache NuttX as simply NuttX.

Target maintainers

Requirements

The target name follow this format: ARCH[-VENDOR]-nuttx-ABI, where ARCH is the target architecture, VENDOR is the vendor name, and ABI is the ABI used.

The following target names are defined:

  • thumbv6m-nuttx-eal
  • thumbv7m-nuttx-eal
  • thumbv7em-nuttx-eabi
  • thumbv7em-nuttx-eabihf
  • thumbv8m.base-nuttx-eabi
  • thumbv8m.main-nuttx-eabi
  • thumbv8m.main-nuttx-eabihf
  • riscv32imc-unknown-nuttx-elf
  • riscv32imac-unknown-nuttx-elf
  • riscv32imafc-unknown-nuttx-elf
  • riscv64imac-unknown-nuttx-elf
  • riscv64gc-unknown-nuttx-elf

Building the target

The target can be built by enabling it in the rustc build:

[build]
target = "riscv32imc-unknown-nuttx-elf"

[target.'riscv32imc-unknown-nuttx-elf']
linker = "riscv-none-elf-gcc"

The toolchain for the target can be found in NuttX's quick start guide.

Testing

This is a cross-compiled no-std target, which must be run either in a simulator or by programming them onto suitable hardware. It is not possible to run the Rust test-suite on this target.

Cross-compilation toolchains and C code

This target supports C code. If interlinking with C or C++, you may need to use riscv-none-elf-gcc or arm-none-eabi-gcc as a linker instead of rust-lld.