ralte32

Crates.ioralte32
lib.rsralte32
version0.1.3
sourcesrc
created_at2023-09-13 18:17:07.139909
updated_at2023-09-13 20:38:44.485652
descriptionArithmetic Library Testing Environment for embedded RISC-V 32-bit
homepagehttps://github.com/riscvonomicon/ralte32
repositoryhttps://github.com/riscvonomicon/ralte32
max_upload_size
id971748
size30,632
Gijs Burghoorn (coastalwhite)

documentation

README

RALTE32

Crates.io | Docs.rs | Repository

A Rust Arithmetic Library Testing Environment for embedded RISC-V 32-bit. This libraries allows the testing of arithmetic Rust code made for RISC-V 32-bit using the QEMU simulator. This is especially useful when developing with the Rust riscv32 intrinsics.

This library is mostly just a minimal hack to implement a testing environment and port the riscv32 embedded targets to a Linux userspace target.

Usage

First, this project uses the QEMU userspace simulator to simulate the target code. This can be installed with the standard qemu-user package on most operating systems.

# Linux: Debian / Ubuntu
sudo apt-get install qemu-user

# Linux: ArchLinux
sudo pacman -S qemu-user

For more platforms, take a look here.

Then, add ralte32 as a development dependency.

cargo add --dev ralte32

Lastly, create and/or add a short section to your .cargo/config.toml.

# ...

[target.riscv32imac-unknown-none-elf]
rustflags = ['-Ctarget-feature=+crt-static']
runner = "qemu-riscv32 -cpu rv32"

# NOTE: If you want to enable additional target features, add them here.
# 
# Example to enable the `zk` feature:
# rustflags = ['-Ctarget-feature=+crt-static,+zk']
# runner = "qemu-riscv32 -cpu rv32,zk=true"

Then, to implement some tests, you add an example in examples/.

// examples/test-rv32.rs
#![no_std]
#![no_main]

use ralte32::define_tests;

fn test_multiplication() {
    assert_eq!(6 * 7, 42);
}

fn test_remainder() {
    assert_eq!(7 % 6, 1);
}

define_tests!{
    test_multiplication,
    test_remainder,
}

This can then be ran with:

cargo run --example test-rv32 --target riscv32imac-unknown-none-elf

This will give:

Running tests...

Running "test_multiplication"... SUCCESSFUL
Running "test_remainder"... SUCCESSFUL

Limitations

There are several known limitations.

  1. First test or assert to fail, stops the test environment.
  2. This only tests user-level code. Access to supervisor, machine or hypervisor instructions and CSRs is not possible.
  3. Very limited support for printing.

License

This project is dual licensed under MIT and APACHE-2.0 licenses.

Commit count: 13

cargo fmt