blob: 22b61f94cef19ec449644556c3ceab7354f4a5ce [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. Kristensencad53c42021-03-08 16:19:24 +00009fn main() {
10 let protocols = [
11 "wayland",
12 "linux-dmabuf-unstable-v1",
13 "croscomp",
14 "alpha-compositing-unstable-v1",
15 "aura-shell",
16 "cursor-shapes-unstable-v1",
17 "gaming-input-unstable-v2",
18 "keyboard-configuration-unstable-v1",
19 "keyboard-extension-unstable-v1",
20 "pointer-gestures-unstable-v1",
21 "remote-shell-unstable-v1",
22 "secure-output-unstable-v1",
23 "stylus-tools-unstable-v1",
24 "stylus-unstable-v2",
25 "vsync-feedback-unstable-v1",
26 ];
27
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000028 let out_dir_str = env::var("OUT_DIR").unwrap();
Kristian H. Kristensen974c7cd2021-01-24 12:50:23 +000029 let out_dir = Path::new(&out_dir_str);
Kristian H. Kristensencad53c42021-03-08 16:19:24 +000030 for e in &protocols {
31 let spec = Path::new("protocol").join(e).with_extension("xml");
32 let out = out_dir.join(e).with_extension("rs");
33 println!("cargo:rerun-if-changed={}", spec.to_str().unwrap());
34 println!("// out: {}", out.to_str().unwrap());
35 generate_code_with_destructor_events(
36 spec,
37 out,
38 Side::Server,
39 &[("wl_callback", "done")],
40 );
41 }
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000042
43 let bindings = bindgen::Builder::default()
44 .clang_arg("-I/usr/include/pixman-1")
45 .clang_arg("-I./subprojects/weston/include")
46 .clang_arg("-I./bindgen/block")
47 .header("./subprojects/weston/include/libweston/backend-drm.h")
Kristian H. Kristensena37cf3f2021-02-08 12:03:50 +000048 .header("./subprojects/weston/desktop-shell/shell.h")
49 .header("./subprojects/weston/compositor/weston.h")
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000050 .generate_comments(false)
Kristian H. Kristensenebc5e8e2021-02-26 14:32:24 +000051 .new_type_alias("wl_fixed_t")
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000052 .default_enum_style(bindgen::EnumVariation::Rust{non_exhaustive: true})
Kristian H. Kristensen8038f502021-02-08 12:05:45 +000053 .bitfield_enum("weston_keyboard_modifier")
Kristian H. Kristensen3ec92492021-02-22 12:16:13 +000054 .bitfield_enum("wl_shell_surface_resize")
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000055 .layout_tests(false)
56 .parse_callbacks(Box::new(bindgen::CargoCallbacks))
57 .generate()
58 .expect("Unable to generate bindings");
59
60 let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
61 bindings
62 .write_to_file(out_path.join("bindings.rs"))
63 .expect("Couldn't write bindings!");
64
Kristian H. Kristensen8cc818f2021-02-12 22:52:36 +000065 let bindings = bindgen::Builder::default()
66 .header("/usr/include/linux/input.h")
67 .generate_comments(false)
68 .generate()
69 .expect("Unable to generate input.h bindings");
70
71 let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
72 bindings
73 .write_to_file(out_path.join("input.rs"))
74 .expect("Couldn't write bindings!");
75
Kristian H. Kristensen4cbd08f2021-04-06 18:15:54 +000076 let lib_paths = [
77 "weston/compositor",
78 "weston/desktop-shell",
79 "weston/libweston",
80 "libinput",
81 "libevdev"
82 ];
83
84 let chost = env::var("CHOST").unwrap();
85 for p in &lib_paths {
86 println!("cargo:rustc-flags=-Ltarget/{}/debug/meson/subprojects/{}", chost, p);
87 }
88
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000089 println!("cargo:rustc-link-lib=exec_weston");
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000090 println!("cargo:rustc-link-lib=desktop-shell");
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000091 println!("cargo:rustc-link-lib=weston-9");
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000092 println!("cargo:rustc-link-lib=input");
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000093 println!("cargo:rustc-link-lib=evdev-fdo");
94 println!("cargo:rustc-link-lib=wayland-server");
95 println!("cargo:rustc-link-lib=pixman-1");
Kristian H. Kristensen4dd859a2021-01-25 17:28:59 +000096}