# 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.68.1")
bazel_dep(name = "rules_rust_mdbook", version = "0.68.1")
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 = "cf8b16a4fbf7bc6cb76b804acd510c7cb3adf995",
    remote = "https://pigweed.googlesource.com/pigweed/pigweed",
)

git_override(
    module_name = "ureg",
    commit = "412ca40146d5d2012417e493b4a01096b04edf4b",
    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/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",
    ],
)
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")

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