You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1013 B
Rust
45 lines
1013 B
Rust
use std::{
|
|
env,
|
|
path::{Path, PathBuf},
|
|
};
|
|
|
|
use eyre::{ContextCompat, eyre};
|
|
|
|
mod build;
|
|
mod mkimg;
|
|
|
|
fn main() -> Result<(), eyre::Error> {
|
|
let mut args = env::args_os().skip(1);
|
|
|
|
let task = args.next().context("no task provided")?;
|
|
|
|
let task = task
|
|
.to_str()
|
|
.with_context(|| format!("invalid utf-8 \"{}\"", task.to_string_lossy()))?;
|
|
|
|
let manifest_dir =
|
|
PathBuf::from(env::var_os("CARGO_MANIFEST_DIR").context("CARGO_MANIFEST_DIR not set")?);
|
|
|
|
let workspace_dir = manifest_dir
|
|
.parent()
|
|
.context("invalid CARGO_MANIFEST_DIR")?;
|
|
|
|
let cargo_path = PathBuf::from(env::var_os("CARGO").context("CARGO not set")?);
|
|
|
|
let ctx = Context {
|
|
workspace: workspace_dir,
|
|
cargo: &cargo_path,
|
|
};
|
|
|
|
match task {
|
|
"build" => build::build(&ctx),
|
|
"mkimg" => mkimg::mkimg_bios_gpt(&ctx),
|
|
_ => Err(eyre!("unknown task \"{}\"", task)),
|
|
}
|
|
}
|
|
|
|
struct Context<'a> {
|
|
workspace: &'a Path,
|
|
cargo: &'a Path,
|
|
}
|