build: extract clean target from Rules.mk

Most of the code executed by Rules.mk isn't necessary for the clean
target, especially not the CFLAGS. This patch makes running make clean
much faster.

The patch extract the clean target into a different Makefile,
Makefile.clean.

Since Makefile.clean, doesn't want to include Config.mk, we need to
define the variables DEPS_INCLUDE and DEPS in a place common to
Rules.mk and Makefile.clean, this is Kbuild.include. DEPS_RM is only
needed in Makefile.clean so can be defined there.

Even so Rules.mk includes Config.mk, it includes Kbuild.include after,
so the effective definition of DEPS_INCLUDE is "xen/" one and the
same one as used by Makefile.clean.

This is inspired by Kbuild, with Makefile.clean partially copied from
Linux v5.4.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Anthony PERARD authored and Jan Beulich committed 2020-03-06 10:15:04 +01:00
1 parent deacf17ae3
commit 5446def53a
3 files changed
+36 -13

No files matched your search

-12
View File
@@ -100,8 +100,6 @@ SPECIAL_DATA_SECTIONS := rodata $(foreach a,1 2 4 8 16, \
include $(BASEDIR)/arch/$(TARGET_ARCH)/Rules.mk
DEPS = .*.d
include Makefile
define gendep
@@ -118,10 +116,6 @@ $(foreach o,$(filter-out %/,$(obj-y) $(obj-bin-y) $(extra-y)),$(eval $(call gend
subdir-y := $(subdir-y) $(filter %/, $(obj-y))
obj-y := $(patsubst %/, %/built_in.o, $(obj-y))
subdir-n := $(subdir-n) $(subdir-) $(filter %/, $(obj-n) $(obj-))
subdir-all := $(subdir-y) $(subdir-n)
$(filter %.init.o,$(obj-y) $(obj-bin-y) $(extra-y)): CFLAGS += -DINIT_SECTIONS_ONLY
ifeq ($(CONFIG_COVERAGE),y)
@@ -185,12 +179,6 @@ FORCE:
%/built_in_bin.o: FORCE
$(MAKE) -f $(BASEDIR)/Rules.mk -C $* built_in_bin.o
.PHONY: clean
clean:: $(addprefix _clean_, $(subdir-all))
rm -f *.o .*.o.tmp *~ core $(DEPS_RM)
_clean_%/: FORCE
$(MAKE) $(clean) $*
SRCPATH := $(patsubst $(BASEDIR)/%,%,$(CURDIR))
%.o: %.c Makefile
+6 -1
View File
@@ -2,6 +2,11 @@
####
# kbuild: Generic definitions
###
# dependencies
DEPS = .*.d
DEPS_INCLUDE = $(addsuffix .d2, $(basename $(wildcard $(DEPS))))
# cc-ifversion
# Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1)
cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || echo $(4))
@@ -9,4 +14,4 @@ cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || e
# Shorthand for $(MAKE) clean
# Usage:
# $(MAKE) $(clean) dir
clean := -f $(BASEDIR)/Rules.mk clean -C
clean := -f $(BASEDIR)/scripts/Makefile.clean clean -C
+30
View File
@@ -0,0 +1,30 @@
# SPDX-License-Identifier: GPL-2.0
# ==========================================================================
# Cleaning up
# ==========================================================================
clean::
include $(BASEDIR)/scripts/Kbuild.include
include Makefile
# Figure out what we need to clean from the various variables
# ==========================================================================
subdir-all := $(subdir-y) $(subdir-n) $(subdir-) \
$(filter %/, $(obj-y) $(obj-n) $(obj-))
DEPS_RM = $(DEPS) $(DEPS_INCLUDE)
.PHONY: clean
clean:: $(addprefix _clean_, $(subdir-all))
rm -f *.o .*.o.tmp *~ core $(DEPS_RM)
# Descending
# ---------------------------------------------------------------------------
_clean_%/: FORCE
$(MAKE) $(clean) $*
# Force execution of pattern rules (for which PHONY cannot be directly used).
.PHONY: FORCE
FORCE:
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.