Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ The reference compilers live in era containers built from `provision/eras` and p

`rk build 7.2.8 --row X64 --config defconfig --fragment test --cc gcc-14` configures and builds a kernel through `rk-cc`, with the test fragment from `configs/` merged in. Pass `--cc rucc` for rucc and `--keep-going` to see every failing unit, not just the first. The build directory ends up with `build.json`, `summary.md` and `compile.jsonl`, which has one line per compiler call. For a probe that line also keeps what the probe read on standard input and printed on standard output, so tools like the `kernel-probes` corpus in rucc-compat can ask it again, and `build.json` names the source tree and the era's `__GNUC__` version and `-std=` so they can give rucc the same persona.

`--config` also takes the name of a distribution kernel config pinned in `configs/distro/distros.toml`: `debian-13` is the config Debian 13 ships with 6.12.111 and `fedora-44` the one Fedora 44 ships with 7.2.8, each copied unchanged out of the distribution's kernel package, whose hash is recorded next to the config's. `rk build 6.12.111 --config debian-13 --cc rucc` checks the file against its hash, sets the module signing key and certificate lists to what a plain tarball has, and settles the result with `olddefconfig`. A distribution config only builds the version and row it came from. `build.json` lists in `distro_dropped` the options the distribution turns on that `olddefconfig` turned off, which is what the toolchain at hand cannot give: on a host with gcc 13 and no pahole or rustc, Debian 13 loses BTF and Fedora 44 loses BTF and every Rust option.

`rk boot --build DIR` boots a build under QEMU with `rk-init/init.sh` as PID 1 and a static busybox, and reads the smoke checks off the serial console. `rk baseline` builds and boots with the reference three times and writes the result under `results/baseline`.

`rk test --reference DIR --other DIR --kinds boot,smoke,kunit` is the graded run. It boots the reference kernel and the rucc kernel once per suite, with `rk.suite=` on the command line, and compares them unit by unit: `boot`, each smoke check, each KUnit result read from the TAP on the console, and each test module loading. The kunit boot carries the build's modules, so build with `--targets "bzImage modules"` when the test fragment makes KUnit tests modules. The units the reference passes in every run (`--runs`) are graded and the rucc kernel must pass all of them. The splats in both consoles are normalized, and one that only the rucc kernel prints fails the run too. Given a rucc-built busybox with `--rucc-busybox`, every failure is attributed to the kernel, the userland or the two together by running the other two cells of the 2x2. With `--kinds kselftest` and `--selftests DIR` from `rk selftests`, every pinned collection is a boot of its own, and each program `run_kselftest.sh` reports is a unit, `kselftest:<collection>:<program>`. A rucc-built set passed with `--rucc-selftests` counts as part of the rucc userland for attribution. LTP is not run yet. The run directory gets `test.json`, `summary.md` and the console of every boot.
Expand Down
Loading
Loading