sccache/Cargo.toml

182 строки
4.4 KiB
TOML
Исходник Обычный вид История

[package]
edition = "2021"
name = "sccache"
rust-version = "1.65"
2023-06-04 13:44:40 +03:00
version = "0.5.3"
2017-05-25 19:46:37 +03:00
categories = ["command-line-utilities", "development-tools::build-utils"]
description = "Sccache is a ccache-like tool. It is used as a compiler wrapper and avoids compilation when possible, storing a cache in a remote storage using various cloud storage."
2017-05-25 19:46:37 +03:00
keywords = ["ccache"]
license = "Apache-2.0"
readme = "README.md"
repository = "https://github.com/mozilla/sccache/"
2016-12-16 03:55:19 +03:00
2018-08-04 16:36:35 +03:00
[[bin]]
name = "sccache"
[[bin]]
name = "sccache-dist"
required-features = ["dist-server"]
2023-01-15 20:18:20 +03:00
[profile.release]
codegen-units = 1
lto = true
strip = true
[dependencies]
anyhow = { version = "1.0", features = ["backtrace"] }
ar = "0.9"
async-trait = "0.1"
base64 = "0.21"
2018-08-30 23:08:17 +03:00
bincode = "1"
blake3 = "1"
Move from protobuf to bincode for a wire format This commit migrates away from the `protobuf` crate to instead just working with bincode on the wire as a serialization format. This is done by leveraging a few different crates: * The `bincode` and `serde_derive` crates are used to define serialization for Rust structures as well as provide a bincode implementation. * The `tokio_io::codec::length_delimited` module implements framing via length prefixes to transform an asynchronous stream of bytes into a literal `Stream` of `BytesMut`. * The `tokio_serde_bincode` crate is then used to tie it all together, parsing these `BytesMut` as the request/response types of sccache. Most of the changes here are related to moving away from the protobuf API throughout the codebase (e.g. `has_foo` and `take_foo`) towards a more rustic-ish API that just uses enums/structs. Overall it felt quite natural (as one would expect) to just use the raw enum/struct values. This may not be quite as performant as before but that doesn't really apply to sccache's use case where perf is hugely dominated by actually compiling and hashing, so I'm not too too worried about that. My personal motivation for this is twofold: 1. Using `protobuf` was a little clunky throughout the codebase and definitely had some sharp edges that felt good to smooth out. 2. There's currently what I believe some mysterious segfault and/or stray write happening in sccache and I'm not sure where. The `protobuf` crate had a lot of `unsafe` code and in lieu of actually auditing it I figured it'd be good to kill two birds with one stone. I have no idea if this fixes my segfault problem (I never could reproduce it) but I figured it's worth a shot.
2017-03-22 20:21:52 +03:00
byteorder = "1.0"
bytes = "1"
clap = { version = "4.1.11", features = ["derive", "env", "wrap_help"] }
directories = "5.0.0"
encoding = "0.2"
env_logger = "0.10"
2018-08-28 14:56:27 +03:00
filetime = "0.2"
flate2 = { version = "1.0", optional = true, default-features = false, features = [
"rust_backend",
] }
fs-err = "2.9"
futures = "0.3"
gzp = { version = "0.11.3", default-features = false, features = [
"deflate_rust",
] }
http = "0.2"
hyper = { version = "0.14.25", optional = true, features = ["server"] }
2023-03-28 19:56:42 +03:00
is-terminal = "0.4.5"
Add jobserver support to sccache This commit alters the main sccache server to operate and orchestrate its own GNU make style jobserver. This is primarily intended for interoperation with rustc itself. The Rust compiler currently has a multithreaded mode where it will execute code generation and optimization on the LLVM side of things in parallel. This parallelism, however, can overload a machine quickly if not properly accounted for (e.g. if 10 rustcs all spawn 10 threads...). The usage of a GNU make style jobserver is intended to arbitrate and rate limit all these rustc instances to ensure that one build's maximal parallelism never exceeds a particular amount. Currently for Rust Cargo is the primary driver for setting up a jobserver. Cargo will create this and manage this per compilation, ensuring that any one `cargo build` invocation never exceeds a maximal parallelism. When sccache enters the picture, however, the story gets slightly more odd. The jobserver implementation on Unix relies on inheritance of file descriptors in spawned processes. With sccache, however, there's no inheritance as the actual rustc invocation is spawned by the server, not the client. In this case the env vars used to configure the jobsever are usually incorrect. To handle this problem this commit bakes a jobserver directly into sccache itself. The jobserver then overrides whatever jobserver the client has configured in its own env vars to ensure correct operation. The settings of each jobserver may be misconfigured (there's no way to configure sccache's jobserver right now), but hopefully that's not too much of a problem for the forseeable future. The implementation here was to provide a thin wrapper around the `jobserver` crate with a futures-based interface. This interface was then hooked into the mock command infrastructure to automatically acquire a jobserver token when spawning a process and automatically drop the token when the process exits. Additionally, all spawned processes will now automatically receive a configured jobserver. cc rust-lang/rust#42867, the original motivation for this commit
2017-09-27 19:14:51 +03:00
jobserver = "0.1"
jwt = { package = "jsonwebtoken", version = "8", optional = true }
libc = "0.2.140"
linked-hash-map = "0.5"
log = "0.4"
num_cpus = "1.15"
2020-12-10 02:03:49 +03:00
number_prefix = "0.4"
once_cell = "1.17"
opendal = { version = "0.37.0", optional = true }
openssl = { version = "0.10.49", optional = true }
rand = "0.8.4"
regex = "1.7.3"
reqsign = { version = "0.13.0", optional = true }
reqwest = { version = "0.11", features = [
"json",
"blocking",
"stream",
"rustls-tls",
"trust-dns",
], optional = true }
retry = "2"
semver = "1.0"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
sha2 = { version = "0.10.6", optional = true }
strip-ansi-escapes = "0.1"
2022-11-27 05:41:29 +03:00
tar = "0.4.36"
2018-08-28 15:20:49 +03:00
tempfile = "3"
# trust-dns-resolver must be kept in sync with the version reqwest uses
mime = "0.3"
tokio = { version = "1", features = [
"rt-multi-thread",
"io-util",
"time",
"net",
"process",
"macros",
] }
tokio-serde = "0.8"
tokio-util = { version = "0.7", features = ["codec", "io"] }
toml = "0.7"
tower = "0.4"
trust-dns-resolver = { version = "0.22.0", features = [
"dnssec-ring",
"dns-over-rustls",
"dns-over-https-rustls",
] }
2020-12-10 01:19:22 +03:00
url = { version = "2", optional = true }
uuid = { version = "1.3", features = ["v4"] }
walkdir = "2"
# by default which pulls in an outdated failure version
which = { version = "4", default-features = false }
zip = { version = "0.6", default-features = false }
zstd = "0.12"
# dist-server only
memmap2 = "0.6.2"
nix = { version = "0.26.2", optional = true }
object = "0.30"
rouille = { version = "3.5", optional = true, default-features = false, features = [
"ssl",
] }
syslog = { version = "6", optional = true }
version-compare = { version = "0.1.1", optional = true }
[dev-dependencies]
assert_cmd = "2.0.10"
cc = "1.0"
chrono = "0.4.26"
2021-01-08 10:28:43 +03:00
itertools = "0.10"
predicates = "=3.0.3"
serial_test = "2.0"
temp-env = "0.3.4"
thirtyfour_sync = "0.27"
2016-10-26 23:22:52 +03:00
[target.'cfg(unix)'.dependencies]
daemonize = "0.5"
2016-10-26 23:22:52 +03:00
[target.'cfg(not(target_os = "freebsd"))'.dependencies.libmount]
optional = true
version = "0.1.10"
2019-06-21 20:44:38 +03:00
[target.'cfg(windows)'.dependencies.winapi]
features = ["fileapi", "handleapi", "stringapiset", "winnls"]
version = "0.3"
2019-06-21 20:44:38 +03:00
[features]
all = [
"dist-client",
"redis",
"s3",
"memcached",
"gcs",
"azure",
"gha",
"webdav",
]
azure = ["opendal", "reqsign"]
default = ["all"]
gcs = ["opendal", "reqsign", "url", "reqwest/blocking"]
gha = ["opendal"]
memcached = ["opendal/services-memcached"]
native-zlib = []
redis = ["url", "opendal/services-redis"]
s3 = ["opendal", "reqsign"]
webdav = ["opendal"]
# Enable features that will build a vendored version of openssl and
# statically linked with it, instead of linking against the system-wide openssl
# dynamically or statically.
vendored-openssl = ["openssl?/vendored"]
# Enable features that require unstable features of Nightly Rust.
unstable = []
# Enables distributed support in the sccache client
dist-client = ["flate2", "hyper", "reqwest", "url", "sha2"]
2018-08-04 16:36:35 +03:00
# Enables the sccache-dist binary
dist-server = [
"jwt",
"flate2",
"libmount",
"nix",
"openssl",
"reqwest",
"rouille",
"syslog",
"version-compare",
]
2018-10-23 10:33:42 +03:00
# Enables dist tests with external requirements
dist-tests = ["dist-client", "dist-server"]
[workspace]
exclude = ["tests/test-crate"]