extern crate cc; use std::fs::File; use std::io::{Result, Write}; fn main() { println!("cargo:rerun-if-env-changed=LOG"); println!("cargo:rerun-if-env-changed=BOARD"); println!("cargo:rerun-if-env-changed=SFSIMG"); let arch: String = std::env::var("ARCH").unwrap(); let board: String = std::env::var("BOARD").unwrap(); match arch.as_str() { "x86_64" => { gen_vector_asm().unwrap(); } "riscv32" => { } "riscv64" => { if board == "k210" { println!("cargo:rustc-link-search=native={}", "../tools/k210"); println!("cargo:rustc-link-lib=static=kendryte"); } } "aarch64" => { } _ => panic!("Unknown arch {}", arch), } } fn gen_vector_asm() -> Result<()> { let mut f = File::create("src/arch/x86_64/interrupt/vector.asm").unwrap(); writeln!(f, "# generated by build.rs - do not edit")?; writeln!(f, ".section .text")?; writeln!(f, ".intel_syntax noprefix")?; for i in 0..256 { writeln!(f, "vector{}:", i)?; if !(i == 8 || (i >= 10 && i <= 14) || i == 17) { writeln!(f, "\tpush 0")?; } writeln!(f, "\tpush {}", i)?; writeln!(f, "\tjmp __alltraps")?; } writeln!(f, "\n.section .rodata")?; writeln!(f, ".global __vectors")?; writeln!(f, "__vectors:")?; for i in 0..256 { writeln!(f, "\t.quad vector{}", i)?; } Ok(()) }