| // Copyright 2024 The ChromiumOS Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| use anyhow::Context; |
| use anyhow::Result; |
| use cbindgen::Config; |
| use cbindgen::EnumConfig; |
| use cbindgen::Language; |
| use cbindgen::RenameRule; |
| use std::env; |
| use std::path::PathBuf; |
| |
| static COPYRIGHT_CLAUSE: &str = "// Copyright 2024 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 = "ARC_SETUP_RS_H_"; |
| |
| fn main() -> Result<()> { |
| extern crate cbindgen; |
| |
| let crate_dir = env::var("CARGO_MANIFEST_DIR").unwrap(); |
| let output_dir = PathBuf::from(env::var("OUT_DIR").context("failed to get OUT_DIR")?); |
| let output_file = output_dir |
| .join("arc-setup-rs.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, |
| enumeration: EnumConfig { |
| rename_variants: RenameRule::ScreamingSnakeCase, |
| ..Default::default() |
| }, |
| ..Default::default() |
| }; |
| |
| cbindgen::Builder::new() |
| .with_crate(crate_dir) |
| .with_config(config) |
| .with_parse_deps(true) |
| .with_parse_include(&["swap"]) |
| .generate() |
| .context("Unable to generate bindings")? |
| .write_to_file(output_file); |
| |
| Ok(()) |
| } |