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");
}