# Copyright 2026 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.

module(
    name = "examples",
    version = "0.0.1",
)

bazel_dep(name = "bazel_skylib", version = "1.8.2")
bazel_dep(name = "platforms", version = "1.0.0")
bazel_dep(name = "rules_platform", version = "0.1.0")
bazel_dep(name = "rules_python", version = "1.8.3")
bazel_dep(name = "rules_cc", version = "0.2.17")
bazel_dep(name = "rules_shell", version = "0.6.1")
bazel_dep(name = "zephyr-bazel")
bazel_dep(name = "protobuf", version = "33.4")

include("//:pigweed_dep.MODULE.bazel")

# Module overrides
# ================

local_path_override(
    module_name = "zephyr-bazel",
    path = "..",
)

# Configure Pigweed to use zephyr-bazel
# =====================================
pw_zephyr_config = use_extension("@pigweed//zephyr/config:pw_zephyr_config.bzl", "pw_zephyr_config")

override_repo(
    pw_zephyr_config,
    kconfig = "zephyr_kconfig",
    zephyr = "zephyr",
    zephyr_version = "zephyr_version",
)

# Toolchain registration
# ======================
# Register Pigweed's C++ toolchains.
register_toolchains(
    "@pigweed//pw_toolchain/host_clang:host_cc_toolchain_linux",
    "@pigweed//pw_toolchain/host_clang:host_cc_toolchain_macos",
    "@zephyr-bazel//toolchain/xtensa:xtensa_gcc_cc_dc233c",
    "@zephyr-bazel//toolchain/arm:cortex-m_gcc_cc_cortex-m4",
    "@zephyr-bazel//toolchain/arm:cortex-m_gcc_cc_cortex-m7",
    "@zephyr-bazel//toolchain/arm:cortex-m_gcc_cc_cortex-m33",
    "@zephyr-bazel//toolchain/arc:arc_gcc_cc",
    "@zephyr-bazel//toolchain/arm64:arm64_gcc_cc",
    "@zephyr-bazel//toolchain/mips:mips_gcc_cc",
    "@zephyr-bazel//toolchain/riscv:riscv_gcc_cc",
    "@zephyr-bazel//toolchain/rx:rx_gcc_cc",
    "@zephyr-bazel//toolchain/sparc:sparc_gcc_cc",
    "@zephyr-bazel//toolchain/x86:x86_gcc_cc",
    dev_dependency = True,
)

# Register native_sim execution platform, so it can be used for tests.
register_execution_platforms(
    "@zephyr//boards/native/native_sim:native",
)

# Zephyr setup
# ============

zephyr_patch = use_extension("@zephyr-bazel//:setup.bzl", "zephyr_patch_file")
zephyr_patch.checkout(
    # The autoroller is broken. Manually update on 2026-5-8.
    commit = "684c9e8f32e4373a21098559f748f06915f950c9",
    patches = [
        "//patches/zephyr:0001-dts-bindings-adc-Add-Atmosic-ADC-gain-values.patch",
        "//patches/zephyr:0002-cortex-m-systick-add-sys-clock-correct.patch",
    ],
)

# Get access to the patched zephyr repo.
use_repo(zephyr_patch, "zephyr", "zephyr_version")

inject_repo(zephyr_patch, "hal_nordic")

inject_repo(zephyr_patch, "hal_atmel")

inject_repo(zephyr_patch, "hal_xtensa")

inject_repo(zephyr_patch, "cmsis_6")

inject_repo(zephyr_patch, "openair")

new_git_repository = use_repo_rule("@bazel_tools//tools/build_defs/repo:git.bzl", "new_git_repository")

new_git_repository(
    name = "cmsis_6",
    build_file = "@zephyr-bazel//modules:cmsis_6.BUILD",
    commit = "30a859f44ef8ab4dc8f84b03ed586fd16ccf9d74",
    remote = "https://github.com/zephyrproject-rtos/CMSIS_6.git",
)

new_git_repository(
    name = "hal_atmel",
    build_file = "@zephyr-bazel//modules:hal_atmel.BUILD",
    commit = "56d60ebc909ad065bf6554cee73487969857614b",
    remote = "https://github.com/zephyrproject-rtos/hal_atmel.git",
)

new_git_repository(
    name = "hal_nordic",
    build_file = "@zephyr-bazel//modules:hal_nordic.BUILD",
    commit = "44fd3d44b15cb75f80a25b4679f91d2787e28664",
    remote = "https://github.com/zephyrproject-rtos/hal_nordic.git",
)

new_git_repository(
    name = "hal_xtensa",
    build_file = "@zephyr-bazel//modules:hal_xtensa.BUILD",
    commit = "3cc9e3a9360be5c96c956dce84064b85439b6769",
    remote = "https://github.com/zephyrproject-rtos/hal_xtensa.git",
)

new_git_repository(
    name = "openair",
    build_file = "@zephyr-bazel//modules:openair.BUILD",
    commit = "bbcce66481a2b082a4c195bc11ab1f2298c4fefb",
    remote = "https://github.com/atmosic/openair",
    patches = [
        "//patches/openair:0001-add-full-name-to-boards.patch",
    ],
    patch_args = ["-p1"],
)

python = use_extension("@rules_python//python/extensions:python.bzl", "python")
python.toolchain(
    configure_coverage_tool = True,
    # Only set when you have multiple toolchain versions.
    is_default = True,
    python_version = "3.11",
)
use_repo(python, "pythons_hub")

# Pip dependencies are provided by zephyr-bazel

zephyr_setup = use_extension("@zephyr-bazel//:setup.bzl", "zephyr_setup")
zephyr_setup.env(
    apps_dirs = ["//:MODULE.bazel"],
    boards_dirs = [
        "@openair//:BUILD.bazel",
    ],
    manual_boards = [
        "nrf52833dk/nrf52833",
        "native_sim/native",
        "qemu_arc/qemu_arc_em",
        "qemu_cortex_a53/qemu_cortex_a53",
        "qemu_leon3/leon3",
        "qemu_malta/qemu_malta/be",
        "qemu_riscv32/qemu_virt_riscv32",
        "qemu_rx/r5f562n8",
        "qemu_x86_64/atom",
    ],
    modules = [
        "@hal_atmel//:zephyr/module.yml",
        "@hal_xtensa//:zephyr/module.yml",
        "@openair//:zephyr/module.yml",
        "@pigweed//zephyr:module.yml",
    ],

)
use_repo(
    zephyr_setup,
    "zephyr_index",
    "zephyr_kconfig",
    "zephyr_state",
)

zephyr_setup_apps = use_extension("@zephyr-bazel//:setup.bzl", "zephyr_setup_apps")
inject_repo(zephyr_setup_apps, "openair")

