xref: /wasmtime-44.0.1/crates/c-api/src/engine.rs (revision ae84e6ed)
16ef09359SAlex Crichton use crate::wasm_config_t;
2a8ee0554SNick Fitzgerald use wasmtime::Engine;
36ef09359SAlex Crichton 
46ef09359SAlex Crichton #[repr(C)]
56ef09359SAlex Crichton #[derive(Clone)]
66ef09359SAlex Crichton pub struct wasm_engine_t {
7a8ee0554SNick Fitzgerald     pub(crate) engine: Engine,
86ef09359SAlex Crichton }
96ef09359SAlex Crichton 
106ef09359SAlex Crichton wasmtime_c_api_macros::declare_own!(wasm_engine_t);
116ef09359SAlex Crichton 
12*ae84e6edSAlex Crichton #[unsafe(no_mangle)]
wasm_engine_new() -> Box<wasm_engine_t>136ef09359SAlex Crichton pub extern "C" fn wasm_engine_new() -> Box<wasm_engine_t> {
1468f0d2f6SAlex Crichton     // Enable the `env_logger` crate since this is as good a place as any to
1568f0d2f6SAlex Crichton     // support some "top level initialization" for the C API. Almost all support
1668f0d2f6SAlex Crichton     // should go through this one way or another, so this ensures that
1768f0d2f6SAlex Crichton     // `RUST_LOG` should work reasonably well.
1868f0d2f6SAlex Crichton     //
1968f0d2f6SAlex Crichton     // Note that we `drop` the result here since this fails after the first
2068f0d2f6SAlex Crichton     // initialization attempt. We don't mind that though because this function
2168f0d2f6SAlex Crichton     // can be called multiple times, so we just ignore the result.
2278e098dbSAlex Crichton     #[cfg(feature = "logging")]
2368f0d2f6SAlex Crichton     drop(env_logger::try_init());
2468f0d2f6SAlex Crichton 
256ef09359SAlex Crichton     Box::new(wasm_engine_t {
26a8ee0554SNick Fitzgerald         engine: Engine::default(),
276ef09359SAlex Crichton     })
286ef09359SAlex Crichton }
296ef09359SAlex Crichton 
30*ae84e6edSAlex Crichton #[unsafe(no_mangle)]
wasm_engine_new_with_config(c: Box<wasm_config_t>) -> Box<wasm_engine_t>316ef09359SAlex Crichton pub extern "C" fn wasm_engine_new_with_config(c: Box<wasm_config_t>) -> Box<wasm_engine_t> {
329e22c4e7SRyan Patterson     #[cfg(feature = "logging")]
339e22c4e7SRyan Patterson     drop(env_logger::try_init());
349e22c4e7SRyan Patterson 
356ef09359SAlex Crichton     let config = c.config;
366ef09359SAlex Crichton     Box::new(wasm_engine_t {
3754c07d8fSPeter Huene         engine: Engine::new(&config).unwrap(),
386ef09359SAlex Crichton     })
396ef09359SAlex Crichton }
40c22033bfSAlex Crichton 
41*ae84e6edSAlex Crichton #[unsafe(no_mangle)]
wasmtime_engine_clone(engine: &wasm_engine_t) -> Box<wasm_engine_t>429e22c4e7SRyan Patterson pub extern "C" fn wasmtime_engine_clone(engine: &wasm_engine_t) -> Box<wasm_engine_t> {
439e22c4e7SRyan Patterson     Box::new(engine.clone())
449e22c4e7SRyan Patterson }
459e22c4e7SRyan Patterson 
46*ae84e6edSAlex Crichton #[unsafe(no_mangle)]
wasmtime_engine_increment_epoch(engine: &wasm_engine_t)47c22033bfSAlex Crichton pub extern "C" fn wasmtime_engine_increment_epoch(engine: &wasm_engine_t) {
48c22033bfSAlex Crichton     engine.engine.increment_epoch();
49c22033bfSAlex Crichton }
50cb51a4f2SAlex Crichton 
51*ae84e6edSAlex Crichton #[unsafe(no_mangle)]
wasmtime_engine_is_pulley(engine: &wasm_engine_t) -> bool52cb51a4f2SAlex Crichton pub extern "C" fn wasmtime_engine_is_pulley(engine: &wasm_engine_t) -> bool {
53cb51a4f2SAlex Crichton     engine.engine.is_pulley()
54cb51a4f2SAlex Crichton }
55