# Copyright 2023 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",
)

new_local_repository(
    name = "isp_yocto",
    build_file = "third_party/vendor/BUILD",
    path = "../../hw/ip/isp/ispyocto",
)

new_local_repository(
    name = "axi2sramcrs",
    build_file = "third_party/vendor/BUILD",
    path = "../../hw/ip/isp/axi2sramcrs",
)

local_repository(
    name = "kelvin_hw",
    path = "../kelvin",
)

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

new_local_repository(
    name = "kelvin-binary",
    build_file = "third_party/kelvin-binary/BUILD",
    path = "../../out/kelvin/sw/bazel_out",
)

# 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()

# 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"],
)

# kelvin verilog dependencies
load("@kelvin_hw//rules:repos.bzl", "kelvin_repos")
kelvin_repos()

# Scala setup
load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config")
scala_config(scala_version = "2.13.6")
load("@io_bazel_rules_scala//scala:scala.bzl", "rules_scala_setup", "rules_scala_toolchain_deps_repositories")
rules_scala_setup()
rules_scala_toolchain_deps_repositories(fetch_sources = True)
load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains")
scala_register_toolchains()
load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains")
rules_proto_dependencies()
rules_proto_toolchains()

load("@kelvin_hw//rules:deps.bzl", "kelvin_chisel_deps")
kelvin_chisel_deps()
