# 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).
