Merge pull request #148 from hlhr202/feature/fix-metal

Feature/fix metal
This commit is contained in:
Niko 2024-06-03 04:42:17 +00:00 committed by GitHub
commit f1030ef762
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 32 additions and 5 deletions

1
.gitignore vendored
View file

@ -1,3 +1,4 @@
**/target
**/Cargo.lock
/.idea
/.vscode

View file

@ -81,7 +81,13 @@ pub unsafe fn set_log_callback(
log_callback: crate::WhisperLogCallback,
user_data: *mut std::ffi::c_void,
) {
unsafe { whisper_rs_sys::whisper_log_set(log_callback, user_data) }
unsafe {
whisper_rs_sys::whisper_log_set(log_callback, user_data);
#[cfg(feature = "metal")]
{
whisper_rs_sys::ggml_backend_metal_log_set_callback(log_callback, user_data);
}
}
}
/// Print system information.

View file

@ -37,6 +37,13 @@ unsafe extern "C" fn whisper_cpp_log_trampoline(
/// You should only call this once (subsequent calls have no ill effect).
pub fn install_whisper_log_trampoline() {
crate::LOG_TRAMPOLINE_INSTALL.call_once(|| unsafe {
whisper_rs_sys::whisper_log_set(Some(whisper_cpp_log_trampoline), std::ptr::null_mut())
whisper_rs_sys::whisper_log_set(Some(whisper_cpp_log_trampoline), std::ptr::null_mut());
#[cfg(feature = "metal")]
{
whisper_rs_sys::ggml_backend_metal_log_set_callback(
Some(whisper_cpp_log_trampoline),
std::ptr::null_mut(),
);
}
});
}

View file

@ -37,6 +37,13 @@ unsafe extern "C" fn whisper_cpp_tracing_trampoline(
/// You should only call this once (subsequent calls have no effect).
pub fn install_whisper_tracing_trampoline() {
crate::LOG_TRAMPOLINE_INSTALL.call_once(|| unsafe {
whisper_rs_sys::whisper_log_set(Some(whisper_cpp_tracing_trampoline), std::ptr::null_mut())
whisper_rs_sys::whisper_log_set(Some(whisper_cpp_tracing_trampoline), std::ptr::null_mut());
#[cfg(feature = "metal")]
{
whisper_rs_sys::ggml_backend_metal_log_set_callback(
Some(whisper_cpp_tracing_trampoline),
std::ptr::null_mut(),
);
}
});
}

View file

@ -101,8 +101,12 @@ fn main() {
let _: u64 = std::fs::copy("src/bindings.rs", out.join("bindings.rs"))
.expect("Failed to copy bindings.rs");
} else {
let bindings = bindgen::Builder::default()
.header("wrapper.h")
let bindings = bindgen::Builder::default().header("wrapper.h");
#[cfg(feature = "metal")]
let bindings = bindings.header("whisper.cpp/ggml-metal.h");
let bindings = bindings
.clang_arg("-I./whisper.cpp")
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
.generate();
@ -169,6 +173,8 @@ fn main() {
if cfg!(feature = "metal") {
config.define("WHISPER_METAL", "ON");
config.define("WHISPER_METAL_NDEBUG", "ON");
config.define("WHISPER_METAL_EMBED_LIBRARY", "ON");
} else {
// Metal is enabled by default, so we need to explicitly disable it
config.define("WHISPER_METAL", "OFF");