diff --git a/zng/cmake.rs b/zng/cmake.rs index 25576253..5d6b6eb8 100644 --- a/zng/cmake.rs +++ b/zng/cmake.rs @@ -14,6 +14,27 @@ pub fn build_zlib_ng(target: &str, compat: bool) { .define("WITH_DFLTCC_INFLATE", "1") .cflag("-DDFLTCC_LEVEL_MASK=0x7e"); } + if target.contains("riscv") { + // Check if we should pass on an explicit boolean value of the WITH_RVV build option. + // See: https://github.com/zlib-ng/zlib-ng?tab=readme-ov-file#advanced-build-options + if let Ok(value) = env::var("RISCV_WITH_RVV") { + match value.trim().to_uppercase().as_str() { + "OFF" | "NO" | "FALSE" | "0" => { + // Force RVV off. This turns off RVV entirely, as well as the runtime check for it. + // This is not usually necessary, but can be useful for building binaries portable + // to systems that do not support RVV but where auto-detection fails to identify + // this (as in https://github.com/zlib-ng/zlib-ng/issues/1705). + cmake.define("WITH_RVV", "OFF"); + } + "ON" | "YES" | "TRUE" | "1" => { + // Try to use RVV, but still don't do so if a runtime check finds it unavailable. + // This has the same effect as omitting WITH_RVV, unless it has already been set. + cmake.define("WITH_RVV", "ON"); + } + _ => {} + } + } + } if target == "i686-pc-windows-msvc" { cmake.define("CMAKE_GENERATOR_PLATFORM", "Win32"); }