blob: 8220e04f1d2a22764ca00a1d98e647511105f6b4 [file] [log] [blame]
Kristian H. Kristensen7c45ef12021-04-06 21:54:57 +00001extern crate wayland_scanner;
Kristian H. Kristensen974c7cd2021-01-24 12:50:23 +00002
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +00003use std::env;
Kristian H. Kristensen974c7cd2021-01-24 12:50:23 +00004use std::path::Path;
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +00005use std::path::PathBuf;
Kristian H. Kristensenb54da802021-09-09 12:35:09 +00006use std::process::Command;
Kristian H. Kristensen974c7cd2021-01-24 12:50:23 +00007use wayland_scanner::*;
8
Kristian H. Kristensenb54da802021-09-09 12:35:09 +00009
10fn run_bindgen(header: &str, output: &str) {
11 let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
12
13 Command::new("bindgen")
14 .args(&["-o", out_path.join(output).to_str().unwrap()])
15 .arg("--no-doc-comments")
16 .arg("--no-layout-tests")
17 .args(&["--new-type-alias", "wl_fixed_t"])
18 .args(&["--default-enum-style", "rust_non_exhaustive"])
19 .args(&["--bitfield-enum", "weston_keyboard_modifier"])
20 .args(&["--bitfield-enum", "wl_shell_surface_resize"])
21 .arg(header)
22 .arg("--")
23 .arg("-I/usr/include/pixman-1")
24 .arg("-I./subprojects/weston/include")
25 .arg("-I./bindgen/block")
26 .status().unwrap();
27}
28
Kristian H. Kristensencad53c42021-03-08 16:19:24 +000029fn main() {
30 let protocols = [
Kristian H. Kristensen7c45ef12021-04-06 21:54:57 +000031 "wayland",
32 "linux-dmabuf-unstable-v1",
33 "croscomp",
34 "alpha-compositing-unstable-v1",
35 "aura-shell",
36 "cursor-shapes-unstable-v1",
37 "gaming-input-unstable-v2",
38 "keyboard-configuration-unstable-v1",
39 "keyboard-extension-unstable-v1",
40 "pointer-gestures-unstable-v1",
41 "remote-shell-unstable-v1",
42 "secure-output-unstable-v1",
43 "stylus-tools-unstable-v1",
44 "stylus-unstable-v2",
45 "vsync-feedback-unstable-v1",
Kristian H. Kristensencad53c42021-03-08 16:19:24 +000046 ];
47
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000048 let out_dir_str = env::var("OUT_DIR").unwrap();
Kristian H. Kristensen974c7cd2021-01-24 12:50:23 +000049 let out_dir = Path::new(&out_dir_str);
Kristian H. Kristensencad53c42021-03-08 16:19:24 +000050 for e in &protocols {
Kristian H. Kristensen7c45ef12021-04-06 21:54:57 +000051 let spec = Path::new("protocol").join(e).with_extension("xml");
52 let out = out_dir.join(e).with_extension("rs");
53 println!("cargo:rerun-if-changed={}", spec.to_str().unwrap());
54 println!("// out: {}", out.to_str().unwrap());
55 generate_code_with_destructor_events(spec, out, Side::Server, &[("wl_callback", "done")]);
Kristian H. Kristensencad53c42021-03-08 16:19:24 +000056 }
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000057
Kristian H. Kristensenb54da802021-09-09 12:35:09 +000058 Command::new("pwd").status().unwrap();
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000059
Kristian H. Kristensenb54da802021-09-09 12:35:09 +000060 run_bindgen("/usr/include/linux/input.h", "input.rs");
61 run_bindgen("./subprojects/weston/croscomp_weston.h", "croscomp_weston.rs");
Kristian H. Kristensen8cc818f2021-02-12 22:52:36 +000062
Kristian H. Kristensen7c45ef12021-04-06 21:54:57 +000063 let lib_paths = [
64 "weston/compositor",
65 "weston/desktop-shell",
66 "weston/libweston",
67 "libinput",
68 "libevdev",
Kristian H. Kristensen4cbd08f2021-04-06 18:15:54 +000069 ];
70
Kristian H. Kristensen49a007d2021-09-02 09:18:38 +000071 let build_dir = env::var("MESON_BUILD_DIR").unwrap();
Kristian H. Kristensen4cbd08f2021-04-06 18:15:54 +000072 for p in &lib_paths {
Kristian H. Kristensen49a007d2021-09-02 09:18:38 +000073 println!("cargo:rustc-flags=-L{}/subprojects/{}", build_dir, p);
Kristian H. Kristensen4cbd08f2021-04-06 18:15:54 +000074 }
Kristian H. Kristensen7c45ef12021-04-06 21:54:57 +000075
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000076 println!("cargo:rustc-link-lib=exec_weston");
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000077 println!("cargo:rustc-link-lib=desktop-shell");
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000078 println!("cargo:rustc-link-lib=weston-9");
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000079 println!("cargo:rustc-link-lib=input");
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000080 println!("cargo:rustc-link-lib=evdev-fdo");
81 println!("cargo:rustc-link-lib=wayland-server");
82 println!("cargo:rustc-link-lib=pixman-1");
Kristian H. Kristensen4dd859a2021-01-25 17:28:59 +000083}