use std::{error::Error, path::Path};

fn main() -> Result<(), Box<dyn Error>> {
    if std::env::var("CARGO_CFG_TARGET_OS")? == "windows" {
        let mut res = winresource::WindowsResource::new();
        res.set_icon("assets/lemur.ico");
        res.compile()?;
    }

    println!("cargo::rerun-if-changed=shrooms-vb-core");

    let mut builder = cc::Build::new();
    let _ = builder.try_flags_from_environment("SHROOMS_CFLAGS");
    let opt_level = if builder.get_compiler().is_like_msvc() {
        2
    } else {
        3
    };
    builder
        .include(Path::new("shrooms-vb-core/core"))
        .opt_level(opt_level)
        .flag_if_supported("-fno-strict-aliasing")
        .define("VB_LITTLE_ENDIAN", None)
        .define("VB_SIGNED_PROPAGATE", None)
        .define("VB_DIV_GENERIC", None)
        .define("VB_DIRECT_EXECUTE", "on_execute")
        .define("VB_DIRECT_FRAME", "on_frame")
        .define("VB_DIRECT_READ", "on_read")
        .define("VB_DIRECT_WRITE", "on_write")
        .file(Path::new("shrooms-vb-core/core/vb.c"))
        .compile("vb");

    Ok(())
}