Re: Running kunit_tool on unclean trees

From: Masahiro Yamada
Date: Mon Apr 26 2021 - 03:06:54 EST


On Sun, Apr 25, 2021 at 4:05 AM Marcelo Schmitt
<marcelo.schmitt1@xxxxxxxxx> wrote:
>
> Hi, a friend and I were chasing bug 205219 [1] listed in Bugzilla.
> We step into something a little bit different when trying to reproduce
> the buggy behavior. In our try, compilation failed with a message form
> make asking us to clean the source tree. We couldn't run kunit_tool
> after compiling the kernel for x86, as described by Ted in the
> discussion pointed out by the bug report.
>
> Steps to reproduce:
>
> 0) Run kunit_tool
> $ ./tools/testing/kunit/kunit.py run
> Works fine with a clean tree.
>
> 1) Compile the kernel for some architecture (we did it for x86_64).
>
> 2) Run kunit_tool again
> $ ./tools/testing/kunit/kunit.py run
> Fails with a message form make asking us to clean the source tree.

This is probably because
tools/testing/kunit/kunit_kernel.py
runs make with O= option.



> Removing the clean source tree check from the top-level Makefile gives
> us a similar error to what was described in the bug report. We see that
> after running `git clean -fdx` kunit_tool runs nicely again. However,
> this is not a real solution since some kernel binaries are erased by git.
>
> We also had a look into the commit messages of Masahiro Yamada but
> couldn't quite grasp why the check for the tree to be clean was added.
> We could invest more time in this issue but actually don't know how to
> proceed. We'd be glad to receive any comment about it. We could also try
> something else if it's a too hard issue for beginners.

I think you are talking about the following error message.

***
*** The source tree is not clean, please run 'make mrproper'
*** in /home/masahiro/ref/linux
***



Kbuild checks if the source tree is clean
before starting the out-of-tree build
because the out-of-tree build relies on VPATH.

This check has existed for a long time. (at least more than a decade)

If Kbuild started the O= build with a dirty source tree,
some stale generated source files would have been remaining.
(some *.c and *.h are generated by scripts)

Then, Kbuild would wrongly use stale source files in srctree
instead of generating new ones in objtree.





> [1]: https://bugzilla.kernel.org/show_bug.cgi?id=205219
>
>
> Best Regards,
>
> Marcelo



--
Best Regards
Masahiro Yamada