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 = "v8")]
8pub mod v8;
9
10#[cfg(feature = "js")]
11pub mod js;
12
13#[non_exhaustive]
14#[derive(Debug, Clone, Copy)]
15/// An enumeration over all the supported runtimes.
16pub enum BackendKind {
17    #[cfg(feature = "cranelift")]
18    /// The `cranelift` runtime.
19    Cranelift,
20
21    #[cfg(feature = "llvm")]
22    /// The `llvm` runtime.
23    LLVM,
24
25    #[cfg(feature = "singlepass")]
26    /// The `singlepass` runtime.
27    Singlepass,
28
29    #[cfg(feature = "sys")]
30    /// The sys `headless` runtime.
31    Headless,
32
33    #[cfg(feature = "v8")]
34    /// The `v8` runtime.
35    V8,
36
37    #[cfg(feature = "js")]
38    /// The `js` runtime.
39    Js,
40}
41
42impl Default for BackendKind {
43    fn default() -> Self {
44        #[cfg(feature = "sys-default")]
45        {
46            #[cfg(feature = "cranelift")]
47            {
48                return Self::Cranelift;
49            }
50            #[cfg(feature = "singlepass")]
51            {
52                return Self::Singlepass;
53            }
54            #[cfg(feature = "llvm")]
55            {
56                return Self::LLVM;
57            }
58            return Self::Headless;
59        }
60
61        #[cfg(feature = "v8-default")]
62        {
63            return Self::V8;
64        }
65
66        #[cfg(feature = "js-default")]
67        {
68            return Self::Js;
69        }
70
71        #[cfg(feature = "sys")]
72        {
73            #[cfg(feature = "cranelift")]
74            {
75                return Self::Cranelift;
76            }
77            #[cfg(feature = "singlepass")]
78            {
79                return Self::Singlepass;
80            }
81            #[cfg(feature = "llvm")]
82            {
83                return Self::LLVM;
84            }
85            return Self::Headless;
86        }
87
88        #[cfg(feature = "v8")]
89        {
90            return Self::V8;
91        }
92
93        #[cfg(feature = "js")]
94        {
95            return Self::Js;
96        }
97
98        panic!("No runtime enabled!")
99    }
100}