echoIRCd/Cargo.toml

49 lines
2.1 KiB
TOML

[package]
name = "echoircd"
version = "5.0.0"
edition = "2021"
description = "A small, dependency-light IRC daemon in Rust with a modular command/mode/module API."
license = "MIT"
[[bin]]
name = "echoircd"
path = "src/main.rs"
[lib]
name = "echoircd"
path = "src/lib.rs"
[dependencies]
# SIGHUP → config rehash, without unsafe (the crate keeps signal setup internal).
signal-hook = "0.3"
# TLS backend: openssl. The crate keeps all `unsafe` internal, so the daemon
# stays `#![forbid(unsafe_code)]`. A pure-Rust `rustls` backend can slot in beside it.
openssl = "0.10"
# epoll/kqueue reactor for the client socket engine — a minimal readiness layer
# (no async runtime). Lets one thread drive tens of thousands of connections
# instead of 2 OS threads per client. Its `unsafe` stays internal (like openssl).
mio = { version = "1", features = ["os-poll", "net"] }
# aHash — DoS-resistant (random-seeded) hasher, ~2-3x faster than SipHash on the
# small keys the router hammers (uid/nick/channel lookups). See crate::map.
ahash = "0.8"
# mimalloc — global allocator; big throughput win on the many-small-String churn
# of per-message formatting. `unsafe` stays internal to the crate.
mimalloc = "0.1"
# SIMD byte search — accelerates the newline scan in the line framer.
memchr = "2"
# Pure-Rust TLS backend, opt-in via `tls_backend = rustls` (default stays openssl).
# ring provider (no aws-lc-rs); its `unsafe` stays internal like every other crate.
rustls = { version = "0.23", default-features = false, features = ["ring", "std", "tls12", "logging"] }
rustls-pemfile = "2"
[dev-dependencies]
# integration tests spawn the built binary and act as a TLS client against it
openssl = "0.10"
# property-based fuzzing (parsers) + deterministic S2S simulation (convergence).
proptest = "1"
[profile.release]
opt-level = 3
lto = "fat" # cross-crate inlining — the router/format hot paths inline through mio/openssl
codegen-units = 1 # one unit = best optimisation (slower build, faster binary)
panic = "unwind" # REQUIRED: the core isolates handler panics with catch_unwind