# Copyright 2022 Google Inc. All Rights Reserved.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0

workspace(name = "matcha")

local_repository(
    name = "lowrisc_opentitan",
    path = "../opentitan-upstream",
)

# TODO(b/248356571): Replace isp with vendor.
new_local_repository(
    name = "isp",
    build_file = "third_party/vendor/BUILD",
    path = "../../hw/ip/isp",
)

new_local_repository(
    name = "kelvin-gcc",
    build_file = "third_party/kelvin-gcc/BUILD",
    path = "../../cache/toolchain_kelvin",
)

# CRT is the Compiler Repository Toolkit.  It contains the configuration for
# the windows compiler.
load("@lowrisc_opentitan//third_party/crt:repos.bzl", "crt_repos")

crt_repos()

load("@crt//:repos.bzl", "crt_repos")

crt_repos()

load("@crt//:deps.bzl", "crt_deps")

crt_deps()

load("@crt//config:registration.bzl", "crt_register_toolchains")

crt_register_toolchains(riscv32 = True)

load("//platforms:registration.bzl", "kelvin_register_toolchain")

kelvin_register_toolchain()

# Tools for release automation
load("@lowrisc_opentitan//third_party/github:repos.bzl", "github_tools_repos")

github_tools_repos()

# Python Toolchain + PIP Dependencies
load("@lowrisc_opentitan//third_party/python:repos.bzl", "python_repos")

python_repos()

load("@lowrisc_opentitan//third_party/python:deps.bzl", "python_deps")

python_deps()

load("@lowrisc_opentitan//third_party/python:pip.bzl", "pip_deps")

pip_deps()

# Google/Bazel dependencies.  This needs to be after Python initialization
# so that our preferred python configuration takes precedence.
load("@lowrisc_opentitan//third_party/google:repos.bzl", "google_repos")

google_repos()

load("@lowrisc_opentitan//third_party/google:deps.bzl", "google_deps")

google_deps()

# Rust Toolchain + crates.io Dependencies
load("@lowrisc_opentitan//third_party/rust:repos.bzl", "rust_repos")

rust_repos()

load("@lowrisc_opentitan//third_party/rust:deps.bzl", "rust_deps")

rust_deps()

load("@rules_rust//crate_universe:repositories.bzl", "crate_universe_dependencies")

crate_universe_dependencies(bootstrap = True)

load("@lowrisc_opentitan//third_party/rust/crates:crates.bzl", "crate_repositories")

crate_repositories()

# The nonhermetic_repo imports environment variables needed to run vivado.
load("@lowrisc_opentitan//rules:nonhermetic.bzl", "nonhermetic_repo")

nonhermetic_repo(name = "nonhermetic")

# FreeRTOS; used by the OTTF
load("@lowrisc_opentitan//third_party/freertos:repos.bzl", "freertos_repos")

freertos_repos()

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

# Binary firmware image for HyperDebug
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")

http_file(
    name = "hyperdebug_firmware",
    sha256 = "e9c93d2935b9b6a571b547f20fe6177c48a909535d87533b7a0c64fb049bd643",
    urls = ["https://storage.googleapis.com/aoa-recovery-test-images/hyperdebug_v2.0.20491-956ccf530.bin"],
)
