# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0

load("//rules:matcha.bzl", "OPENTITAN_CPU")

package(default_visibility = ["//visibility:public"])

cc_library(
    name = "isr_testutils",
    srcs = ["autogen/isr_testutils.c"],
    hdrs = ["autogen/isr_testutils.h"],
    target_compatible_with = [OPENTITAN_CPU],
    deps = [
        "//hw/top_matcha/sw/autogen:top_matcha",
        "@lowrisc_opentitan//sw/device/lib/dif:adc_ctrl",
        "@lowrisc_opentitan//sw/device/lib/dif:alert_handler",
        "@lowrisc_opentitan//sw/device/lib/dif:aon_timer",
        "@lowrisc_opentitan//sw/device/lib/dif:csrng",
        "@lowrisc_opentitan//sw/device/lib/dif:edn",
        "@lowrisc_opentitan//sw/device/lib/dif:entropy_src",
        "@lowrisc_opentitan//sw/device/lib/dif:flash_ctrl",
        "@lowrisc_opentitan//sw/device/lib/dif:gpio",
        "@lowrisc_opentitan//sw/device/lib/dif:hmac",
        "@lowrisc_opentitan//sw/device/lib/dif:i2c",
        "@lowrisc_opentitan//sw/device/lib/dif:keymgr",
        "@lowrisc_opentitan//sw/device/lib/dif:kmac",
        "@lowrisc_opentitan//sw/device/lib/dif:otbn",
        "@lowrisc_opentitan//sw/device/lib/dif:otp_ctrl",
        "@lowrisc_opentitan//sw/device/lib/dif:pattgen",
        "@lowrisc_opentitan//sw/device/lib/dif:pwrmgr",
        "@lowrisc_opentitan//sw/device/lib/dif:rv_plic",
        "@lowrisc_opentitan//sw/device/lib/dif:rv_timer",
        "@lowrisc_opentitan//sw/device/lib/dif:sensor_ctrl",
        "@lowrisc_opentitan//sw/device/lib/dif:spi_device",
        "@lowrisc_opentitan//sw/device/lib/dif:spi_host",
        "@lowrisc_opentitan//sw/device/lib/dif:sysrst_ctrl",
        "@lowrisc_opentitan//sw/device/lib/dif:uart",
        "@lowrisc_opentitan//sw/device/lib/dif:usbdev",
        "@lowrisc_opentitan//sw/device/lib/testing/test_framework:check",
    ],
)

cc_library(
    name = "pinmux_testutils",
    srcs = ["pinmux_testutils.c"],
    hdrs = ["pinmux_testutils.h"],
    target_compatible_with = [OPENTITAN_CPU],
    deps = [
        "//hw/top_matcha/sw/autogen:top_matcha",
        "//sw/device/lib/arch:device",
        "//sw/device/lib/dif:pinmux",
        "@lowrisc_opentitan//sw/device/lib/dif:base",
        "@lowrisc_opentitan//sw/device/lib/dif:gpio",
        "@lowrisc_opentitan//sw/device/lib/runtime:hart",
        "@lowrisc_opentitan//sw/device/lib/testing/test_framework:check",
    ],
)

cc_library(
    name = "clkmgr_testutils",
    srcs = ["clkmgr_testutils.c"],
    hdrs = ["@lowrisc_opentitan//sw/device/lib/testing:clkmgr_testutils.h"],
    target_compatible_with = [OPENTITAN_CPU],
    deps = [
        "//sw/device/lib/dif:clkmgr",
        "@lowrisc_opentitan//sw/device/lib/runtime:ibex",
        "@lowrisc_opentitan//sw/device/lib/testing/test_framework:check",
    ],
)

cc_library(
    name = "alert_handler_testutils",
    srcs = ["@lowrisc_opentitan//sw/device/lib/testing:alert_handler_testutils.c"],
    hdrs = ["@lowrisc_opentitan//sw/device/lib/testing:alert_handler_testutils.h"],
    target_compatible_with = [OPENTITAN_CPU],
    deps = [
        "//sw/device/lib/dif:alert_handler",
        "//sw/device/lib/dif:rstmgr",
        "@lowrisc_opentitan//sw/device/lib/dif:base",
        "@lowrisc_opentitan//sw/device/lib/testing/test_framework:check",
    ],
)

cc_library(
    name = "i2c_testutils",
    srcs = ["i2c_testutils.c"],
    hdrs = ["@lowrisc_opentitan//sw/device/lib/testing:i2c_testutils.h"],
    target_compatible_with = [OPENTITAN_CPU],
    deps = [
        "//hw/top_matcha/sw/autogen:top_matcha",
        "//sw/device/lib/dif:pinmux",
        "@lowrisc_opentitan//hw/ip/i2c/data:i2c_regs",
        "@lowrisc_opentitan//sw/device/lib/dif:i2c",
        "@lowrisc_opentitan//sw/device/lib/runtime:ibex",
        "@lowrisc_opentitan//sw/device/lib/testing/test_framework:check",
    ],
)
