blob: f21100099ad73aed462fffaffa12d7437c840aa5 [file] [log] [blame]
// Copyright 2022 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.
use cbindgen::Config;
use cbindgen::Language;
use std::env;
use std::path::PathBuf;
use anyhow::{Context, Result};
static COPYRIGHT_CLAUSE: &str = "// Copyright 2022 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.";
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(())
}