1 use std::env;
2 use std::process::Command;
3
4 // WASMTIME_FEATURE_LIST
5 const FEATURES: &[&str] = &[
6 "ASYNC",
7 "PROFILING",
8 "CACHE",
9 "PARALLEL_COMPILATION",
10 "WASI",
11 "WASI_HTTP",
12 "LOGGING",
13 "DISABLE_LOGGING",
14 "COREDUMP",
15 "ADDR2LINE",
16 "DEMANGLE",
17 "THREADS",
18 "GC",
19 "GC_DRC",
20 "GC_NULL",
21 "CRANELIFT",
22 "WINCH",
23 "DEBUG_BUILTINS",
24 "WAT",
25 "POOLING_ALLOCATOR",
26 "COMPONENT_MODEL",
27 "PULLEY",
28 "ALL_ARCH",
29 ];
30 // ... if you add a line above this be sure to change the other locations
31 // marked WASMTIME_FEATURE_LIST
32
main()33 fn main() {
34 println!("cargo:rerun-if-changed=cmake/features.cmake");
35 println!("cargo:rerun-if-changed=cmake/install-headers.cmake");
36 println!("cargo:rerun-if-changed=include");
37
38 let out_dir = std::env::var("OUT_DIR").unwrap();
39 let mut cmake = Command::new("cmake");
40 cmake.arg("-DWASMTIME_DISABLE_ALL_FEATURES=ON");
41 cmake.arg(format!("-DCMAKE_INSTALL_PREFIX={out_dir}"));
42 for f in FEATURES {
43 if env::var_os(format!("CARGO_FEATURE_{f}")).is_some() {
44 cmake.arg(format!("-DWASMTIME_FEATURE_{f}=ON"));
45 }
46 }
47
48 cmake.arg("-P").arg("cmake/install-headers.cmake");
49
50 let status = cmake.status().expect("failed to spawn `cmake`");
51 assert!(status.success());
52
53 println!("cargo:include={out_dir}/include");
54 }
55