Kristian H. Kristensen | 974c7cd | 2021-01-24 12:50:23 +0000 | [diff] [blame] | 1 | extern crate wayland_scanner; |
Kristian H. Kristensen | e8d3b4d | 2021-02-05 16:39:09 +0000 | [diff] [blame] | 2 | extern crate bindgen; |
Kristian H. Kristensen | 974c7cd | 2021-01-24 12:50:23 +0000 | [diff] [blame] | 3 | |
Kristian H. Kristensen | e8d3b4d | 2021-02-05 16:39:09 +0000 | [diff] [blame] | 4 | use std::env; |
Kristian H. Kristensen | 974c7cd | 2021-01-24 12:50:23 +0000 | [diff] [blame] | 5 | use std::path::Path; |
Kristian H. Kristensen | e8d3b4d | 2021-02-05 16:39:09 +0000 | [diff] [blame] | 6 | use std::path::PathBuf; |
Kristian H. Kristensen | 974c7cd | 2021-01-24 12:50:23 +0000 | [diff] [blame] | 7 | use wayland_scanner::*; |
| 8 | |
Kristian H. Kristensen | 4dd859a | 2021-01-25 17:28:59 +0000 | [diff] [blame] | 9 | fn generate_protocol(f: &str, out: &str) { |
Kristian H. Kristensen | e8d3b4d | 2021-02-05 16:39:09 +0000 | [diff] [blame] | 10 | let out_dir_str = env::var("OUT_DIR").unwrap(); |
Kristian H. Kristensen | 974c7cd | 2021-01-24 12:50:23 +0000 | [diff] [blame] | 11 | let out_dir = Path::new(&out_dir_str); |
| 12 | |
Kristian H. Kristensen | 4dd859a | 2021-01-25 17:28:59 +0000 | [diff] [blame] | 13 | println!("cargo:rerun-if-changed={}", f); |
Kristian H. Kristensen | 974c7cd | 2021-01-24 12:50:23 +0000 | [diff] [blame] | 14 | generate_code_with_destructor_events( |
Kristian H. Kristensen | 4dd859a | 2021-01-25 17:28:59 +0000 | [diff] [blame] | 15 | f, |
| 16 | out_dir.join(out), |
Kristian H. Kristensen | 974c7cd | 2021-01-24 12:50:23 +0000 | [diff] [blame] | 17 | Side::Client, |
| 18 | &[("wl_callback", "done")], |
| 19 | ); |
| 20 | } |
Kristian H. Kristensen | 4dd859a | 2021-01-25 17:28:59 +0000 | [diff] [blame] | 21 | |
| 22 | fn 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. Kristensen | e8d3b4d | 2021-02-05 16:39:09 +0000 | [diff] [blame] | 26 | |
| 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") |
Kristian H. Kristensen | a37cf3f | 2021-02-08 12:03:50 +0000 | [diff] [blame^] | 32 | .header("./subprojects/weston/desktop-shell/shell.h") |
| 33 | .header("./subprojects/weston/compositor/weston.h") |
Kristian H. Kristensen | e8d3b4d | 2021-02-05 16:39:09 +0000 | [diff] [blame] | 34 | .generate_comments(false) |
| 35 | .default_enum_style(bindgen::EnumVariation::Rust{non_exhaustive: true}) |
| 36 | .layout_tests(false) |
| 37 | .parse_callbacks(Box::new(bindgen::CargoCallbacks)) |
| 38 | .generate() |
| 39 | .expect("Unable to generate bindings"); |
| 40 | |
| 41 | let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); |
| 42 | bindings |
| 43 | .write_to_file(out_path.join("bindings.rs")) |
| 44 | .expect("Couldn't write bindings!"); |
| 45 | |
| 46 | println!("cargo:rustc-flags=-Lbuild/subprojects/weston/compositor"); |
| 47 | println!("cargo:rustc-link-lib=exec_weston"); |
| 48 | println!("cargo:rustc-flags=-Lbuild/subprojects/weston/desktop-shell"); |
| 49 | println!("cargo:rustc-link-lib=desktop-shell"); |
| 50 | println!("cargo:rustc-flags=-Lbuild/subprojects/weston/libweston"); |
| 51 | println!("cargo:rustc-link-lib=weston-9"); |
| 52 | println!("cargo:rustc-flags=-Lbuild/subprojects/libinput"); |
| 53 | println!("cargo:rustc-link-lib=input"); |
| 54 | println!("cargo:rustc-flags=-Lbuild/subprojects/libevdev"); |
| 55 | println!("cargo:rustc-link-lib=evdev-fdo"); |
| 56 | println!("cargo:rustc-link-lib=wayland-server"); |
| 57 | println!("cargo:rustc-link-lib=pixman-1"); |
Kristian H. Kristensen | 4dd859a | 2021-01-25 17:28:59 +0000 | [diff] [blame] | 58 | } |