Feature-gate all heavy dependencies for per-project builds
ober
c39e2b4b695cb125ccdc42770314bef7ee485878
--- a/jerboa-native-rs/Cargo.toml +++ b/jerboa-native-rs/Cargo.toml @@ -7,36 +7,62 @@ edition = "2021" crate-type = ["cdylib", "staticlib"] [dependencies] +libc = "0.2" + +# Always-on lightweight deps ring = "0.17" -scrypt = "0.11" -argon2 = "0.5" flate2 = "1" regex = "1" -libc = "0.2" -httparse = "1" -rusqlite = { version = "0.32", features = ["bundled"] } -postgres = "0.19" -x25519-dalek = { version = "2", features = ["static_secrets"] } -ed25519-dalek = { version = "2", features = ["hazmat"] } -hkdf = "0.12" -sha2 = "0.10" -rcgen = { version = "0.13", features = ["ring", "pem"] } -time = "0.3" -rustls = { version = "0.23", default-features = false, features = ["ring", "logging", "std", "tls12"] } -rustls-pki-types = "1" -rustls-pemfile = "2" -webpki-roots = "0.26" -wasmi = "0.40" -getrandom = "0.2" -duckdb = { version = "1", features = ["bundled"] } + +# TLS (rustls + x509/cert generation) +rustls = { version = "0.23", default-features = false, features = ["ring", "logging", "std", "tls12"], optional = true } +rustls-pki-types = { version = "1", optional = true } +rustls-pemfile = { version = "2", optional = true } +webpki-roots = { version = "0.26", optional = true } +rcgen = { version = "0.13", features = ["ring", "pem"], optional = true } +time = { version = "0.3", optional = true } +httparse = { version = "1", optional = true } + +# Crypto (scrypt, argon2, x25519, ed25519) +scrypt = { version = "0.11", optional = true } +argon2 = { version = "0.5", optional = true } +x25519-dalek = { version = "2", features = ["static_secrets"], optional = true } +ed25519-dalek = { version = "2", features = ["hazmat"], optional = true } +hkdf = { version = "0.12", optional = true } +sha2 = { version = "0.10", optional = true } + +# Database +duckdb = { version = "1", features = ["bundled"], optional = true } +rusqlite = { version = "0.32", features = ["bundled"], optional = true } +postgres = { version = "0.19", optional = true } + +# WASM +wasmi = { version = "0.40", optional = true } +getrandom = { version = "0.2", optional = true } + +# SpiderMonkey (JS engine) mozjs = { git = "https://github.com/servo/mozjs.git", optional = true, default-features = false, features = ["jit", "libz-sys"] } mozjs_sys = { git = "https://github.com/servo/mozjs.git", optional = true } -rscap = "0.3" + +# Packet capture +rscap = { version = "0.3", optional = true } [features] -default = [] +default = ["tls"] + +# Individual features — pick what your project needs +tls = ["rustls", "rustls-pki-types", "rustls-pemfile", "webpki-roots", "rcgen", "time", "httparse"] +crypto = ["scrypt", "argon2", "x25519-dalek", "ed25519-dalek", "hkdf", "sha2"] +sqlite = ["rusqlite"] +duckdb_feat = ["duckdb"] +postgres_feat = ["postgres"] +wasm = ["wasmi", "getrandom"] +pcap = ["rscap"] spidermonkey = ["mozjs", "mozjs_sys"] +# Full feature set — backward compatible, what jerboa itself uses +full = ["tls", "crypto", "sqlite", "duckdb_feat", "postgres_feat", "wasm", "pcap"] + [target.'cfg(target_os = "linux")'.dependencies] inotify = { version = "0.11", default-features = false } --- a/jerboa-native-rs/src/lib.rs +++ b/jerboa-native-rs/src/lib.rs @@ -1,23 +1,43 @@ mod panic; -mod pcap_capture; -mod crypto; mod compress; -mod duckdb_native; mod regex_native; mod secure_mem; -mod sqlite; -mod postgres_native; -mod tls; -mod x509; mod antidebug; mod integrity; +mod process_ctl; +mod socks5_server; + +#[cfg(feature = "tls")] +mod tls; +#[cfg(feature = "tls")] +mod x509; + +#[cfg(feature = "crypto")] +mod crypto; +#[cfg(feature = "crypto")] mod x25519; +#[cfg(feature = "crypto")] mod ed25519; -mod process_ctl; +#[cfg(feature = "crypto")] +mod embed_crypto; + +#[cfg(feature = "pcap")] +mod pcap_capture; + +#[cfg(feature = "duckdb_feat")] +mod duckdb_native; + +#[cfg(feature = "sqlite")] +mod sqlite; + +#[cfg(feature = "postgres_feat")] +mod postgres_native; + +#[cfg(feature = "wasm")] mod wasm; + #[cfg(feature = "spidermonkey")] mod wasm_sm; -mod socks5_server; #[cfg(target_os = "linux")] mod epoll;