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