提交 fdef6a88 编写于 作者: A Alex Crichton

rustbuild: Pass `ccache` to build scripts

This is a re-attempt at #48192 hopefully this time with 100% less randomly
[blocking builds for 20 minutes][block]. To work around #48192 the sccache
server is started in the `run.sh` script very early on in the compilation
process.

[block]: https://github.com/rust-lang/rust/issues/48192
上级 a85417f5
...@@ -686,9 +686,25 @@ pub fn cargo(&self, ...@@ -686,9 +686,25 @@ pub fn cargo(&self,
// //
// FIXME: the guard against msvc shouldn't need to be here // FIXME: the guard against msvc shouldn't need to be here
if !target.contains("msvc") { if !target.contains("msvc") {
let cc = self.cc(target); let ccache = self.config.ccache.as_ref();
cargo.env(format!("CC_{}", target), cc) let ccacheify = |s: &Path| {
.env("CC", cc); let ccache = match ccache {
Some(ref s) => s,
None => return s.display().to_string(),
};
// FIXME: the cc-rs crate only recognizes the literal strings
// `ccache` and `sccache` when doing caching compilations, so we
// mirror that here. It should probably be fixed upstream to
// accept a new env var or otherwise work with custom ccache
// vars.
match &ccache[..] {
"ccache" | "sccache" => format!("{} {}", ccache, s.display()),
_ => s.display().to_string(),
}
};
let cc = ccacheify(&self.cc(target));
cargo.env(format!("CC_{}", target), &cc)
.env("CC", &cc);
let cflags = self.cflags(target).join(" "); let cflags = self.cflags(target).join(" ");
cargo.env(format!("CFLAGS_{}", target), cflags.clone()) cargo.env(format!("CFLAGS_{}", target), cflags.clone())
...@@ -703,8 +719,9 @@ pub fn cargo(&self, ...@@ -703,8 +719,9 @@ pub fn cargo(&self,
} }
if let Ok(cxx) = self.cxx(target) { if let Ok(cxx) = self.cxx(target) {
cargo.env(format!("CXX_{}", target), cxx) let cxx = ccacheify(&cxx);
.env("CXX", cxx) cargo.env(format!("CXX_{}", target), &cxx)
.env("CXX", &cxx)
.env(format!("CXXFLAGS_{}", target), cflags.clone()) .env(format!("CXXFLAGS_{}", target), cflags.clone())
.env("CXXFLAGS", cflags); .env("CXXFLAGS", cflags);
} }
......
...@@ -67,6 +67,12 @@ else ...@@ -67,6 +67,12 @@ else
fi fi
fi fi
# We've had problems in the past of shell scripts leaking fds into the sccache
# server (#48192) which causes Cargo to erroneously think that a build script
# hasn't finished yet. Try to solve that problem by starting a very long-lived
# sccache server at the start of the build, but no need to worry if this fails.
SCCACHE_IDLE_TIMEOUT=10800 sccache --start-server || true
travis_fold start configure travis_fold start configure
travis_time_start travis_time_start
$SRC/configure $RUST_CONFIGURE_ARGS $SRC/configure $RUST_CONFIGURE_ARGS
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册