diff --git a/agb/build.rs b/agb/build.rs index 4f13e70..e2aa93a 100644 --- a/agb/build.rs +++ b/agb/build.rs @@ -11,6 +11,7 @@ fn main() { println!("cargo:rerun-if-changed=build.rs"); let out_dir = std::env::var("OUT_DIR").expect("OUT_DIR environment variable must be specified"); + let mut o_files = vec![]; for &a in asm.iter() { println!("cargo:rerun-if-changed={}", a); @@ -38,12 +39,29 @@ fn main() { "{}", String::from_utf8_lossy(&out.stderr) ); + for warning_line in String::from_utf8_lossy(&out.stderr).split('\n') { if !warning_line.is_empty() { println!("cargo:warning={}", warning_line); } } + + o_files.push(out_file_path); } - println!("cargo:rustc-link-search={}", out_dir); + let archive = format!("{out_dir}/agb.a"); + let ar_out = std::process::Command::new("arm-none-eabi-ar") + .arg("-crs") + .arg(&archive) + .args(&o_files) + .output() + .expect("Failed to create static library"); + + assert!( + ar_out.status.success(), + "{}", + String::from_utf8_lossy(&ar_out.stderr) + ); + + println!("cargo:rustc-link-search={out_dir}"); } diff --git a/agb/gba.ld b/agb/gba.ld index ece8254..0c46202 100644 --- a/agb/gba.ld +++ b/agb/gba.ld @@ -12,11 +12,7 @@ MEMORY { __text_start = ORIGIN(rom); -INPUT ( - crt0.o - interrupt_handler.o - mixer.o -) +INPUT (agb.a) SECTIONS { . = __text_start;