![Kees Cook](/assets/img/avatar_default.png)
Rasmus correctly observed that the existing jobserver reservation only worked if no other build targets were specified. The correct approach is to hold the jobserver slots until sphinx has finished. To fix this, the following changes are made: - refactor (and rename) scripts/jobserver-exec to set an environment variable for the maximally reserved jobserver slots and exec a child, to release the slots on exit. - create Documentation/scripts/parallel-wrapper.sh which examines both $PARALLELISM and the detected "-jauto" logic from Documentation/Makefile to decide sphinx's final -j argument. - chain these together in Documentation/Makefile Suggested-by: Rasmus Villemoes <linux@rasmusvillemoes.dk> Link: https://lore.kernel.org/lkml/eb25959a-9ec4-3530-2031-d9d716b40b20@rasmusvillemoes.dk Signed-off-by: Kees Cook <keescook@chromium.org> Link: https://lore.kernel.org/r/20191121205929.40371-4-keescook@chromium.org Signed-off-by: Jonathan Corbet <corbet@lwn.net>
34 lines
878 B
Bash
34 lines
878 B
Bash
#!/bin/sh
|
|
# SPDX-License-Identifier: GPL-2.0+
|
|
#
|
|
# Figure out if we should follow a specific parallelism from the make
|
|
# environment (as exported by scripts/jobserver-exec), or fall back to
|
|
# the "auto" parallelism when "-jN" is not specified at the top-level
|
|
# "make" invocation.
|
|
|
|
sphinx="$1"
|
|
shift || true
|
|
|
|
parallel="$PARALLELISM"
|
|
if [ -z "$parallel" ] ; then
|
|
# If no parallelism is specified at the top-level make, then
|
|
# fall back to the expected "-jauto" mode that the "htmldocs"
|
|
# target has had.
|
|
auto=$(perl -e 'open IN,"'"$sphinx"' --version 2>&1 |";
|
|
while (<IN>) {
|
|
if (m/([\d\.]+)/) {
|
|
print "auto" if ($1 >= "1.7")
|
|
}
|
|
}
|
|
close IN')
|
|
if [ -n "$auto" ] ; then
|
|
parallel="$auto"
|
|
fi
|
|
fi
|
|
# Only if some parallelism has been determined do we add the -jN option.
|
|
if [ -n "$parallel" ] ; then
|
|
parallel="-j$parallel"
|
|
fi
|
|
|
|
exec "$sphinx" "$parallel" "$@"
|