Commit 73582ee
feat: riscv-virt-rt 0.1.0 — board support for QEMU's RISC-V virt machine (#219)
* feat: riscv-virt-rt 0.1.0 — board support for QEMU's RISC-V virt machine
The first bare-metal package in this index. With it, a firmware project is an
ordinary mcpp project:
mcpp add riscv-virt-rt@0.1.0
mcpp build --target riscv64-none-elf # + .bin, .map, a size summary
mcpp run --target riscv64-none-elf # boots in qemu
mcpp test --target riscv64-none-elf
and its manifest names no linker script, load address, libc, -nostdlib or
emulator — there is no [target.*] section at all. Verified end to end against
this tree as a path index: added, downloaded, built and booted, printing from
the firmware.
Two descriptor choices are load-bearing, both measured rather than assumed:
* Form A (`mcpp = "*/mcpp.toml"`), because the package ships a build.mcpp and
mcpp looks for that at the package ROOT. Form B leaves the root at the
extract dir and absorbs the tarball's wrap layer inside each source glob,
which would leave build.mcpp one level down and unfound — the package would
resolve and compile, then link against nothing.
* `deps` at the xpm PLATFORM level, carrying xim:picolibc-riscv and
xim:qemu-riscv. mcpp materializes `[xlings] deps` for the ROOT project only,
so the package's own declaration does not reach a consumer. Verified by
removing picolibc from the store: `mcpp add` + `mcpp build` reinstalled it
and linked; without this edge the build stops at build.mcpp saying the
sysroot is declared but not installed.
Requires mcpp >= 2026.8.19.2 (build.mcpp calls `mcpp::runner`). No workspace
member under tests/examples/: those run on all three platforms with no
capability gate, and this one needs an emulator and a target sysroot. The
package's own repo CI installs both and boots rv64 and rv32 on every push.
* riscv-virt-rt 0.2.0 — the version that ships the project template
0.2.0 adds templates/blinky, so `mcpp new <name> --template riscv-virt-rt`
produces a firmware project that builds, boots and tests unmodified. The
template ships with the package rather than with mcpp, whose builtin registry
is frozen at `bin`; `mcpp new` writes the dependency line at the version it
resolved, so the two cannot drift.
0.1.0 stays listed: a version that has been published is a version someone may
have pinned.
---------
Co-authored-by: speak-agent <x.d2learn.org@gmail.com>1 parent 11dfd1e commit 73582ee
1 file changed
Lines changed: 87 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
0 commit comments