blob: 51942632af51dd3b7d98ce1b1d96904a82194cef [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. Kristensen5567e152021-02-08 13:37:34 +000017 Side::Server,
Kristian H. Kristensen974c7cd2021-01-24 12:50:23 +000018 &[("wl_callback", "done")],
19 );
20}
Kristian H. Kristensen4dd859a2021-01-25 17:28:59 +000021
22fn main() {
Kristian H. Kristensen8a6892b2021-03-03 23:58:38 +000023 generate_protocol("./protocol/wayland.xml", "wayland_api.rs");
24 generate_protocol("./protocol/linux-dmabuf-unstable-v1.xml",
Kristian H. Kristensen4dd859a2021-01-25 17:28:59 +000025 "linux_dmabuf_unstable_v1_api.rs");
Kristian H. Kristensen8a6892b2021-03-03 23:58:38 +000026 generate_protocol("./protocol/croscomp.xml", "croscomp_api.rs");
27 generate_protocol("./protocol/alpha-compositing-unstable-v1.xml",
28 "alpha-compositing-unstable-v1.rs");
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000029
30 let bindings = bindgen::Builder::default()
31 .clang_arg("-I/usr/include/pixman-1")
32 .clang_arg("-I./subprojects/weston/include")
33 .clang_arg("-I./bindgen/block")
34 .header("./subprojects/weston/include/libweston/backend-drm.h")
Kristian H. Kristensena37cf3f2021-02-08 12:03:50 +000035 .header("./subprojects/weston/desktop-shell/shell.h")
36 .header("./subprojects/weston/compositor/weston.h")
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000037 .generate_comments(false)
Kristian H. Kristensenebc5e8e2021-02-26 14:32:24 +000038 .new_type_alias("wl_fixed_t")
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000039 .default_enum_style(bindgen::EnumVariation::Rust{non_exhaustive: true})
Kristian H. Kristensen8038f502021-02-08 12:05:45 +000040 .bitfield_enum("weston_keyboard_modifier")
Kristian H. Kristensen3ec92492021-02-22 12:16:13 +000041 .bitfield_enum("wl_shell_surface_resize")
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000042 .layout_tests(false)
43 .parse_callbacks(Box::new(bindgen::CargoCallbacks))
44 .generate()
45 .expect("Unable to generate bindings");
46
47 let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
48 bindings
49 .write_to_file(out_path.join("bindings.rs"))
50 .expect("Couldn't write bindings!");
51
Kristian H. Kristensen8cc818f2021-02-12 22:52:36 +000052 let bindings = bindgen::Builder::default()
53 .header("/usr/include/linux/input.h")
54 .generate_comments(false)
55 .generate()
56 .expect("Unable to generate input.h bindings");
57
58 let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
59 bindings
60 .write_to_file(out_path.join("input.rs"))
61 .expect("Couldn't write bindings!");
62
Kristian H. Kristensen62cf9812021-02-19 10:05:39 +000063 println!("cargo:rustc-flags=-Lx86_64/subprojects/weston/compositor");
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000064 println!("cargo:rustc-link-lib=exec_weston");
Kristian H. Kristensen62cf9812021-02-19 10:05:39 +000065 println!("cargo:rustc-flags=-Lx86_64/subprojects/weston/desktop-shell");
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000066 println!("cargo:rustc-link-lib=desktop-shell");
Kristian H. Kristensen62cf9812021-02-19 10:05:39 +000067 println!("cargo:rustc-flags=-Lx86_64/subprojects/weston/libweston");
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000068 println!("cargo:rustc-link-lib=weston-9");
Kristian H. Kristensen62cf9812021-02-19 10:05:39 +000069 println!("cargo:rustc-flags=-Lx86_64/subprojects/libinput");
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000070 println!("cargo:rustc-link-lib=input");
Kristian H. Kristensen62cf9812021-02-19 10:05:39 +000071 println!("cargo:rustc-flags=-Lx86_64/subprojects/libevdev");
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000072 println!("cargo:rustc-link-lib=evdev-fdo");
73 println!("cargo:rustc-link-lib=wayland-server");
74 println!("cargo:rustc-link-lib=pixman-1");
Kristian H. Kristensen4dd859a2021-01-25 17:28:59 +000075}