diff --git a/crates/c-api/include/wasmtime.h b/crates/c-api/include/wasmtime.h index dc8d91bf72..e5987886c4 100644 --- a/crates/c-api/include/wasmtime.h +++ b/crates/c-api/include/wasmtime.h @@ -61,6 +61,8 @@ WASMTIME_CONFIG_PROP(void, cranelift_debug_verifier, bool) WASMTIME_CONFIG_PROP(void, cranelift_opt_level, wasmtime_opt_level_t) WASMTIME_CONFIG_PROP(wasmtime_error_t*, profiler, wasmtime_profiling_strategy_t) +WASM_API_EXTERN wasmtime_error_t* wasmtime_config_cache_config_load(wasm_config_t*, const char*); + /////////////////////////////////////////////////////////////////////////////// // Converts from the text format of WebAssembly to to the binary format. diff --git a/crates/c-api/src/config.rs b/crates/c-api/src/config.rs index 5ec6f9b621..eab9119110 100644 --- a/crates/c-api/src/config.rs +++ b/crates/c-api/src/config.rs @@ -1,4 +1,6 @@ use crate::{handle_result, wasmtime_error_t}; +use std::ffi::CStr; +use std::os::raw::c_char; use wasmtime::{Config, OptLevel, ProfilingStrategy, Strategy}; #[repr(C)] @@ -126,3 +128,21 @@ pub extern "C" fn wasmtime_config_profiler_set( }); handle_result(result, |_cfg| {}) } + +#[no_mangle] +pub unsafe extern "C" fn wasmtime_config_cache_config_load( + c: &mut wasm_config_t, + filename: *const c_char, +) -> Option> { + handle_result( + if filename.is_null() { + c.config.cache_config_load_default() + } else { + match CStr::from_ptr(filename).to_str() { + Ok(s) => c.config.cache_config_load(s), + Err(e) => Err(e.into()), + } + }, + |_cfg| {}, + ) +}