# 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_binary", "rust_test")
load("@rules_pkg//pkg:mappings.bzl", "pkg_filegroup", "pkg_files")

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

rust_binary(
    name = "opentitantool",
    srcs = [
        "src/command/bootstrap.rs",
        "src/command/clear_bitstream.rs",
        "src/command/console.rs",
        "src/command/emulator.rs",
        "src/command/fpga.rs",
        "src/command/gpio.rs",
        "src/command/hello.rs",
        "src/command/i2c.rs",
        "src/command/image.rs",
        "src/command/load_bitstream.rs",
        "src/command/mod.rs",
        "src/command/otp.rs",
        "src/command/reset_sam3x.rs",
        "src/command/rsa.rs",
        "src/command/set_pll.rs",
        "src/command/spi.rs",
        "src/command/tpm.rs",
        "src/command/transport.rs",
        "src/command/update_usr_access.rs",
        "src/command/version.rs",
        "src/main.rs",
    ],
    proc_macro_deps = [
        "//sw/host/opentitanlib/opentitantool_derive",
    ],
    # stamping is necessary because opentitantool builds version.rs that needs it
    stamp = 1,
    tags = [
        # Only until we figure out how to deal with version.rs including
        # the bazel voltatile-status.txt file.
        "no-clippy",
    ],
    deps = [
        "//sw/host/opentitanlib",
        "@crate_index//:anyhow",
        "@crate_index//:atty",
        "@crate_index//:directories",
        "@crate_index//:env_logger",
        "@crate_index//:erased-serde",
        "@crate_index//:hex",
        "@crate_index//:humantime",
        "@crate_index//:log",
        "@crate_index//:mio",
        "@crate_index//:mio-signals",
        "@crate_index//:nix",
        "@crate_index//:raw_tty",
        "@crate_index//:regex",
        "@crate_index//:serde",
        "@crate_index//:serde_bytes",
        "@crate_index//:serde_json",
        "@crate_index//:shellwords",
        "@crate_index//:structopt",
        "@crate_index//:thiserror",
        "@lowrisc_serde_annotate//:serde_annotate",
    ],
)

pkg_files(
    name = "binary",
    srcs = [":opentitantool"],
)

pkg_filegroup(
    name = "package",
    srcs = [
        ":binary",
    ],
    prefix = "opentitantool",
)

rust_test(
    name = "opentitantool_test",
    crate = ":opentitantool",
    # stamping is necessary because opentitantool builds version.rs that needs it
    stamp = 1,
)
