yggdrasil/lib/runtime/build.rs

66 lines
1.7 KiB
Rust
Raw Normal View History

2024-03-12 13:49:02 +02:00
use std::{fs, path::Path};
use abi_generator::{
abi::{ty::TypeWidth, AbiBuilder},
syntax::UnwrapFancy,
TargetEnv,
};
2023-12-28 10:39:47 +02:00
fn add_file<'a>(build: &'a mut cc::Build, name: &'a str) -> &'a mut cc::Build {
println!("cargo:rerun-if-changed={}", name);
build.file(name)
}
2024-03-12 13:49:02 +02:00
fn build_libm() {
2023-12-28 10:39:47 +02:00
println!("cargo:rerun-if-changed=libm/private.h");
let mut build = cc::Build::new();
2024-01-04 22:40:07 +02:00
build
.compiler("clang")
.flag("-ffreestanding")
.flag("-nostdlib");
2023-12-28 10:39:47 +02:00
add_file(&mut build, "libm/s_truncf.c");
add_file(&mut build, "libm/s_ceilf.c");
add_file(&mut build, "libm/s_floorf.c");
2023-12-28 17:18:05 +02:00
add_file(&mut build, "libm/s_fabsf.c");
add_file(&mut build, "libm/s_scalbnf.c");
add_file(&mut build, "libm/s_copysignf.c");
add_file(&mut build, "libm/e_powf.c");
add_file(&mut build, "libm/e_sqrtf.c");
add_file(&mut build, "libm/e_hypotf.c");
add_file(&mut build, "libm/e_fmodf.c");
add_file(&mut build, "libm/w_powf.c");
add_file(&mut build, "libm/w_hypotf.c");
add_file(&mut build, "libm/w_fmodf.c");
2023-12-28 10:39:47 +02:00
build.compile("m");
}
2024-03-12 13:49:02 +02:00
fn generate_abi() {
let output_dir = std::env::var("OUT_DIR").expect("$OUT_DIR not set");
let generated_calls = Path::new(&output_dir).join("generated_calls.rs");
let abi = AbiBuilder::from_string(
yggdrasil_abi_def::ABI_FILE,
TargetEnv {
thin_pointer_width: TypeWidth::U64,
fat_pointer_width: TypeWidth::U64,
},
)
.unwrap_fancy(yggdrasil_abi_def::ABI_FILE);
2024-03-12 13:49:02 +02:00
let calls = prettyplease::unparse(
&abi.emit_file(false, true)
.unwrap_fancy("Could not emit system calls"),
);
fs::write(generated_calls, calls).unwrap();
}
fn main() {
build_libm();
generate_abi();
}