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
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
order is not important, since
make has no idea in what order jobs will
There are various error conditions you must consider to ensure your implementation is robust:
--jobserver-authstring, it should assume the jobserver is using a different style and it cannot connect.
--jobserver-authoption references a simple pipe but that the file descriptors specified are closed, this means that the calling
makeprocess did not think that your tool was a recursive
makeinvocation (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.
MAKEFLAGSvariable and look for the character
n. If this character is present then
makewas invoked with the ‘-n’ option and your tool may want to stop without performing any operations.