103 lines
2.6 KiB
Rust
103 lines
2.6 KiB
Rust
use std::env;
|
|
use std::process;
|
|
|
|
mod build;
|
|
mod clean;
|
|
mod clone_gcc;
|
|
mod config;
|
|
mod fmt;
|
|
mod info;
|
|
mod prepare;
|
|
mod rust_tools;
|
|
mod rustc_info;
|
|
mod test;
|
|
mod utils;
|
|
|
|
const BUILD_DIR: &str = "build";
|
|
|
|
macro_rules! arg_error {
|
|
($($err:tt)*) => {{
|
|
eprintln!($($err)*);
|
|
eprintln!();
|
|
usage();
|
|
std::process::exit(1);
|
|
}};
|
|
}
|
|
|
|
fn usage() {
|
|
println!(
|
|
"\
|
|
rustc_codegen_gcc build system
|
|
|
|
Usage: build_system [command] [options]
|
|
|
|
Options:
|
|
--help : Displays this help message.
|
|
|
|
Commands:
|
|
cargo : Executes a cargo command.
|
|
rustc : Compiles the program using the GCC compiler.
|
|
clean : Cleans the build directory, removing all compiled files and artifacts.
|
|
prepare : Prepares the environment for building, including fetching dependencies and setting up configurations.
|
|
build : Compiles the project.
|
|
test : Runs tests for the project.
|
|
info : Displays information about the build environment and project configuration.
|
|
clone-gcc : Clones the GCC compiler from a specified source.
|
|
fmt : Runs rustfmt"
|
|
);
|
|
}
|
|
|
|
pub enum Command {
|
|
Cargo,
|
|
Clean,
|
|
CloneGcc,
|
|
Prepare,
|
|
Build,
|
|
Rustc,
|
|
Test,
|
|
Info,
|
|
Fmt,
|
|
}
|
|
|
|
fn main() {
|
|
if env::var("RUST_BACKTRACE").is_err() {
|
|
env::set_var("RUST_BACKTRACE", "1");
|
|
}
|
|
|
|
let command = match env::args().nth(1).as_deref() {
|
|
Some("cargo") => Command::Cargo,
|
|
Some("rustc") => Command::Rustc,
|
|
Some("clean") => Command::Clean,
|
|
Some("prepare") => Command::Prepare,
|
|
Some("build") => Command::Build,
|
|
Some("test") => Command::Test,
|
|
Some("info") => Command::Info,
|
|
Some("clone-gcc") => Command::CloneGcc,
|
|
Some("fmt") => Command::Fmt,
|
|
Some("--help") => {
|
|
usage();
|
|
process::exit(0);
|
|
}
|
|
Some(flag) if flag.starts_with('-') => arg_error!("Expected command found flag {}", flag),
|
|
Some(command) => arg_error!("Unknown command {}", command),
|
|
None => {
|
|
usage();
|
|
process::exit(0);
|
|
}
|
|
};
|
|
|
|
if let Err(e) = match command {
|
|
Command::Cargo => rust_tools::run_cargo(),
|
|
Command::Rustc => rust_tools::run_rustc(),
|
|
Command::Clean => clean::run(),
|
|
Command::Prepare => prepare::run(),
|
|
Command::Build => build::run(),
|
|
Command::Test => test::run(),
|
|
Command::Info => info::run(),
|
|
Command::CloneGcc => clone_gcc::run(),
|
|
Command::Fmt => fmt::run(),
|
|
} {
|
|
eprintln!("Command failed to run: {e}");
|
|
process::exit(1);
|
|
}
|
|
}
|