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

load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test")
load("//third_party/cargo:crates.bzl", "all_crate_deps")

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

rust_library(
    name = "opentitanlib",
    srcs = [
        "src/app/command.rs",
        "src/app/conf.rs",
        "src/app/mod.rs",
        "src/bootstrap/legacy.rs",
        "src/bootstrap/mod.rs",
        "src/bootstrap/primitive.rs",
        "src/io/gpio.rs",
        "src/io/mod.rs",
        "src/io/spi.rs",
        "src/io/uart.rs",
        "src/lib.rs",
        "src/spiflash/flash.rs",
        "src/spiflash/mod.rs",
        "src/spiflash/sfdp.rs",
        "src/transport/cw310/gpio.rs",
        "src/transport/cw310/mod.rs",
        "src/transport/cw310/spi.rs",
        "src/transport/cw310/uart.rs",
        "src/transport/cw310/usb.rs",
        "src/transport/hyperdebug/gpio.rs",
        "src/transport/hyperdebug/mod.rs",
        "src/transport/hyperdebug/spi.rs",
        "src/transport/hyperdebug/uart.rs",
        "src/transport/mod.rs",
        "src/transport/ultradebug/gpio.rs",
        "src/transport/ultradebug/mod.rs",
        "src/transport/ultradebug/mpsse.rs",
        "src/transport/ultradebug/spi.rs",
        "src/transport/ultradebug/uart.rs",
        "src/transport/verilator/mod.rs",
        "src/transport/verilator/subprocess.rs",
        "src/transport/verilator/transport.rs",
        "src/transport/verilator/uart.rs",
        "src/util/bigint.rs",
        "src/util/bitfield.rs",
        "src/util/file.rs",
        "src/util/image.rs",
        "src/util/mod.rs",
        "src/util/parse_int.rs",
        "src/util/usb.rs",
        "src/util/voltage.rs",
    ],
    proc_macro_deps = [
        "//sw/host/opentitanlib/opentitantool_derive",
    ],
    deps = [
        "@mundane//:mundane",
    ] + all_crate_deps(),
)

rust_test(
    name = "opentitanlib_test",
    compile_data = [
        "src/bootstrap/simple.bin",
        "src/spiflash/SFDP_MX66L1G.bin",
    ],
    crate = ":opentitanlib",
    data = [
        "src/util/testdata/hello.txt",
        "src/util/testdata/world.txt",
    ],
)
