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

new_local_repository(
    name = "cheriot-llvm",
    build_file = "third_party/cheriot-llvm/BUILD",
    path = "../../cache/cheriot-tools",
)

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

load("//platforms:registration.bzl", "cheriot_register_toolchain")
cheriot_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_deps")

kelvin_deps()
