xtask: remove hardcoded paths, better clean cmd
This commit is contained in:
parent
ac0432100d
commit
afdc86ef3a
@ -1,4 +1,5 @@
|
|||||||
use std::{
|
use std::{
|
||||||
|
fs,
|
||||||
path::{Path, PathBuf},
|
path::{Path, PathBuf},
|
||||||
process::Command,
|
process::Command,
|
||||||
};
|
};
|
||||||
@ -154,17 +155,47 @@ pub fn clean_userspace(env: &BuildEnv) -> Result<(), Error> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn clean_all(env: &BuildEnv, clean_toolchain: bool) -> Result<(), Error> {
|
pub fn clean_all(env: &BuildEnv, clean_toolchain: bool, repos: bool) -> Result<(), Error> {
|
||||||
log::info!("Cleaning");
|
log::info!("Cleaning");
|
||||||
|
|
||||||
CargoBuilder::Host(env.verbose).run(&env.workspace_root, "clean")?;
|
CargoBuilder::Host(env.verbose).run(&env.workspace_root, "clean")?;
|
||||||
clean_userspace(env)?;
|
clean_userspace(env)?;
|
||||||
|
fs::remove_dir_all(&env.llvm_sysroot)?;
|
||||||
|
// Clean libm
|
||||||
|
for target in Arch::all() {
|
||||||
|
Command::new("make")
|
||||||
|
.current_dir(
|
||||||
|
env.workspace_root
|
||||||
|
.join(format!("toolchain-c/libs/openlibm-{}", target.name())),
|
||||||
|
)
|
||||||
|
.arg("clean")
|
||||||
|
.status()
|
||||||
|
.ok();
|
||||||
|
}
|
||||||
|
|
||||||
if clean_toolchain {
|
if repos {
|
||||||
|
fs::remove_dir_all(env.workspace_root.join("toolchain")).ok();
|
||||||
|
fs::remove_dir_all(env.workspace_root.join("toolchain-c/llvm-project")).ok();
|
||||||
|
fs::remove_dir_all(env.workspace_root.join("toolchain-c/libs")).ok();
|
||||||
|
fs::remove_dir_all(env.workspace_root.join("toolchain-c/prefix")).ok();
|
||||||
|
} else if clean_toolchain {
|
||||||
|
// clean repos also cleans toolchain, so no need for this
|
||||||
Command::new("./x")
|
Command::new("./x")
|
||||||
.current_dir(env.workspace_root.join("toolchain"))
|
.current_dir(env.workspace_root.join("toolchain"))
|
||||||
.arg("clean")
|
.arg("clean")
|
||||||
.status()?;
|
.status()?;
|
||||||
|
|
||||||
|
// Clean host toolchain
|
||||||
|
fs::remove_dir_all(env.workspace_root.join("toolchain-c/llvm-project/build")).ok();
|
||||||
|
fs::remove_dir_all(env.workspace_root.join("toolchain-c/prefix")).ok();
|
||||||
|
|
||||||
|
for target in Arch::all() {
|
||||||
|
fs::remove_dir_all(
|
||||||
|
env.workspace_root
|
||||||
|
.join(format!("toolchain-c/llvm-project/build-{}", target.name())),
|
||||||
|
)
|
||||||
|
.ok();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -130,10 +130,12 @@ fn build_rootfs<S: AsRef<Path>, D: AsRef<Path>>(
|
|||||||
rootfs_dir.join("dynload-program"),
|
rootfs_dir.join("dynload-program"),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
util::copy_file(format!(
|
let libstd_so = env.workspace_root.join(format!(
|
||||||
"/home/alnyan/build/ygg/toolchain/build/host/stage1-std/{}-unknown-yggdrasil/release/libstd.so",
|
"toolchain/build/host/stage1-std/{}-unknown-yggdrasil/release/libstd.so",
|
||||||
env.arch.name()
|
env.arch.name()
|
||||||
), rootfs_dir.join("lib/libstd.so"))?;
|
));
|
||||||
|
|
||||||
|
util::copy_file(libstd_so, rootfs_dir.join("lib/libstd.so"))?;
|
||||||
|
|
||||||
log::info!("Installing extras");
|
log::info!("Installing extras");
|
||||||
for (src, dst) in install_extra {
|
for (src, dst) in install_extra {
|
||||||
@ -206,11 +208,6 @@ pub fn build_initrd(
|
|||||||
|
|
||||||
build_userspace(env, &mut install_extra, check)?;
|
build_userspace(env, &mut install_extra, check)?;
|
||||||
|
|
||||||
install_extra.push((
|
|
||||||
"toolchain-c/programs/lua-5.4.7/src/lua".into(),
|
|
||||||
"lua".into(),
|
|
||||||
));
|
|
||||||
|
|
||||||
build_rootfs(
|
build_rootfs(
|
||||||
env,
|
env,
|
||||||
install_extra,
|
install_extra,
|
||||||
|
@ -200,6 +200,10 @@ impl Profile {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Arch {
|
impl Arch {
|
||||||
|
pub fn all() -> impl Iterator<Item = Self> {
|
||||||
|
[Self::aarch64, Self::x86_64, Self::i686].into_iter()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn user_triple(&self) -> &str {
|
pub fn user_triple(&self) -> &str {
|
||||||
match self {
|
match self {
|
||||||
Self::aarch64 => "aarch64-unknown-yggdrasil",
|
Self::aarch64 => "aarch64-unknown-yggdrasil",
|
||||||
|
@ -63,6 +63,8 @@ enum SubArgs {
|
|||||||
Clean {
|
Clean {
|
||||||
#[clap(short, long, help = "Clean toolchain as well")]
|
#[clap(short, long, help = "Clean toolchain as well")]
|
||||||
toolchain: bool,
|
toolchain: bool,
|
||||||
|
#[clap(short, long, help = "Clean cloned repositories")]
|
||||||
|
repos: bool,
|
||||||
},
|
},
|
||||||
|
|
||||||
// #[clap(about = "Print `git status` for the components", alias = "gst")]
|
// #[clap(about = "Print `git status` for the components", alias = "gst")]
|
||||||
@ -131,7 +133,7 @@ fn run(args: Args) -> Result<(), Error> {
|
|||||||
SubArgs::Check => build::check_all(env, CheckAction::Check),
|
SubArgs::Check => build::check_all(env, CheckAction::Check),
|
||||||
SubArgs::Clippy => build::check_all(env, CheckAction::Clippy),
|
SubArgs::Clippy => build::check_all(env, CheckAction::Clippy),
|
||||||
SubArgs::Test => build::test_all(env),
|
SubArgs::Test => build::test_all(env),
|
||||||
SubArgs::Clean { toolchain } => build::clean_all(&env, toolchain),
|
SubArgs::Clean { toolchain, repos } => build::clean_all(&env, toolchain, repos),
|
||||||
// SubArgs::GitStatus => util::git_status_all(&env),
|
// SubArgs::GitStatus => util::git_status_all(&env),
|
||||||
SubArgs::Qemu {
|
SubArgs::Qemu {
|
||||||
qemu,
|
qemu,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user