blob: 33b7977faa5e47d84062f8ed5815255bc8f61996 [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 +00009fn run_bindgen(header: &str, output: &str) {
10 let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
11
Kristian H. Kristensen1cea60c2021-09-17 12:41:35 +000012 let sysroot = env::var("SYSROOT").unwrap_or("/".to_string());
13
14 let status = Command::new("bindgen")
Kristian H. Kristensen129df192021-09-27 08:48:04 +000015 .args(&["-o", out_path.join(output).to_str().unwrap()])
16 .arg("--no-doc-comments")
17 .arg("--no-layout-tests")
18 .args(&["--new-type-alias", "wl_fixed_t"])
19 .args(&["--default-enum-style", "rust_non_exhaustive"])
20 .args(&["--bitfield-enum", "weston_keyboard_modifier"])
21 .args(&["--bitfield-enum", "wl_shell_surface_resize"])
Kristian H. Kristensene1d57ee2021-11-10 23:33:29 +010022 .args(&["--bitfield-enum", "weston_activate_flag"])
Kristian H. Kristensenb7d53512021-11-12 14:24:17 +010023 .args(&["--no-copy", "shell_surface"])
Kristian H. Kristensen129df192021-09-27 08:48:04 +000024 .arg(header)
25 .arg("--")
26 .arg(format!("--sysroot={}", sysroot))
27 .arg("-I/usr/include/pixman-1")
Kristian H. Kristensen37e86ea2021-10-06 21:13:25 +000028 .arg("-I./weston/include")
Kristian H. Kristensen129df192021-09-27 08:48:04 +000029 .arg("-I./bindgen/block")
30 .status()
31 .unwrap();
Kristian H. Kristensen1cea60c2021-09-17 12:41:35 +000032
33 assert!(status.success())
Kristian H. Kristensenb54da802021-09-09 12:35:09 +000034}
35
Kristian H. Kristensencad53c42021-03-08 16:19:24 +000036fn main() {
37 let protocols = [
Kristian H. Kristensen7c45ef12021-04-06 21:54:57 +000038 "wayland",
Kristian H. Kristensen999d8402021-10-13 13:40:29 +000039 "xdg-shell",
Kristian H. Kristensen73a22cf2021-10-11 12:09:18 +000040 "weston-screenshooter",
Kristian H. Kristensen7c45ef12021-04-06 21:54:57 +000041 "linux-dmabuf-unstable-v1",
42 "croscomp",
43 "alpha-compositing-unstable-v1",
44 "aura-shell",
45 "cursor-shapes-unstable-v1",
46 "gaming-input-unstable-v2",
47 "keyboard-configuration-unstable-v1",
48 "keyboard-extension-unstable-v1",
49 "pointer-gestures-unstable-v1",
50 "remote-shell-unstable-v1",
51 "secure-output-unstable-v1",
52 "stylus-tools-unstable-v1",
53 "stylus-unstable-v2",
54 "vsync-feedback-unstable-v1",
Kristian H. Kristensencad53c42021-03-08 16:19:24 +000055 ];
56
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000057 let out_dir_str = env::var("OUT_DIR").unwrap();
Kristian H. Kristensen974c7cd2021-01-24 12:50:23 +000058 let out_dir = Path::new(&out_dir_str);
Kristian H. Kristensencad53c42021-03-08 16:19:24 +000059 for e in &protocols {
Kristian H. Kristensen7c45ef12021-04-06 21:54:57 +000060 let spec = Path::new("protocol").join(e).with_extension("xml");
61 let out = out_dir.join(e).with_extension("rs");
62 println!("cargo:rerun-if-changed={}", spec.to_str().unwrap());
Kristian H. Kristensen7c45ef12021-04-06 21:54:57 +000063 generate_code_with_destructor_events(spec, out, Side::Server, &[("wl_callback", "done")]);
Kristian H. Kristensencad53c42021-03-08 16:19:24 +000064 }
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000065
Kristian H. Kristensenb54da802021-09-09 12:35:09 +000066 run_bindgen("/usr/include/linux/input.h", "input.rs");
Kristian H. Kristensen73599dc2021-10-07 20:05:00 +000067 run_bindgen("./weston/croscomp_weston.h", "croscomp_weston.rs");
Kristian H. Kristensen8cc818f2021-02-12 22:52:36 +000068
Kristian H. Kristensen37a41f82022-01-20 14:17:36 +010069 let lib_paths = ["libweston"];
Kristian H. Kristensen4cbd08f2021-04-06 18:15:54 +000070
Kristian H. Kristensen18c7e1e2021-11-11 17:03:03 +010071 let build_dir =
72 env::var("MESON_BUILD_DIR").unwrap_or(format!("{}/../../../weston", out_dir_str));
73
Kristian H. Kristensen4cbd08f2021-04-06 18:15:54 +000074 for p in &lib_paths {
Kristian H. Kristensen37e86ea2021-10-06 21:13:25 +000075 println!("cargo:rustc-flags=-L{}/{}", build_dir, p);
Kristian H. Kristensen4cbd08f2021-04-06 18:15:54 +000076 }
Kristian H. Kristensen7c45ef12021-04-06 21:54:57 +000077
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. Kristensen37e86ea2021-10-06 21:13:25 +000080 println!("cargo:rustc-link-lib=evdev");
Kristian H. Kristensene8d3b4d2021-02-05 16:39:09 +000081 println!("cargo:rustc-link-lib=wayland-server");
82 println!("cargo:rustc-link-lib=pixman-1");
Kristian H. Kristensen4dd859a2021-01-25 17:28:59 +000083}