Kbuild fixes for v5.3 (3rd)

- 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
 -----BEGIN PGP SIGNATURE-----
 
 iQJSBAABCgA8FiEEbmPs18K1szRHjPqEPYsBB53g2wYFAl1OJkIeHHlhbWFkYS5t
 YXNhaGlyb0Bzb2Npb25leHQuY29tAAoJED2LAQed4NsG8U4P/3YKPF4zZdkE+bM2
 50hm4sphyexFfeCF5XdW+ppis+sybWrkotwVXAbmuvqdJFKXpJei3ftlqqtolCDy
 cwCKsNkiEF5fAu8MO4foG/QmORd2LGOWw4Iw6n78r7cppogB8CleSNA+DCQMew2Q
 O1Z8zIKpHnntksGesvpkNqaImM/lpZ3Vu+ihb26uIcrcSu+JVJq+3XGNxeneM9Yr
 jeVbGPhZXTVZoUUTbAQBnQ5mrvDwWWkZnDZkGxouEzHlRlFpJeZQJ/FFb503GySD
 qEbDF7VSMRM8LRDyRNqjwJ2/EqMIMG/eHl/1pXeo7+Pgm54PLpMHj55nkC0D9Y7X
 izus7ubm3fHF2J6MkuHYOkNBWOE5luwGJFPnEJbNlQjiBr4sYblX0GyvuPUrmkR2
 2XGqcO9REDO6y73X1Wp7lLeDOeP84yIYcsvtkf+eZxh43ZHQN60NxZpF2RxvHIMD
 ipQiOfNxt3ouiLa7TcvB4F9VAN8ZgfaB/bfUREf9dvMzbNoB8yqgh4joKWUE32NC
 2QHS23sHOYruHnRyoGYECSuRRMMqnHktuQyllTXa6/OAso1oQVR6N91nhcmgIdSE
 Cj0RChZJ8npeL0wKCcmdMrMCSAusz2sLkxmRc8Cgv5fFYcxeN4eqx+93noE19fOB
 5NOE/xliLlu6J2YbiH9KxCO/pada
 =6/wZ
 -----END PGP SIGNATURE-----

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
This commit is contained in:
Linus Torvalds 2019-08-09 20:31:04 -07:00
commit 451577f3e3
3 changed files with 24 additions and 6 deletions

View File

@ -1003,6 +1003,8 @@ endif
PHONY += prepare0
export MODORDER := $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/)modules.order
ifeq ($(KBUILD_EXTMOD),)
core-y += kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/
@ -1772,13 +1774,22 @@ build-dir = $(patsubst %/,%,$(dir $(build-target)))
$(Q)$(MAKE) $(build)=$(build-dir) $(build-target)
%.symtypes: prepare FORCE
$(Q)$(MAKE) $(build)=$(build-dir) $(build-target)
ifeq ($(KBUILD_EXTMOD),)
# For the single build of an in-tree module, use a temporary file to avoid
# the situation of modules_install installing an invalid modules.order.
%.ko: MODORDER := .modules.tmp
endif
%.ko: prepare FORCE
$(Q)$(MAKE) $(build)=$(build-dir) $(build-target:.ko=.mod)
$(Q)echo $(build-target) > $(MODORDER)
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
# Modules
PHONY += /
/: ./
%/: prepare FORCE
$(Q)$(MAKE) KBUILD_MODULES=1 $(build)=$(build-dir)
$(Q)$(MAKE) KBUILD_MODULES=1 $(build)=$(build-dir) need-modorder=1
# FIXME Should go into a make.lib or something
# ===========================================================================

View File

@ -52,6 +52,13 @@ ifndef obj
$(warning kbuild: Makefile.build is included improperly)
endif
ifeq ($(MAKECMDGOALS)$(need-modorder),)
ifneq ($(obj-m),)
$(warning $(patsubst %.o,'%.ko',$(obj-m)) will not be built even though obj-m is specified.)
$(warning You cannot use subdir-y/m to visit a module Makefile. Use obj-y/m instead.)
endif
endif
# ===========================================================================
ifneq ($(strip $(lib-y) $(lib-m) $(lib-)),)
@ -487,7 +494,9 @@ targets += $(call intermediate_targets, .asn1.o, .asn1.c .asn1.h) \
PHONY += $(subdir-ym)
$(subdir-ym):
$(Q)$(MAKE) $(build)=$@ need-builtin=$(if $(findstring $@,$(subdir-obj-y)),1)
$(Q)$(MAKE) $(build)=$@ \
need-builtin=$(if $(filter $@/built-in.a, $(subdir-obj-y)),1) \
need-modorder=$(if $(need-modorder),$(if $(filter $@/modules.order, $(modorder)),1))
# Add FORCE to the prequisites of a target to force it to be always rebuilt.
# ---------------------------------------------------------------------------

View File

@ -85,10 +85,8 @@ endif
include scripts/Makefile.lib
modorder := $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/)modules.order
# find all modules listed in modules.order
modules := $(sort $(shell cat $(modorder)))
modules := $(sort $(shell cat $(MODORDER)))
# Stop after building .o files if NOFINAL is set. Makes compile tests quicker
__modpost: $(if $(KBUILD_MODPOST_NOFINAL), $(modules:.ko:.o),$(modules))
@ -98,7 +96,7 @@ MODPOST += $(subst -i,-n,$(filter -i,$(MAKEFLAGS))) -s -T - $(wildcard vmlinux)
# We can go over command line length here, so be careful.
quiet_cmd_modpost = MODPOST $(words $(modules)) modules
cmd_modpost = sed 's/ko$$/o/' $(modorder) | $(MODPOST)
cmd_modpost = sed 's/ko$$/o/' $(MODORDER) | $(MODPOST)
PHONY += modules-modpost
modules-modpost: