blob: f5c7f89febc3281209b1310888cadccef7cd1b4e [file] [log] [blame]
Kristian H. Kristensen974c7cd2021-01-24 12:50:23 +00001extern crate wayland_scanner;
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +00002extern crate bindgen;
Kristian H. Kristensen974c7cd2021-01-24 12:50:23 +00003
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +00004use std::env;
Kristian H. Kristensen974c7cd2021-01-24 12:50:23 +00005use std::path::Path;
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +00006use std::path::PathBuf;
Kristian H. Kristensen974c7cd2021-01-24 12:50:23 +00007use wayland_scanner::*;
8
Kristian H. Kristensen4dd859a2021-01-25 17:28:59 +00009fn generate_protocol(f: &str, out: &str) {
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000010 let out_dir_str = env::var("OUT_DIR").unwrap();
Kristian H. Kristensen974c7cd2021-01-24 12:50:23 +000011 let out_dir = Path::new(&out_dir_str);
12
Kristian H. Kristensen4dd859a2021-01-25 17:28:59 +000013 println!("cargo:rerun-if-changed={}", f);
Kristian H. Kristensen974c7cd2021-01-24 12:50:23 +000014 generate_code_with_destructor_events(
Kristian H. Kristensen4dd859a2021-01-25 17:28:59 +000015 f,
16 out_dir.join(out),
Kristian H. Kristensen974c7cd2021-01-24 12:50:23 +000017 Side::Client,
18 &[("wl_callback", "done")],
19 );
20}
Kristian H. Kristensen4dd859a2021-01-25 17:28:59 +000021
22fn main() {
23 generate_protocol("./wayland.xml", "wayland_api.rs");
24 generate_protocol("./linux-dmabuf-unstable-v1.xml",
25 "linux_dmabuf_unstable_v1_api.rs");
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000026
27 let bindings = bindgen::Builder::default()
28 .clang_arg("-I/usr/include/pixman-1")
29 .clang_arg("-I./subprojects/weston/include")
30 .clang_arg("-I./bindgen/block")
31 .header("./subprojects/weston/include/libweston/backend-drm.h")
32 .header("./subprojects/weston/desktop-shell/exports.h")
33 .generate_comments(false)
34 .default_enum_style(bindgen::EnumVariation::Rust{non_exhaustive: true})
35 .layout_tests(false)
36 .parse_callbacks(Box::new(bindgen::CargoCallbacks))
37 .generate()
38 .expect("Unable to generate bindings");
39
40 let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
41 bindings
42 .write_to_file(out_path.join("bindings.rs"))
43 .expect("Couldn't write bindings!");
44
45 println!("cargo:rustc-flags=-Lbuild/subprojects/weston/compositor");
46 println!("cargo:rustc-link-lib=exec_weston");
47 println!("cargo:rustc-flags=-Lbuild/subprojects/weston/desktop-shell");
48 println!("cargo:rustc-link-lib=desktop-shell");
49 println!("cargo:rustc-flags=-Lbuild/subprojects/weston/libweston");
50 println!("cargo:rustc-link-lib=weston-9");
51 println!("cargo:rustc-flags=-Lbuild/subprojects/libinput");
52 println!("cargo:rustc-link-lib=input");
53 println!("cargo:rustc-flags=-Lbuild/subprojects/libevdev");
54 println!("cargo:rustc-link-lib=evdev-fdo");
55 println!("cargo:rustc-link-lib=wayland-server");
56 println!("cargo:rustc-link-lib=pixman-1");
Kristian H. Kristensen4dd859a2021-01-25 17:28:59 +000057}