These rules are for using Bindgen to generate Rust bindings to C (and some C++) libraries.
See the bindgen example for a more complete example of use.
To use the Rust bindgen rules, add the following to your WORKSPACE
file to add the external repositories for the Rust bindgen toolchain (in addition to the rust rules setup):
load("@rules_rust//bindgen:repositories.bzl", "rust_bindgen_dependencies", "rust_bindgen_register_toolchains") rust_bindgen_dependencies() rust_bindgen_register_toolchains()
Generates a rust source file from a cc_library and a header.
ATTRIBUTES
Name | Description | Type | Mandatory | Default |
---|---|---|---|---|
name | A unique name for this target. | Name | required | |
bindgen_flags | Flags to pass directly to the bindgen executable. See https://rust-lang.github.io/rust-bindgen/ for details. | List of strings | optional | [] |
cc_lib | The cc_library that contains the .h file. This is used to find the transitive includes. | Label | optional | None |
clang_flags | Flags to pass directly to the clang executable. | List of strings | optional | [] |
header | The .h file to generate bindings for. | Label | optional | None |
rustfmt | Enable or disable running rustfmt on the generated file. | Boolean | optional | True |
The tools required for the rust_bindgen
rule.
This rule depends on the bindgen
binary crate, and it in turn depends on both a clang binary and the clang library. To obtain these dependencies, rust_bindgen_dependencies
imports bindgen and its dependencies.
load("@rules_rust//bindgen:bindgen.bzl", "rust_bindgen_toolchain") rust_bindgen_toolchain( name = "bindgen_toolchain_impl", bindgen = "//my/rust:bindgen", clang = "//my/clang:clang", libclang = "//my/clang:libclang.so", libstdcxx = "//my/cpp:libstdc++", ) toolchain( name = "bindgen_toolchain", toolchain = "bindgen_toolchain_impl", toolchain_type = "@rules_rust//bindgen:toolchain_type", )
This toolchain will then need to be registered in the current WORKSPACE
. For additional information, see the Bazel toolchains documentation.
ATTRIBUTES
Name | Description | Type | Mandatory | Default |
---|---|---|---|---|
name | A unique name for this target. | Name | required | |
bindgen | The label of a bindgen executable. | Label | optional | None |
clang | The label of a clang executable. | Label | optional | None |
libclang | A cc_library that provides bindgen's runtime dependency on libclang. | Label | optional | None |
libstdcxx | A cc_library that satisfies libclang's libstdc++ dependency. This is used to make the execution of clang hermetic. If None, system libraries will be used instead. | Label | optional | None |
rustfmt | The label of a rustfmt executable. If this is not provided, falls back to the rust_toolchain rustfmt. | Label | optional | None |
Declare dependencies needed for bindgen.
Generates a rust source file for header
, and builds a rust_library.
Arguments are the same as rust_bindgen
, and kwargs
are passed directly to rust_library.
PARAMETERS
Name | Description | Default Value |
---|---|---|
name | A unique name for this target. | none |
header | The label of the .h file to generate bindings for. | none |
cc_lib | The label of the cc_library that contains the .h file. This is used to find the transitive includes. | none |
bindgen_flags | Flags to pass directly to the bindgen executable. See https://rust-lang.github.io/rust-bindgen/ for details. | None |
clang_flags | Flags to pass directly to the clang executable. | None |
rustfmt | Enable or disable running rustfmt on the generated file. | True |
kwargs | Arguments to forward to the underlying rust_library rule. | none |
Registers the default toolchains for the rules_rust
bindgen rules.
PARAMETERS
Name | Description | Default Value |
---|---|---|
register_toolchains | Whether or not to register toolchains. | True |