History

kbuild: modpost: do not parse unnecessary rules for vmlinux modpost

Since commit ff9b45c55b26 ("kbuild: modpost: read modules.order instead of $(MODVERDIR)/*.mod"), 'make vmlinux' emits a warning, like this: $ make defconfig vmlinux [ snip ] LD vmlinux.o cat: modules.order: No such file or directory MODPOST vmlinux.o MODINFO modules.builtin.modinfo KSYM .tmp_kallsyms1.o KSYM .tmp_kallsyms2.o LD vmlinux SORTEX vmlinux SYSMAP System.map When building only vmlinux, KBUILD_MODULES is not set. Hence, the modules.order is not generated. For the vmlinux modpost, it is not necessary at all. Separate scripts/Makefile.modpost for the vmlinux/modules stages. This works more efficiently because the vmlinux modpost does not need to include .*.cmd files.

Masahiro Yamada committed 7 years ago

Commit a7215881 parent acf2a132 files · +42 −36Browse files

Showing the changes to scripts (2 of 2 files). Show all

Unified · Split

2 files
  1. scripts/Makefile.modpost +41 −35
  2. scripts/link-vmlinux.sh +1 −1
scripts/Makefile.modpost+41−35
@@ -38,12 +38,39 @@ · 37 unmodified lines
38# symbols in the final module linking stage38# symbols in the final module linking stage
39# KBUILD_MODPOST_NOFINAL can be set to skip the final link of modules.39# KBUILD_MODPOST_NOFINAL can be set to skip the final link of modules.
40# This is solely useful to speed up test compiles40# This is solely useful to speed up test compiles
41PHONY := _modpost41
42_modpost: __modpost42PHONY := __modpost
43__modpost:
43 44
44include include/config/auto.conf45include include/config/auto.conf
45include scripts/Kbuild.include46include scripts/Kbuild.include
46 47
48kernelsymfile := $(objtree)/Module.symvers
49modulesymfile := $(firstword $(KBUILD_EXTMOD))/Module.symvers
50
51MODPOST = scripts/mod/modpost \
52 $(if $(CONFIG_MODVERSIONS),-m) \
53 $(if $(CONFIG_MODULE_SRCVERSION_ALL),-a) \
54 $(if $(KBUILD_EXTMOD),-i,-o) $(kernelsymfile) \
55 $(if $(KBUILD_EXTMOD),-I $(modulesymfile)) \
56 $(if $(KBUILD_EXTMOD),$(addprefix -e ,$(KBUILD_EXTRA_SYMBOLS))) \
57 $(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \
58 $(if $(CONFIG_SECTION_MISMATCH_WARN_ONLY),,-E) \
59 $(if $(KBUILD_MODPOST_WARN),-w)
60
61ifdef MODPOST_VMLINUX
62
63__modpost: vmlinux.o
64
65quiet_cmd_modpost = MODPOST $@
66 cmd_modpost = $(MODPOST) $@
67
68PHONY += vmlinux.o
69vmlinux.o:
70 $(call cmd,modpost)
71
72else
73
47# When building external modules load the Kbuild file to retrieve EXTRA_SYMBOLS info74# When building external modules load the Kbuild file to retrieve EXTRA_SYMBOLS info
48ifneq ($(KBUILD_EXTMOD),)75ifneq ($(KBUILD_EXTMOD),)
49 76
@@ -58,50 +85,27 @@ endif · 8 unmodified lines
58 85
59include scripts/Makefile.lib86include scripts/Makefile.lib
60 87
61kernelsymfile := $(objtree)/Module.symvers
62modulesymfile := $(firstword $(KBUILD_EXTMOD))/Module.symvers
63
64modorder := $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/)modules.order88modorder := $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/)modules.order
65 89
66# Step 1), find all modules listed in modules.order90# find all modules listed in modules.order
67ifdef CONFIG_MODULES
68modules := $(sort $(shell cat $(modorder)))91modules := $(sort $(shell cat $(modorder)))
69endif
70 92
71# Stop after building .o files if NOFINAL is set. Makes compile tests quicker93# Stop after building .o files if NOFINAL is set. Makes compile tests quicker
72_modpost: $(if $(KBUILD_MODPOST_NOFINAL), $(modules:.ko:.o),$(modules))94__modpost: $(if $(KBUILD_MODPOST_NOFINAL), $(modules:.ko:.o),$(modules))
73 95 @:
74# Step 2), invoke modpost96
75# Includes step 3,497MODPOST += $(subst -i,-n,$(filter -i,$(MAKEFLAGS))) -s -T - $(wildcard vmlinux)
76modpost = scripts/mod/modpost \
77 $(if $(CONFIG_MODVERSIONS),-m) \
78 $(if $(CONFIG_MODULE_SRCVERSION_ALL),-a,) \
79 $(if $(KBUILD_EXTMOD),-i,-o) $(kernelsymfile) \
80 $(if $(KBUILD_EXTMOD),-I $(modulesymfile)) \
81 $(if $(KBUILD_EXTMOD),$(addprefix -e ,$(KBUILD_EXTRA_SYMBOLS))) \
82 $(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \
83 $(if $(CONFIG_SECTION_MISMATCH_WARN_ONLY),,-E) \
84 $(if $(KBUILD_MODPOST_WARN),-w)
85
86MODPOST_OPT=$(subst -i,-n,$(filter -i,$(MAKEFLAGS)))
87 98
88# We can go over command line length here, so be careful.99# We can go over command line length here, so be careful.
89quiet_cmd_modpost = MODPOST $(words $(modules)) modules100quiet_cmd_modpost = MODPOST $(words $(modules)) modules
90 cmd_modpost = sed 's/ko$$/o/' $(modorder) | $(modpost) $(MODPOST_OPT) -s -T -101 cmd_modpost = sed 's/ko$$/o/' $(modorder) | $(MODPOST)
91 102
92PHONY += __modpost103PHONY += modules-modpost
93__modpost:104modules-modpost:
94 $(call cmd,modpost) $(wildcard vmlinux)105 $(call cmd,modpost)
95
96quiet_cmd_kernel-mod = MODPOST $@
97 cmd_kernel-mod = $(modpost) $@
98
99vmlinux.o: FORCE
100 $(call cmd,kernel-mod)
101 106
102# Declare generated files as targets for modpost107# Declare generated files as targets for modpost
103$(modules:.ko=.mod.c): __modpost ;108$(modules:.ko=.mod.c): modules-modpost
104
105 109
106# Step 5), compile all *.mod.c files110# Step 5), compile all *.mod.c files
107 111
@@ -149,4 +153,6 @@ existing-targets := $(wildcard $(sort $(targets))) · 41 unmodified lines
149 153
150-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)154-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
151 155
156endif
157
152.PHONY: $(PHONY)158.PHONY: $(PHONY)
scripts/link-vmlinux.sh+1−1
@@ -210,7 +210,7 @@ info LD vmlinux.o · 209 unmodified lines
210modpost_link vmlinux.o210modpost_link vmlinux.o
211 211
212# modpost vmlinux.o to check for section mismatches212# modpost vmlinux.o to check for section mismatches
213${MAKE} -f "${srctree}/scripts/Makefile.modpost" vmlinux.o213${MAKE} -f "${srctree}/scripts/Makefile.modpost" MODPOST_VMLINUX=1
214 214
215info MODINFO modules.builtin.modinfo215info MODINFO modules.builtin.modinfo
216${OBJCOPY} -j .modinfo -O binary vmlinux.o modules.builtin.modinfo216${OBJCOPY} -j .modinfo -O binary vmlinux.o modules.builtin.modinfo