2019-08-22 07:54:56

by Masahiro Yamada

[permalink] [raw]
Subject: [PATCH 1/6] kbuild: remove 'Using ... as source for kernel' message

You already know the location of the source tree without this message.

Signed-off-by: Masahiro Yamada <[email protected]>
---

Makefile | 1 -
1 file changed, 1 deletion(-)

diff --git a/Makefile b/Makefile
index 7e54a821b4b0..a77102e4ee90 100644
--- a/Makefile
+++ b/Makefile
@@ -1118,7 +1118,6 @@ PHONY += prepare archprepare prepare3
# 1) Check that make has not been executed in the kernel src $(srctree)
prepare3: include/config/kernel.release
ifdef building_out_of_srctree
- @$(kecho) ' Using $(srctree) as source for kernel'
$(Q)if [ -f $(srctree)/.config -o \
-d $(srctree)/include/config -o \
-d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \
--
2.17.1


2019-08-22 07:55:55

by Masahiro Yamada

[permalink] [raw]
Subject: [PATCH 5/6] kbuild: remove prepare3 target

Now prepare3 does nothing but depends on include/config/kernel.release

Signed-off-by: Masahiro Yamada <[email protected]>
---

Makefile | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/Makefile b/Makefile
index ca6851f5ebc9..960df4d35b15 100644
--- a/Makefile
+++ b/Makefile
@@ -1121,11 +1121,9 @@ scripts: scripts_basic scripts_dtc
# archprepare is used in arch Makefiles and when processed asm symlink,
# version.h and scripts_basic is processed / created.

-PHONY += prepare archprepare prepare3
+PHONY += prepare archprepare

-prepare3: include/config/kernel.release
-
-archprepare: archheaders archscripts scripts prepare3 outputmakefile \
+archprepare: archheaders archscripts scripts include/config/kernel.release outputmakefile \
asm-generic $(version_h) $(autoksyms_h) include/generated/utsrelease.h

prepare0: archprepare
@@ -1261,11 +1259,11 @@ endif

ifneq ($(dtstree),)

-%.dtb: prepare3 scripts_dtc
+%.dtb: include/config/kernel.release scripts_dtc
$(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@

PHONY += dtbs dtbs_install dt_binding_check
-dtbs dtbs_check: prepare3 scripts_dtc
+dtbs dtbs_check: include/config/kernel.release scripts_dtc
$(Q)$(MAKE) $(build)=$(dtstree)

dtbs_check: export CHECK_DTBS=1
--
2.17.1

2019-08-22 08:17:59

by Masahiro Yamada

[permalink] [raw]
Subject: [PATCH 6/6] kbuild: check clean srctree even earlier

Move the outputmakefile target to the leftmost in the prerequisite list
so that this is checked first. There is no guarantee that Make runs the
prerequisites from left to right, but at least the released versions of
GNU Make work like that when the parallel build option is not given.

Of course, when the parallel option -j given, other targets will be run
simultaneously but it is nice to show the error as early as possible.

Signed-off-by: Masahiro Yamada <[email protected]>
---

Makefile | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/Makefile b/Makefile
index 960df4d35b15..089983a8a028 100644
--- a/Makefile
+++ b/Makefile
@@ -581,10 +581,10 @@ ifdef config-build
include arch/$(SRCARCH)/Makefile
export KBUILD_DEFCONFIG KBUILD_KCONFIG CC_VERSION_TEXT

-config: scripts_basic outputmakefile FORCE
+config: outputmakefile scripts_basic FORCE
$(Q)$(MAKE) $(build)=scripts/kconfig $@

-%config: scripts_basic outputmakefile FORCE
+%config: outputmakefile scripts_basic FORCE
$(Q)$(MAKE) $(build)=scripts/kconfig $@

else #!config-build
@@ -1123,7 +1123,7 @@ scripts: scripts_basic scripts_dtc

PHONY += prepare archprepare

-archprepare: archheaders archscripts scripts include/config/kernel.release outputmakefile \
+archprepare: outputmakefile archheaders archscripts scripts include/config/kernel.release \
asm-generic $(version_h) $(autoksyms_h) include/generated/utsrelease.h

prepare0: archprepare
--
2.17.1

2019-08-22 08:18:15

by Masahiro Yamada

[permalink] [raw]
Subject: [PATCH 2/6] kbuild: Inform user to pass ARCH= for make mrproper only when necessary

Since commit 3a475b2166fd ("kbuild: Inform user to pass ARCH= for make
mrproper"), if you try out-of-tree build with an unclean source tree,
it suggests to run 'make ARCH=<ARCH> mrproper'.

This looks odd when you are not cross-compiling the kernel. Show the
'ARCH=<ARCH>' part only when ARCH= was given from the command line.
If ARCH is the default (native build) or came from the environment,
it should simply suggest 'make mrproper' as before.

Signed-off-by: Masahiro Yamada <[email protected]>
---

Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Makefile b/Makefile
index a77102e4ee90..d9cbbc27d4ba 100644
--- a/Makefile
+++ b/Makefile
@@ -1121,7 +1121,7 @@ ifdef building_out_of_srctree
$(Q)if [ -f $(srctree)/.config -o \
-d $(srctree)/include/config -o \
-d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \
- echo >&2 " $(srctree) is not clean, please run 'make ARCH=$(ARCH) mrproper'"; \
+ echo >&2 " $(srctree) is not clean, please run 'make$(if $(findstring command line, $(origin ARCH)), ARCH=$(ARCH)) mrproper'"; \
echo >&2 " in the '$(srctree)' directory.";\
/bin/false; \
fi;
--
2.17.1

2019-08-29 16:27:30

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [PATCH 6/6] kbuild: check clean srctree even earlier

On Thu, Aug 22, 2019 at 1:46 PM Masahiro Yamada
<[email protected]> wrote:
>
> Move the outputmakefile target to the leftmost in the prerequisite list
> so that this is checked first. There is no guarantee that Make runs the
> prerequisites from left to right,

Looks like this is guaranteed.

I did not know POSIX defined this.


I will reword the commit log as follows:


"
kbuild: check clean srctree even earlier

Move the outputmakefile target to the leftmost in the prerequisite list
so that this is checked first. GNU Make processes the prerequisites
left to right.

GNU Make will keep to stick to this behavior, and it seems even
POSIX standard, according to this:
https://lists.gnu.org/archive/html/bug-make/2019-08/msg00030.html

The POSIX standard of make is available here:
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html

Of course, when the parallel option -j given, other targets will be run
simultaneously but it is nice to show the error as early as possible.
"




> but at least the released versions of
> GNU Make work like that when the parallel build option is not given.
>
> Of course, when the parallel option -j given, other targets will be run
> simultaneously but it is nice to show the error as early as possible.
>
> Signed-off-by: Masahiro Yamada <[email protected]>
> ---
>
> Makefile | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index 960df4d35b15..089983a8a028 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -581,10 +581,10 @@ ifdef config-build
> include arch/$(SRCARCH)/Makefile
> export KBUILD_DEFCONFIG KBUILD_KCONFIG CC_VERSION_TEXT
>
> -config: scripts_basic outputmakefile FORCE
> +config: outputmakefile scripts_basic FORCE
> $(Q)$(MAKE) $(build)=scripts/kconfig $@
>
> -%config: scripts_basic outputmakefile FORCE
> +%config: outputmakefile scripts_basic FORCE
> $(Q)$(MAKE) $(build)=scripts/kconfig $@
>
> else #!config-build
> @@ -1123,7 +1123,7 @@ scripts: scripts_basic scripts_dtc
>
> PHONY += prepare archprepare
>
> -archprepare: archheaders archscripts scripts include/config/kernel.release outputmakefile \
> +archprepare: outputmakefile archheaders archscripts scripts include/config/kernel.release \
> asm-generic $(version_h) $(autoksyms_h) include/generated/utsrelease.h
>
> prepare0: archprepare
> --
> 2.17.1
>


--
Best Regards
Masahiro Yamada