From 2c41fb6225632ecea0b7008969bb70cf8e2636ef Mon Sep 17 00:00:00 2001 From: "Yann E. MORIN" Date: Sat, 24 Dec 2022 10:18:12 +0100 Subject: [PATCH] support/tests: allow top-level parallel builds Running tests with top-level parallel builds can speed up running some tests, expecially those that have a lot of packages like the systemd init tests. Trigger TLPB when the configuration enables per-package directories. We're using the jlevel argument, which normally is used for BR2_JLEVEL as the value for calling make -j at the top-level. In fact, BR2_JLEVEL is "unused" when using TLPB, because the top-level make acts as the job server that distributes tokens to sub-makes (except for the few build systems like waf or scons that don't support this), so it's really the top-level make -j that determines the level of parallelism, and BR2_JLEVEL doesn't really have an effect. Signed-off-by: Yann E. MORIN Cc: Thomas Petazzoni [Thomas: extend explanation a bit] Signed-off-by: Thomas Petazzoni --- support/testing/infra/basetest.py | 2 +- support/testing/infra/builder.py | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/support/testing/infra/basetest.py b/support/testing/infra/basetest.py index 45bcd4c2e2..670c7213d6 100644 --- a/support/testing/infra/basetest.py +++ b/support/testing/infra/basetest.py @@ -52,7 +52,7 @@ class BRConfigTest(unittest.TestCase): def setUp(self): self.show_msg("Starting") - self.b = Builder(self.config, self.builddir, self.logtofile) + self.b = Builder(self.config, self.builddir, self.logtofile, self.jlevel) if not self.keepbuilds: self.b.delete() diff --git a/support/testing/infra/builder.py b/support/testing/infra/builder.py index 922a707220..a2abb9ed89 100644 --- a/support/testing/infra/builder.py +++ b/support/testing/infra/builder.py @@ -6,11 +6,12 @@ import infra class Builder(object): - def __init__(self, config, builddir, logtofile): + def __init__(self, config, builddir, logtofile, jlevel=None): self.config = '\n'.join([line.lstrip() for line in config.splitlines()]) + '\n' self.builddir = builddir self.logfile = infra.open_log_file(builddir, "build", logtofile) + self.jlevel = jlevel def is_defconfig_valid(self, configfile, defconfig): """Check if the .config is contains all lines present in the defconfig.""" @@ -87,6 +88,8 @@ class Builder(object): env.update(make_extra_env) cmd = ["make", "-C", self.builddir] + if "BR2_PER_PACKAGE_DIRECTORIES=y" in self.config.splitlines() and self.jlevel: + cmd.append(f"-j{self.jlevel}") cmd += make_extra_opts ret = subprocess.call(cmd, stdout=self.logfile, stderr=self.logfile,