# Building Rust embedded firmware on BSD Using the Rust stable compiler from the BSD ports is mostly a matter of removing the arbitrary limitations that have been built into the Rust toolchain. Get rid of the "nightly toolchain" check in cargo-xbuild: ``` diff --git a/src/lib.rs b/src/lib.rs index 204ad8f..9c61e39 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -157,28 +157,11 @@ pub fn build(args: Args, command_name: &str, crate_config: Option) -> Re }) })?; - // We can't build sysroot with stable or beta due to unstable features let sysroot = rustc::sysroot(verbose)?; - let src = match meta.channel { - Channel::Dev => rustc::Src::from_env().ok_or(anyhow!( + let src = rustc::Src::from_env().ok_or(anyhow!( "The XARGO_RUST_SRC env variable must be set and point to the \ - Rust source directory when working with the 'dev' channel", - ))?, - Channel::Nightly => { - if let Some(src) = rustc::Src::from_env() { - src - } else { - sysroot.src()? - } - } - Channel::Stable | Channel::Beta => { - bail!( - "The sysroot can't be built for the {:?} channel. \ - Switch to nightly.", - meta.channel - ); - } - }; + Rust source directory", + ))?; let cmode = if let Some(triple) = args.target() { if triple == meta.host { ``` Run ``cargo install --path .`` to install the modified cargo-xbuild Get a copy of the Rust sources that corresponds to the installed compiler binary, and set up the environment accordingly: ``` > rustc --version rustc 1.72.1 (d5c2e9c34 2023-09-13) (built from a source tarball) > git clone --depth=1 --recurse-submodules --shallow-submodules https://github.com/rust-lang/rust --branch 1.72.1 > export XARGO_RUST_SRC=`pwd`/rust/library ``` Disable other arbitrary checks in the Rust compiler: ``` > export RUSTC_BOOTSTRAP=1 ``` And you can now simply run ``cargo xbuild`` to build the firmware.