[workspace]
members = [".", "ktstr-macros", "scx-ktstr"]

[workspace.package]
edition = "2024"
rust-version = "1.88"
license = "GPL-2.0-only"
repository = "https://github.com/likewhatevs/ktstr"

[package]
name = "ktstr"
version = "0.4.1"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
description = "Test harness for Linux process schedulers"
readme = "README.md"
keywords = ["sched_ext", "scheduler", "testing", "bpf", "linux"]
categories = ["development-tools::testing"]
documentation = "https://likewhatevs.github.io/ktstr/api/ktstr/"
exclude = [".build-cache/", "doc/guide/book/", ".github/", ".githooks/", ".config/"]

[dependencies]
anyhow = "1"
clap = { version = "4", features = ["derive"] }
clap_complete = "4"
crc32fast = "1.5"
gix = { version = "0.81", default-features = false, features = ["sha1", "blocking-network-client", "blocking-http-transport-reqwest-rust-tls", "worktree-mutation", "status"] }
reqwest = { version = "0.13", features = ["blocking"] }
tar = "0.4"
tempfile = "3"
xz2 = "0.1"
opendal = { version = "0.55", default-features = false, features = ["services-ghac"] }
tokio = { version = "1", features = ["rt"] }
zstd = { version = "0.13", features = ["zstdmt"] }
lz4_flex = { version = "0.12", features = ["frame"] }
flate2 = "1"
ctor = "0.8"
libc = "0.2"
nix = { version = "0.31", features = ["feature", "fs", "mount", "poll", "process", "reboot", "sched", "signal", "term"] }
blazesym = { version = "0.2", features = ["dwarf"] }
rand = "0.10"
rmesg = { version = "1", default-features = false, features = ["sync"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
btf-rs = "1.1.1"
kvm-bindings = { version = "0.14", features = ["fam-wrappers"] }
kvm-ioctls = "0.24"
libbpf-rs = { version = "0.26", features = ["vendored"] }
libbpf-sys = { version = "1.6", features = ["vendored"] }
linux-loader = { version = "0.13", features = ["bzimage", "elf", "pe"] }
vm-fdt = "0.3"
vm-memory = { version = "=0.17.1", features = ["backend-mmap"] }
vmm-sys-util = "0.15"
cpio = "0.4.1"
virtio-bindings = "0.2.7"
virtio-queue = "0.17"
vm-superio = "0.8.1"
parking_lot = "0.12"
zerocopy = { version = "0.8.48", features = ["derive"] }
polars = { version = "0.53.0", default-features = false, features = ["lazy", "describe"] }
linkme = "0.3"
ktstr-macros = { version = "0.4.1", path = "ktstr-macros" }
goblin = { version = "0.10.5", features = ["elf64"] }
rayon = "1"
object = { version = "0.36", default-features = false, features = ["build", "std", "elf"] }
walkdir = "2"
indicatif = "0.18"

[profile.release]
lto = "thin"

[features]
integration = []

[lints.rust]
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(coverage)', 'cfg(coverage_nightly)'] }

[dev-dependencies]
assert_cmd = "2"
insta = "1"
predicates = "3"
proptest = "1"
trybuild = "1"

[build-dependencies]
cc = "1"
flate2 = "1"
gix = { version = "0.81", default-features = false, features = ["sha1", "blocking-network-client", "blocking-http-transport-reqwest-rust-tls", "worktree-mutation"] }
libbpf-cargo = "0.26"
reqwest = { version = "0.13", features = ["blocking"] }
tar = "0.4"

[[bin]]
name = "ktstr"
path = "src/bin/ktstr.rs"

[[bin]]
name = "cargo-ktstr"
path = "src/bin/cargo-ktstr.rs"

[[test]]
name = "ktstr_sched_tests"

[[test]]
name = "scenario_coverage"

[[test]]
name = "assert_gate_matrix"

[[test]]
name = "cargo_ktstr_cli"

[[test]]
name = "verifier_pipeline"

[[test]]
name = "compile_fail"
