Build more runtimes targeting PolkaVM (#3209)

This PR improves compatibility with RISC-V and PolkaVM, allowing more
runtimes to successfully compile.

In particular, it makes the following changes:

- The `sp-mmr-primitives` and `sp-consensus-beefy` crates
unconditionally required an `std`-only dependency; now they only require
those dependencies when the `std` feature is actually enabled. (Our
RISC-V target is, unlike WASM, a true `no_std` target where you can't
accidentally use stuff from `std` anymore.)
- One of our dependencies (the `bitvec` trace) uses a crate called
`radium` which doesn't compile under RISC-V due to incomplete
autodetection logic in their `build.rs` file. The good news is that this
is already fixed in the newest upstream version of `radium`, and the
newest version of `bitvec` uses it. The bad news is that the newest
version of `bitvec` is not currently released on crates.io, so we can't
use it. I've [created an
issue](https://github.com/ferrilab/ferrilab/issues/5) asking for a new
release, but in the meantime I forked the currently used `radium` 0.7,
[fixed the faulty
logic](https://github.com/paritytech/radium-0.7-fork/commit/ed66c8a294b138c67f93499644051d97d4c7fbda)
and used cargo's patching capabilities to use it for the RISC-V runtime
builds. This might be a little hacky, but it is the least intrusive way
to fix the problem, doesn't affect WASM builds at all, and we can
trivially remove it once a new `bitvec` is released.
- The new runtimes are added to the CI to make sure their compilation
doesn't break.
This commit is contained in:
Koute
2024-02-06 23:04:21 +09:00
committed by GitHub
parent a462207158
commit 402b64caf5
6 changed files with 25 additions and 7 deletions
@@ -462,6 +462,18 @@ fn create_project_cargo_toml(
wasm_workspace_toml.insert("workspace".into(), Table::new().into());
if target == RuntimeTarget::Riscv {
// This dependency currently doesn't compile under RISC-V, so patch it with our own fork.
//
// TODO: Remove this once a new version of `bitvec` (which uses a new version of `radium`
// which doesn't have this problem) is released on crates.io.
let patch = toml::toml! {
[crates-io]
radium = { git = "https://github.com/paritytech/radium-0.7-fork.git", rev = "a5da15a15c90fd169d661d206cf0db592487f52b" }
};
wasm_workspace_toml.insert("patch".into(), patch.into());
}
write_file_if_changed(
wasm_workspace.join("Cargo.toml"),
toml::to_string_pretty(&wasm_workspace_toml).expect("Wasm workspace toml is valid; qed"),