2019-08-21 07:50:38

by Masahiro Yamada

[permalink] [raw]
Subject: [PATCH 1/4] kbuild: pkg: clean up package files/dirs from the top Makefile

I am not a big fan of the $(objtree)/ hack for clean-files/clean-dirs.

These are created in the top of $(objtree), so let's clean them up
from the top Makefile.

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

Makefile | 6 ++++--
scripts/Makefile | 2 +-
scripts/package/Makefile | 9 ---------
3 files changed, 5 insertions(+), 12 deletions(-)

diff --git a/Makefile b/Makefile
index 5d202ad1481a..e88d4fcd5e87 100644
--- a/Makefile
+++ b/Makefile
@@ -1389,12 +1389,14 @@ CLEAN_FILES += modules.builtin.modinfo

# Directories & files removed with 'make mrproper'
MRPROPER_DIRS += include/config include/generated \
- arch/$(SRCARCH)/include/generated .tmp_objdiff
+ arch/$(SRCARCH)/include/generated .tmp_objdiff \
+ debian/ snap/ tar-install/
MRPROPER_FILES += .config .config.old .version \
Module.symvers \
signing_key.pem signing_key.priv signing_key.x509 \
x509.genkey extra_certificates signing_key.x509.keyid \
- signing_key.x509.signer vmlinux-gdb.py
+ signing_key.x509.signer vmlinux-gdb.py \
+ *.spec

# Directories & files removed with 'make distclean'
DISTCLEAN_DIRS +=
diff --git a/scripts/Makefile b/scripts/Makefile
index 16bcb8087899..c42891e10ba3 100644
--- a/scripts/Makefile
+++ b/scripts/Makefile
@@ -36,4 +36,4 @@ subdir-$(CONFIG_MODVERSIONS) += genksyms
subdir-$(CONFIG_SECURITY_SELINUX) += selinux

# Let clean descend into subdirs
-subdir- += basic dtc gdb kconfig mod package
+subdir- += basic dtc gdb kconfig mod
diff --git a/scripts/package/Makefile b/scripts/package/Makefile
index ca7f46b562a4..a2d8830f54be 100644
--- a/scripts/package/Makefile
+++ b/scripts/package/Makefile
@@ -65,8 +65,6 @@ binrpm-pkg: FORCE
+rpmbuild $(RPMOPTS) --define "_builddir $(objtree)" --target \
$(UTS_MACHINE) -bb $(objtree)/binkernel.spec

-clean-files += $(objtree)/*.spec
-
deb-pkg: FORCE
$(MAKE) clean
$(CONFIG_SHELL) $(srctree)/scripts/package/mkdebian
@@ -82,8 +80,6 @@ bindeb-pkg: FORCE
intdeb-pkg: FORCE
+$(CONFIG_SHELL) $(srctree)/scripts/package/builddeb

-clean-dirs += $(objtree)/debian/
-
# snap-pkg
# ---------------------------------------------------------------------------
snap-pkg: FORCE
@@ -98,17 +94,12 @@ snap-pkg: FORCE
cd $(objtree)/snap && \
snapcraft --target-arch=$(UTS_MACHINE)

-clean-dirs += $(objtree)/snap/
-
# tarball targets
# ---------------------------------------------------------------------------
tar%pkg: FORCE
$(MAKE) -f $(srctree)/Makefile
+$(CONFIG_SHELL) $(srctree)/scripts/package/buildtar $@

-clean-dirs += $(objtree)/tar-install/
-
-
# perf-pkg - generate a source tarball with perf source
# ---------------------------------------------------------------------------

--
2.17.1


2019-08-21 07:50:48

by Masahiro Yamada

[permalink] [raw]
Subject: [PATCH 3/4] kbuild: pkg: rename scripts/package/Makefile to scripts/Makefile.package

scripts/package/Makefile does not use $(obj) or $(src) at all.
It actually generates files and directories in the top of $(objtree).
I do not see much sense in descending into scripts/package/.

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

Documentation/kbuild/makefiles.rst | 16 ++++------------
Makefile | 8 +++-----
scripts/Makefile.clean | 14 +-------------
scripts/{package/Makefile => Makefile.package} | 5 ++++-
scripts/kconfig/Makefile | 2 +-
usr/include/Makefile | 4 +---
6 files changed, 14 insertions(+), 35 deletions(-)
rename scripts/{package/Makefile => Makefile.package} (99%)

diff --git a/Documentation/kbuild/makefiles.rst b/Documentation/kbuild/makefiles.rst
index 68ed20ef37dd..78aa51a6fcd4 100644
--- a/Documentation/kbuild/makefiles.rst
+++ b/Documentation/kbuild/makefiles.rst
@@ -765,7 +765,8 @@ Files matching the patterns "*.[oas]", "*.ko", plus some additional files
generated by kbuild are deleted all over the kernel src tree when
"make clean" is executed.

-Additional files can be specified in kbuild makefiles by use of $(clean-files).
+Additional files or directories can be specified in kbuild makefiles by use of
+$(clean-files).

Example::

@@ -776,17 +777,8 @@ When executing "make clean", the file "crc32table.h" will be deleted.
Kbuild will assume files to be in the same relative directory as the
Makefile, except if prefixed with $(objtree).

-To delete a directory hierarchy use:
-
- Example::
-
- #scripts/package/Makefile
- clean-dirs := $(objtree)/debian/
-
-This will delete the directory debian in the toplevel directory, including all
-subdirectories.
-
-To exclude certain files from make clean, use the $(no-clean-files) variable.
+To exclude certain files or directories from make clean, use the
+$(no-clean-files) variable.

Usually kbuild descends down in subdirectories due to "obj-* := dir/",
but in the architecture makefiles where the kbuild infrastructure
diff --git a/Makefile b/Makefile
index e88d4fcd5e87..ec2a6b85a0fa 100644
--- a/Makefile
+++ b/Makefile
@@ -1448,13 +1448,11 @@ distclean: mrproper

# Packaging of the kernel to various formats
# ---------------------------------------------------------------------------
-package-dir := scripts/package

%src-pkg: FORCE
- $(Q)$(MAKE) $(build)=$(package-dir) $@
+ $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.package $@
%pkg: include/config/kernel.release FORCE
- $(Q)$(MAKE) $(build)=$(package-dir) $@
-
+ $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.package $@

# Brief documentation of the typical targets used
# ---------------------------------------------------------------------------
@@ -1526,7 +1524,7 @@ help:
@echo ' or "cd tools; make help"'
@echo ''
@echo 'Kernel packaging:'
- @$(MAKE) $(build)=$(package-dir) help
+ @$(MAKE) -f $(srctree)/scripts/Makefile.package help
@echo ''
@echo 'Documentation targets:'
@$(MAKE) -f $(srctree)/Documentation/Makefile dochelp
diff --git a/scripts/Makefile.clean b/scripts/Makefile.clean
index 0b80e3207b20..798e8717c1d9 100644
--- a/scripts/Makefile.clean
+++ b/scripts/Makefile.clean
@@ -52,26 +52,14 @@ __clean-files := $(wildcard \
$(addprefix $(obj)/, $(filter-out $(objtree)/%, $(__clean-files))) \
$(filter $(objtree)/%, $(__clean-files)))

-# same as clean-files
-
-__clean-dirs := $(wildcard \
- $(addprefix $(obj)/, $(filter-out $(objtree)/%, $(clean-dirs))) \
- $(filter $(objtree)/%, $(clean-dirs)))
-
# ==========================================================================

quiet_cmd_clean = CLEAN $(obj)
- cmd_clean = rm -f $(__clean-files)
-quiet_cmd_cleandir = CLEAN $(__clean-dirs)
- cmd_cleandir = rm -rf $(__clean-dirs)
-
+ cmd_clean = rm -rf $(__clean-files)

__clean: $(subdir-ymn)
ifneq ($(strip $(__clean-files)),)
+$(call cmd,clean)
-endif
-ifneq ($(strip $(__clean-dirs)),)
- +$(call cmd,cleandir)
endif
@:

diff --git a/scripts/package/Makefile b/scripts/Makefile.package
similarity index 99%
rename from scripts/package/Makefile
rename to scripts/Makefile.package
index 407189d9942a..56eadcc48d46 100644
--- a/scripts/package/Makefile
+++ b/scripts/Makefile.package
@@ -1,6 +1,7 @@
# SPDX-License-Identifier: GPL-2.0-only
# Makefile for the different targets used to generate full packages of a kernel
-# It uses the generic clean infrastructure of kbuild
+
+include $(srctree)/scripts/Kbuild.include

# RPM target
# ---------------------------------------------------------------------------
@@ -154,3 +155,5 @@ help:
@echo ' perf-targz-src-pkg - Build $(perf-tar).tar.gz source tarball'
@echo ' perf-tarbz2-src-pkg - Build $(perf-tar).tar.bz2 source tarball'
@echo ' perf-tarxz-src-pkg - Build $(perf-tar).tar.xz source tarball'
+
+.PHONY: $(PHONY)
diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
index 7656e1137b6b..bed7a5a2fbe9 100644
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -114,7 +114,7 @@ testconfig: $(obj)/conf
$(PYTHON3) -B -m pytest $(srctree)/$(src)/tests \
-o cache_dir=$(abspath $(obj)/tests/.cache) \
$(if $(findstring 1,$(KBUILD_VERBOSE)),--capture=no)
-clean-dirs += tests/.cache
+clean-files += tests/.cache

# Help text used by make help
help:
diff --git a/usr/include/Makefile b/usr/include/Makefile
index 1fb6abe29b2f..05c71ef42f51 100644
--- a/usr/include/Makefile
+++ b/usr/include/Makefile
@@ -115,6 +115,4 @@ header-test-y += $(filter-out $(header-test-), \
$(patsubst $(obj)/%,%, $(wildcard \
$(addprefix $(obj)/, *.h */*.h */*/*.h */*/*/*.h))))

-# For GNU Make <= 4.2.1, $(wildcard $(obj)/*/) matches to not only directories
-# but also regular files. Use $(filter %/, ...) just in case.
-clean-dirs += $(patsubst $(obj)/%/,%,$(filter %/, $(wildcard $(obj)/*/)))
+clean-files += $(filter-out Makefile, $(notdir $(wildcard $(obj)/*)))
--
2.17.1

2019-08-28 16:46:16

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [PATCH 1/4] kbuild: pkg: clean up package files/dirs from the top Makefile

On Wed, Aug 21, 2019 at 4:02 PM Masahiro Yamada
<[email protected]> wrote:
>
> I am not a big fan of the $(objtree)/ hack for clean-files/clean-dirs.
>
> These are created in the top of $(objtree), so let's clean them up
> from the top Makefile.
>
> Signed-off-by: Masahiro Yamada <[email protected]>
> ---

Applied to linux-kbuild.


>
> Makefile | 6 ++++--
> scripts/Makefile | 2 +-
> scripts/package/Makefile | 9 ---------
> 3 files changed, 5 insertions(+), 12 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index 5d202ad1481a..e88d4fcd5e87 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1389,12 +1389,14 @@ CLEAN_FILES += modules.builtin.modinfo
>
> # Directories & files removed with 'make mrproper'
> MRPROPER_DIRS += include/config include/generated \
> - arch/$(SRCARCH)/include/generated .tmp_objdiff
> + arch/$(SRCARCH)/include/generated .tmp_objdiff \
> + debian/ snap/ tar-install/
> MRPROPER_FILES += .config .config.old .version \
> Module.symvers \
> signing_key.pem signing_key.priv signing_key.x509 \
> x509.genkey extra_certificates signing_key.x509.keyid \
> - signing_key.x509.signer vmlinux-gdb.py
> + signing_key.x509.signer vmlinux-gdb.py \
> + *.spec
>
> # Directories & files removed with 'make distclean'
> DISTCLEAN_DIRS +=
> diff --git a/scripts/Makefile b/scripts/Makefile
> index 16bcb8087899..c42891e10ba3 100644
> --- a/scripts/Makefile
> +++ b/scripts/Makefile
> @@ -36,4 +36,4 @@ subdir-$(CONFIG_MODVERSIONS) += genksyms
> subdir-$(CONFIG_SECURITY_SELINUX) += selinux
>
> # Let clean descend into subdirs
> -subdir- += basic dtc gdb kconfig mod package
> +subdir- += basic dtc gdb kconfig mod
> diff --git a/scripts/package/Makefile b/scripts/package/Makefile
> index ca7f46b562a4..a2d8830f54be 100644
> --- a/scripts/package/Makefile
> +++ b/scripts/package/Makefile
> @@ -65,8 +65,6 @@ binrpm-pkg: FORCE
> +rpmbuild $(RPMOPTS) --define "_builddir $(objtree)" --target \
> $(UTS_MACHINE) -bb $(objtree)/binkernel.spec
>
> -clean-files += $(objtree)/*.spec
> -
> deb-pkg: FORCE
> $(MAKE) clean
> $(CONFIG_SHELL) $(srctree)/scripts/package/mkdebian
> @@ -82,8 +80,6 @@ bindeb-pkg: FORCE
> intdeb-pkg: FORCE
> +$(CONFIG_SHELL) $(srctree)/scripts/package/builddeb
>
> -clean-dirs += $(objtree)/debian/
> -
> # snap-pkg
> # ---------------------------------------------------------------------------
> snap-pkg: FORCE
> @@ -98,17 +94,12 @@ snap-pkg: FORCE
> cd $(objtree)/snap && \
> snapcraft --target-arch=$(UTS_MACHINE)
>
> -clean-dirs += $(objtree)/snap/
> -
> # tarball targets
> # ---------------------------------------------------------------------------
> tar%pkg: FORCE
> $(MAKE) -f $(srctree)/Makefile
> +$(CONFIG_SHELL) $(srctree)/scripts/package/buildtar $@
>
> -clean-dirs += $(objtree)/tar-install/
> -
> -
> # perf-pkg - generate a source tarball with perf source
> # ---------------------------------------------------------------------------
>
> --
> 2.17.1
>


--
Best Regards
Masahiro Yamada