diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 82eb467c6..58741f2ce 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -28,18 +28,6 @@ jobs: sudo apt-get update sudo apt-get install qemu-system-arm qemu-efi-aarch64 -y - - name: Install stable - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - - - name: Install latest nightly - uses: actions-rs/toolchain@v1 - with: - toolchain: nightly - components: rust-src - # TODO: cache Rust binaries - - name: Build run: cargo xtask build --target aarch64 @@ -59,18 +47,6 @@ jobs: sudo apt-get update sudo apt-get install qemu-system-x86 ovmf -y - - name: Install stable - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - - - name: Install latest nightly - uses: actions-rs/toolchain@v1 - with: - toolchain: nightly - components: rust-src - # TODO: cache Rust binaries - - name: Build run: cargo xtask build --target x86_64 @@ -106,18 +82,6 @@ jobs: curl -o OVMF32_CODE.fd https://raw.githubusercontent.com/retrage/edk2-nightly/${EDK2_NIGHTLY_COMMIT}/bin/RELEASEIa32_OVMF_CODE.fd curl -o OVMF32_VARS.fd https://raw.githubusercontent.com/retrage/edk2-nightly/${EDK2_NIGHTLY_COMMIT}/bin/RELEASEIa32_OVMF_VARS.fd - - name: Install stable - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - - - name: Install latest nightly - uses: actions-rs/toolchain@v1 - with: - toolchain: nightly - components: rust-src - # TODO: cache Rust binaries - - name: Build run: cargo xtask build --target ia32 @@ -132,18 +96,6 @@ jobs: - name: Checkout sources uses: actions/checkout@v2 - - name: Install stable - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - - - name: Install latest nightly - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: nightly - components: rust-src - - name: Run cargo test run: cargo xtask test @@ -154,18 +106,6 @@ jobs: - name: Checkout sources uses: actions/checkout@v2 - - name: Install stable - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - - - name: Install latest nightly - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: nightly - components: rustfmt, clippy, rust-src - - name: Run cargo fmt uses: actions-rs/cargo@v1 with: @@ -185,18 +125,6 @@ jobs: - name: Checkout sources uses: actions/checkout@v2 - - name: Install stable - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - - - name: Install latest nightly toolchain that includes Miri - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: nightly - components: miri - - name: Run miri run: cargo xtask miri @@ -214,17 +142,6 @@ jobs: - name: Checkout sources uses: actions/checkout@v2 - - name: Install stable - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - - - name: Install latest nightly - uses: actions-rs/toolchain@v1 - with: - toolchain: nightly - components: rust-src - - name: Build run: cargo xtask test-latest-release @@ -235,17 +152,5 @@ jobs: - name: Checkout sources uses: actions/checkout@v2 - - name: Install stable - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - - - name: Install latest nightly - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: nightly - components: rust-src - - name: Build run: cargo xtask build diff --git a/README.md b/README.md index 750f8fa0c..f6bb1ea27 100644 --- a/README.md +++ b/README.md @@ -63,12 +63,6 @@ the [UEFI specification][spec] for detailed information. ## Building and testing uefi-rs -Install the `nightly` version of Rust and the `rust-src` component: -``` -rustup toolchain install nightly -rustup component add --toolchain nightly rust-src -``` - Use the `cargo xtask` command to build and test the crate. Available commands: diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 000000000..d96af7360 --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,9 @@ +[toolchain] +# Nightly is required due to use of unstable features. +channel = "nightly" +components = [ + # Needed for `cargo xtask miri`. + "miri", + # Needed for `-Zbuild-std`. + "rust-src" +] diff --git a/xtask/src/cargo.rs b/xtask/src/cargo.rs index 58f751459..e9f03ab2e 100644 --- a/xtask/src/cargo.rs +++ b/xtask/src/cargo.rs @@ -118,7 +118,6 @@ pub fn fix_nested_cargo_env(cmd: &mut Command) { pub struct Cargo { pub action: CargoAction, pub features: Vec, - pub toolchain: Option, pub packages: Vec, pub release: bool, pub target: Option, @@ -131,10 +130,6 @@ impl Cargo { fix_nested_cargo_env(&mut cmd); - if let Some(toolchain) = &self.toolchain { - cmd.arg(&format!("+{}", toolchain)); - } - let action; let mut sub_action = None; let mut extra_args: Vec<&str> = Vec::new(); @@ -239,7 +234,6 @@ mod tests { let cargo = Cargo { action: CargoAction::Doc { open: true }, features: vec![Feature::Alloc], - toolchain: Some("nightly".into()), packages: vec![Package::Uefi, Package::Xtask], release: false, target: None, @@ -247,7 +241,7 @@ mod tests { }; assert_eq!( command_to_string(&cargo.command().unwrap()), - "RUSTDOCFLAGS=-Dwarnings cargo +nightly doc --package uefi --package xtask --features alloc --open" + "RUSTDOCFLAGS=-Dwarnings cargo doc --package uefi --package xtask --features alloc --open" ); } } diff --git a/xtask/src/main.rs b/xtask/src/main.rs index 4d39611d5..ae8327d6d 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -11,18 +11,15 @@ mod util; use anyhow::Result; use cargo::{fix_nested_cargo_env, Cargo, CargoAction, Feature, Package}; use clap::Parser; -use opt::{Action, BuildOpt, ClippyOpt, DocOpt, MiriOpt, Opt, QemuOpt}; +use opt::{Action, BuildOpt, ClippyOpt, DocOpt, Opt, QemuOpt}; use std::process::Command; use tempfile::TempDir; use util::{command_to_string, run_cmd}; -const NIGHTLY: &str = "nightly"; - fn build(opt: &BuildOpt) -> Result<()> { let cargo = Cargo { action: CargoAction::Build, features: Feature::more_code(), - toolchain: opt.toolchain.or(NIGHTLY), packages: Package::all_except_xtask(), release: opt.build_mode.release, target: Some(*opt.target), @@ -36,7 +33,6 @@ fn clippy(opt: &ClippyOpt) -> Result<()> { let cargo = Cargo { action: CargoAction::Clippy, features: Feature::more_code(), - toolchain: opt.toolchain.or(NIGHTLY), packages: Package::all_except_xtask(), release: false, target: Some(*opt.target), @@ -48,7 +44,6 @@ fn clippy(opt: &ClippyOpt) -> Result<()> { let cargo = Cargo { action: CargoAction::Clippy, features: Vec::new(), - toolchain: None, packages: vec![Package::Xtask], release: false, target: None, @@ -62,7 +57,6 @@ fn doc(opt: &DocOpt) -> Result<()> { let cargo = Cargo { action: CargoAction::Doc { open: opt.open }, features: Feature::more_code(), - toolchain: opt.toolchain.or(NIGHTLY), packages: Package::published(), release: false, target: None, @@ -72,11 +66,10 @@ fn doc(opt: &DocOpt) -> Result<()> { } /// Run unit tests and doctests under Miri. -fn run_miri(opt: &MiriOpt) -> Result<()> { +fn run_miri() -> Result<()> { let cargo = Cargo { action: CargoAction::Miri, features: [Feature::Exts].into(), - toolchain: opt.toolchain.or(NIGHTLY), packages: [Package::Uefi].into(), release: false, target: None, @@ -100,7 +93,6 @@ fn run_vm_tests(opt: &QemuOpt) -> Result<()> { let cargo = Cargo { action: CargoAction::Build, features, - toolchain: opt.toolchain.or(NIGHTLY), packages: vec![Package::UefiTestRunner], release: opt.build_mode.release, target: Some(*opt.target), @@ -119,7 +111,6 @@ fn run_host_tests() -> Result<()> { let cargo = Cargo { action: CargoAction::Test, features: Vec::new(), - toolchain: None, packages: vec![Package::Xtask], release: false, target: None, @@ -131,7 +122,6 @@ fn run_host_tests() -> Result<()> { let cargo = Cargo { action: CargoAction::Test, features: vec![Feature::Exts], - toolchain: Some(NIGHTLY.into()), // Don't test uefi-services (or the packages that depend on it) // as it has lang items that conflict with `std`. packages: vec![Package::Uefi, Package::UefiMacros], @@ -173,7 +163,7 @@ fn test_latest_release() -> Result<()> { let mut build_cmd = Command::new("cargo"); fix_nested_cargo_env(&mut build_cmd); build_cmd - .args(&["+nightly", "build", "--target", "x86_64-unknown-uefi"]) + .args(&["build", "--target", "x86_64-unknown-uefi"]) .current_dir(tmp_dir.join("template")); // Check that the command is indeed in BUILDING.md, then verify the @@ -190,7 +180,7 @@ fn main() -> Result<()> { Action::Build(build_opt) => build(build_opt), Action::Clippy(clippy_opt) => clippy(clippy_opt), Action::Doc(doc_opt) => doc(doc_opt), - Action::Miri(miri_opt) => run_miri(miri_opt), + Action::Miri(_) => run_miri(), Action::Run(qemu_opt) => run_vm_tests(qemu_opt), Action::Test(_) => run_host_tests(), Action::TestLatestRelease(_) => test_latest_release(), diff --git a/xtask/src/opt.rs b/xtask/src/opt.rs index 1f5fcc0cf..751e17b81 100644 --- a/xtask/src/opt.rs +++ b/xtask/src/opt.rs @@ -21,22 +21,6 @@ impl Deref for TargetOpt { } } -#[derive(Debug, Parser)] -pub struct ToolchainOpt { - /// Rust toolchain to use, e.g. "nightly-2022-02-24". - #[clap(long, action)] - toolchain: Option, -} - -impl ToolchainOpt { - /// Get the toolchain arg if set, otherwise use `default_toolchain`. - pub fn or(&self, default_toolchain: &str) -> Option { - self.toolchain - .clone() - .or_else(|| Some(default_toolchain.to_string())) - } -} - #[derive(Debug, Parser)] pub struct BuildModeOpt { /// Build in release mode. @@ -75,9 +59,6 @@ pub struct BuildOpt { #[clap(flatten)] pub target: TargetOpt, - #[clap(flatten)] - pub toolchain: ToolchainOpt, - #[clap(flatten)] pub build_mode: BuildModeOpt, } @@ -88,9 +69,6 @@ pub struct ClippyOpt { #[clap(flatten)] pub target: TargetOpt, - #[clap(flatten)] - pub toolchain: ToolchainOpt, - #[clap(flatten)] pub warning: WarningOpt, } @@ -98,9 +76,6 @@ pub struct ClippyOpt { /// Build the docs for the uefi packages. #[derive(Debug, Parser)] pub struct DocOpt { - #[clap(flatten)] - pub toolchain: ToolchainOpt, - /// Open the docs in a browser. #[clap(long, action)] pub open: bool, @@ -111,10 +86,7 @@ pub struct DocOpt { /// Run unit tests and doctests under Miri. #[derive(Debug, Parser)] -pub struct MiriOpt { - #[clap(flatten)] - pub toolchain: ToolchainOpt, -} +pub struct MiriOpt {} /// Build uefi-test-runner and run it in QEMU. #[derive(Debug, Parser)] @@ -122,9 +94,6 @@ pub struct QemuOpt { #[clap(flatten)] pub target: TargetOpt, - #[clap(flatten)] - pub toolchain: ToolchainOpt, - #[clap(flatten)] pub build_mode: BuildModeOpt,