Crates.io | ralte32 |
lib.rs | ralte32 |
version | 0.1.3 |
source | src |
created_at | 2023-09-13 18:17:07.139909 |
updated_at | 2023-09-13 20:38:44.485652 |
description | Arithmetic Library Testing Environment for embedded RISC-V 32-bit |
homepage | https://github.com/riscvonomicon/ralte32 |
repository | https://github.com/riscvonomicon/ralte32 |
max_upload_size | |
id | 971748 |
size | 30,632 |
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.
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
There are several known limitations.
This project is dual licensed under MIT and APACHE-2.0 licenses.