| Zephyr-Bazel |
| ======================================= |
| |
| The way this repository works is by overlaying itself on top of Zephyr. 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() |
| ``` |
| |
| 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() |
| ``` |
| |
| Application |
| =========== |
| In your main application, you can now use the Zephyr utilities for building |
| your app. |
| |
| ``` |
| load("@zephyr//:defs.bzl", "dts_cc_library") |
| |
| dts_cc_library( |
| name = "app_native_sim_dts", |
| dts_lib = "@zephyr//boards/native/native_sim:native_sim", |
| ) |
| |
| cc_binary( |
| ... |
| deps = [ |
| ... |
| "@zephyr//:zephyr", |
| ] + select({ |
| "@platform//cpu:x86_64": [ |
| ":app_native_sim_dts", |
| "@zephyr//include:posix", |
| ], |
| }), |
| copts = select({ |
| "@platform//cpu:x86_64": [ |
| "-DCONFIG_ARCH_POSIX=1", |
| ], |
| }), |
| ) |
| ``` |
| |
| Examples |
| ======== |
| There is currently just 1 example, you can run it via: |
| |
| ``` |
| $ cd examples/hello_dts |
| $ bazel run :app |
| ``` |
| |
| Or, you can run the tests via: |
| |
| ``` |
| $ cd examples/hello_dts |
| $ bazel test //... |
| ``` |