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 Crichtonpub 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 Crichtonpub 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 Pattersonpub 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 Crichtonpub 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 Crichtonpub extern "C" fn wasmtime_engine_is_pulley(engine: &wasm_engine_t) -> bool { 53cb51a4f2SAlex Crichton engine.engine.is_pulley() 54cb51a4f2SAlex Crichton } 55