]> git.sesse.net Git - bcachefs-tools-debian/blob - rust-src/mount/build.rs
add mount and bch-bindgen nix builder file
[bcachefs-tools-debian] / rust-src / mount / build.rs
1 fn main() {
2         use std::path::PathBuf;
3         use std::process::Command;
4
5         let out_dir: PathBuf = std::env::var_os("OUT_DIR").unwrap().into();
6         let top_dir: PathBuf = std::env::var_os("CARGO_MANIFEST_DIR").unwrap().into();
7         let libbcachefs_inc_dir = std::env::var("LIBBCACHEFS_INCLUDE")
8                 .unwrap_or_else(|_| top_dir.join("libbcachefs").display().to_string());
9         let libbcachefs_inc_dir = std::path::Path::new(&libbcachefs_inc_dir);
10         println!("{}", libbcachefs_inc_dir.display());
11
12         let libbcachefs_dir = top_dir.join("libbcachefs").join("libbcachefs");
13         let bindings = bindgen::builder()
14                 .header(top_dir
15                         .join("src")
16                         .join("libbcachefs_wrapper.h")
17                         .display()
18                         .to_string())
19                 .clang_arg(format!(
20                         "-I{}",
21                         libbcachefs_inc_dir.join("include").display()
22                 ))
23                 .clang_arg(format!("-I{}", libbcachefs_inc_dir.display()))
24                 .clang_arg("-DZSTD_STATIC_LINKING_ONLY")
25                 .clang_arg("-DNO_BCACHEFS_FS")
26                 .clang_arg("-D_GNU_SOURCE")
27                 .derive_debug(false)
28                 .derive_default(true)
29                 .default_enum_style(bindgen::EnumVariation::Rust {
30                         non_exhaustive: true,
31                 })
32                 .whitelist_function("bch2_read_super")
33                 .whitelist_function("bch2_sb_field_.*")
34                 .whitelist_function("bch2_chacha_encrypt_key")
35                 .whitelist_function("derive_passphrase")
36                 .whitelist_function("request_key")
37                 .whitelist_function("add_key")
38                 .whitelist_function("keyctl_search")
39                 .whitelist_var("BCH_.*")
40                 .whitelist_var("KEY_SPEC_.*")
41                 .whitelist_type("bch_kdf_types")
42                 .whitelist_type("bch_sb_field_.*")
43                 .whitelist_type("bch_encrypted_key")
44                 .whitelist_type("nonce")
45                 .rustified_enum("bch_kdf_types")
46                 .opaque_type("gendisk")
47                 .opaque_type("bkey")
48                 .generate()
49                 .unwrap();
50         bindings.write_to_file(out_dir.join("bcachefs.rs")).unwrap();
51
52         let keyutils = pkg_config::probe_library("libkeyutils").unwrap();
53         let bindings = bindgen::builder()
54                 .header(top_dir
55                         .join("src")
56                         .join("keyutils_wrapper.h")
57                         .display()
58                         .to_string())
59                 .clang_args(
60                         keyutils.include_paths
61                                 .iter()
62                                 .map(|p| format!("-I{}", p.display())),
63                 )
64                 .generate()
65                 .unwrap();
66         bindings.write_to_file(out_dir.join("keyutils.rs")).unwrap();
67 }