Skip to content

Commit

Permalink
kbuild: skip sub-make for in-tree build with GNU Make 4.x
Browse files Browse the repository at this point in the history
Commit 2b50f7a ("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: 2b50f7a ("kbuild: add workaround for Debian make-kpkg")
Reported-by: Andreas Schwab <[email protected]>
Reported-by: David Howells <[email protected]>
Signed-off-by: Masahiro Yamada <[email protected]>
Tested-by: Andreas Schwab <[email protected]>
Tested-by: David Howells <[email protected]>
  • Loading branch information
masahir0y committed Mar 21, 2019
1 parent a75bb4e commit 688931a
Showing 1 changed file with 16 additions and 16 deletions.
32 changes: 16 additions & 16 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -31,26 +31,12 @@ _all:
# descending is started. They are now explicitly listed as the
# 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)

# Do not use make's built-in rules and variables
# (this increases performance and avoids hard-to-debug behaviour)
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
unexport LC_ALL
LC_COLLATE=C
Expand Down Expand Up @@ -153,13 +139,24 @@ $(if $(KBUILD_OUTPUT),, \
# 'sub-make' below.
MAKEFLAGS += --include-dir=$(CURDIR)

need-sub-make := 1
else

# Do not print "Entering directory ..." at all for in-tree build.
MAKEFLAGS += --no-print-directory

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

$(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
Expand All @@ -171,8 +168,11 @@ sub-make:
$(if $(KBUILD_OUTPUT),-C $(KBUILD_OUTPUT) KBUILD_SRC=$(CURDIR)) \
-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
ifeq ($(need-sub-make),)

# Do not print "Entering directory ...",
# but we want to display it when entering to the output directory
Expand Down Expand Up @@ -1757,7 +1757,7 @@ existing-targets := $(wildcard $(sort $(targets)))

endif # ifeq ($(config-targets),1)
endif # ifeq ($(mixed-targets),1)
endif # sub-make-done
endif # need-sub-make

PHONY += FORCE
FORCE:
Expand Down

0 comments on commit 688931a

Please sign in to comment.