commit: 85dc80bbdbfe76dce6a4d0c12f7c1b22f2716c97
Author: Andreas K. Hüttel <dilfridge <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 4 22:29:32 2026 +0000
Commit: Andreas K. Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Tue Jan 6 17:24:02 2026 +0000
URL: https://gitweb.gentoo.org/proj/catalyst.git/commit/?id=85dc80bb
First attempt at jobserver / steve support
Signed-off-by: Andreas K. Hüttel <dilfridge <AT> gentoo.org>
catalyst/base/stagebase.py | 20 ++++++++++++++++++++
catalyst/defaults.py | 1 +
etc/catalyst.conf | 4 ++++
3 files changed, 25 insertions(+)
diff --git a/catalyst/base/stagebase.py b/catalyst/base/stagebase.py
index f290da92..d6a7f8cf 100644
--- a/catalyst/base/stagebase.py
+++ b/catalyst/base/stagebase.py
@@ -1542,12 +1542,32 @@ class StageBase(TargetBase, ClearBase, GenBase):
continue
log.warning("Not making envar for '%s', is a dict", x)
+ # The logic of the following code comes from
+ # https://wiki.gentoo.org/index.php?title=Steve&oldid=1422936#Usage
+
makeopts = []
for flag, setting in {'j': 'jobs', 'l': 'load-average'}.items():
if setting in self.settings:
makeopts.append(f'-{flag}{self.settings[setting]}')
self.env['MAKEOPTS'] = ' '.join(makeopts)
+ ninjaopts = []
+ if "jobserver-fifo" in self.settings:
+ if "load-average" in self.setings:
+ ninjaopts.append(f'-l{self.settings["load-average]}')
+ else:
+ for flag, setting in {'j': 'jobs', 'l':
'load-average'}.items():
+ if setting in self.settings:
+ ninjaopts.append(f'-{flag}{self.settings[setting]}')
+ self.env['NINJAOPTS'] = ' '.join(ninjaopts)
+
+ if "jobserver-fifo" in self.settings:
+ makeflags = []
+ if "load-average" in self.setings:
+ makeflags.append(f'-l{self.settings["load-average]}')
+
makeflags.append(f'--jobserver-auth=fifo:{self.settings["jobserver-fifo"]}')
+ self.env['MAKEFLAGS'] = ' '.join(makeflags)
+
log.debug('setup_environment(); env = %r', self.env)
def enter_chroot(self):
diff --git a/catalyst/defaults.py b/catalyst/defaults.py
index f47fcf7a..392e05a5 100644
--- a/catalyst/defaults.py
+++ b/catalyst/defaults.py
@@ -17,6 +17,7 @@ valid_config_file_values = frozenset([
"distdir",
"envscript",
"jobs",
+ "jobserver-fifo",
"load-average",
"options",
"port_logdir",
diff --git a/etc/catalyst.conf b/etc/catalyst.conf
index 867c7153..b70a7d04 100644
--- a/etc/catalyst.conf
+++ b/etc/catalyst.conf
@@ -84,6 +84,10 @@ options = [
# is used to define MAKEOPTS during the target build.
# load-average = 4.0
+# FIFO / device file of a running jobserver daemon. If this is set, it
partially overrides
+# the values given for jobs and load-average.
+# jobserver-fifo = "/dev/steve"
+
# If you want catalyst to drop a binrepos.conf into /etc/portage, then
# define the binhost here. This value is concatenated with the configuration
# option binrepo_path in the spec file to obtain the src-uri.