xref: /aosp_15_r20/external/bazelbuild-rules_rust/docs/rust_bindgen.vm (revision d4726bddaa87cc4778e7472feed243fa4b6c267f)
1#[[
2## Overview
3
4These rules are for using [Bindgen][bindgen] to generate [Rust][rust] bindings to C (and some C++) libraries.
5
6[rust]: http://www.rust-lang.org/
7[bindgen]: https://github.com/rust-lang/rust-bindgen
8
9See the [bindgen example](https://github.com/bazelbuild/rules_rust/tree/main/examples/bindgen/BUILD.bazel) for a more complete example of use.
10
11### Setup
12
13To use the Rust bindgen rules, add the following to your `WORKSPACE` file to add the
14external repositories for the Rust bindgen toolchain (in addition to the [rust rules setup](https://bazelbuild.github.io/rules_rust/#setup)):
15
16```python
17load("@rules_rust//bindgen:repositories.bzl", "rust_bindgen_dependencies", "rust_bindgen_register_toolchains")
18
19rust_bindgen_dependencies()
20
21rust_bindgen_register_toolchains()
22
23load("@rules_rust//bindgen:transitive_repositories.bzl", "rust_bindgen_transitive_dependencies")
24
25rust_bindgen_transitive_dependencies()
26```
27
28Bindgen aims to be as hermetic as possible so will end up building `libclang` from [llvm-project][llvm_proj] from
29source. If this is found to be undesirable then no Bindgen related calls should be added to your WORKSPACE and instead
30users should define their own repositories using something akin to [crate_universe][cra_uni] and define their own
31toolchains following the instructions for [rust_bindgen_toolchain](#rust_bindgen_toolchain).
32
33[llvm_proj]: https://github.com/llvm/llvm-project
34[cra_uni]: https://bazelbuild.github.io/rules_rust/crate_universe.html
35
36---
37
38---
39
40]]#
41