Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'kbuild-fixes-v5.3-3' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild

Pull Kbuild fixes from Masahiro Yamada:

- revive single target %.ko

- do not create built-in.a where it is unneeded

- do not create modules.order where it is unneeded

- show a warning if subdir-y/m is used to visit a module Makefile

* tag 'kbuild-fixes-v5.3-3' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild:
kbuild: show hint if subdir-y/m is used to visit module Makefile
kbuild: generate modules.order only in directories visited by obj-y/m
kbuild: fix false-positive need-builtin calculation
kbuild: revive single target %.ko

+24 -6
+12 -1
Makefile
··· 1003 1003 1004 1004 PHONY += prepare0 1005 1005 1006 + export MODORDER := $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/)modules.order 1007 + 1006 1008 ifeq ($(KBUILD_EXTMOD),) 1007 1009 core-y += kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/ 1008 1010 ··· 1774 1772 $(Q)$(MAKE) $(build)=$(build-dir) $(build-target) 1775 1773 %.symtypes: prepare FORCE 1776 1774 $(Q)$(MAKE) $(build)=$(build-dir) $(build-target) 1775 + ifeq ($(KBUILD_EXTMOD),) 1776 + # For the single build of an in-tree module, use a temporary file to avoid 1777 + # the situation of modules_install installing an invalid modules.order. 1778 + %.ko: MODORDER := .modules.tmp 1779 + endif 1780 + %.ko: prepare FORCE 1781 + $(Q)$(MAKE) $(build)=$(build-dir) $(build-target:.ko=.mod) 1782 + $(Q)echo $(build-target) > $(MODORDER) 1783 + $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost 1777 1784 1778 1785 # Modules 1779 1786 PHONY += / 1780 1787 /: ./ 1781 1788 1782 1789 %/: prepare FORCE 1783 - $(Q)$(MAKE) KBUILD_MODULES=1 $(build)=$(build-dir) 1790 + $(Q)$(MAKE) KBUILD_MODULES=1 $(build)=$(build-dir) need-modorder=1 1784 1791 1785 1792 # FIXME Should go into a make.lib or something 1786 1793 # ===========================================================================
+10 -1
scripts/Makefile.build
··· 52 52 $(warning kbuild: Makefile.build is included improperly) 53 53 endif 54 54 55 + ifeq ($(MAKECMDGOALS)$(need-modorder),) 56 + ifneq ($(obj-m),) 57 + $(warning $(patsubst %.o,'%.ko',$(obj-m)) will not be built even though obj-m is specified.) 58 + $(warning You cannot use subdir-y/m to visit a module Makefile. Use obj-y/m instead.) 59 + endif 60 + endif 61 + 55 62 # =========================================================================== 56 63 57 64 ifneq ($(strip $(lib-y) $(lib-m) $(lib-)),) ··· 494 487 495 488 PHONY += $(subdir-ym) 496 489 $(subdir-ym): 497 - $(Q)$(MAKE) $(build)=$@ need-builtin=$(if $(findstring $@,$(subdir-obj-y)),1) 490 + $(Q)$(MAKE) $(build)=$@ \ 491 + need-builtin=$(if $(filter $@/built-in.a, $(subdir-obj-y)),1) \ 492 + need-modorder=$(if $(need-modorder),$(if $(filter $@/modules.order, $(modorder)),1)) 498 493 499 494 # Add FORCE to the prequisites of a target to force it to be always rebuilt. 500 495 # ---------------------------------------------------------------------------
+2 -4
scripts/Makefile.modpost
··· 85 85 86 86 include scripts/Makefile.lib 87 87 88 - modorder := $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/)modules.order 89 - 90 88 # find all modules listed in modules.order 91 - modules := $(sort $(shell cat $(modorder))) 89 + modules := $(sort $(shell cat $(MODORDER))) 92 90 93 91 # Stop after building .o files if NOFINAL is set. Makes compile tests quicker 94 92 __modpost: $(if $(KBUILD_MODPOST_NOFINAL), $(modules:.ko:.o),$(modules)) ··· 96 98 97 99 # We can go over command line length here, so be careful. 98 100 quiet_cmd_modpost = MODPOST $(words $(modules)) modules 99 - cmd_modpost = sed 's/ko$$/o/' $(modorder) | $(MODPOST) 101 + cmd_modpost = sed 's/ko$$/o/' $(MODORDER) | $(MODPOST) 100 102 101 103 PHONY += modules-modpost 102 104 modules-modpost: