Next: Windows Jobserver Interaction, Previous: Sharing Job Slots with GNU make
, Up: Sharing Job Slots with GNU make
[Contents][Index]
On POSIX systems the jobserver is implemented in one of two ways: on systems
that support it, GNU make
will create a named pipe and use that for the
jobserver. In this case the auth option will have the form
--jobserver-auth=fifo:PATH
where ‘PATH’ is the pathname of the
named pipe. To access the jobserver you should open the named pipe path and
read/write to it as described below.
If the system doesn’t support named pipes, or if the user provided the
--jobserver-style
option and specified ‘pipe’, then the jobserver
will be implemented as a simple UNIX pipe. In this case the auth option will
have the form --jobserver-auth=R,W
where ‘R’ and ‘W’ are
non-negative integers representing file descriptors: ‘R’ is the read file
descriptor and ‘W’ is the write file descriptor. If either or both of
these file descriptors are negative, it means the jobserver is disabled for
this process.
When using a simple pipe, only command lines that make
understands to
be recursive invocations of make
(see How the
MAKE
Variable Works) will have access to the jobserver. When writing
makefiles you must be sure to mark the command as recursive (most commonly by
prefixing the command line with the +
indicator (see Recursive Use of make
). Note that the read side of the jobserver
pipe is set to “blocking” mode. This should not be changed.
In both implementations of the jobserver, the pipe will be pre-loaded with one single-character token for each available job. To obtain an extra slot you must read a single character from the jobserver; to release a slot you must write a single character back into the jobserver.
It’s important that when you release the job slot, you write back the same
character you read. Don’t assume that all tokens are the same character;
different characters may have different meanings to GNU make
. The
order is not important, since make
has no idea in what order jobs will
complete anyway.
There are various error conditions you must consider to ensure your implementation is robust:
--jobserver-auth
string, it should assume the jobserver is using a different style and it
cannot connect.
--jobserver-auth
option references a
simple pipe but that the file descriptors specified are closed, this means
that the calling make
process did not think that your tool was a
recursive make
invocation (e.g., the command line was not prefixed with
a +
character). You should notify your users of this situation.
SIGINT
), etc. You may want to install
signal handlers to manage this write-back.
MAKEFLAGS
variable and
look for the character n
. If this character is present then
make
was invoked with the ‘-n’ option and your tool may want to
stop without performing any operations.
Next: Windows Jobserver Interaction, Previous: Sharing Job Slots with GNU make
, Up: Sharing Job Slots with GNU make
[Contents][Index]