summaryrefslogtreecommitdiff
path: root/scripts/Makefile.modinst
blob: 96fea7c5dbe18c81e0a30ff03d3def76652e2fd3 (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
# SPDX-License-Identifier: GPL-2.0
# ==========================================================================
# Installing modules
# ==========================================================================

PHONY := __modinst
__modinst:

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

install-y :=

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				:=
suffix-$(CONFIG_MODULE_COMPRESS_GZIP)	:= .gz
suffix-$(CONFIG_MODULE_COMPRESS_XZ)	:= .xz
suffix-$(CONFIG_MODULE_COMPRESS_ZSTD)	:= .zst

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

__modinst: $(modules)
	@:

#
# 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 ($(CONFIG_MODULE_SIG_ALL),y)
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)
else
quiet_cmd_sign :=
      cmd_sign := :
endif

ifeq ($(modules_sign_only),)

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

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

__modinst: depmod

PHONY += depmod
depmod: $(modules)
	$(call cmd,depmod)

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

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) --lzma2=dict=2MiB -f $<
quiet_cmd_zstd = ZSTD    $@
      cmd_zstd = $(ZSTD) -T0 --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)