wasmer_c_api/wasm_c_api/engine/config/
mod.rs1#[cfg(feature = "sys")]
2pub(crate) mod sys;
3#[cfg(feature = "sys")]
4pub use sys::*;
5
6use crate::wasm_c_api::unstable::target_lexicon::wasmer_target_t;
7
8use super::{wasm_config_t, wasmer_backend_t};
9
10#[cfg(feature = "jsc")]
11pub(crate) mod jsc;
12
13#[cfg(feature = "v8")]
14pub(crate) mod v8;
15
16#[repr(C)]
17#[derive(Debug)]
18pub(crate) enum wasmer_backend_config_kind_t {
19 #[cfg(feature = "sys")]
20 Sys(sys::wasmer_sys_engine_config_t),
21
22 #[cfg(feature = "jsc")]
23 Jsc(jsc::wasmer_jsc_engine_config_t),
24
25 #[cfg(feature = "v8")]
26 V8(v8::wasmer_v8_engine_config_t),
27}
28
29impl Default for wasmer_backend_config_kind_t {
30 fn default() -> Self {
31 match wasmer_backend_t::default() {
32 #[cfg(feature = "llvm")]
33 super::wasmer_backend_t::LLVM => Self::Sys(sys::wasmer_sys_engine_config_t::default()),
34 #[cfg(feature = "cranelift")]
35 super::wasmer_backend_t::CRANELIFT => {
36 Self::Sys(sys::wasmer_sys_engine_config_t::default())
37 }
38 #[cfg(feature = "singlepass")]
39 super::wasmer_backend_t::SINGLEPASS => {
40 Self::Sys(sys::wasmer_sys_engine_config_t::default())
41 }
42 #[cfg(feature = "sys")]
43 super::wasmer_backend_t::HEADLESS => {
44 Self::Sys(sys::wasmer_sys_engine_config_t::default())
45 }
46 #[cfg(feature = "v8")]
47 super::wasmer_backend_t::V8 => Self::V8(v8::wasmer_v8_engine_config_t),
48 #[cfg(feature = "jsc")]
49 super::wasmer_backend_t::JSC => Self::Jsc(jsc::wasmer_jsc_engine_config_t),
50
51 #[allow(unreachable_patterns)]
52 _ => unreachable!(),
53 }
54 }
55}
56
57#[repr(C)]
58#[derive(Debug, Default)]
59pub(crate) struct wasmer_backend_config_t {
60 pub inner: wasmer_backend_config_kind_t,
61 pub target: Option<Box<wasmer_target_t>>,
62 #[cfg(feature = "middlewares")]
63 pub middlewares: Vec<wasmer_middleware_t>,
64}
65
66#[unsafe(no_mangle)]
106pub extern "C" fn wasm_config_set_target(config: &mut wasm_config_t, target: Box<wasmer_target_t>) {
107 config.backend_config.target = Some(target);
108}
109
110#[unsafe(no_mangle)]
120#[cfg(feature = "middlewares")]
121pub extern "C" fn wasm_config_push_middleware(
122 config: &mut wasm_config_t,
123 middleware: Box<wasmer_middleware_t>,
124) {
125 config.backend_config.middlewares.push(*middleware)
126}