summaryrefslogtreecommitdiffstats
path: root/scripts/Makefile.modinst
blob: d977209431898befac99a4a4ec937b036c33f3f2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# SPDX-License-Identifier: GPL-2.0
# ==========================================================================
# Installing modules
# ==========================================================================

PHONY := __modinst
__modinst:

include include/config/auto.conf
include $(srctree)/scripts/Kbuild.include

install-y :=

ifeq ($(KBUILD_EXTMOD)$(sign-only),)

# remove the old directory and symlink
$(shell rm -fr $(MODLIB)/kernel $(MODLIB)/build)

install-$(CONFIG_MODULES) += $(addprefix $(MODLIB)/, build modules.order)

$(MODLIB)/build: FORCE
	$(call cmd,symlink)

quiet_cmd_symlink = SYMLINK $@
      cmd_symlink = ln -s $(CURDIR) $@

$(MODLIB)/modules.order: modules.order FORCE
	$(call cmd,install_modorder)

quiet_cmd_install_modorder = INSTALL $@
      cmd_install_modorder = sed 's:^\(.*\)\.o$$:kernel/\1.ko:' $< > $@

# Install modules.builtin(.modinfo,.ranges) even when CONFIG_MODULES is disabled.
install-y += $(addprefix $(MODLIB)/, modules.builtin modules.builtin.modinfo)

install-$(CONFIG_BUILTIN_MODULE_RANGES) += $(MODLIB)/modules.builtin.ranges

$(addprefix $(MODLIB)/, modules.builtin modules.builtin.modinfo modules.builtin.ranges): $(MODLIB)/%: % FORCE
	$(call cmd,install)

endif

modules := $(call read-file, $(MODORDER))

ifeq ($(KBUILD_EXTMOD),)
dst := $(MODLIB)/kernel
else
INSTALL_MOD_DIR ?= updates
dst := $(MODLIB)/$(INSTALL_MOD_DIR)
endif

$(foreach x, % :, $(if $(findstring $x, $(dst)), \
	$(error module installation path cannot contain '$x')))

suffix-y				:=
ifdef CONFIG_MODULE_COMPRESS_ALL
suffix-$(CONFIG_MODULE_COMPRESS_GZIP)	:= .gz
suffix-$(CONFIG_MODULE_COMPRESS_XZ)	:= .xz
suffix-$(CONFIG_MODULE_COMPRESS_ZSTD)	:= .zst
endif

modules := $(patsubst $(extmod_prefix)%.o, $(dst)/%.ko$(suffix-y), $(modules))
install-$(CONFIG_MODULES) += $(modules)

__modinst: $(install-y)
	@:

#
# Installation
#
quiet_cmd_install = INSTALL $@
      cmd_install = cp $< $@

# Strip
#
# INSTALL_MOD_STRIP, if defined, will cause modules to be stripped after they
# are installed. If INSTALL_MOD_STRIP is '1', then the default option
# --strip-debug will be used. Otherwise, INSTALL_MOD_STRIP value will be used
# as the options to the strip command.
ifdef INSTALL_MOD_STRIP

ifeq ($(INSTALL_MOD_STRIP),1)
strip-option := --strip-debug
else
strip-option := $(INSTALL_MOD_STRIP)
endif

quiet_cmd_strip = STRIP   $@
      cmd_strip = $(STRIP) $(strip-option) $@

else

quiet_cmd_strip =
      cmd_strip = :

endif

#
# Signing
# Don't stop modules_install even if we can't sign external modules.
#
ifeq ($(filter pkcs11:%, $(CONFIG_MODULE_SIG_KEY)),)
sig-key := $(if $(wildcard $(CONFIG_MODULE_SIG_KEY)),,$(srctree)/)$(CONFIG_MODULE_SIG_KEY)
else
sig-key := $(CONFIG_MODULE_SIG_KEY)
endif
quiet_cmd_sign = SIGN    $@
      cmd_sign = scripts/sign-file $(CONFIG_MODULE_SIG_HASH) "$(sig-key)" certs/signing_key.x509 $@ \
                 $(if $(KBUILD_EXTMOD),|| true)

ifeq ($(sign-only),)

# During modules_install, modules are signed only when CONFIG_MODULE_SIG_ALL=y.
ifndef CONFIG_MODULE_SIG_ALL
quiet_cmd_sign :=
      cmd_sign := :
endif

# Create necessary directories
$(foreach dir, $(sort $(dir $(install-y))), $(shell mkdir -p $(dir)))

$(dst)/%.ko: $(extmod_prefix)%.ko FORCE
	$(call cmd,install)
	$(call cmd,strip)
	$(call cmd,sign)

ifdef CONFIG_MODULES
__modinst: depmod

PHONY += depmod
depmod: $(install-y)
	$(call cmd,depmod)

quiet_cmd_depmod = DEPMOD  $(MODLIB)
      cmd_depmod = $(srctree)/scripts/depmod.sh $(KERNELRELEASE)
endif

else

$(dst)/%.ko: FORCE
	$(call cmd,sign)

endif

#
# Compression
#
quiet_cmd_gzip = GZIP    $@
      cmd_gzip = $(KGZIP) -n -f $<
quiet_cmd_xz = XZ      $@
      cmd_xz = $(XZ) --check=crc32 --lzma2=dict=1MiB -f $<
quiet_cmd_zstd = ZSTD    $@
      cmd_zstd = $(ZSTD) --rm -f -q $<

$(dst)/%.ko.gz: $(dst)/%.ko FORCE
	$(call cmd,gzip)

$(dst)/%.ko.xz: $(dst)/%.ko FORCE
	$(call cmd,xz)

$(dst)/%.ko.zst: $(dst)/%.ko FORCE
	$(call cmd,zstd)

PHONY += FORCE
FORCE:

.PHONY: $(PHONY)