1#[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)]
15pub enum BackendKind {
17 #[cfg(feature = "cranelift")]
18 Cranelift,
20
21 #[cfg(feature = "llvm")]
22 LLVM,
24
25 #[cfg(feature = "singlepass")]
26 Singlepass,
28
29 #[cfg(feature = "sys")]
30 Headless,
32
33 #[cfg(feature = "v8")]
34 V8,
36
37 #[cfg(feature = "js")]
38 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}