| // Copyright 2019 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| /// Minijail's build script invoked by cargo. |
| /// |
| /// This script prefers linking against a pkg-config provided libminijail, but will fall back to |
| /// building libminijail statically. |
| use std::env; |
| use std::fs::remove_file; |
| use std::io; |
| use std::path::Path; |
| use std::process::Command; |
| |
| fn bindings_generation() -> io::Result<()> { |
| let bindgen = which::which("bindgen").unwrap(); |
| |
| let out_dir = env::var("OUT_DIR").unwrap(); |
| let gen_file = Path::new(&out_dir).join("./crossystem.rs"); |
| if gen_file.exists() { |
| remove_file(&gen_file).expect("Failed to remove generated file."); |
| } |
| let header_dir = Path::new("."); |
| let header_path = header_dir.join("crossystem.h"); |
| println!("cargo:rerun-if-changed={}", header_path.display()); |
| let status = Command::new(&bindgen) |
| .args(&["--default-enum-style", "rust"]) |
| .args(&["--blacklist-type", "__rlim64_t"]) |
| .args(&["--raw-line", "pub type __rlim64_t = u64;"]) |
| .args(&["--blacklist-type", "__u\\d{1,2}"]) |
| .args(&["--raw-line", "pub type __u8 = u8;"]) |
| .args(&["--raw-line", "pub type __u16 = u16;"]) |
| .args(&["--raw-line", "pub type __u32 = u32;"]) |
| .args(&["--blacklist-type", "__uint64_t"]) |
| .arg("--no-layout-tests") |
| .arg("--disable-header-comment") |
| .args(&["--output", gen_file.to_str().unwrap()]) |
| .arg(header_path.to_str().unwrap()) |
| .args(&[ |
| "--", |
| "-DUSE_BINDGEN", |
| "-D_FILE_OFFSET_BITS=64", |
| "-D_LARGEFILE_SOURCE", |
| "-D_LARGEFILE64_SOURCE", |
| ]) |
| .status()?; |
| assert!(status.success()); |
| Ok(()) |
| } |
| |
| fn main() -> io::Result<()> { |
| pkg_config::Config::new().probe("vboot_host").unwrap(); |
| bindings_generation() |
| } |