diff --git a/Cargo.toml b/Cargo.toml index d7fbb14..8550bee 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,6 +31,7 @@ cuda = ["whisper-rs-sys/cuda", "_gpu"] hipblas = ["whisper-rs-sys/hipblas", "_gpu"] openblas = ["whisper-rs-sys/openblas"] metal = ["whisper-rs-sys/metal", "_gpu"] +vulkan = ["whisper-rs-sys/vulkan", "_gpu"] _gpu = [] test-with-tiny-model = [] whisper-cpp-log = ["dep:log"] diff --git a/README.md b/README.md index 5e43a84..fb16a90 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,7 @@ All disabled by default unless otherwise specified. * `hipblas`: enable ROCm/hipBLAS support. Only available on linux. Implicitly enables hidden GPU flag at runtime. * `openblas`: enable OpenBLAS support. * `metal`: enable Metal support. Implicitly enables hidden GPU flag at runtime. +* `vulkan`: enable Vulkan support. Implicitly enables hidden GPU flag at runtime. * `whisper-cpp-log`: allows hooking into whisper.cpp's log output and sending it to the `log` backend. Requires calling * `whisper-cpp-tracing`: allows hooking into whisper.cpp's log output and sending it to the `tracing` backend. diff --git a/sys/Cargo.toml b/sys/Cargo.toml index 0f84d90..f4eb1dd 100644 --- a/sys/Cargo.toml +++ b/sys/Cargo.toml @@ -45,6 +45,7 @@ cuda = [] hipblas = [] openblas = [] metal = [] +vulkan = [] force-debug = [] openmp = [] diff --git a/sys/build.rs b/sys/build.rs index a32ec6e..1f904a9 100644 --- a/sys/build.rs +++ b/sys/build.rs @@ -178,6 +178,24 @@ fn main() { } } + if cfg!(feature = "vulkan") { + config.define("GGML_VULKAN", "ON"); + if cfg!(windows) { + println!("cargo:rerun-if-env-changed=VULKAN_SDK"); + println!("cargo:rustc-link-lib=vulkan-1"); + let vulkan_path = match env::var("VULKAN_SDK") { + Ok(path) => PathBuf::from(path), + Err(_) => panic!( + "Please install Vulkan SDK and ensure that VULKAN_SDK env variable is set" + ), + }; + let vulkan_lib_path = vulkan_path.join("Lib"); + println!("cargo:rustc-link-search={}", vulkan_lib_path.display()); + } else { + println!("cargo:rustc-link-lib=vulkan"); + } + } + if cfg!(feature = "openblas") { config.define("GGML_BLAS", "ON"); }