From 1dac90f0d255a9153c2e2375cad95f6116bb4990 Mon Sep 17 00:00:00 2001 From: Elnath Date: Sat, 19 Apr 2025 18:31:01 +0200 Subject: [PATCH] Fixed build script: was not waiting for subcommands to finish --- Cargo.toml | 3 +++ build.rs | 53 ++++++++++++++++++++++++++++++++++++----------------- 2 files changed, 39 insertions(+), 17 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b6c93b1..796a5f9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,4 +7,7 @@ publish = false [dependencies] nix = { version = "0.29.0", features = ["process", "ptrace"] } thiserror = "2.0.12" +color-eyre = "0.6.3" + +[build-dependencies] color-eyre = "0.6.3" \ No newline at end of file diff --git a/build.rs b/build.rs index 54b0e7e..4b26351 100644 --- a/build.rs +++ b/build.rs @@ -1,22 +1,41 @@ +use color_eyre::eyre::eyre; use std::process::Command; -fn main() { - let assembly_exe_path = &format!("{}/asmprog", std::env::var("OUT_DIR").unwrap()); - let assembly_obj_path = &format!("{}.o", assembly_exe_path); - Command::new("nasm") - .args(&["-f", "elf64", "src/prog.nasm", "-o", assembly_obj_path]) - .spawn().expect("nasm build failed"); - Command::new("ld") - .args(&[assembly_obj_path, "-o", assembly_exe_path]) - .spawn().expect("linking failed"); - println!("cargo:rustc-env=ASM_PROG_PATH={}", assembly_exe_path); - println!("cargo:rerun-if-changed=src/prog.nasm"); +fn main() -> color_eyre::Result<()> { + color_eyre::install()?; - let c_exe_path = &format!("{}/cprog", std::env::var("OUT_DIR").unwrap()); - Command::new("gcc") - .args(&["-o", c_exe_path, "src/prog.c"]) - .spawn().expect("C program compilation failed"); - println!("cargo:rustc-env=C_PROG_PATH={}", c_exe_path); - println!("cargo:rerun-if-changed=src/prog.c"); + println!("Building example assembly program"); + let assembly_exe_path = &format!("{}/asmprog", std::env::var("OUT_DIR")?); + let assembly_obj_path = &format!("{}.o", assembly_exe_path); + let status = Command::new("nasm") + .args(&["-f", "elf64", "src/prog.nasm", "-o", assembly_obj_path]) + .status()?; + if !status.success() { + return Err(eyre!("Nasm build failed")); + } + + let status = Command::new("ld") + .args(&[assembly_obj_path, "-o", assembly_exe_path]) + .status()?; + if !status.success() { + return Err(eyre!("Linking assembly program failed")); + } + + println!("cargo:rustc-env=ASM_PROG_PATH={}", assembly_exe_path); + println!("cargo:rerun-if-changed=src/prog.nasm"); + + + println!("Building example C program"); + let c_exe_path = &format!("{}/cprog", std::env::var("OUT_DIR")?); + let status = Command::new("gcc") + .args(&["-o", c_exe_path, "src/prog.c"]) + .status()?; + if !status.success() { + return Err(eyre!("C program compilation failed")); + } + println!("cargo:rustc-env=C_PROG_PATH={}", c_exe_path); + println!("cargo:rerun-if-changed=src/prog.c"); + + Ok(()) }