Rust with AVR support
This project adds support for the AVR microcontroller to Rust.
It uses the AVR-LLVM backend.
- Some parts of libcore are disabled via substituting the functions in the original API with empty functions
- This is done because several bugs cause certain functions to trigger bugs in the AVR LLVM backend
- Missing functionality includes
core::fmtfunctions are stubbed out, causing empty results (avr-rust/libcore#3)
- The entire
core::syncmodule is missing (avr-rust/libcore#1)
- All mentions of 128-bit integers are removed from
- Panics currently trigger infinite loops with no message (avr-rust/libcore#4)
Building and installation
This will compile Rust with AVR support. This will not create a
fully-fledged cross-compiler, however, as it does not compile any libraries
liblibc. To do this, the
flag must be passed to
configure, which is not fully supported yet due to bugs.
# Grab the avr-rust sources git clone https://github.com/avr-rust/rust.git # Create a directory to place built files in mkdir build && cd build # Generate Makefile using settings suitable for an experimental compiler ../rust/configure \ --enable-debug \ --disable-docs \ --enable-llvm-assertions \ --enable-debug-assertions \ --enable-optimize \ --prefix=/opt/avr-rust # Build the compiler, optionally install it to /opt/avr-rust make make install # Register the toolchain with rustup rustup toolchain link avr-toolchain $(realpath $(find . -name 'stage1')) # Optionally enable the avr toolchain globally rustup default avr-toolchain
With Xargo (recommended)
Take a look at the example blink program.
AVR support is enabled by passing the
--target avr-unknown-unknown flag to
Note that the Rust
libcore library (essentially required for every Rust program),
must be manually compiled for it to be used, as it will not be built for AVR during
compiler compilation (yet). Work is currently being done in order to allow
to be automatically compiled for AVR.