diff options
author | Evan Benn <evanbenn@chromium.org> | 2022-06-01 09:30:50 +1000 |
---|---|---|
committer | Edward O'Callaghan <quasisec@chromium.org> | 2022-08-19 04:37:21 +0000 |
commit | 06d32e11473bbd4631cf2709c16d220d81280f2d (patch) | |
tree | fde5857996be69b665cfa82dec16556945436179 | |
parent | 6c1b0acc4ccf4c1fa99b6a0a58fe1a7eb804ce59 (diff) | |
download | flashrom-06d32e11473bbd4631cf2709c16d220d81280f2d.tar.gz flashrom-06d32e11473bbd4631cf2709c16d220d81280f2d.tar.bz2 flashrom-06d32e11473bbd4631cf2709c16d220d81280f2d.zip |
bindings/rust/libflashrom-sys: Create thin rust bindgen binding
Use bindgen to create a rust library that calls into libflashrom using
FFI.
BUG=b:230545739
BRANCH=None
TEST=cargo test
Change-Id: I36ba70de2bca8f83d2fdd6fd4c9b7c28a11624ee
Signed-off-by: Evan Benn <evanbenn@chromium.org>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/65280
Reviewed-by: Edward O'Callaghan <quasisec@chromium.org>
Reviewed-by: Peter Marheine <pmarheine@chromium.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
-rw-r--r-- | .gitattributes | 2 | ||||
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | bindings/rust/libflashrom-sys/.cargo/config.toml | 2 | ||||
-rw-r--r-- | bindings/rust/libflashrom-sys/Cargo.toml | 10 | ||||
-rw-r--r-- | bindings/rust/libflashrom-sys/build.rs | 32 | ||||
-rw-r--r-- | bindings/rust/libflashrom-sys/src/lib.rs | 5 |
6 files changed, 53 insertions, 0 deletions
diff --git a/.gitattributes b/.gitattributes index 10f89626..a663df71 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,5 +1,7 @@ .gitattributes export-ignore .gitignore export-ignore +/bindings export-ignore +/bindings/** export-ignore /util/getrevision.sh export-ignore /util/git-hooks export-ignore /util/git-hooks/** export-ignore @@ -16,3 +16,5 @@ /util/ich_descriptors_tool/ich_descriptors_tool.exe /util/ich_descriptors_tool/.dep /util/ich_descriptors_tool/.obj + +target/ diff --git a/bindings/rust/libflashrom-sys/.cargo/config.toml b/bindings/rust/libflashrom-sys/.cargo/config.toml new file mode 100644 index 00000000..8af59dd8 --- /dev/null +++ b/bindings/rust/libflashrom-sys/.cargo/config.toml @@ -0,0 +1,2 @@ +[env] +RUST_TEST_THREADS = "1" diff --git a/bindings/rust/libflashrom-sys/Cargo.toml b/bindings/rust/libflashrom-sys/Cargo.toml new file mode 100644 index 00000000..54e016d3 --- /dev/null +++ b/bindings/rust/libflashrom-sys/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "libflashrom-sys" +version = "0.1.0" +links = "flashrom" +build = "build.rs" +edition = "2021" + +[build-dependencies] +pkg-config = "0.3.19" +bindgen = "0.59.2" diff --git a/bindings/rust/libflashrom-sys/build.rs b/bindings/rust/libflashrom-sys/build.rs new file mode 100644 index 00000000..43e7cf6c --- /dev/null +++ b/bindings/rust/libflashrom-sys/build.rs @@ -0,0 +1,32 @@ +fn main() { + pkg_config::probe_library("flashrom").unwrap(); + let bindings = bindgen::Builder::default() + .header("../../../include/libflashrom.h") + // Tell cargo to invalidate the built crate whenever any of the + // included header files changed. + .parse_callbacks(Box::new(bindgen::CargoCallbacks)) + // only generate the flashrom functions and used types. + .allowlist_function("flashrom_.*") + // newtype enums provide type checking without the UB potential of rust enums. + .default_enum_style(bindgen::EnumVariation::NewType { is_bitfield: false }) + // We use constified enum for flashrom_log_level to allow '<' comparison. + .constified_enum("flashrom_log_level") + .prepend_enum_name(false) + .derive_copy(false) + .must_use_type("flashrom_wp_result") + // Avoid some va_list related functionality that is not easy to use in rust. + .blocklist_function("flashrom_set_log_callback") + .blocklist_type("flashrom_log_callback") + .blocklist_type("va_list") + .blocklist_type("__builtin_va_list") + .blocklist_type("__va_list_tag") + .size_t_is_usize(true) + .generate() + .expect("Unable to generate bindings"); + + // Write the bindings to the $OUT_DIR/bindings.rs file. + let out_path = std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap()); + bindings + .write_to_file(out_path.join("bindings.rs")) + .expect("Couldn't write bindings!"); +} diff --git a/bindings/rust/libflashrom-sys/src/lib.rs b/bindings/rust/libflashrom-sys/src/lib.rs new file mode 100644 index 00000000..4dc82827 --- /dev/null +++ b/bindings/rust/libflashrom-sys/src/lib.rs @@ -0,0 +1,5 @@ +#![allow(non_upper_case_globals)] +#![allow(non_camel_case_types)] +#![allow(non_snake_case)] +#![allow(deref_nullptr)] +include!(concat!(env!("OUT_DIR"), "/bindings.rs")); |