| # Pigweed Rust Third Party Crates |
| |
| This is a repository to vendor and provide build rules for the third party |
| crates that Pigweed's rust code depends on. Currently only Bazel build rules are |
| provided. |
| |
| ## `std` and `no_std` |
| |
| This repository provides two separate sets of crates. One for `std` environments |
| and one for `no_std` environments. The set that is used is determined by the |
| `//:std_enabled` constraint setting and defaults to `std`. To use `no_std` add |
| `@rust_crates//:no_std` to your platform definition. |
| |
| ## Adding and Updating the Crates |
| |
| The list of vendored crates is defined by the dependencies listed in |
| [//crates/Cargo.toml](crates/Cargo.toml) and |
| [//crates_std/Cargo.toml](crates_std/Cargo.toml). The |
| contents of the `//crates` and `//crates_std` directories are generated by the |
| `//:crates_vendor` and `//:crates_vendor_std` targets. |
| |
| To update the vendored crates, build files, and aliases to match run the following commands from the |
| top level directory of the repository: |
| |
| ```bash |
| bazel run //:crates_vendor -- --repin |
| bazel run //:crates_vendor_std -- --repin |
| cargo run -- --config config.toml > aliases.bzl |
| ``` |
| |
| Licenses can be checked with `cargo license -d` in the appropriate stub_crate. |
| |
| ## Markdown Formatting |
| |
| We keep this, and all Markdown files in this repository, in a consistent |
| Markdown format using [mdformat](https://pypi.org/project/mdformat). To install |
| and format, use the following commands: |
| |
| ```bash |
| pip install mdformat-gfm |
| mdformat README.md |
| ``` |
| |
| ## FAQ |
| |
| ### collect2: fatal error: cannot find 'ld' error |
| |
| ``` |
| = note: collect2: fatal error: cannot find 'ld' |
| compilation terminated. |
| ``` |
| |
| If you get the above error when running `bazel run //:crates_vendor -- --repin`, |
| ensure `lld` is installed on your system. For instance, on Debian based systems: |
| |
| ``` |
| sudo apt install lld |
| ``` |
| |
| ### env: Studio: No such file or directory |
| |
| An error like above is cause by having a directory in your `$PATH` containing |
| a space. `rules_rust`'s wrapper script around vendoring does not properly |
| escape the path. |
| |
| Workaround: remove directories containing spaces from your `$PATH`. |