# Cloud Hypervisor Workspace
#
# The main crate producing the binaries is in `./cloud-hypervisor`.

[profile.release]
codegen-units = 1
lto = true
opt-level = "s"
strip = true

[profile.profiling]
debug = true
inherits = "release"
strip = false

[workspace]
members = [
  "api_client",
  "arch",
  "block",
  "cloud-hypervisor",
  "devices",
  "event_monitor",
  "hypervisor",
  "net_util",
  "offload_daemon",
  "option_parser",
  "pci",
  "performance-metrics",
  "rate_limiter",
  "serial_buffer",
  "test_infra",
  "tracer",
  "vhost_user_block",
  "vhost_user_net",
  "virtio-devices",
  "vm-allocator",
  "vm-device",
  "vm-migration",
  "vm-virtio",
  "vmm",
]
package.edition = "2024"
# Minimum buildable version:
# Keep in sync with version in .github/workflows/build.yaml
# Policy on MSRV (see #4318):
# Can only be bumped if satisfying any of the following:
# a.) A dependency requires it,
# b.) If we want to use a new feature and that MSRV is at least 6 months old,
# c.) There is a security issue that is addressed by the toolchain update.
package.rust-version = "1.89.0"
resolver = "3"

[workspace.dependencies]
# rust-vmm crates
acpi_tables = "0.2.1"
iommufd-ioctls = "0.2.0"
kvm-bindings = "0.14.1"
kvm-ioctls = "0.25.0"
linux-loader = "0.13.2"
mshv-bindings = "0.6.9"
mshv-ioctls = "0.6.9"
seccompiler = "0.5.0"
vfio-bindings = { version = "0.6.2", default-features = false }
vfio-ioctls = { version = "0.7.0", default-features = false }
vfio_user = { version = "0.1.3", default-features = false }
vhost = { version = "0.16.0", default-features = false }
vhost-user-backend = { version = "0.22.0", default-features = false }
virtio-bindings = "0.2.6"
virtio-queue = "0.17.0"
vm-fdt = "0.3.0"
vm-memory = "0.17.1"
vmm-sys-util = "0.15.0"

# igvm crates
igvm = "0.4.0"
igvm_defs = "0.4.0"

# serde crates
serde = "1.0.228"
serde_json = "1.0.150"
serde_with = { version = "3.19.0", default-features = false }

# other crates
anyhow = "1.0.102"
base64 = "0.22.1"
bitflags = "2.11.1"
byteorder = "1.5.0"
cfg-if = "1.0.4"
clap = "4.6.1"
dhat = "0.3.3"
dirs = "6.0.0"
env_logger = "0.11.10"
epoll = "4.4.0"
flume = "0.12.0"
itertools = "0.15.0"
jiff = { version = "0.2", default-features = false, features = ["std"] }
libc = "0.2.186"
log = "0.4.30"
rustls = { version = "0.23.40", default-features = false, features = [
  "logging",
  "ring",
  "std",
] }
sha2 = "0.11.0"
signal-hook = "0.4.4"
signal-hook-registry = "1.4.8"
smallvec = "1.15.1"
thiserror = "2.0.18"
uuid = { version = "1.23.2" }
wait-timeout = "0.2.1"
zerocopy = { version = "0.8.50", default-features = false }

[workspace.lints.clippy]
# Any clippy lint (group) in alphabetical order:
# https://rust-lang.github.io/rust-clippy/master/index.html

# Groups
all = "deny"         # shorthand for the other groups but here for compleness
complexity = "deny"
correctness = "deny"
perf = "deny"
style = "deny"
suspicious = "deny"

# Individual Lints
absolute_paths = "deny"
assertions_on_result_states = "deny"
if_not_else = "deny"
manual_string_new = "deny"
map_unwrap_or = "deny"
needless_pass_by_value = "deny"
redundant_else = "deny"
semicolon_if_nothing_returned = "deny"
undocumented_unsafe_blocks = "deny"
uninlined_format_args = "deny"
unnecessary_semicolon = "deny"

[workspace.lints.rust]
# `level = warn` is irrelevant here but mandatory for rustc/cargo
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(devcli_testenv)'] }
