[package]
name = "tfhe-hpu-backend"
version = "0.3.0"
edition = "2021"
license = "BSD-3-Clause-Clear"
description = "HPU implementation on FPGA of TFHE-rs primitives."
homepage = "https://www.zama.ai/"
documentation = "https://docs.zama.ai/tfhe-rs"
repository = "https://github.com/zama-ai/tfhe-rs"
readme = "README.md"
keywords = ["encryption", "fhe", "cryptography", "hardware", "fpga"]

[features]
hw-xrt = []
hw-v80 = ["bincode"]
io-dump = ["num-traits"]
rtl_graph = ["dot2"]
utils = ["clap", "clap-num", "bitvec", "serde_json", "bincode", "serde_derive"]

[build-dependencies]
cxx-build = "1.0"

[dependencies]
cxx = "1.0"
hw_regmap = "0.2.1"

strum = { version = "0.26.2", features = ["derive"] }
strum_macros = "0.26.2"
enum_dispatch = "0.3.13"
tracing = "0.1.40"
tracing-subscriber = { version = "0.3.18", features = ["env-filter"] }
serde = { version = "1", features = ["derive"] }
toml = { version = "0.8", features = [] }
paste = "1.0.15"
thiserror = "1.0.61"
bytemuck = { workspace = true }
anyhow = "1.0.82"
lazy_static = "1.4.0"
rand = "0.8.5"
regex = "1.10.4"
bitflags = { version = "2.5.0", features = ["serde"] }
itertools = "0.11.0"
lru = "0.12.3"
bitfield-struct = "0.10.0"
crossbeam = { version = "0.8.4", features = ["crossbeam-queue"] }
rayon = { workspace = true }

# Dependencies used for Sim feature
ipc-channel = "0.18.3"

# Dependencies used for debug feature
num-traits = { version = "0.2", optional = true }
clap = { version = "4.4.4", features = ["derive"], optional = true }
clap-num = { version = "1.1.1", optional = true }
nix = { version = "0.29.0", features = ["ioctl", "uio", "fs"] }

# Dependencies used for rtl_graph features
dot2 = { version = "1.0", optional = true }

bitvec = { version = "1.0", optional = true }
serde_json = { version = "1.0", optional = true }

# Dependencies used for v80 pdi handling
bincode ={ version = "1.3", optional = true}
serde_derive ={ version = "1.0", optional = true}

# Binary for manual debugging
# Enable to access Hpu register and drive some custom sequence by hand
[[bin]]
name = "hputil"
path = "src/utils/hputil.rs"
required-features = ["utils"]

[[bin]]
name = "hpu_archive_mgmt"
path = "src/utils/hpu_archive_mgmt.rs"
required-features = ["utils", "hw-v80"]

# Binary for asm manipulation
# Enable to convert back and forth between asm/hex format
[[bin]]
name = "dop_fmt"
path = "src/utils/dop_fmt.rs"
required-features = ["utils"]

# Enable to convert back and forth between asm/hex format
[[bin]]
name = "iop_fmt"
path = "src/utils/iop_fmt.rs"
required-features = ["utils"]

# Firmware generation
# Enable to expand IOp in list of Dop for inspection
[[bin]]
name = "fw"
path = "src/utils/fw.rs"
required-features = ["utils"]
