bazel rules for a riscv64 bare metal rust compiler
This article assumes that you have
bazelinstalled via thebazeliskmethod.
This is the latest example in my repository at: https://github.com/filmil/bazel-experiments
The subdirectory https://github.com/filmil/bazel-experiments/tree/main/riscv64-rust-baremetal shows how to build a bare-metal binary for 64-bit RISC-V, using bazel and a hermetic Rust compiler.
It leans onto the set of bazel bare metal rules for 64-bit RISC-V, since the Rust compiler uses GNU ld for its linker. Unfortnately, the know-how for building the toolchain has been lost to time it seems. I might need to find a way to rebuild this from scratch, possibly using the instructions from here and here
For details, you can check the README.md, but in practice it is very easy to get started.
Check the code out and do:
bazel build //prg:my_program
bazel will download and prepare everything you need for the compilation and produce the binary.
You can build a disassembly listing of the demo binary using:
bazel build //prg:disasm \
&& cat bazel-bin/prg/disasm.S
The rules use rules_rust for the heavy lifting.