Skip to content

Commit 1633903

Browse files
nicholasbishopGabrielMajeri
authored andcommitted
xtask: add command for running unit tests under Miri
1 parent f70feb8 commit 1633903

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

xtask/src/cargo.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ pub enum CargoAction {
8282
Build,
8383
Clippy,
8484
Doc { open: bool },
85+
Miri,
8586
Test,
8687
}
8788

@@ -105,6 +106,7 @@ impl Cargo {
105106
}
106107

107108
let action;
109+
let mut sub_action = None;
108110
let mut extra_args: Vec<&str> = Vec::new();
109111
let mut tool_args: Vec<&str> = Vec::new();
110112
match self.action {
@@ -126,11 +128,18 @@ impl Cargo {
126128
extra_args.push("--open");
127129
}
128130
}
131+
CargoAction::Miri => {
132+
action = "miri";
133+
sub_action = Some("test");
134+
}
129135
CargoAction::Test => {
130136
action = "test";
131137
}
132138
};
133139
cmd.arg(action);
140+
if let Some(sub_action) = sub_action {
141+
cmd.arg(sub_action);
142+
}
134143

135144
if self.release {
136145
cmd.arg("--release");

xtask/src/main.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ mod util;
77
use anyhow::Result;
88
use cargo::{Cargo, CargoAction, Feature, Package};
99
use clap::Parser;
10-
use opt::{Action, BuildOpt, ClippyOpt, DocOpt, Opt, QemuOpt};
10+
use opt::{Action, BuildOpt, ClippyOpt, DocOpt, MiriOpt, Opt, QemuOpt};
1111
use std::process::Command;
1212
use tempfile::TempDir;
1313
use util::{command_to_string, run_cmd};
@@ -67,6 +67,20 @@ fn doc(opt: &DocOpt) -> Result<()> {
6767
run_cmd(cargo.command()?)
6868
}
6969

70+
/// Run unit tests and doctests under Miri.
71+
fn run_miri(opt: &MiriOpt) -> Result<()> {
72+
let cargo = Cargo {
73+
action: CargoAction::Miri,
74+
features: [Feature::Exts].into(),
75+
toolchain: opt.toolchain.or(NIGHTLY),
76+
packages: [Package::Uefi].into(),
77+
release: false,
78+
target: None,
79+
warnings_as_errors: false,
80+
};
81+
run_cmd(cargo.command()?)
82+
}
83+
7084
/// Build uefi-test-runner and run it in QEMU.
7185
fn run_vm_tests(opt: &QemuOpt) -> Result<()> {
7286
let mut features = vec![Feature::Qemu];
@@ -154,6 +168,7 @@ fn main() -> Result<()> {
154168
Action::Build(build_opt) => build(build_opt),
155169
Action::Clippy(clippy_opt) => clippy(clippy_opt),
156170
Action::Doc(doc_opt) => doc(doc_opt),
171+
Action::Miri(miri_opt) => run_miri(miri_opt),
157172
Action::Run(qemu_opt) => run_vm_tests(qemu_opt),
158173
Action::Test(_) => run_host_tests(),
159174
Action::TestLatestRelease(_) => test_latest_release(),

xtask/src/opt.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ pub enum Action {
6363
Build(BuildOpt),
6464
Clippy(ClippyOpt),
6565
Doc(DocOpt),
66+
Miri(MiriOpt),
6667
Run(QemuOpt),
6768
Test(TestOpt),
6869
TestLatestRelease(TestLatestReleaseOpt),
@@ -108,6 +109,13 @@ pub struct DocOpt {
108109
pub warning: WarningOpt,
109110
}
110111

112+
/// Run unit tests and doctests under Miri.
113+
#[derive(Debug, Parser)]
114+
pub struct MiriOpt {
115+
#[clap(flatten)]
116+
pub toolchain: ToolchainOpt,
117+
}
118+
111119
/// Build uefi-test-runner and run it in QEMU.
112120
#[derive(Debug, Parser)]
113121
pub struct QemuOpt {

0 commit comments

Comments
 (0)