Blame view

scripts/Makefile.modpost 5.52 KB
b24413180   Greg Kroah-Hartman   License cleanup: ...
1
  # SPDX-License-Identifier: GPL-2.0
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2
3
4
5
6
7
  # ===========================================================================
  # Module versions
  # ===========================================================================
  #
  # Stage one of module building created the following:
  # a) The individual .o files used for the module
c30fe7f73   Uwe Zeisberger   fix typos "wich" ...
8
  # b) A <module>.o file which is the .o files above linked together
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
9
10
11
12
13
14
15
16
17
  # c) A <module>.mod file in $(MODVERDIR)/, listing the name of the
  #    the preliminary <module>.o file, plus all .o files
  
  # Stage 2 is handled by this file and does the following
  # 1) Find all modules from the files listed in $(MODVERDIR)/
  # 2) modpost is then used to
  # 3)  create one <module>.mod.c file pr. module
  # 4)  create one Module.symvers file with CRC for all exported symbols
  # 5) compile all <module>.mod.c files
e2a666d52   Rusty Russell   kbuild: sign the ...
18
  # 6) final link of the module to a <module.ko> file
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
19
20
21
  
  # Step 3 is used to place certain information in the module's ELF
  # section, including information such as:
163d3fe6a   Geert Uytterhoeven   kbuild: Fix refer...
22
  #   Version magic (see include/linux/vermagic.h for full details)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
23
24
25
26
27
28
29
30
31
32
33
  #     - Kernel release
  #     - SMP is CONFIG_SMP
  #     - PREEMPT is CONFIG_PREEMPT
  #     - GCC Version
  #   Module info
  #     - Module version (MODULE_VERSION)
  #     - Module alias'es (MODULE_ALIAS)
  #     - Module license (MODULE_LICENSE)
  #     - See include/linux/module.h for more details
  
  # Step 4 is solely used to allow module versioning in external modules,
4696e2958   Uwe Kleine-König   trivial: fix a ty...
34
  # where the CRC of each module is retrieved from the Module.symvers file.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
35

ea837f1c0   Sam Ravnborg   kbuild: make modp...
36
37
38
  # KBUILD_MODPOST_WARN can be set to avoid error out in case of undefined
  # symbols in the final module linking stage
  # KBUILD_MODPOST_NOFINAL can be set to skip the final link of modules.
25985edce   Lucas De Marchi   Fix common misspe...
39
  # This is solely useful to speed up test compiles
4f1933620   Paul Smith   kbuild: change kb...
40
  PHONY := _modpost
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
41
  _modpost: __modpost
c955ccafc   Roman Zippel   kconfig: fix .con...
42
  include include/config/auto.conf
8ec4b4ff1   Sam Ravnborg   kbuild: introduce...
43
  include scripts/Kbuild.include
0d96fb20b   Richard Hacker   kbuild: Add new K...
44

25985edce   Lucas De Marchi   Fix common misspe...
45
  # When building external modules load the Kbuild file to retrieve EXTRA_SYMBOLS info
0d96fb20b   Richard Hacker   kbuild: Add new K...
46
  ifneq ($(KBUILD_EXTMOD),)
96d97f262   Sam Ravnborg   kbuild: fix $(src...
47
48
49
50
  
  # set src + obj - they may be used when building the .mod.c file
  obj := $(KBUILD_EXTMOD)
  src := $(obj)
0d96fb20b   Richard Hacker   kbuild: Add new K...
51
52
53
54
  # Include the module's Makefile to find KBUILD_EXTRA_SYMBOLS
  include $(if $(wildcard $(KBUILD_EXTMOD)/Kbuild), \
               $(KBUILD_EXTMOD)/Kbuild, $(KBUILD_EXTMOD)/Makefile)
  endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
55
  include scripts/Makefile.lib
040fcc819   Sam Ravnborg   kbuild: improved ...
56
  kernelsymfile := $(objtree)/Module.symvers
3f3fd3c05   Greg Banks   [PATCH] kbuild: a...
57
  modulesymfile := $(firstword $(KBUILD_EXTMOD))/Module.symvers
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
58
59
  
  # Step 1), find all modules listed in $(MODVERDIR)/
ea4054a23   Rusty Russell   modpost: handle h...
60
61
  MODLISTCMD := find $(MODVERDIR) -name '*.mod' | xargs -r grep -h '\.ko$$' | sort -u
  __modules := $(shell $(MODLISTCMD))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
62
  modules   := $(patsubst %.o,%.ko, $(wildcard $(__modules:.ko=.o)))
ea837f1c0   Sam Ravnborg   kbuild: make modp...
63
64
  # Stop after building .o files if NOFINAL is set. Makes compile tests quicker
  _modpost: $(if $(KBUILD_MODPOST_NOFINAL), $(modules:.ko:.o),$(modules))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
65

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
66
67
  # Step 2), invoke modpost
  #  Includes step 3,4
8d8d8289d   Sam Ravnborg   kbuild: do not do...
68
69
70
71
72
  modpost = scripts/mod/modpost                    \
   $(if $(CONFIG_MODVERSIONS),-m)                  \
   $(if $(CONFIG_MODULE_SRCVERSION_ALL),-a,)       \
   $(if $(KBUILD_EXTMOD),-i,-o) $(kernelsymfile)   \
   $(if $(KBUILD_EXTMOD),-I $(modulesymfile))      \
92f83cc56   Peter Volkov   kbuild: fix KBUIL...
73
   $(if $(KBUILD_EXTRA_SYMBOLS), $(patsubst %, -e %,$(KBUILD_EXTRA_SYMBOLS))) \
8d8d8289d   Sam Ravnborg   kbuild: do not do...
74
   $(if $(KBUILD_EXTMOD),-o $(modulesymfile))      \
588ccd732   Sam Ravnborg   kbuild: add verbo...
75
   $(if $(CONFIG_DEBUG_SECTION_MISMATCH),,-S)      \
47490ec14   Nicolas Boichat   modpost: Add flag...
76
   $(if $(CONFIG_SECTION_MISMATCH_WARN_ONLY),,-E)  \
6543becf2   Andreas Schwab   mod/file2alias: m...
77
   $(if $(KBUILD_EXTMOD)$(KBUILD_MODPOST_WARN),-w)
8d8d8289d   Sam Ravnborg   kbuild: do not do...
78

eed380f3f   Guenter Roeck   modpost: Optional...
79
  MODPOST_OPT=$(subst -i,-n,$(filter -i,$(MAKEFLAGS)))
ea4054a23   Rusty Russell   modpost: handle h...
80
  # We can go over command line length here, so be careful.
12715d20a   Sam Ravnborg   kbuild: modpost o...
81
  quiet_cmd_modpost = MODPOST $(words $(filter-out vmlinux FORCE, $^)) modules
eed380f3f   Guenter Roeck   modpost: Optional...
82
        cmd_modpost = $(MODLISTCMD) | sed 's/\.ko$$/.o/' | $(modpost) $(MODPOST_OPT) -s -T -
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
83

4f1933620   Paul Smith   kbuild: change kb...
84
  PHONY += __modpost
12715d20a   Sam Ravnborg   kbuild: modpost o...
85
  __modpost: $(modules:.ko=.o) FORCE
ea4054a23   Rusty Russell   modpost: handle h...
86
  	$(call cmd,modpost) $(wildcard vmlinux)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
87

12715d20a   Sam Ravnborg   kbuild: modpost o...
88
  quiet_cmd_kernel-mod = MODPOST $@
8d8d8289d   Sam Ravnborg   kbuild: do not do...
89
        cmd_kernel-mod = $(modpost) $@
12715d20a   Sam Ravnborg   kbuild: modpost o...
90

741f98fe2   Sam Ravnborg   kbuild: do sectio...
91
  vmlinux.o: FORCE
12715d20a   Sam Ravnborg   kbuild: modpost o...
92
  	$(call cmd,kernel-mod)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
93
  # Declare generated files as targets for modpost
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
94
95
96
97
98
99
  $(modules:.ko=.mod.c): __modpost ;
  
  
  # Step 5), compile all *.mod.c files
  
  # modname is set to make c_flags define KBUILD_MODNAME
5e8d780d7   Sam Ravnborg   kbuild: fix ia64 ...
100
  modname = $(notdir $(@:.mod.o=))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
101
102
  
  quiet_cmd_cc_o_c = CC      $@
6588169d5   Sam Ravnborg   kbuild: allow ass...
103
        cmd_cc_o_c = $(CC) $(c_flags) $(KBUILD_CFLAGS_MODULE) $(CFLAGS_MODULE) \
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
104
105
106
107
108
109
  		   -c -o $@ $<
  
  $(modules:.ko=.mod.o): %.mod.o: %.mod.c FORCE
  	$(call if_changed_dep,cc_o_c)
  
  targets += $(modules:.ko=.mod.o)
fbe6e37da   Nicholas Piggin   kbuild: add arch ...
110
111
112
  ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)
  
  # Step 6), final link of the modules with optional arch pass after final link
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
113
  quiet_cmd_ld_ko_o = LD [M]  $@
fbe6e37da   Nicholas Piggin   kbuild: add arch ...
114
115
116
117
118
        cmd_ld_ko_o =                                                     \
  	$(LD) -r $(LDFLAGS)                                             \
                   $(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE)             \
                   -o $@ $(filter-out FORCE,$^) ;                         \
  	$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
119
120
  
  $(modules): %.ko :%.o %.mod.o FORCE
fbe6e37da   Nicholas Piggin   kbuild: add arch ...
121
  	+$(call if_changed,ld_ko_o)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
122
123
124
125
126
127
  
  targets += $(modules)
  
  
  # Add FORCE to the prequisites of a target to force it to be always rebuilt.
  # ---------------------------------------------------------------------------
4f1933620   Paul Smith   kbuild: change kb...
128
  PHONY += FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
129
130
131
132
133
134
135
136
137
138
139
140
141
142
  
  FORCE:
  
  # Read all saved command lines and dependencies for the $(targets) we
  # may be building above, using $(if_changed{,_dep}). As an
  # optimization, we don't need to read them if the target does not
  # exist, we will rebuild anyway in that case.
  
  targets := $(wildcard $(sort $(targets)))
  cmd_files := $(wildcard $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
  
  ifneq ($(cmd_files),)
    include $(cmd_files)
  endif
4f1933620   Paul Smith   kbuild: change kb...
143
144
145
146
147
148
  
  
  # Declare the contents of the .PHONY variable as phony.  We keep that
  # information in a variable se we can use it in if_changed and friends.
  
  .PHONY: $(PHONY)