wasmer/backend/
mod.rs

1//! This submodule has the concrete definitions for all the available implenters of the WebAssembly
2//! types needed to create a runtime.
3
4#[cfg(feature = "sys")]
5pub mod sys;
6
7#[cfg(feature = "wamr")]
8pub mod wamr;
9
10#[cfg(feature = "wasmi")]
11pub mod wasmi;
12
13#[cfg(feature = "v8")]
14pub mod v8;
15
16#[cfg(feature = "js")]
17pub mod js;
18
19#[cfg(feature = "jsc")]
20pub mod jsc;
21
22#[non_exhaustive]
23#[derive(Debug, Clone, Copy)]
24/// An enumeration over all the supported runtimes.
25pub enum BackendKind {
26    #[cfg(feature = "cranelift")]
27    /// The `cranelift` runtime.
28    Cranelift,
29
30    #[cfg(feature = "llvm")]
31    /// The `llvm` runtime.
32    LLVM,
33
34    #[cfg(feature = "singlepass")]
35    /// The `singlepass` runtime.
36    Singlepass,
37
38    #[cfg(feature = "sys")]
39    /// The sys `headless` runtime.
40    Headless,
41
42    #[cfg(feature = "wamr")]
43    /// The `wamr` runtime.
44    Wamr,
45
46    #[cfg(feature = "wasmi")]
47    /// The `wasmi` runtime.
48    Wasmi,
49
50    #[cfg(feature = "v8")]
51    /// The `v8` runtime.
52    V8,
53
54    #[cfg(feature = "js")]
55    /// The `js` runtime.
56    Js,
57
58    #[cfg(feature = "jsc")]
59    /// The `jsc` runtime.
60    Jsc,
61}
62
63impl Default for BackendKind {
64    fn default() -> Self {
65        #[cfg(feature = "sys-default")]
66        {
67            #[cfg(feature = "cranelift")]
68            {
69                return Self::Cranelift;
70            }
71            #[cfg(feature = "singlepass")]
72            {
73                return Self::Singlepass;
74            }
75            #[cfg(feature = "llvm")]
76            {
77                return Self::LLVM;
78            }
79            return Self::Headless;
80        }
81
82        #[cfg(feature = "wamr-default")]
83        {
84            return Self::Wamr;
85        }
86
87        #[cfg(feature = "wasmi-default")]
88        {
89            return Self::Wasmi;
90        }
91
92        #[cfg(feature = "v8-default")]
93        {
94            return Self::V8;
95        }
96
97        #[cfg(feature = "js-default")]
98        {
99            return Self::Js;
100        }
101
102        #[cfg(feature = "jsc-default")]
103        {
104            return Self::Jsc;
105        }
106
107        #[cfg(feature = "sys")]
108        {
109            #[cfg(feature = "cranelift")]
110            {
111                return Self::Cranelift;
112            }
113            #[cfg(feature = "singlepass")]
114            {
115                return Self::Singlepass;
116            }
117            #[cfg(feature = "llvm")]
118            {
119                return Self::LLVM;
120            }
121            return Self::Headless;
122        }
123
124        #[cfg(feature = "wamr")]
125        {
126            return Self::Wamr;
127        }
128
129        #[cfg(feature = "wasmi")]
130        {
131            return Self::Wasmi;
132        }
133
134        #[cfg(feature = "v8")]
135        {
136            return Self::V8;
137        }
138
139        #[cfg(feature = "js")]
140        {
141            return Self::Js;
142        }
143
144        #[cfg(feature = "jsc")]
145        {
146            return Self::Jsc;
147        }
148
149        panic!("No runtime enabled!")
150    }
151}