* [PATCH] kbuild: use ARCH from compile.h in unclean source tree msg
@ 2025-05-02 17:24 Shuah Khan
2025-05-05 6:02 ` David Gow
2025-05-06 11:12 ` Nicolas Schier
0 siblings, 2 replies; 9+ messages in thread
From: Shuah Khan @ 2025-05-02 17:24 UTC (permalink / raw)
To: masahiroy, nathan, nicolas.schier
Cc: Shuah Khan, brendan.higgins, davidgow, rmoar, linux-kbuild,
linux-kernel, kunit-dev, linux-kselftest
When make finds the source tree unclean, it prints a message to run
"make ARCH=x86_64 mrproper" message using the ARCH from the command
line. The ARCH specified in the command line could be different from
the ARCH of the existing build in the source tree.
This could cause problems in regular kernel build and kunit workflows.
Regular workflow:
- Build x86_64 kernel
$ make ARCH=x86_64
- Try building another arch kernel out of tree with O=
$ make ARCH=um O=/linux/build
- kbuild detects source tree is unclean
***
*** The source tree is not clean, please run 'make ARCH=um mrproper'
*** in /linux/linux_srcdir
***
- Clean source tree as suggested by kbuild
$ make ARCH=um mrproper
- Source clean appears to be clean, but it leaves behind generated header
files under arch/x86
arch/x86/realmode/rm/pasyms.h
A subsequent x86_64e build fails with
"undefined symbol sev_es_trampoline_start referenced ..."
kunit workflow runs into this issue:
- Build x86_64 kernel
- Run kunit tests: it tries to build for user specified ARCH or uml
as default:
$ ./tools/testing/kunit/kunit.py run
- kbuild detects unclean source tree
***
*** The source tree is not clean, please run 'make ARCH=um mrproper'
*** in /linux/linux_6.15
***
- Clean source tree as suggested by kbuild
$ make ARCH=um mrproper
- Source clean appears to be clean, but it leaves behind generated header
files under arch/x86
The problem shows when user tries to run tests on ARCH=x86_64:
$ ./tools/testing/kunit/kunit.py run ARCH=x86_64
"undefined symbol sev_es_trampoline_start referenced ..."
Build trips on arch/x86/realmode/rm/pasyms.h left behind by a prior
x86_64 build.
Problems related to partially cleaned source tree are hard to debug.
Change Makefile to unclean source logic to use ARCH from compile.h
UTS_MACHINE string. With this change kbuild prints:
$ ./tools/testing/kunit/kunit.py run
***
*** The source tree is not clean, please run 'make ARCH=x86_64 mrproper'
*** in /linux/linux_6.15
***
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
---
Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index 5aa9ee52a765..7ee29136b4da 100644
--- a/Makefile
+++ b/Makefile
@@ -674,7 +674,7 @@ ifeq ($(KBUILD_EXTMOD),)
-d $(srctree)/include/config -o \
-d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \
echo >&2 "***"; \
- echo >&2 "*** The source tree is not clean, please run 'make$(if $(findstring command line, $(origin ARCH)), ARCH=$(ARCH)) mrproper'"; \
+ echo >&2 "*** The source tree is not clean, please run 'make ARCH=$(shell grep UTS_MACHINE $(srctree)/include/generated/compile.h | cut -d '"' -f 2) mrproper'"; \
echo >&2 "*** in $(abs_srctree)";\
echo >&2 "***"; \
false; \
--
2.47.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH] kbuild: use ARCH from compile.h in unclean source tree msg
2025-05-02 17:24 [PATCH] kbuild: use ARCH from compile.h in unclean source tree msg Shuah Khan
@ 2025-05-05 6:02 ` David Gow
2025-05-06 11:12 ` Nicolas Schier
1 sibling, 0 replies; 9+ messages in thread
From: David Gow @ 2025-05-05 6:02 UTC (permalink / raw)
To: Shuah Khan
Cc: masahiroy, nathan, nicolas.schier, brendan.higgins, rmoar,
linux-kbuild, linux-kernel, kunit-dev, linux-kselftest
[-- Attachment #1: Type: text/plain, Size: 2561 bytes --]
On Sat, 3 May 2025 at 01:25, Shuah Khan <skhan@linuxfoundation.org> wrote:
>
> When make finds the source tree unclean, it prints a message to run
> "make ARCH=x86_64 mrproper" message using the ARCH from the command
> line. The ARCH specified in the command line could be different from
> the ARCH of the existing build in the source tree.
>
> This could cause problems in regular kernel build and kunit workflows.
>
> Regular workflow:
>
> - Build x86_64 kernel
> $ make ARCH=x86_64
> - Try building another arch kernel out of tree with O=
> $ make ARCH=um O=/linux/build
> - kbuild detects source tree is unclean
>
> ***
> *** The source tree is not clean, please run 'make ARCH=um mrproper'
> *** in /linux/linux_srcdir
> ***
>
> - Clean source tree as suggested by kbuild
> $ make ARCH=um mrproper
> - Source clean appears to be clean, but it leaves behind generated header
> files under arch/x86
> arch/x86/realmode/rm/pasyms.h
>
> A subsequent x86_64e build fails with
> "undefined symbol sev_es_trampoline_start referenced ..."
>
> kunit workflow runs into this issue:
>
> - Build x86_64 kernel
> - Run kunit tests: it tries to build for user specified ARCH or uml
> as default:
> $ ./tools/testing/kunit/kunit.py run
>
> - kbuild detects unclean source tree
>
> ***
> *** The source tree is not clean, please run 'make ARCH=um mrproper'
> *** in /linux/linux_6.15
> ***
>
> - Clean source tree as suggested by kbuild
> $ make ARCH=um mrproper
> - Source clean appears to be clean, but it leaves behind generated header
> files under arch/x86
>
> The problem shows when user tries to run tests on ARCH=x86_64:
>
> $ ./tools/testing/kunit/kunit.py run ARCH=x86_64
>
> "undefined symbol sev_es_trampoline_start referenced ..."
>
> Build trips on arch/x86/realmode/rm/pasyms.h left behind by a prior
> x86_64 build.
>
> Problems related to partially cleaned source tree are hard to debug.
> Change Makefile to unclean source logic to use ARCH from compile.h
> UTS_MACHINE string. With this change kbuild prints:
>
> $ ./tools/testing/kunit/kunit.py run
>
> ***
> *** The source tree is not clean, please run 'make ARCH=x86_64 mrproper'
> *** in /linux/linux_6.15
> ***
>
> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
> ---
Thanks very much! This is much better, and has given the right message
on all of the architecture in-/out-of-tree build combinations I've
thrown at it.
Reviewed-by: David Gow <davidgow@google.com<
Cheers,
-- David
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 5281 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] kbuild: use ARCH from compile.h in unclean source tree msg
2025-05-02 17:24 [PATCH] kbuild: use ARCH from compile.h in unclean source tree msg Shuah Khan
2025-05-05 6:02 ` David Gow
@ 2025-05-06 11:12 ` Nicolas Schier
2025-05-06 22:07 ` Shuah Khan
1 sibling, 1 reply; 9+ messages in thread
From: Nicolas Schier @ 2025-05-06 11:12 UTC (permalink / raw)
To: Shuah Khan
Cc: masahiroy, nathan, brendan.higgins, davidgow, rmoar, linux-kbuild,
linux-kernel, kunit-dev, linux-kselftest
On Fri, 02 May 2025, Shuah Khan wrote:
> When make finds the source tree unclean, it prints a message to run
> "make ARCH=x86_64 mrproper" message using the ARCH from the command
> line. The ARCH specified in the command line could be different from
> the ARCH of the existing build in the source tree.
>
> This could cause problems in regular kernel build and kunit workflows.
>
> Regular workflow:
>
> - Build x86_64 kernel
> $ make ARCH=x86_64
> - Try building another arch kernel out of tree with O=
> $ make ARCH=um O=/linux/build
> - kbuild detects source tree is unclean
>
> ***
> *** The source tree is not clean, please run 'make ARCH=um mrproper'
> *** in /linux/linux_srcdir
> ***
>
> - Clean source tree as suggested by kbuild
> $ make ARCH=um mrproper
> - Source clean appears to be clean, but it leaves behind generated header
> files under arch/x86
> arch/x86/realmode/rm/pasyms.h
>
> A subsequent x86_64e build fails with
> "undefined symbol sev_es_trampoline_start referenced ..."
>
> kunit workflow runs into this issue:
>
> - Build x86_64 kernel
> - Run kunit tests: it tries to build for user specified ARCH or uml
> as default:
> $ ./tools/testing/kunit/kunit.py run
>
> - kbuild detects unclean source tree
>
> ***
> *** The source tree is not clean, please run 'make ARCH=um mrproper'
> *** in /linux/linux_6.15
> ***
>
> - Clean source tree as suggested by kbuild
> $ make ARCH=um mrproper
> - Source clean appears to be clean, but it leaves behind generated header
> files under arch/x86
>
> The problem shows when user tries to run tests on ARCH=x86_64:
>
> $ ./tools/testing/kunit/kunit.py run ARCH=x86_64
>
> "undefined symbol sev_es_trampoline_start referenced ..."
>
> Build trips on arch/x86/realmode/rm/pasyms.h left behind by a prior
> x86_64 build.
>
> Problems related to partially cleaned source tree are hard to debug.
> Change Makefile to unclean source logic to use ARCH from compile.h
> UTS_MACHINE string. With this change kbuild prints:
>
> $ ./tools/testing/kunit/kunit.py run
>
> ***
> *** The source tree is not clean, please run 'make ARCH=x86_64 mrproper'
> *** in /linux/linux_6.15
> ***
>
> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
> ---
> Makefile | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/Makefile b/Makefile
> index 5aa9ee52a765..7ee29136b4da 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -674,7 +674,7 @@ ifeq ($(KBUILD_EXTMOD),)
> -d $(srctree)/include/config -o \
> -d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \
> echo >&2 "***"; \
> - echo >&2 "*** The source tree is not clean, please run 'make$(if $(findstring command line, $(origin ARCH)), ARCH=$(ARCH)) mrproper'"; \
> + echo >&2 "*** The source tree is not clean, please run 'make ARCH=$(shell grep UTS_MACHINE $(srctree)/include/generated/compile.h | cut -d '"' -f 2) mrproper'"; \
Please 'grep' option '-s'.
There are some (rare) occassions, when there is no include/generated/compile.h
but still the source tree will be considered to be dirty:
grep: ../include/generated/compile.h: No such file or directory
***
*** The source tree is not clean, please run 'make ARCH= mrproper'
...
Kind regards,
Nicolas
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] kbuild: use ARCH from compile.h in unclean source tree msg
2025-05-06 11:12 ` Nicolas Schier
@ 2025-05-06 22:07 ` Shuah Khan
2025-05-07 0:20 ` Shuah Khan
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Shuah Khan @ 2025-05-06 22:07 UTC (permalink / raw)
To: Nicolas Schier
Cc: masahiroy, nathan, brendan.higgins, davidgow, rmoar, linux-kbuild,
linux-kernel, kunit-dev, linux-kselftest, Shuah Khan
On 5/6/25 05:12, Nicolas Schier wrote:
> On Fri, 02 May 2025, Shuah Khan wrote:
>
>> When make finds the source tree unclean, it prints a message to run
>> "make ARCH=x86_64 mrproper" message using the ARCH from the command
>> line. The ARCH specified in the command line could be different from
>> the ARCH of the existing build in the source tree.
>>
>> This could cause problems in regular kernel build and kunit workflows.
>>
>> Regular workflow:
>>
>> - Build x86_64 kernel
>> $ make ARCH=x86_64
>> - Try building another arch kernel out of tree with O=
>> $ make ARCH=um O=/linux/build
>> - kbuild detects source tree is unclean
>>
>> ***
>> *** The source tree is not clean, please run 'make ARCH=um mrproper'
>> *** in /linux/linux_srcdir
>> ***
>>
>> - Clean source tree as suggested by kbuild
>> $ make ARCH=um mrproper
>> - Source clean appears to be clean, but it leaves behind generated header
>> files under arch/x86
>> arch/x86/realmode/rm/pasyms.h
>>
>> A subsequent x86_64e build fails with
>> "undefined symbol sev_es_trampoline_start referenced ..."
>>
>> kunit workflow runs into this issue:
>>
>> - Build x86_64 kernel
>> - Run kunit tests: it tries to build for user specified ARCH or uml
>> as default:
>> $ ./tools/testing/kunit/kunit.py run
>>
>> - kbuild detects unclean source tree
>>
>> ***
>> *** The source tree is not clean, please run 'make ARCH=um mrproper'
>> *** in /linux/linux_6.15
>> ***
>>
>> - Clean source tree as suggested by kbuild
>> $ make ARCH=um mrproper
>> - Source clean appears to be clean, but it leaves behind generated header
>> files under arch/x86
>>
>> The problem shows when user tries to run tests on ARCH=x86_64:
>>
>> $ ./tools/testing/kunit/kunit.py run ARCH=x86_64
>>
>> "undefined symbol sev_es_trampoline_start referenced ..."
>>
>> Build trips on arch/x86/realmode/rm/pasyms.h left behind by a prior
>> x86_64 build.
>>
>> Problems related to partially cleaned source tree are hard to debug.
>> Change Makefile to unclean source logic to use ARCH from compile.h
>> UTS_MACHINE string. With this change kbuild prints:
>>
>> $ ./tools/testing/kunit/kunit.py run
>>
>> ***
>> *** The source tree is not clean, please run 'make ARCH=x86_64 mrproper'
>> *** in /linux/linux_6.15
>> ***
>>
>> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
>> ---
>> Makefile | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/Makefile b/Makefile
>> index 5aa9ee52a765..7ee29136b4da 100644
>> --- a/Makefile
>> +++ b/Makefile
>> @@ -674,7 +674,7 @@ ifeq ($(KBUILD_EXTMOD),)
>> -d $(srctree)/include/config -o \
>> -d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \
Would it make sense to check for include/generated as a catch all?
>> echo >&2 "***"; \
>> - echo >&2 "*** The source tree is not clean, please run 'make$(if $(findstring command line, $(origin ARCH)), ARCH=$(ARCH)) mrproper'"; \
>> + echo >&2 "*** The source tree is not clean, please run 'make ARCH=$(shell grep UTS_MACHINE $(srctree)/include/generated/compile.h | cut -d '"' -f 2) mrproper'"; \
>
> Please 'grep' option '-s'.
>
> There are some (rare) occassions, when there is no include/generated/compile.h
> but still the source tree will be considered to be dirty:
I considered adding a check for not finding include/generated/compile.h
and figured if include/config is found we are probably safe.
I will fix that.
>
> grep: ../include/generated/compile.h: No such file or directory
> ***
> *** The source tree is not clean, please run 'make ARCH= mrproper'
> ...
>
thanks,
-- Shuah
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] kbuild: use ARCH from compile.h in unclean source tree msg
2025-05-06 22:07 ` Shuah Khan
@ 2025-05-07 0:20 ` Shuah Khan
2025-05-07 7:23 ` Masahiro Yamada
2025-05-07 12:09 ` Masahiro Yamada
2 siblings, 0 replies; 9+ messages in thread
From: Shuah Khan @ 2025-05-07 0:20 UTC (permalink / raw)
To: Nicolas Schier
Cc: masahiroy, nathan, brendan.higgins, davidgow, rmoar, linux-kbuild,
linux-kernel, kunit-dev, linux-kselftest, Shuah Khan
On 5/6/25 16:07, Shuah Khan wrote:
> On 5/6/25 05:12, Nicolas Schier wrote:
>> On Fri, 02 May 2025, Shuah Khan wrote:
>>
>>> When make finds the source tree unclean, it prints a message to run
>>> "make ARCH=x86_64 mrproper" message using the ARCH from the command
>>> line. The ARCH specified in the command line could be different from
>>> the ARCH of the existing build in the source tree.
>>>
>>> This could cause problems in regular kernel build and kunit workflows.
>>>
>>> Regular workflow:
>>>
>>> - Build x86_64 kernel
>>> $ make ARCH=x86_64
>>> - Try building another arch kernel out of tree with O=
>>> $ make ARCH=um O=/linux/build
>>> - kbuild detects source tree is unclean
>>>
>>> ***
>>> *** The source tree is not clean, please run 'make ARCH=um mrproper'
>>> *** in /linux/linux_srcdir
>>> ***
>>>
>>> - Clean source tree as suggested by kbuild
>>> $ make ARCH=um mrproper
>>> - Source clean appears to be clean, but it leaves behind generated header
>>> files under arch/x86
>>> arch/x86/realmode/rm/pasyms.h
>>>
>>> A subsequent x86_64e build fails with
>>> "undefined symbol sev_es_trampoline_start referenced ..."
>>>
>>> kunit workflow runs into this issue:
>>>
>>> - Build x86_64 kernel
>>> - Run kunit tests: it tries to build for user specified ARCH or uml
>>> as default:
>>> $ ./tools/testing/kunit/kunit.py run
>>>
>>> - kbuild detects unclean source tree
>>>
>>> ***
>>> *** The source tree is not clean, please run 'make ARCH=um mrproper'
>>> *** in /linux/linux_6.15
>>> ***
>>>
>>> - Clean source tree as suggested by kbuild
>>> $ make ARCH=um mrproper
>>> - Source clean appears to be clean, but it leaves behind generated header
>>> files under arch/x86
>>>
>>> The problem shows when user tries to run tests on ARCH=x86_64:
>>>
>>> $ ./tools/testing/kunit/kunit.py run ARCH=x86_64
>>>
>>> "undefined symbol sev_es_trampoline_start referenced ..."
>>>
>>> Build trips on arch/x86/realmode/rm/pasyms.h left behind by a prior
>>> x86_64 build.
>>>
>>> Problems related to partially cleaned source tree are hard to debug.
>>> Change Makefile to unclean source logic to use ARCH from compile.h
>>> UTS_MACHINE string. With this change kbuild prints:
>>>
>>> $ ./tools/testing/kunit/kunit.py run
>>>
>>> ***
>>> *** The source tree is not clean, please run 'make ARCH=x86_64 mrproper'
>>> *** in /linux/linux_6.15
>>> ***
>>>
>>> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
>>> ---
>>> Makefile | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/Makefile b/Makefile
>>> index 5aa9ee52a765..7ee29136b4da 100644
>>> --- a/Makefile
>>> +++ b/Makefile
>>> @@ -674,7 +674,7 @@ ifeq ($(KBUILD_EXTMOD),)
>>> -d $(srctree)/include/config -o \
>>> -d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \
>
> Would it make sense to check for include/generated as a catch all?
Adding check is good, but it won't cover the compile.h missing. I don't
know if compile.h could go missing if include/generated exists. In any
case, it is good to check for compile exists or not and print appropriate
message for these cases.
I have the change working. Will send it out. Thanks for the tip on
the (rare) cases.
thanks,
-- Shuah
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] kbuild: use ARCH from compile.h in unclean source tree msg
2025-05-06 22:07 ` Shuah Khan
2025-05-07 0:20 ` Shuah Khan
@ 2025-05-07 7:23 ` Masahiro Yamada
2025-05-07 22:21 ` Shuah Khan
2025-05-07 12:09 ` Masahiro Yamada
2 siblings, 1 reply; 9+ messages in thread
From: Masahiro Yamada @ 2025-05-07 7:23 UTC (permalink / raw)
To: Shuah Khan
Cc: Nicolas Schier, nathan, brendan.higgins, davidgow, rmoar,
linux-kbuild, linux-kernel, kunit-dev, linux-kselftest
On Wed, May 7, 2025 at 7:07 AM Shuah Khan <skhan@linuxfoundation.org> wrote:
>
> On 5/6/25 05:12, Nicolas Schier wrote:
> > On Fri, 02 May 2025, Shuah Khan wrote:
> >
> >> When make finds the source tree unclean, it prints a message to run
> >> "make ARCH=x86_64 mrproper" message using the ARCH from the command
> >> line. The ARCH specified in the command line could be different from
> >> the ARCH of the existing build in the source tree.
> >>
> >> This could cause problems in regular kernel build and kunit workflows.
> >>
> >> Regular workflow:
> >>
> >> - Build x86_64 kernel
> >> $ make ARCH=x86_64
> >> - Try building another arch kernel out of tree with O=
> >> $ make ARCH=um O=/linux/build
> >> - kbuild detects source tree is unclean
> >>
> >> ***
> >> *** The source tree is not clean, please run 'make ARCH=um mrproper'
> >> *** in /linux/linux_srcdir
> >> ***
> >>
> >> - Clean source tree as suggested by kbuild
> >> $ make ARCH=um mrproper
> >> - Source clean appears to be clean, but it leaves behind generated header
> >> files under arch/x86
> >> arch/x86/realmode/rm/pasyms.h
> >>
> >> A subsequent x86_64e build fails with
> >> "undefined symbol sev_es_trampoline_start referenced ..."
> >>
> >> kunit workflow runs into this issue:
> >>
> >> - Build x86_64 kernel
> >> - Run kunit tests: it tries to build for user specified ARCH or uml
> >> as default:
> >> $ ./tools/testing/kunit/kunit.py run
> >>
> >> - kbuild detects unclean source tree
> >>
> >> ***
> >> *** The source tree is not clean, please run 'make ARCH=um mrproper'
> >> *** in /linux/linux_6.15
> >> ***
> >>
> >> - Clean source tree as suggested by kbuild
> >> $ make ARCH=um mrproper
> >> - Source clean appears to be clean, but it leaves behind generated header
> >> files under arch/x86
> >>
> >> The problem shows when user tries to run tests on ARCH=x86_64:
> >>
> >> $ ./tools/testing/kunit/kunit.py run ARCH=x86_64
> >>
> >> "undefined symbol sev_es_trampoline_start referenced ..."
> >>
> >> Build trips on arch/x86/realmode/rm/pasyms.h left behind by a prior
> >> x86_64 build.
> >>
> >> Problems related to partially cleaned source tree are hard to debug.
> >> Change Makefile to unclean source logic to use ARCH from compile.h
> >> UTS_MACHINE string. With this change kbuild prints:
> >>
> >> $ ./tools/testing/kunit/kunit.py run
> >>
> >> ***
> >> *** The source tree is not clean, please run 'make ARCH=x86_64 mrproper'
> >> *** in /linux/linux_6.15
> >> ***
> >>
> >> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
> >> ---
> >> Makefile | 2 +-
> >> 1 file changed, 1 insertion(+), 1 deletion(-)
> >>
> >> diff --git a/Makefile b/Makefile
> >> index 5aa9ee52a765..7ee29136b4da 100644
> >> --- a/Makefile
> >> +++ b/Makefile
> >> @@ -674,7 +674,7 @@ ifeq ($(KBUILD_EXTMOD),)
> >> -d $(srctree)/include/config -o \
> >> -d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \
>
> Would it make sense to check for include/generated as a catch all?
>
> >> echo >&2 "***"; \
> >> - echo >&2 "*** The source tree is not clean, please run 'make$(if $(findstring command line, $(origin ARCH)), ARCH=$(ARCH)) mrproper'"; \
> >> + echo >&2 "*** The source tree is not clean, please run 'make ARCH=$(shell grep UTS_MACHINE $(srctree)/include/generated/compile.h | cut -d '"' -f 2) mrproper'"; \
> >
> > Please 'grep' option '-s'.
> >
> > There are some (rare) occassions, when there is no include/generated/compile.h
> > but still the source tree will be considered to be dirty:
>
> I considered adding a check for not finding include/generated/compile.h
> and figured if include/config is found we are probably safe.
>
> I will fix that.
I do not think this patch makes sense.
Kbuild correctly detects that "the source tree is not clean enough
to build with ARCH=um", and displays the following message:
***
*** The source tree is not clean, please run 'make ARCH=um mrproper'
*** in /linux/linux_srcdir
***
This is absolutely correct.
The real issue is that "make ARCH=um mrproper"
does not properly clean the source tree.
--
Best Regards
Masahiro Yamada
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] kbuild: use ARCH from compile.h in unclean source tree msg
2025-05-06 22:07 ` Shuah Khan
2025-05-07 0:20 ` Shuah Khan
2025-05-07 7:23 ` Masahiro Yamada
@ 2025-05-07 12:09 ` Masahiro Yamada
2 siblings, 0 replies; 9+ messages in thread
From: Masahiro Yamada @ 2025-05-07 12:09 UTC (permalink / raw)
To: Shuah Khan
Cc: Nicolas Schier, nathan, brendan.higgins, davidgow, rmoar,
linux-kbuild, linux-kernel, kunit-dev, linux-kselftest
On Wed, May 7, 2025 at 7:07 AM Shuah Khan <skhan@linuxfoundation.org> wrote:
>
> On 5/6/25 05:12, Nicolas Schier wrote:
> > On Fri, 02 May 2025, Shuah Khan wrote:
> >
> >> When make finds the source tree unclean, it prints a message to run
> >> "make ARCH=x86_64 mrproper" message using the ARCH from the command
> >> line. The ARCH specified in the command line could be different from
> >> the ARCH of the existing build in the source tree.
> >>
> >> This could cause problems in regular kernel build and kunit workflows.
> >>
> >> Regular workflow:
> >>
> >> - Build x86_64 kernel
> >> $ make ARCH=x86_64
> >> - Try building another arch kernel out of tree with O=
> >> $ make ARCH=um O=/linux/build
> >> - kbuild detects source tree is unclean
> >>
> >> ***
> >> *** The source tree is not clean, please run 'make ARCH=um mrproper'
> >> *** in /linux/linux_srcdir
> >> ***
> >>
> >> - Clean source tree as suggested by kbuild
> >> $ make ARCH=um mrproper
> >> - Source clean appears to be clean, but it leaves behind generated header
> >> files under arch/x86
> >> arch/x86/realmode/rm/pasyms.h
> >>
> >> A subsequent x86_64e build fails with
> >> "undefined symbol sev_es_trampoline_start referenced ..."
> >>
> >> kunit workflow runs into this issue:
> >>
> >> - Build x86_64 kernel
> >> - Run kunit tests: it tries to build for user specified ARCH or uml
> >> as default:
> >> $ ./tools/testing/kunit/kunit.py run
> >>
> >> - kbuild detects unclean source tree
> >>
> >> ***
> >> *** The source tree is not clean, please run 'make ARCH=um mrproper'
> >> *** in /linux/linux_6.15
> >> ***
> >>
> >> - Clean source tree as suggested by kbuild
> >> $ make ARCH=um mrproper
> >> - Source clean appears to be clean, but it leaves behind generated header
> >> files under arch/x86
> >>
> >> The problem shows when user tries to run tests on ARCH=x86_64:
> >>
> >> $ ./tools/testing/kunit/kunit.py run ARCH=x86_64
> >>
> >> "undefined symbol sev_es_trampoline_start referenced ..."
> >>
> >> Build trips on arch/x86/realmode/rm/pasyms.h left behind by a prior
> >> x86_64 build.
> >>
> >> Problems related to partially cleaned source tree are hard to debug.
> >> Change Makefile to unclean source logic to use ARCH from compile.h
> >> UTS_MACHINE string. With this change kbuild prints:
> >>
> >> $ ./tools/testing/kunit/kunit.py run
> >>
> >> ***
> >> *** The source tree is not clean, please run 'make ARCH=x86_64 mrproper'
> >> *** in /linux/linux_6.15
> >> ***
> >>
> >> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
> >> ---
> >> Makefile | 2 +-
> >> 1 file changed, 1 insertion(+), 1 deletion(-)
> >>
> >> diff --git a/Makefile b/Makefile
> >> index 5aa9ee52a765..7ee29136b4da 100644
> >> --- a/Makefile
> >> +++ b/Makefile
> >> @@ -674,7 +674,7 @@ ifeq ($(KBUILD_EXTMOD),)
> >> -d $(srctree)/include/config -o \
> >> -d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \
>
> Would it make sense to check for include/generated as a catch all?
>
> >> echo >&2 "***"; \
> >> - echo >&2 "*** The source tree is not clean, please run 'make$(if $(findstring command line, $(origin ARCH)), ARCH=$(ARCH)) mrproper'"; \
> >> + echo >&2 "*** The source tree is not clean, please run 'make ARCH=$(shell grep UTS_MACHINE $(srctree)/include/generated/compile.h | cut -d '"' -f 2) mrproper'"; \
> >
> > Please 'grep' option '-s'.
> >
> > There are some (rare) occassions, when there is no include/generated/compile.h
> > but still the source tree will be considered to be dirty:
>
> I considered adding a check for not finding include/generated/compile.h
> and figured if include/config is found we are probably safe.
>
> I will fix that.
Does this fix your issue?
https://patchwork.kernel.org/project/linux-kbuild/patch/20250507074936.486648-1-masahiroy@kernel.org/
--
Best Regards
Masahiro Yamada
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] kbuild: use ARCH from compile.h in unclean source tree msg
2025-05-07 7:23 ` Masahiro Yamada
@ 2025-05-07 22:21 ` Shuah Khan
2025-05-07 22:48 ` Shuah Khan
0 siblings, 1 reply; 9+ messages in thread
From: Shuah Khan @ 2025-05-07 22:21 UTC (permalink / raw)
To: Masahiro Yamada
Cc: Nicolas Schier, nathan, brendan.higgins, davidgow, rmoar,
linux-kbuild, linux-kernel, kunit-dev, linux-kselftest,
Shuah Khan
On 5/7/25 01:23, Masahiro Yamada wrote:
> On Wed, May 7, 2025 at 7:07 AM Shuah Khan <skhan@linuxfoundation.org> wrote:
>>
>> On 5/6/25 05:12, Nicolas Schier wrote:
>>> On Fri, 02 May 2025, Shuah Khan wrote:
>>>
>>>> When make finds the source tree unclean, it prints a message to run
>>>> "make ARCH=x86_64 mrproper" message using the ARCH from the command
>>>> line. The ARCH specified in the command line could be different from
>>>> the ARCH of the existing build in the source tree.
>>>>
>>>> This could cause problems in regular kernel build and kunit workflows.
>>>>
>>>> Regular workflow:
>>>>
>>>> - Build x86_64 kernel
>>>> $ make ARCH=x86_64
>>>> - Try building another arch kernel out of tree with O=
>>>> $ make ARCH=um O=/linux/build
>>>> - kbuild detects source tree is unclean
>>>>
>>>> ***
>>>> *** The source tree is not clean, please run 'make ARCH=um mrproper'
>>>> *** in /linux/linux_srcdir
>>>> ***
>>>>
>>>> - Clean source tree as suggested by kbuild
>>>> $ make ARCH=um mrproper
>>>> - Source clean appears to be clean, but it leaves behind generated header
>>>> files under arch/x86
>>>> arch/x86/realmode/rm/pasyms.h
>>>>
>>>> A subsequent x86_64e build fails with
>>>> "undefined symbol sev_es_trampoline_start referenced ..."
>>>>
>>>> kunit workflow runs into this issue:
>>>>
>>>> - Build x86_64 kernel
>>>> - Run kunit tests: it tries to build for user specified ARCH or uml
>>>> as default:
>>>> $ ./tools/testing/kunit/kunit.py run
>>>>
>>>> - kbuild detects unclean source tree
>>>>
>>>> ***
>>>> *** The source tree is not clean, please run 'make ARCH=um mrproper'
>>>> *** in /linux/linux_6.15
>>>> ***
>>>>
>>>> - Clean source tree as suggested by kbuild
>>>> $ make ARCH=um mrproper
>>>> - Source clean appears to be clean, but it leaves behind generated header
>>>> files under arch/x86
>>>>
>>>> The problem shows when user tries to run tests on ARCH=x86_64:
>>>>
>>>> $ ./tools/testing/kunit/kunit.py run ARCH=x86_64
>>>>
>>>> "undefined symbol sev_es_trampoline_start referenced ..."
>>>>
>>>> Build trips on arch/x86/realmode/rm/pasyms.h left behind by a prior
>>>> x86_64 build.
>>>>
>>>> Problems related to partially cleaned source tree are hard to debug.
>>>> Change Makefile to unclean source logic to use ARCH from compile.h
>>>> UTS_MACHINE string. With this change kbuild prints:
>>>>
>>>> $ ./tools/testing/kunit/kunit.py run
>>>>
>>>> ***
>>>> *** The source tree is not clean, please run 'make ARCH=x86_64 mrproper'
>>>> *** in /linux/linux_6.15
>>>> ***
>>>>
>>>> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
>>>> ---
>>>> Makefile | 2 +-
>>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>>
>>>> diff --git a/Makefile b/Makefile
>>>> index 5aa9ee52a765..7ee29136b4da 100644
>>>> --- a/Makefile
>>>> +++ b/Makefile
>>>> @@ -674,7 +674,7 @@ ifeq ($(KBUILD_EXTMOD),)
>>>> -d $(srctree)/include/config -o \
>>>> -d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \
>>
>> Would it make sense to check for include/generated as a catch all?
>>
>>>> echo >&2 "***"; \
>>>> - echo >&2 "*** The source tree is not clean, please run 'make$(if $(findstring command line, $(origin ARCH)), ARCH=$(ARCH)) mrproper'"; \
>>>> + echo >&2 "*** The source tree is not clean, please run 'make ARCH=$(shell grep UTS_MACHINE $(srctree)/include/generated/compile.h | cut -d '"' -f 2) mrproper'"; \
>>>
>>> Please 'grep' option '-s'.
>>>
>>> There are some (rare) occassions, when there is no include/generated/compile.h
>>> but still the source tree will be considered to be dirty:
>>
>> I considered adding a check for not finding include/generated/compile.h
>> and figured if include/config is found we are probably safe.
>>
>> I will fix that.
>
>
> I do not think this patch makes sense.
>
> Kbuild correctly detects that "the source tree is not clean enough
> to build with ARCH=um", and displays the following message:
> ***
> *** The source tree is not clean, please run 'make ARCH=um mrproper'
> *** in /linux/linux_srcdir
> ***
>
> This is absolutely correct.
It detects it can't build um - but it doesn't detect that the
source tree is not clean. The problem is once user runs
'make ARCH=um mrproper' - these checks will find the source tree
clean even though it isn't - a subsequent x86_64 build could
fail.
If kbuild suggests mrproper for the existing kernel build instead,
the source tree will be cleaned correctly.
>
>
> The real issue is that "make ARCH=um mrproper"
> does not properly clean the source tree.
>
The patch you sent doesn't solve the problem I am seeing.
You can find the details on the patch thread.
thanks,
-- Shuah
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] kbuild: use ARCH from compile.h in unclean source tree msg
2025-05-07 22:21 ` Shuah Khan
@ 2025-05-07 22:48 ` Shuah Khan
0 siblings, 0 replies; 9+ messages in thread
From: Shuah Khan @ 2025-05-07 22:48 UTC (permalink / raw)
To: Masahiro Yamada
Cc: Nicolas Schier, nathan, brendan.higgins, davidgow, rmoar,
linux-kbuild, linux-kernel, kunit-dev, linux-kselftest,
Shuah Khan
On 5/7/25 16:21, Shuah Khan wrote:
> On 5/7/25 01:23, Masahiro Yamada wrote:
>> On Wed, May 7, 2025 at 7:07 AM Shuah Khan <skhan@linuxfoundation.org> wrote:
>>>
>>> On 5/6/25 05:12, Nicolas Schier wrote:
>>>> On Fri, 02 May 2025, Shuah Khan wrote:
>>>>
>>>>> When make finds the source tree unclean, it prints a message to run
>>>>> "make ARCH=x86_64 mrproper" message using the ARCH from the command
>>>>> line. The ARCH specified in the command line could be different from
>>>>> the ARCH of the existing build in the source tree.
>>>>>
>>>>> This could cause problems in regular kernel build and kunit workflows.
>>>>>
>>>>> Regular workflow:
>>>>>
>>>>> - Build x86_64 kernel
>>>>> $ make ARCH=x86_64
>>>>> - Try building another arch kernel out of tree with O=
>>>>> $ make ARCH=um O=/linux/build
>>>>> - kbuild detects source tree is unclean
>>>>>
>>>>> ***
>>>>> *** The source tree is not clean, please run 'make ARCH=um mrproper'
>>>>> *** in /linux/linux_srcdir
>>>>> ***
>>>>>
>>>>> - Clean source tree as suggested by kbuild
>>>>> $ make ARCH=um mrproper
>>>>> - Source clean appears to be clean, but it leaves behind generated header
>>>>> files under arch/x86
>>>>> arch/x86/realmode/rm/pasyms.h
>>>>>
>>>>> A subsequent x86_64e build fails with
>>>>> "undefined symbol sev_es_trampoline_start referenced ..."
>>>>>
>>>>> kunit workflow runs into this issue:
>>>>>
>>>>> - Build x86_64 kernel
>>>>> - Run kunit tests: it tries to build for user specified ARCH or uml
>>>>> as default:
>>>>> $ ./tools/testing/kunit/kunit.py run
>>>>>
>>>>> - kbuild detects unclean source tree
>>>>>
>>>>> ***
>>>>> *** The source tree is not clean, please run 'make ARCH=um mrproper'
>>>>> *** in /linux/linux_6.15
>>>>> ***
>>>>>
>>>>> - Clean source tree as suggested by kbuild
>>>>> $ make ARCH=um mrproper
>>>>> - Source clean appears to be clean, but it leaves behind generated header
>>>>> files under arch/x86
>>>>>
>>>>> The problem shows when user tries to run tests on ARCH=x86_64:
>>>>>
>>>>> $ ./tools/testing/kunit/kunit.py run ARCH=x86_64
>>>>>
>>>>> "undefined symbol sev_es_trampoline_start referenced ..."
>>>>>
>>>>> Build trips on arch/x86/realmode/rm/pasyms.h left behind by a prior
>>>>> x86_64 build.
>>>>>
>>>>> Problems related to partially cleaned source tree are hard to debug.
>>>>> Change Makefile to unclean source logic to use ARCH from compile.h
>>>>> UTS_MACHINE string. With this change kbuild prints:
>>>>>
>>>>> $ ./tools/testing/kunit/kunit.py run
>>>>>
>>>>> ***
>>>>> *** The source tree is not clean, please run 'make ARCH=x86_64 mrproper'
>>>>> *** in /linux/linux_6.15
>>>>> ***
>>>>>
>>>>> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
>>>>> ---
>>>>> Makefile | 2 +-
>>>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/Makefile b/Makefile
>>>>> index 5aa9ee52a765..7ee29136b4da 100644
>>>>> --- a/Makefile
>>>>> +++ b/Makefile
>>>>> @@ -674,7 +674,7 @@ ifeq ($(KBUILD_EXTMOD),)
>>>>> -d $(srctree)/include/config -o \
>>>>> -d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \
>>>
>>> Would it make sense to check for include/generated as a catch all?
>>>
>>>>> echo >&2 "***"; \
>>>>> - echo >&2 "*** The source tree is not clean, please run 'make$(if $(findstring command line, $(origin ARCH)), ARCH=$(ARCH)) mrproper'"; \
>>>>> + echo >&2 "*** The source tree is not clean, please run 'make ARCH=$(shell grep UTS_MACHINE $(srctree)/include/generated/compile.h | cut -d '"' -f 2) mrproper'"; \
>>>>
>>>> Please 'grep' option '-s'.
>>>>
>>>> There are some (rare) occassions, when there is no include/generated/compile.h
>>>> but still the source tree will be considered to be dirty:
>>>
>>> I considered adding a check for not finding include/generated/compile.h
>>> and figured if include/config is found we are probably safe.
>>>
>>> I will fix that.
>>
>>
>> I do not think this patch makes sense.
>>
>> Kbuild correctly detects that "the source tree is not clean enough
>> to build with ARCH=um", and displays the following message:
>> ***
>> *** The source tree is not clean, please run 'make ARCH=um mrproper'
>> *** in /linux/linux_srcdir
>> ***
>>
>> This is absolutely correct.
>
> It detects it can't build um - but it doesn't detect that the
> source tree is not clean. The problem is once user runs
> 'make ARCH=um mrproper' - these checks will find the source tree
> clean even though it isn't - a subsequent x86_64 build could
> fail.
kbuild can no longer detect that the tree is unclean since
mrproper um deletes files and directories kbuild checks to
determine if the source tree is unclean.
These failures are hard to debug and wastes lot of time.
thanks,
-- Shuah
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2025-05-07 22:48 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-02 17:24 [PATCH] kbuild: use ARCH from compile.h in unclean source tree msg Shuah Khan
2025-05-05 6:02 ` David Gow
2025-05-06 11:12 ` Nicolas Schier
2025-05-06 22:07 ` Shuah Khan
2025-05-07 0:20 ` Shuah Khan
2025-05-07 7:23 ` Masahiro Yamada
2025-05-07 22:21 ` Shuah Khan
2025-05-07 22:48 ` Shuah Khan
2025-05-07 12:09 ` Masahiro Yamada
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).