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

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

rust_library(
    name = "opentitanlib",
    srcs = [
        "src/app/command.rs",
        "src/app/conf.rs",
        "src/app/mod.rs",
        "src/backend/cw310.rs",
        "src/backend/hyperdebug.rs",
        "src/backend/mod.rs",
        "src/backend/proxy.rs",
        "src/backend/ti50emulator.rs",
        "src/backend/ultradebug.rs",
        "src/backend/verilator.rs",
        "src/bootstrap/legacy.rs",
        "src/bootstrap/mod.rs",
        "src/bootstrap/primitive.rs",
        "src/bootstrap/rescue.rs",
        "src/crypto/mod.rs",
        "src/crypto/sha256.rs",
        "src/image/image.rs",
        "src/image/manifest.rs",
        "src/image/manifest_def.rs",
        "src/image/mod.rs",
        "src/io/emu.rs",
        "src/io/gpio.rs",
        "src/io/i2c.rs",
        "src/io/mod.rs",
        "src/io/spi.rs",
        "src/io/uart.rs",
        "src/lib.rs",
        "src/otp/lc_state.rs",
        "src/otp/mod.rs",
        "src/otp/otp.rs",
        "src/otp/otp_img.rs",
        "src/otp/otp_mmap.rs",
        "src/otp/vmem_serialize.rs",
        "src/proxy/errors.rs",
        "src/proxy/handler.rs",
        "src/proxy/mod.rs",
        "src/proxy/protocol.rs",
        "src/proxy/socket_server.rs",
        "src/spiflash/flash.rs",
        "src/spiflash/mod.rs",
        "src/spiflash/sfdp.rs",
        "src/transport/common/mod.rs",
        "src/transport/common/uart.rs",
        "src/transport/cw310/gpio.rs",
        "src/transport/cw310/mod.rs",
        "src/transport/cw310/spi.rs",
        "src/transport/cw310/usb.rs",
        "src/transport/errors.rs",
        "src/transport/hyperdebug/c2d2.rs",
        "src/transport/hyperdebug/gpio.rs",
        "src/transport/hyperdebug/i2c.rs",
        "src/transport/hyperdebug/mod.rs",
        "src/transport/hyperdebug/spi.rs",
        "src/transport/mod.rs",
        "src/transport/proxy/gpio.rs",
        "src/transport/proxy/i2c.rs",
        "src/transport/proxy/mod.rs",
        "src/transport/proxy/spi.rs",
        "src/transport/proxy/uart.rs",
        "src/transport/ti50emulator/emu.rs",
        "src/transport/ti50emulator/gpio.rs",
        "src/transport/ti50emulator/i2c.rs",
        "src/transport/ti50emulator/mod.rs",
        "src/transport/ti50emulator/spi.rs",
        "src/transport/ti50emulator/uart.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/stdout.rs",
        "src/transport/verilator/subprocess.rs",
        "src/transport/verilator/transport.rs",
        "src/transport/verilator/uart.rs",
        "src/uart/console.rs",
        "src/uart/mod.rs",
        "src/util/bigint.rs",
        "src/util/bitfield.rs",
        "src/util/file.rs",
        "src/util/mod.rs",
        "src/util/num_de.rs",
        "src/util/parse_int.rs",
        "src/util/present.rs",
        "src/util/rom_detect.rs",
        "src/util/usb.rs",
        "src/util/voltage.rs",
    ],
    proc_macro_deps = [
        "//sw/host/opentitanlib/opentitantool_derive",
    ],
    deps = [
        "//third_party/rust/crates:anyhow",
        "//third_party/rust/crates:bitflags",
        "//third_party/rust/crates:byteorder",
        "//third_party/rust/crates:deser_hjson",
        "//third_party/rust/crates:erased_serde",
        "//third_party/rust/crates:hex",
        "//third_party/rust/crates:humantime",
        "//third_party/rust/crates:lazy_static",
        "//third_party/rust/crates:log",
        "//third_party/rust/crates:memoffset",
        "//third_party/rust/crates:mio",
        "//third_party/rust/crates:mio_signals",
        "//third_party/rust/crates:nix",
        "//third_party/rust/crates:num_bigint_dig",
        "//third_party/rust/crates:num_enum",
        "//third_party/rust/crates:num_traits",
        "//third_party/rust/crates:rand",
        "//third_party/rust/crates:regex",
        "//third_party/rust/crates:rusb",
        "//third_party/rust/crates:serde",
        "//third_party/rust/crates:serde_json",
        "//third_party/rust/crates:serialport",
        "//third_party/rust/crates:sha2",
        "//third_party/rust/crates:structopt",
        "//third_party/rust/crates:thiserror",
        "//third_party/rust/crates:typetag",
        "//third_party/rust/crates:zerocopy",
        "@mundane",
        "@safe_ftdi",
    ],
)

rust_test(
    name = "opentitanlib_test",
    compile_data = [
        "src/bootstrap/simple.bin",
        "src/spiflash/SFDP_MX66L1G.bin",
    ],
    crate = ":opentitanlib",
    data = [
        "src/image/testdata/hello.txt",
        "src/image/testdata/manifest.hjson",
        "src/image/testdata/test_image.bin",
        "src/image/testdata/world.txt",
        "src/otp/testdata/lc_ctrl_state.hjson",
        "src/otp/testdata/otp_ctrl_img_dev.hjson",
        "src/otp/testdata/otp_ctrl_mmap.hjson",
        "src/otp/testdata/output.vmem",
    ],
)
