Bug 1367940 - Ensure sccache inherits the make jobserver file descriptors. r?gps
Rustc 1.20 gained support for make jobserver. But when rustc is invoked
through sccache, sccache needs to have inherited the make jobserver file
descriptor to pass it down to rustc. But what will be running sccache
first during the build is not really deterministic. It might as well end
up being a script invoking the preprocessor that ends up doing it. And
we can't add the necessary + prefix to all commands that potentially can
end up invoking sccache.
So we manually start the sccache server at the beginning of the build,
through preflight.
Note this works on automation, but not for local builds, but few people
are using sccache locally for rust (yet). Let's figure that out in a
followup.
--- a/build/sccache.mk
+++ b/build/sccache.mk
@@ -7,12 +7,16 @@ BASE_DIR = $(OBJDIR)
else
# OSX Universal builds only do upload in the first MOZ_BUILD_PROJECTS
BASE_DIR = $(MOZ_OBJDIR)/$(firstword $(MOZ_BUILD_PROJECTS))
endif
preflight_all:
# Terminate any sccache server that might still be around
-$(TOPSRCDIR)/sccache2/sccache --stop-server > /dev/null 2>&1
+ # Start a new server, ensuring it gets the jobserver file descriptors
+ # from make (but don't use the + prefix when make -n is used, so that
+ # the command doesn't run in that case)
+ $(if $(findstring n,$(filter-out --%, $(MAKEFLAGS))),,+)$(TOPSRCDIR)/sccache2/sccache --start-server
postflight_all:
# Terminate sccache server. This prints sccache stats.
-$(TOPSRCDIR)/sccache2/sccache --stop-server