# Licensed under the Apache-2.0 license
# SPDX-License-Identifier: Apache-2.0

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

bazel_dep(name = "bazel_skylib", version = "1.8.2")
bazel_dep(name = "pigweed")
bazel_dep(name = "platforms", version = "1.0.0")
bazel_dep(name = "rules_rust", version = "0.70.0")
bazel_dep(name = "rules_rust_mdbook", version = "0.70.0")
bazel_dep(name = "rules_platform", version = "0.1.0")
bazel_dep(name = "rules_python", version = "1.8.3")
bazel_dep(name = "ureg")
bazel_dep(name = "caliptra_deps", version = "0.0.0")
local_path_override(
    module_name = "caliptra_deps",
    path = "third_party/caliptra",
)

git_override(
    module_name = "pigweed",
    commit = "417e988c5550fc383be5048955efd49698a0833b",  # roll:pigweed
    patch_args = ["-p1"],
    patches = [
        # Allow integration_tests to build for armv7-m / armv7e-m so the
        # AST10x0 unittest_runner can use it.
        "//third_party/pigweed:integration_tests_armv7m.patch",
        # Stage .bin alongside .elf in system_image_test runfiles.
        "//third_party/pigweed:system_image_test_bin_runfiles.patch",
    ],
    remote = "https://pigweed.googlesource.com/pigweed/pigweed",
)

git_override(
    module_name = "ureg",
    commit = "4762ed5eef323a4267720a6b6da287c88738f901",
    remote = "https://github.com/chipsalliance/caliptra-ureg",
)

pw_rust = use_extension("@pigweed//pw_toolchain/rust:extensions.bzl", "pw_rust")
pw_rust.toolchain(cipd_tag = "git_revisions:fe5c95d4ae33ec9d7831921e448e2daf8264ea42,7b074fc9362a4a6a5f172dd8936a22fb25eff96b")
use_repo(pw_rust, "pw_rust_toolchains")

register_toolchains(
    "@pigweed//pw_toolchain/host_clang:host_cc_toolchain_linux",
    "@pigweed//pw_toolchain/host_clang:host_cc_toolchain_macos",
    "@pigweed//pw_toolchain/arm_clang:arm_clang_cc_toolchain_cortex-m4",
    "@pigweed//pw_toolchain/riscv_clang:riscv_clang_cc_toolchain_rv32imc",
    "@pw_rust_toolchains//:all",
)

crate = use_extension("@rules_rust//crate_universe:extension.bzl", "crate")
crate.from_cargo(
    name = "rust_crates",
    cargo_lockfile = "//third_party/crates_io:Cargo.lock",
    manifests = ["//third_party/crates_io:Cargo.toml"],
    # crate_universe's defaults do not include some embedded triples so the
    # triples are listed explicitly.
    supported_platform_triples = [
        # Host platforms
        "aarch64-unknown-linux-gnu",
        "x86_64-unknown-linux-gnu",
        "aarch64-apple-darwin",
        "x86_64-apple-darwin",

        # Target platforms
        "riscv32imc-unknown-none-elf",
        "thumbv7em-none-eabi",
    ],
)
use_repo(crate, "rust_caliptra_crates", "rust_caliptra_crates_host", "rust_crates")

pw_rust_crates_ext = use_extension("@pigweed//pw_build:pw_rust_crates_extension.bzl", "pw_rust_crates_extension")

# Ideally, we shouldn't need to override the pigweed `rust_crates` repo as it
# requires the downstream (openprot) repo adding pigweed cargo deps to its own
# Cargo.toml.  This is currently needed to work around a limitation in
# rules_rust and unsupported target triples.
#
# TODO(cfrantz): Remove this override and non-directly  referenced crates
# once pigweed has adopted a version of rules_rust that fixes the limitation.
override_repo(
    pw_rust_crates_ext,
    rust_crates = "rust_crates",
)

bazel_dep(name = "opentitan_devbundle")
archive_override(
    module_name = "opentitan_devbundle",
    integrity = "sha256-GP3ysylvAFBUKyDHu1al2swa2CA2Od2GGMgJLcoOZTY=",
    url = "https://storage.googleapis.com/artifacts.opentitan.org/dev_bundle/devbundle-20260401.tar.xz",
)

# Caliptra source repositories — declared via a module_extension in
# third_party/caliptra/extensions.bzl so the git_repository commits
# can be driven by versions.bzl at BUILD load time. bzlmod forbids
# `load()` in MODULE.bazel files directly, but allows it in .bzl
# files that back module extensions — that is how CALIPTRA_VERSIONS
# gets threaded from versions.bzl to the git_repository commits
# here.
#
# A previous attempt to move these declarations via `use_repo_rule`
# from the nested caliptra_deps module rolled back (Task 1.1 of
# cargo_universe.md) because the repos ended up in the nested
# module's namespace, invisible to the overlay BUILD files at
# //third_party/caliptra/caliptra-*:overlay.BUILD. The module
# extension pattern sidesteps that trap: `use_repo` below lifts the
# extension's repos into the root module's namespace, so every
# downstream target sees @caliptra_sw / @caliptra_mcu_sw exactly as
# they did when the declarations were inline.
caliptra_repos_ext = use_extension(
    "//third_party/caliptra:extensions.bzl",
    "caliptra_repos",
)
use_repo(caliptra_repos_ext, "caliptra_mcu_sw", "caliptra_sw")

nonhermetic_repo = use_repo_rule("//target/earlgrey/tooling/signing:nonhermetic.bzl", "nonhermetic_repo")

nonhermetic_repo(name = "nonhermetic")

# ── AST1060 Peripheral Access Crate (svd2rust-generated) ──
ast1060_pac_ext = use_extension(
    "//third_party:ast1060_pac.bzl",
    "ast1060_pac_ext",
)
use_repo(ast1060_pac_ext, "ast1060_pac", "vcell")

hsm = use_extension("//third_party/hsm:extensions.bzl", "hsm")
use_repo(hsm, "cloud_kms_hsm")

# ── lowRISC QEMU (ot-earlgrey machine for earlgrey QEMU tests) ──
# Tag v10.2.0-2026-01-15, sha256 9e97f93b... (locked in third_party/qemu/extensions.bzl).
qemu = use_extension("//third_party/qemu:extensions.bzl", "qemu")
use_repo(qemu, "qemu_opentitan", "qemu_opentitan_src")

# ── Python deps for QEMU tooling scripts (cfggen, flashgen) ──
pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip")
pip.parse(
    hub_name = "openprot_python_deps",
    python_version = "3.11",
    requirements_lock = "//third_party/qemu:requirements.txt",
)
use_repo(pip, "openprot_python_deps")
