use std::env;
fn main() {
    let mut build = cc::Build::new();
    build
        .file("c/lib.c")
        .include("include")
        .warnings(false)
        .flag_if_supported("-std=c99")
        .flag_if_supported("-fPIC");
            let target_arch = env::var("CARGO_CFG_TARGET_ARCH").unwrap_or_default();
    let target_endian = env::var("CARGO_CFG_TARGET_ENDIAN").unwrap_or_default();
            let target = env::var("TARGET").unwrap_or_default();
    if target.contains("linux") {
        build.flag_if_supported("-fdiagnostics-color=always");
        build.flag_if_supported("-O3");
        build.flag_if_supported("-pedantic");
                if target_arch == "x86_64" {
            build.define("SZ_USE_X86_AVX512", "1");
            build.define("SZ_USE_X86_AVX2", "1");
        } else {
            build.define("SZ_USE_X86_AVX512", "0");
            build.define("SZ_USE_X86_AVX2", "0");
        }
        if target_arch == "aarch64" {
            build.flag_if_supported("-march=armv8-a+simd");
            build.define("SZ_USE_ARM_SVE", "1");
            build.define("SZ_USE_ARM_NEON", "1");
        } else {
            build.define("SZ_USE_ARM_SVE", "0");
            build.define("SZ_USE_ARM_NEON", "0");
        }
    } else if target.contains("darwin") {
        build.flag_if_supported("-fcolor-diagnostics");
        build.flag_if_supported("-O3");
        build.flag_if_supported("-pedantic");
        if target_arch == "x86_64" {
                        build.define("SZ_USE_X86_AVX512", "0");
            build.define("SZ_USE_X86_AVX2", "1");
        } else {
            build.define("SZ_USE_X86_AVX512", "0");
            build.define("SZ_USE_X86_AVX2", "0");
        }
        if target_arch == "aarch64" {
            build.define("SZ_USE_ARM_SVE", "0");             build.define("SZ_USE_ARM_NEON", "1");
        } else {
            build.define("SZ_USE_ARM_SVE", "0");
            build.define("SZ_USE_ARM_NEON", "0");
        }
    } else if target.contains("windows") {
                if target_arch == "x86_64" {
            build.define("SZ_USE_X86_AVX512", "1");
            build.define("SZ_USE_X86_AVX2", "1");
        } else {
            build.define("SZ_USE_X86_AVX512", "0");
            build.define("SZ_USE_X86_AVX2", "0");
        }
    }
        if target_endian == "big" {
        build.define("SZ_DETECT_BIG_ENDIAN", "1");
    } else {
        build.define("SZ_DETECT_BIG_ENDIAN", "0");
    }
    build.compile("stringzilla");
    println!("cargo:rerun-if-changed=c/lib.c");
    println!("cargo:rerun-if-changed=rust/lib.rs");
    println!("cargo:rerun-if-changed=include/stringzilla/stringzilla.h");
}