Blame view

scripts/Makefile.modpost 5.13 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
  # ===========================================================================
  # 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" ...
7
  # b) A <module>.o file which is the .o files above linked together
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
8
9
10
11
12
13
14
15
16
17
18
19
20
  # 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
  # 6) final link of the module to a <module.ko> file
  
  # Step 3 is used to place certain information in the module's ELF
  # section, including information such as:
163d3fe6a   Geert Uytterhoeven   kbuild: Fix refer...
21
  #   Version magic (see include/linux/vermagic.h for full details)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
22
23
24
25
26
27
28
29
30
31
32
  #     - 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...
33
  # where the CRC of each module is retrieved from the Module.symvers file.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
34

ea837f1c0   Sam Ravnborg   kbuild: make modp...
35
36
37
  # 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...
38
  # This is solely useful to speed up test compiles
4f1933620   Paul Smith   kbuild: change kb...
39
  PHONY := _modpost
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
40
  _modpost: __modpost
c955ccafc   Roman Zippel   kconfig: fix .con...
41
  include include/config/auto.conf
8ec4b4ff1   Sam Ravnborg   kbuild: introduce...
42
  include scripts/Kbuild.include
0d96fb20b   Richard Hacker   kbuild: Add new K...
43

25985edce   Lucas De Marchi   Fix common misspe...
44
  # When building external modules load the Kbuild file to retrieve EXTRA_SYMBOLS info
0d96fb20b   Richard Hacker   kbuild: Add new K...
45
  ifneq ($(KBUILD_EXTMOD),)
96d97f262   Sam Ravnborg   kbuild: fix $(src...
46
47
48
49
  
  # 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...
50
51
52
53
  # 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
54
  include scripts/Makefile.lib
040fcc819   Sam Ravnborg   kbuild: improved ...
55
  kernelsymfile := $(objtree)/Module.symvers
3f3fd3c05   Greg Banks   [PATCH] kbuild: a...
56
  modulesymfile := $(firstword $(KBUILD_EXTMOD))/Module.symvers
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
57
58
59
60
  
  # Step 1), find all modules listed in $(MODVERDIR)/
  __modules := $(sort $(shell grep -h '\.ko' /dev/null $(wildcard $(MODVERDIR)/*.mod)))
  modules   := $(patsubst %.o,%.ko, $(wildcard $(__modules:.ko=.o)))
ea837f1c0   Sam Ravnborg   kbuild: make modp...
61
62
  # 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
63

4ce6efed4   Sam Ravnborg   kbuild: soften mo...
64
65
66
  ifneq ($(KBUILD_BUILDHOST),$(ARCH))
          cross_build := 1
  endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
67
68
69
  
  # Step 2), invoke modpost
  #  Includes step 3,4
8d8d8289d   Sam Ravnborg   kbuild: do not do...
70
71
72
73
74
  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...
75
   $(if $(KBUILD_EXTRA_SYMBOLS), $(patsubst %, -e %,$(KBUILD_EXTRA_SYMBOLS))) \
8d8d8289d   Sam Ravnborg   kbuild: do not do...
76
   $(if $(KBUILD_EXTMOD),-o $(modulesymfile))      \
588ccd732   Sam Ravnborg   kbuild: add verbo...
77
   $(if $(CONFIG_DEBUG_SECTION_MISMATCH),,-S)      \
4ce6efed4   Sam Ravnborg   kbuild: soften mo...
78
79
   $(if $(KBUILD_EXTMOD)$(KBUILD_MODPOST_WARN),-w) \
   $(if $(cross_build),-c)
8d8d8289d   Sam Ravnborg   kbuild: do not do...
80

12715d20a   Sam Ravnborg   kbuild: modpost o...
81
  quiet_cmd_modpost = MODPOST $(words $(filter-out vmlinux FORCE, $^)) modules
8d8d8289d   Sam Ravnborg   kbuild: do not do...
82
        cmd_modpost = $(modpost) -s
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
85bd2fddd   Sam Ravnborg   kbuild: fix secti...
86
  	$(call cmd,modpost) $(wildcard vmlinux) $(filter-out FORCE,$^)
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
94
95
96
97
98
99
100
  # Declare generated files as targets for modpost
  $(symverfile):         __modpost ;
  $(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 ...
101
  modname = $(notdir $(@:.mod.o=))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
102
103
  
  quiet_cmd_cc_o_c = CC      $@
6588169d5   Sam Ravnborg   kbuild: allow ass...
104
        cmd_cc_o_c = $(CC) $(c_flags) $(KBUILD_CFLAGS_MODULE) $(CFLAGS_MODULE) \
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
105
106
107
108
109
110
111
112
113
  		   -c -o $@ $<
  
  $(modules:.ko=.mod.o): %.mod.o: %.mod.c FORCE
  	$(call if_changed_dep,cc_o_c)
  
  targets += $(modules:.ko=.mod.o)
  
  # Step 6), final link of the modules
  quiet_cmd_ld_ko_o = LD [M]  $@
6588169d5   Sam Ravnborg   kbuild: allow ass...
114
115
116
        cmd_ld_ko_o = $(LD) -r $(LDFLAGS)                                 \
                               $(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE) \
                               -o $@ $(filter-out FORCE,$^)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
117
118
119
120
121
122
123
124
125
  
  $(modules): %.ko :%.o %.mod.o FORCE
  	$(call if_changed,ld_ko_o)
  
  targets += $(modules)
  
  
  # Add FORCE to the prequisites of a target to force it to be always rebuilt.
  # ---------------------------------------------------------------------------
4f1933620   Paul Smith   kbuild: change kb...
126
  PHONY += FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
127
128
129
130
131
132
133
134
135
136
137
138
139
140
  
  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...
141
142
143
144
145
146
  
  
  # 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)