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

# Used by airgapped environment
new_local_repository(
    name = "kelvin_core",
    build_file_content = """
exports_files(glob(["**"]))

filegroup(
    name = "all_files",
    srcs = glob(["*.*"]),
    visibility = ["//visibility:public"],
)
    """,
    path = "../../out/kelvin/hw/kelvin_core",
)

# Used by airgapped environment
new_local_repository(
    name = "fastvdma_core",
    build_file_content = """
exports_files(glob(["**"]))
filegroup(
    name = "all_files",
    srcs = glob(["*.*"]),
    visibility = ["//visibility:public"],
)
    """,
    path = "../../out/matcha/hw/fastvdma_core",
)

# 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.11")
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()
