From 5cbca18263ac8a35b2006429d989f45986d953c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=A9l=20Kerkmann?= Date: Thu, 26 Jun 2025 15:42:01 +0200 Subject: [PATCH] feat: add intel-sycl support Adding Intel Sycl with the feature flag `intel-sycl` to it. Static linking the intel sycl isn't possible, that's the reason why it's dynamic linked. --- Cargo.toml | 1 + sys/Cargo.toml | 1 + sys/build.rs | 33 ++++++++++++++++++++++++++++----- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 8365e48..e9469ad 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,6 +33,7 @@ openblas = ["whisper-rs-sys/openblas"] metal = ["whisper-rs-sys/metal", "_gpu"] vulkan = ["whisper-rs-sys/vulkan", "_gpu"] openmp = ["whisper-rs-sys/openmp"] +intel-sycl = ["whisper-rs-sys/intel-sycl", "_gpu"] _gpu = [] test-with-tiny-model = [] diff --git a/sys/Cargo.toml b/sys/Cargo.toml index adbc89c..8910875 100644 --- a/sys/Cargo.toml +++ b/sys/Cargo.toml @@ -35,6 +35,7 @@ metal = [] vulkan = [] force-debug = [] openmp = [] +intel-sycl = [] [build-dependencies] cmake = "0.1" diff --git a/sys/build.rs b/sys/build.rs index 977dd5f..c441ba0 100644 --- a/sys/build.rs +++ b/sys/build.rs @@ -267,20 +267,39 @@ fn main() { config.define("GGML_OPENMP", "OFF"); } + if cfg!(feature = "intel-sycl") { + config.define("BUILD_SHARED_LIBS", "ON"); + config.define("GGML_SYCL", "ON"); + config.define("GGML_SYCL_TARGET", "INTEL"); + config.define("CMAKE_C_COMPILER", "icx"); + config.define("CMAKE_CXX_COMPILER", "icpx"); + } + let destination = config.build(); add_link_search_path(&out.join("build")).unwrap(); println!("cargo:rustc-link-search=native={}", destination.display()); - println!("cargo:rustc-link-lib=static=whisper"); - println!("cargo:rustc-link-lib=static=ggml"); - println!("cargo:rustc-link-lib=static=ggml-base"); - println!("cargo:rustc-link-lib=static=ggml-cpu"); + if cfg!(feature = "intel-sycl") { + println!("cargo:rustc-link-lib=whisper"); + println!("cargo:rustc-link-lib=ggml"); + println!("cargo:rustc-link-lib=ggml-base"); + println!("cargo:rustc-link-lib=ggml-cpu"); + } else { + println!("cargo:rustc-link-lib=static=whisper"); + println!("cargo:rustc-link-lib=static=ggml"); + println!("cargo:rustc-link-lib=static=ggml-base"); + println!("cargo:rustc-link-lib=static=ggml-cpu"); + } if cfg!(target_os = "macos") || cfg!(feature = "openblas") { println!("cargo:rustc-link-lib=static=ggml-blas"); } if cfg!(feature = "vulkan") { - println!("cargo:rustc-link-lib=static=ggml-vulkan"); + if cfg!(feature = "intel-sycl") { + println!("cargo:rustc-link-lib=ggml-vulkan"); + } else { + println!("cargo:rustc-link-lib=static=ggml-vulkan"); + } } if cfg!(feature = "hipblas") { @@ -299,6 +318,10 @@ fn main() { println!("cargo:rustc-link-lib=static=ggml-blas"); } + if cfg!(feature = "intel-sycl") { + println!("cargo:rustc-link-lib=ggml-sycl"); + } + println!( "cargo:WHISPER_CPP_VERSION={}", get_whisper_cpp_version(&whisper_root)