static-generics 0.1.3

Zero-cost generic statics for Rust.
Documentation
fn main() {
    /* try to detect Cranelift backend, it does not support inline asm properly */
    println!("cargo::rustc-check-cfg=cfg(static_generics_fallback)");
    println!("cargo::rustc-check-cfg=cfg(miri)");
    println!("cargo::rustc-check-cfg=cfg(loom)");
    println!("cargo::rerun-if-env-changed=CARGO_ENCODED_RUSTFLAGS");
    println!("cargo::rerun-if-env-changed=RUSTFLAGS");
    println!("cargo::rerun-if-env-changed=STATIC_GENERICS_FORCE_FALLBACK");
    println!("cargo::rerun-if-env-changed=CARGO_PROFILE_DEV_CODEGEN_BACKEND");
    println!("cargo::rerun-if-env-changed=CARGO_PROFILE_RELEASE_CODEGEN_BACKEND");

    if std::env::var("STATIC_GENERICS_FORCE_FALLBACK").as_deref() == Ok("1") {
        println!("cargo::rustc-cfg=static_generics_fallback");
        return;
    }

    let envs = [
        std::env::var("CARGO_ENCODED_RUSTFLAGS").unwrap_or_default(),
        std::env::var("RUSTFLAGS").unwrap_or_default(),
        std::env::var("CARGO_PROFILE_DEV_CODEGEN_BACKEND").unwrap_or_default(),
        std::env::var("CARGO_PROFILE_RELEASE_CODEGEN_BACKEND").unwrap_or_default(),
    ];

    let hit = envs
        .iter()
        .any(|s| s.contains("cranelift") || s.contains("cg_clif"));
    if hit {
        println!("cargo::rustc-cfg=static_generics_fallback");
    }
}