On Sun, 28 Dec 2025 at 15:57, Ryota Sakamoto <[email protected]> wrote: > > Currently, kunit.py ignores the KBUILD_OUTPUT env variable and always > defaults to .kunit in the working directory. This behavior is inconsistent > with standard Kbuild behavior, where KBUILD_OUTPUT defines the build > artifact location. > > This patch modifies kunit.py to respect KBUILD_OUTPUT if set. A .kunit > subdirectory is created inside KBUILD_OUTPUT to avoid polluting the build > directory. > > Signed-off-by: Ryota Sakamoto <[email protected]> > ---
Thanks! Two small thoughts: - Do we want to make KBUILD_OUTPUT the KUnit output directory directly, rather than nesting .kunit? - Do we want to make the --build_dir option relative to KBUILD_OUTPUT, instead of the current directory? Personally, I think the answer to both of those is probably no, so I'm happy to take this as-is. Reviewed-by: David Gow <[email protected]> Cheers, -- David > tools/testing/kunit/kunit.py | 7 ++++++- > tools/testing/kunit/kunit_tool_test.py | 19 +++++++++++++++++++ > 2 files changed, 25 insertions(+), 1 deletion(-) > > diff --git a/tools/testing/kunit/kunit.py b/tools/testing/kunit/kunit.py > index > cd99c1956331dbbfb06cf4ddf130db3dcf2a7c31..e3d82a038f93df0e86952da92461bc2e02f69ed1 > 100755 > --- a/tools/testing/kunit/kunit.py > +++ b/tools/testing/kunit/kunit.py > @@ -323,11 +323,16 @@ def get_default_jobs() -> int: > return ncpu > raise RuntimeError("os.cpu_count() returned None") > > +def get_default_build_dir() -> str: > + if 'KBUILD_OUTPUT' in os.environ: > + return os.path.join(os.environ['KBUILD_OUTPUT'], '.kunit') > + return '.kunit' > + > def add_common_opts(parser: argparse.ArgumentParser) -> None: > parser.add_argument('--build_dir', > help='As in the make command, it specifies the > build ' > 'directory.', > - type=str, default='.kunit', metavar='DIR') > + type=str, default=get_default_build_dir(), > metavar='DIR') > parser.add_argument('--make_options', > help='X=Y make option, can be repeated.', > action='append', metavar='X=Y') > diff --git a/tools/testing/kunit/kunit_tool_test.py > b/tools/testing/kunit/kunit_tool_test.py > index > bbba921e0eacb18663abfcabb2bccf330d8666f5..a55b5085310d1bc54a549d3f36a83f7697fb8881 > 100755 > --- a/tools/testing/kunit/kunit_tool_test.py > +++ b/tools/testing/kunit/kunit_tool_test.py > @@ -601,6 +601,7 @@ class KUnitMainTest(unittest.TestCase): > all_passed_log = file.readlines() > > self.print_mock = > mock.patch('kunit_printer.Printer.print').start() > + mock.patch.dict(os.environ, clear=True).start() > self.addCleanup(mock.patch.stopall) > > self.mock_linux_init = mock.patch.object(kunit_kernel, > 'LinuxSourceTree').start() > @@ -723,6 +724,24 @@ class KUnitMainTest(unittest.TestCase): > args=None, build_dir=build_dir, filter_glob='', > filter='', filter_action=None, timeout=300) > self.print_mock.assert_any_call(StrContains('Testing > complete.')) > > + @mock.patch.dict(os.environ, {'KBUILD_OUTPUT': '/tmp'}) > + def test_run_builddir_from_env(self): > + build_dir = '/tmp/.kunit' > + kunit.main(['run']) > + > self.assertEqual(self.linux_source_mock.build_reconfig.call_count, 1) > + self.linux_source_mock.run_kernel.assert_called_once_with( > + args=None, build_dir=build_dir, filter_glob='', > filter='', filter_action=None, timeout=300) > + self.print_mock.assert_any_call(StrContains('Testing > complete.')) > + > + @mock.patch.dict(os.environ, {'KBUILD_OUTPUT': '/tmp'}) > + def test_run_builddir_override(self): > + build_dir = '.kunit' > + kunit.main(['run', '--build_dir=.kunit']) > + > self.assertEqual(self.linux_source_mock.build_reconfig.call_count, 1) > + self.linux_source_mock.run_kernel.assert_called_once_with( > + args=None, build_dir=build_dir, filter_glob='', > filter='', filter_action=None, timeout=300) > + self.print_mock.assert_any_call(StrContains('Testing > complete.')) > + > def test_config_builddir(self): > build_dir = '.kunit' > kunit.main(['config', '--build_dir', build_dir]) > > --- > base-commit: ccd1cdca5cd433c8a5dff78b69a79b31d9b77ee1 > change-id: 20251228-kunit-kbuild_output-5d21a89fa603 > > Best regards, > -- > Ryota Sakamoto <[email protected]> >
smime.p7s
Description: S/MIME Cryptographic Signature

