blob: 7345c8ec5223a6461caf65c614a61f4bb9af7c6a [file] [view] [edit]
# Getting Started
To get started, first make sure you have Bazel's skylib version 1.7.1 or greater. If
you don't have it, you can use:
```
http_archive(
name = "bazel_skylib",
sha256 = "bc283cdfcd526a52c3201279cda4bc298652efa898b10b4db0837dc51652756f",
urls = [
"https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.7.1/bazel-skylib-1.7.1.tar.gz",
"https://github.com/bazelbuild/bazel-skylib/releases/download/1.7.1/bazel-skylib-1.7.1.tar.gz",
],
)
load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")
bazel_skylib_workspace()
```
## Usage in WORKSPACE
To grab the zephyr-bazel repo, use a git_repository rule in your WORKSPACE,
such as:
```
git_repository(
name = "zephyr-bazel",
remote = "https://pigweed.googlesource.com/zephyr/zephyr-bazel",
branch = "main",
)
```
Once you have `@zephyr-bazel`, we can load the patch rule to generate the
Zephyr diff that will augment Zephyr to include the BUILD.zephyr rules.
```
load("@zephyr-bazel//:setup.bzl", "create_zephyr_patch_file")
create_zephyr_patch_file(
name = "zephyr-patch",
filename = "patch.diff",
# This is optional, use it to see what's going on under the hood
debug = True,
)
```
We now have a diff file at `@zephyr-patch//:patch.diff`. We're ready to load
Zephyr.
```
git_repository(
name = "zephyr",
remote = "https://github.com/zephyrproject-rtos/zephyr.git",
branch = "main",
patches = [
"@zephyr-patch//:patch.diff",
],
)
```
The final step will be to load Zephyr's python dependencies:
```
load("@rules_python//python:pip.bzl", "pip_parse")
pip_parse(
name = "py_deps",
python_interpreter_target = interpreter,
requirements_lock = "@@zephyr//:scripts/requirements-base.txt",
)
load("@py_deps//:requirements.bzl", zephyr_install_deps = "install_deps")
zephyr_install_deps()
```
## Usage in bzlmod
To use zephyr-bazel in bzlmod, first add it as a dependency in your project's
MODULE.bazel:
```
bazel_dep(name = "zephyr-bazel")
git_override(
module_name = "zephyr-bazel",
remote = "https://pigweed.googlesource.com/zephyr/zephyr-bazel",
branch = "main",
)
```
Then use the zephyr_patch_file module extension to generate a patch file and
a Bazel repo with the patch file applied:
```
zephyr_patch_file = use_extension("@zephyr-bazel//:setup.bzl", "zephyr_patch_file")
use_repo(zephyr_patch_file, "zephyr")
```
`pip` is required by the patched zephyr repo, so your project needs to inject
it:
```
pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip")
# Load the Zephyr pip requirements
pip.parse(
hub_name = "pip",
python_version = "3.11",
requirements_lock = "@zephyr//:scripts/requirements-base.txt",
)
use_repo(pip, "pip")
inject_repo(zephyr_patch_file, "pip")
```
## Examples
Examples are located in the `examples/` directory, which contains its own
`MODULE.bazel`. Each subdirectory is a different example project.
To build all of the examples, run the following:
```bash
cd examples
./pw default
```
To build, individual examples specify the Zephyr app target and Zephyr board
platform. For example:
```
bazelisk build //hello_bazel --platforms=@zephyr//boards/tdk/robokit1:same70q21b
bazelisk build //nrf52 --platforms=@zephyr//boards/nordic/nrf52833dk:nrf52833
```
See the `"builds"` in `examples/workflows.json` for an up-to-date list of
commands for building examples.
For more details on how to define Zephyr apps and boards and how the bazel build
maps to the Zephyr build system and constructs, see the
[User Guide](user_guide.md).