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.

Reply via email to