1#![expect(unused_crate_dependencies, reason = "used in bin")]
6
7#[cfg(any(
8 feature = "rust-llvm-20",
9 feature = "rust-llvm-21",
10 feature = "rust-llvm-22"
11))]
12use aya_rustc_llvm_proxy as _;
13
14macro_rules! assert_unique_features {
15 () => {};
16 ($first:tt $(,$rest:tt)*) => {
17 $(
18 #[cfg(all(feature = $first, feature = $rest))]
19 compile_error!(concat!("features \"", $first, "\" and \"", $rest, "\" cannot be used together"));
20 )*
21 assert_unique_features!($($rest),*);
22 }
23}
24
25macro_rules! assert_used_features {
26 ($($all:tt),*) => {
27 #[cfg(not(any($(feature = $all),*)))]
28 compile_error!(concat!("One of the LLVM feature flags must be provided: ", $($all, " "),*));
29 }
30}
31
32macro_rules! assert_unique_used_features {
33 ($($all:tt),*) => {
34 assert_unique_features!($($all),*);
35 assert_used_features!($($all),*);
36 }
37}
38
39assert_unique_used_features! {
40 "llvm-20",
41 "llvm-21",
42 "llvm-22"
43}
44
45#[cfg(feature = "llvm-20")]
46pub extern crate llvm_sys_20 as llvm_sys;
47#[cfg(feature = "llvm-21")]
48pub extern crate llvm_sys_21 as llvm_sys;
49#[cfg(feature = "llvm-22")]
50pub extern crate llvm_sys_22 as llvm_sys;
51
52mod linker;
53mod llvm;
54
55pub use linker::*;