mirror of
https://github.com/dexoron/dcr.git
synced 2026-10-21 09:28:35 +00:00
- `sharedlib` build kind (shared library output) - ASM projects (`build.language = "asm"`) - NASM and GAS backends - `build.platform` architecture hint for `-march` / `/arch` - Basic CLI integration tests
75 lines
2.2 KiB
Rust
75 lines
2.2 KiB
Rust
use crate::cli::build::build;
|
|
use crate::config::{PROFILE, flags};
|
|
use crate::core::config::Config;
|
|
use crate::core::runner::run_binary;
|
|
use crate::utils::fs::check_dir;
|
|
use crate::utils::log::{error, warn};
|
|
use crate::utils::text::{BOLD_GREEN, colored};
|
|
|
|
pub fn run(args: &[String]) -> i32 {
|
|
let mut active_profile = PROFILE.to_string();
|
|
|
|
let items = check_dir(None).unwrap_or_default();
|
|
if !items.contains(&"dcr.toml".to_string()) {
|
|
error("dcr.toml file not found");
|
|
return 1;
|
|
}
|
|
|
|
let config = match Config::open("./dcr.toml") {
|
|
Ok(cfg) => cfg,
|
|
Err(_) => {
|
|
error("dcr.toml file not found");
|
|
return 1;
|
|
}
|
|
};
|
|
let project_name: &str = config
|
|
.get("package.name")
|
|
.and_then(|v| v.as_str())
|
|
.unwrap_or("");
|
|
let build_kind = config
|
|
.get("build.kind")
|
|
.and_then(|v| v.as_str())
|
|
.unwrap_or("");
|
|
let target_dir = config
|
|
.get("build.target")
|
|
.and_then(|v| v.as_str())
|
|
.map(|s| s.trim())
|
|
.filter(|s| !s.is_empty());
|
|
|
|
if let Some(first_arg) = args.first() {
|
|
if first_arg.starts_with("--") {
|
|
let candidate = first_arg.trim_start_matches("--");
|
|
if flags(candidate).is_some() {
|
|
active_profile = candidate.to_string();
|
|
} else {
|
|
warn("Unknown build flag");
|
|
return 1;
|
|
}
|
|
} else {
|
|
warn("Unknown argument");
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
let kind = build_kind.trim();
|
|
if kind == "staticlib" || kind == "sharedlib" {
|
|
error("Cannot run library build");
|
|
return 1;
|
|
}
|
|
let build_status = build(args);
|
|
let bin_path = crate::platform::bin_path(&active_profile, project_name, target_dir);
|
|
if build_status == 0 {
|
|
println!("\n {} {}", colored("Running", BOLD_GREEN), bin_path);
|
|
println!("--------------------------------");
|
|
return run_binary(project_name, &active_profile, target_dir);
|
|
}
|
|
|
|
let fallback_code = run_binary(project_name, &active_profile, target_dir);
|
|
if fallback_code != 1 {
|
|
return fallback_code;
|
|
}
|
|
|
|
error("Fix errors in the code to run the project");
|
|
1
|
|
}
|