mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 13:04:42 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			104 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			104 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);
 | |
|     }
 | |
| }
 | 
