mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 06:01:57 +00:00
kbuild: skip sub-make for in-tree build with GNU Make 4.x
Commit2b50f7ab63
("kbuild: add workaround for Debian make-kpkg") annoyed people who want to wrap the top Makefile with GNUmakefile to customize it for their use. On second thought, we do not need to run the sub-make for in-tree build with Make 4.x because the 'MAKEFLAGS += -rR' issue only happens on GNU Make 3.x. With this commit, people will get back their workflow, and the Debian make-kpkg will still work. Fixes:2b50f7ab63
("kbuild: add workaround for Debian make-kpkg") Reported-by: Andreas Schwab <schwab@suse.de> Reported-by: David Howells <dhowells@redhat.com> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Tested-by: Andreas Schwab <schwab@suse.de> Tested-by: David Howells <dhowells@redhat.com>
This commit is contained in:
parent
a75bb4eb9e
commit
688931a5ad
32
Makefile
32
Makefile
@ -31,26 +31,12 @@ _all:
|
|||||||
# descending is started. They are now explicitly listed as the
|
# descending is started. They are now explicitly listed as the
|
||||||
# prepare rule.
|
# prepare rule.
|
||||||
|
|
||||||
# Ugly workaround for Debian make-kpkg:
|
|
||||||
# make-kpkg directly includes the top Makefile of Linux kernel. In such a case,
|
|
||||||
# skip sub-make to support debian_* targets in ruleset/kernel_version.mk, but
|
|
||||||
# displays warning to discourage such abusage.
|
|
||||||
ifneq ($(word 2, $(MAKEFILE_LIST)),)
|
|
||||||
$(warning Do not include top Makefile of Linux Kernel)
|
|
||||||
sub-make-done := 1
|
|
||||||
MAKEFLAGS += -rR
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifneq ($(sub-make-done),1)
|
ifneq ($(sub-make-done),1)
|
||||||
|
|
||||||
# Do not use make's built-in rules and variables
|
# Do not use make's built-in rules and variables
|
||||||
# (this increases performance and avoids hard-to-debug behaviour)
|
# (this increases performance and avoids hard-to-debug behaviour)
|
||||||
MAKEFLAGS += -rR
|
MAKEFLAGS += -rR
|
||||||
|
|
||||||
# 'MAKEFLAGS += -rR' does not become immediately effective for old
|
|
||||||
# GNU Make versions. Cancel implicit rules for this Makefile.
|
|
||||||
$(lastword $(MAKEFILE_LIST)): ;
|
|
||||||
|
|
||||||
# Avoid funny character set dependencies
|
# Avoid funny character set dependencies
|
||||||
unexport LC_ALL
|
unexport LC_ALL
|
||||||
LC_COLLATE=C
|
LC_COLLATE=C
|
||||||
@ -153,6 +139,7 @@ $(if $(KBUILD_OUTPUT),, \
|
|||||||
# 'sub-make' below.
|
# 'sub-make' below.
|
||||||
MAKEFLAGS += --include-dir=$(CURDIR)
|
MAKEFLAGS += --include-dir=$(CURDIR)
|
||||||
|
|
||||||
|
need-sub-make := 1
|
||||||
else
|
else
|
||||||
|
|
||||||
# Do not print "Entering directory ..." at all for in-tree build.
|
# Do not print "Entering directory ..." at all for in-tree build.
|
||||||
@ -160,6 +147,16 @@ MAKEFLAGS += --no-print-directory
|
|||||||
|
|
||||||
endif # ifneq ($(KBUILD_OUTPUT),)
|
endif # ifneq ($(KBUILD_OUTPUT),)
|
||||||
|
|
||||||
|
ifneq ($(filter 3.%,$(MAKE_VERSION)),)
|
||||||
|
# 'MAKEFLAGS += -rR' does not immediately become effective for GNU Make 3.x
|
||||||
|
# We need to invoke sub-make to avoid implicit rules in the top Makefile.
|
||||||
|
need-sub-make := 1
|
||||||
|
# Cancel implicit rules for this Makefile.
|
||||||
|
$(lastword $(MAKEFILE_LIST)): ;
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(need-sub-make),1)
|
||||||
|
|
||||||
PHONY += $(MAKECMDGOALS) sub-make
|
PHONY += $(MAKECMDGOALS) sub-make
|
||||||
|
|
||||||
$(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
|
$(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
|
||||||
@ -171,8 +168,11 @@ sub-make:
|
|||||||
$(if $(KBUILD_OUTPUT),-C $(KBUILD_OUTPUT) KBUILD_SRC=$(CURDIR)) \
|
$(if $(KBUILD_OUTPUT),-C $(KBUILD_OUTPUT) KBUILD_SRC=$(CURDIR)) \
|
||||||
-f $(CURDIR)/Makefile $(filter-out _all sub-make,$(MAKECMDGOALS))
|
-f $(CURDIR)/Makefile $(filter-out _all sub-make,$(MAKECMDGOALS))
|
||||||
|
|
||||||
else # sub-make-done
|
endif # need-sub-make
|
||||||
|
endif # sub-make-done
|
||||||
|
|
||||||
# We process the rest of the Makefile if this is the final invocation of make
|
# We process the rest of the Makefile if this is the final invocation of make
|
||||||
|
ifeq ($(need-sub-make),)
|
||||||
|
|
||||||
# Do not print "Entering directory ...",
|
# Do not print "Entering directory ...",
|
||||||
# but we want to display it when entering to the output directory
|
# but we want to display it when entering to the output directory
|
||||||
@ -1757,7 +1757,7 @@ existing-targets := $(wildcard $(sort $(targets)))
|
|||||||
|
|
||||||
endif # ifeq ($(config-targets),1)
|
endif # ifeq ($(config-targets),1)
|
||||||
endif # ifeq ($(mixed-targets),1)
|
endif # ifeq ($(mixed-targets),1)
|
||||||
endif # sub-make-done
|
endif # need-sub-make
|
||||||
|
|
||||||
PHONY += FORCE
|
PHONY += FORCE
|
||||||
FORCE:
|
FORCE:
|
||||||
|
Loading…
Reference in New Issue
Block a user