rust/compiler/rustc_codegen_gcc/build_system/src/clean.rs

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

85 lines
2.1 KiB
Rust
Raw Normal View History

2023-12-20 13:58:43 +00:00
use std::fs::remove_dir_all;
use std::path::Path;
2023-12-20 13:58:43 +00:00
use crate::utils::{get_sysroot_dir, remove_file, run_command};
2023-12-20 13:58:43 +00:00
#[derive(Default)]
enum CleanArg {
/// `clean all`
All,
/// `clean ui-tests`
UiTests,
/// `clean --help`
#[default]
Help,
2023-12-20 13:58:43 +00:00
}
impl CleanArg {
fn new() -> Result<Self, String> {
2023-12-20 13:58:43 +00:00
// We skip the binary and the "clean" option.
for arg in std::env::args().skip(2) {
return match arg.as_str() {
"all" => Ok(Self::All),
"ui-tests" => Ok(Self::UiTests),
"--help" => Ok(Self::Help),
a => Err(format!("Unknown argument `{}`", a)),
};
2023-12-20 13:58:43 +00:00
}
Ok(Self::default())
2023-12-20 13:58:43 +00:00
}
}
2023-12-20 13:58:43 +00:00
fn usage() {
println!(
r#"
`clean` command help:
2023-12-20 13:58:43 +00:00
all : Clean all data
ui-tests : Clean ui tests
--help : Show this help
"#
)
2023-12-20 13:58:43 +00:00
}
fn clean_all() -> Result<(), String> {
let build_sysroot = get_sysroot_dir();
let dirs_to_remove = [
"target".into(),
build_sysroot.join("sysroot"),
build_sysroot.join("sysroot_src"),
build_sysroot.join("target"),
];
2023-12-20 13:58:43 +00:00
for dir in dirs_to_remove {
let _ = remove_dir_all(dir);
}
let dirs_to_remove = ["regex", "rand", "simple-raytracer"];
for dir in dirs_to_remove {
let _ = remove_dir_all(Path::new(crate::BUILD_DIR).join(dir));
}
2023-12-20 13:58:43 +00:00
let files_to_remove =
[build_sysroot.join("Cargo.lock"), "perf.data".into(), "perf.data.old".into()];
2023-12-20 13:58:43 +00:00
for file in files_to_remove {
let _ = remove_file(&file);
2023-12-20 13:58:43 +00:00
}
println!("Successfully ran `clean all`");
Ok(())
}
fn clean_ui_tests() -> Result<(), String> {
let path = Path::new(crate::BUILD_DIR).join("rust/build/x86_64-unknown-linux-gnu/test/ui/");
run_command(&[&"find", &path, &"-name", &"stamp", &"-delete"], None)?;
Ok(())
}
2023-12-20 13:58:43 +00:00
pub fn run() -> Result<(), String> {
match CleanArg::new()? {
CleanArg::All => clean_all()?,
CleanArg::UiTests => clean_ui_tests()?,
CleanArg::Help => usage(),
2023-12-20 13:58:43 +00:00
}
Ok(())
}