// Copyright 2022 The ChromiumOS Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. use std::env; use std::path::PathBuf; use anyhow::Context; use anyhow::Result; use cbindgen::Config; use cbindgen::Language; static COPYRIGHT_CLAUSE: &str = "// Copyright 2022 The ChromiumOS Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file."; static AUTOGENERATED_DISCLAIMER: &str = "/* Warning, this file is autogenerated by cbindgen. Don't modify this manually. */"; static INCLUDE_GUARD: &str = "CROSVM_CONTROL_H_"; fn main() -> Result<()> { // Skip building dependencies when generating documents. if std::env::var("CARGO_DOC").is_ok() { return Ok(()); } let crate_dir = env::var("CARGO_MANIFEST_DIR").unwrap(); let target_dir = env::var("OUT_DIR").context("failed to get OUT_DIR")?; let output_file = PathBuf::from(target_dir) .join("crosvm_control.h") .display() .to_string(); let config = Config { language: Language::C, cpp_compat: true, header: Some(String::from(COPYRIGHT_CLAUSE)), include_guard: Some(String::from(INCLUDE_GUARD)), autogen_warning: Some(String::from(AUTOGENERATED_DISCLAIMER)), include_version: true, ..Default::default() }; cbindgen::Builder::new() .with_crate(crate_dir) .with_config(config) .generate() .context("Unable to generate bindings")? .write_to_file(&output_file); Ok(()) }