xref: /linux/lib/crypto/Makefile (revision 56e48d4e138cb105a17e0f8c257f3bc41b1bd69d)
1# SPDX-License-Identifier: GPL-2.0
2
3aflags-thumb2-$(CONFIG_THUMB2_KERNEL)  := -U__thumb2__ -D__thumb2__=1
4
5quiet_cmd_perlasm = PERLASM $@
6      cmd_perlasm = $(PERL) $(<) > $(@)
7
8quiet_cmd_perlasm_with_args = PERLASM $@
9      cmd_perlasm_with_args = $(PERL) $(<) void $(@)
10
11obj-$(CONFIG_KUNIT)				+= tests/
12
13obj-$(CONFIG_CRYPTO_HASH_INFO)			+= hash_info.o
14
15obj-$(CONFIG_CRYPTO_LIB_UTILS)			+= libcryptoutils.o
16libcryptoutils-y				:= memneq.o utils.o
17
18obj-$(CONFIG_CRYPTO_LIB_AES)			+= libaes.o
19libaes-y					:= aes.o
20
21obj-$(CONFIG_CRYPTO_LIB_AESCFB)			+= libaescfb.o
22libaescfb-y					:= aescfb.o
23
24obj-$(CONFIG_CRYPTO_LIB_AESGCM)			+= libaesgcm.o
25libaesgcm-y					:= aesgcm.o
26
27obj-$(CONFIG_CRYPTO_LIB_ARC4)			+= libarc4.o
28libarc4-y					:= arc4.o
29
30obj-$(CONFIG_CRYPTO_LIB_GF128MUL)		+= gf128mul.o
31
32# blake2s is used by the /dev/random driver which is always builtin
33obj-y						+= libblake2s.o
34libblake2s-y					:= blake2s.o
35libblake2s-$(CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC)	+= blake2s-generic.o
36
37################################################################################
38
39# chacha20_block() is used by the /dev/random driver which is always builtin
40obj-y += chacha-block-generic.o
41
42obj-$(CONFIG_CRYPTO_LIB_CHACHA) += libchacha.o
43libchacha-y := chacha.o
44
45ifeq ($(CONFIG_CRYPTO_LIB_CHACHA_ARCH),y)
46CFLAGS_chacha.o += -I$(src)/$(SRCARCH)
47
48ifeq ($(CONFIG_ARM),y)
49libchacha-y += arm/chacha-scalar-core.o
50libchacha-$(CONFIG_KERNEL_MODE_NEON) += arm/chacha-neon-core.o
51endif
52
53libchacha-$(CONFIG_ARM64) += arm64/chacha-neon-core.o
54
55ifeq ($(CONFIG_MIPS),y)
56libchacha-y += mips/chacha-core.o
57AFLAGS_mips/chacha-core.o += -O2 # needed to fill branch delay slots
58endif
59
60libchacha-$(CONFIG_PPC) += powerpc/chacha-p10le-8x.o
61libchacha-$(CONFIG_RISCV) += riscv/chacha-riscv64-zvkb.o
62libchacha-$(CONFIG_S390) += s390/chacha-s390.o
63libchacha-$(CONFIG_X86) += x86/chacha-ssse3-x86_64.o \
64			   x86/chacha-avx2-x86_64.o \
65			   x86/chacha-avx512vl-x86_64.o
66endif # CONFIG_CRYPTO_LIB_CHACHA_ARCH
67
68################################################################################
69
70obj-$(CONFIG_CRYPTO_LIB_CHACHA20POLY1305)	+= libchacha20poly1305.o
71libchacha20poly1305-y				+= chacha20poly1305.o
72libchacha20poly1305-$(CONFIG_CRYPTO_SELFTESTS)	+= chacha20poly1305-selftest.o
73
74obj-$(CONFIG_CRYPTO_LIB_CURVE25519_GENERIC)	+= libcurve25519-generic.o
75libcurve25519-generic-y				:= curve25519-fiat32.o
76libcurve25519-generic-$(CONFIG_ARCH_SUPPORTS_INT128)	:= curve25519-hacl64.o
77libcurve25519-generic-y				+= curve25519-generic.o
78# clang versions prior to 18 may blow out the stack with KASAN
79ifeq ($(call clang-min-version, 180000),)
80KASAN_SANITIZE_curve25519-hacl64.o := n
81endif
82
83obj-$(CONFIG_CRYPTO_LIB_CURVE25519)		+= libcurve25519.o
84libcurve25519-y					+= curve25519.o
85libcurve25519-$(CONFIG_CRYPTO_SELFTESTS)	+= curve25519-selftest.o
86
87obj-$(CONFIG_CRYPTO_LIB_DES)			+= libdes.o
88libdes-y					:= des.o
89
90################################################################################
91
92obj-$(CONFIG_CRYPTO_LIB_MD5) += libmd5.o
93libmd5-y := md5.o
94ifeq ($(CONFIG_CRYPTO_LIB_MD5_ARCH),y)
95CFLAGS_md5.o += -I$(src)/$(SRCARCH)
96libmd5-$(CONFIG_PPC) += powerpc/md5-asm.o
97libmd5-$(CONFIG_SPARC) += sparc/md5_asm.o
98endif # CONFIG_CRYPTO_LIB_MD5_ARCH
99
100################################################################################
101
102obj-$(CONFIG_CRYPTO_LIB_POLY1305) += libpoly1305.o
103libpoly1305-y := poly1305.o
104ifeq ($(CONFIG_ARCH_SUPPORTS_INT128),y)
105libpoly1305-$(CONFIG_CRYPTO_LIB_POLY1305_GENERIC) += poly1305-donna64.o
106else
107libpoly1305-$(CONFIG_CRYPTO_LIB_POLY1305_GENERIC) += poly1305-donna32.o
108endif
109
110ifeq ($(CONFIG_CRYPTO_LIB_POLY1305_ARCH),y)
111CFLAGS_poly1305.o += -I$(src)/$(SRCARCH)
112
113ifeq ($(CONFIG_ARM),y)
114libpoly1305-y += arm/poly1305-core.o
115$(obj)/arm/poly1305-core.S: $(src)/arm/poly1305-armv4.pl
116	$(call cmd,perlasm)
117# massage the perlasm code a bit so we only get the NEON routine if we need it
118poly1305-aflags-$(CONFIG_CPU_V7) := -U__LINUX_ARM_ARCH__ -D__LINUX_ARM_ARCH__=5
119poly1305-aflags-$(CONFIG_KERNEL_MODE_NEON) := -U__LINUX_ARM_ARCH__ -D__LINUX_ARM_ARCH__=7
120AFLAGS_arm/poly1305-core.o += $(poly1305-aflags-y) $(aflags-thumb2-y)
121endif
122
123ifeq ($(CONFIG_ARM64),y)
124libpoly1305-y += arm64/poly1305-core.o
125$(obj)/arm64/poly1305-core.S: $(src)/arm64/poly1305-armv8.pl
126	$(call cmd,perlasm_with_args)
127endif
128
129ifeq ($(CONFIG_MIPS),y)
130libpoly1305-y += mips/poly1305-core.o
131poly1305-perlasm-flavour-$(CONFIG_32BIT) := o32
132poly1305-perlasm-flavour-$(CONFIG_64BIT) := 64
133quiet_cmd_perlasm_poly1305 = PERLASM $@
134      cmd_perlasm_poly1305 = $(PERL) $< $(poly1305-perlasm-flavour-y) $@
135# Use if_changed instead of cmd, in case the flavour changed.
136$(obj)/mips/poly1305-core.S: $(src)/mips/poly1305-mips.pl FORCE
137	$(call if_changed,perlasm_poly1305)
138targets += mips/poly1305-core.S
139endif
140
141libpoly1305-$(CONFIG_PPC) += powerpc/poly1305-p10le_64.o
142
143ifeq ($(CONFIG_RISCV),y)
144libpoly1305-y += riscv/poly1305-core.o
145poly1305-perlasm-flavour-$(CONFIG_32BIT) := 32
146poly1305-perlasm-flavour-$(CONFIG_64BIT) := 64
147quiet_cmd_perlasm_poly1305 = PERLASM $@
148      cmd_perlasm_poly1305 = $(PERL) $< $(poly1305-perlasm-flavour-y) $@
149# Use if_changed instead of cmd, in case the flavour changed.
150$(obj)/riscv/poly1305-core.S: $(src)/riscv/poly1305-riscv.pl FORCE
151	$(call if_changed,perlasm_poly1305)
152targets += riscv/poly1305-core.S
153AFLAGS_riscv/poly1305-core.o += -Dpoly1305_init=poly1305_block_init
154endif
155
156ifeq ($(CONFIG_X86),y)
157libpoly1305-y += x86/poly1305-x86_64-cryptogams.o
158$(obj)/x86/poly1305-x86_64-cryptogams.S: $(src)/x86/poly1305-x86_64-cryptogams.pl
159	$(call cmd,perlasm)
160endif
161
162endif # CONFIG_CRYPTO_LIB_POLY1305_ARCH
163
164# clean-files must be defined unconditionally
165clean-files += arm/poly1305-core.S \
166	       arm64/poly1305-core.S \
167	       mips/poly1305-core.S \
168	       riscv/poly1305-core.S \
169	       x86/poly1305-x86_64-cryptogams.S
170
171################################################################################
172
173obj-$(CONFIG_CRYPTO_LIB_SHA1) += libsha1.o
174libsha1-y := sha1.o
175ifeq ($(CONFIG_CRYPTO_LIB_SHA1_ARCH),y)
176CFLAGS_sha1.o += -I$(src)/$(SRCARCH)
177ifeq ($(CONFIG_ARM),y)
178libsha1-y += arm/sha1-armv4-large.o
179libsha1-$(CONFIG_KERNEL_MODE_NEON) += arm/sha1-armv7-neon.o \
180				      arm/sha1-ce-core.o
181endif
182libsha1-$(CONFIG_ARM64) += arm64/sha1-ce-core.o
183ifeq ($(CONFIG_PPC),y)
184libsha1-y += powerpc/sha1-powerpc-asm.o
185libsha1-$(CONFIG_SPE) += powerpc/sha1-spe-asm.o
186endif
187libsha1-$(CONFIG_SPARC) += sparc/sha1_asm.o
188libsha1-$(CONFIG_X86) += x86/sha1-ssse3-and-avx.o \
189			 x86/sha1-avx2-asm.o \
190			 x86/sha1-ni-asm.o
191endif # CONFIG_CRYPTO_LIB_SHA1_ARCH
192
193################################################################################
194
195obj-$(CONFIG_CRYPTO_LIB_SHA256) += libsha256.o
196libsha256-y := sha256.o
197ifeq ($(CONFIG_CRYPTO_LIB_SHA256_ARCH),y)
198CFLAGS_sha256.o += -I$(src)/$(SRCARCH)
199
200ifeq ($(CONFIG_ARM),y)
201libsha256-y += arm/sha256-ce.o arm/sha256-core.o
202$(obj)/arm/sha256-core.S: $(src)/arm/sha256-armv4.pl
203	$(call cmd,perlasm)
204AFLAGS_arm/sha256-core.o += $(aflags-thumb2-y)
205endif
206
207ifeq ($(CONFIG_ARM64),y)
208libsha256-y += arm64/sha256-core.o
209$(obj)/arm64/sha256-core.S: $(src)/arm64/sha2-armv8.pl
210	$(call cmd,perlasm_with_args)
211libsha256-$(CONFIG_KERNEL_MODE_NEON) += arm64/sha256-ce.o
212endif
213
214libsha256-$(CONFIG_PPC) += powerpc/sha256-spe-asm.o
215libsha256-$(CONFIG_RISCV) += riscv/sha256-riscv64-zvknha_or_zvknhb-zvkb.o
216libsha256-$(CONFIG_SPARC) += sparc/sha256_asm.o
217libsha256-$(CONFIG_X86) += x86/sha256-ssse3-asm.o \
218			   x86/sha256-avx-asm.o \
219			   x86/sha256-avx2-asm.o \
220			   x86/sha256-ni-asm.o
221endif # CONFIG_CRYPTO_LIB_SHA256_ARCH
222
223################################################################################
224
225obj-$(CONFIG_CRYPTO_LIB_SHA512) += libsha512.o
226libsha512-y := sha512.o
227ifeq ($(CONFIG_CRYPTO_LIB_SHA512_ARCH),y)
228CFLAGS_sha512.o += -I$(src)/$(SRCARCH)
229
230ifeq ($(CONFIG_ARM),y)
231libsha512-y += arm/sha512-core.o
232$(obj)/arm/sha512-core.S: $(src)/arm/sha512-armv4.pl
233	$(call cmd,perlasm)
234AFLAGS_arm/sha512-core.o += $(aflags-thumb2-y)
235endif
236
237ifeq ($(CONFIG_ARM64),y)
238libsha512-y += arm64/sha512-core.o
239$(obj)/arm64/sha512-core.S: $(src)/arm64/sha2-armv8.pl
240	$(call cmd,perlasm_with_args)
241libsha512-$(CONFIG_KERNEL_MODE_NEON) += arm64/sha512-ce-core.o
242endif
243
244libsha512-$(CONFIG_RISCV) += riscv/sha512-riscv64-zvknhb-zvkb.o
245libsha512-$(CONFIG_SPARC) += sparc/sha512_asm.o
246libsha512-$(CONFIG_X86) += x86/sha512-ssse3-asm.o \
247			   x86/sha512-avx-asm.o \
248			   x86/sha512-avx2-asm.o
249endif # CONFIG_CRYPTO_LIB_SHA512_ARCH
250
251################################################################################
252
253obj-$(CONFIG_MPILIB) += mpi/
254
255obj-$(CONFIG_CRYPTO_SELFTESTS_FULL)		+= simd.o
256
257obj-$(CONFIG_CRYPTO_LIB_SM3)			+= libsm3.o
258libsm3-y					:= sm3.o
259
260obj-$(CONFIG_ARM) += arm/
261obj-$(CONFIG_X86) += x86/
262
263# clean-files must be defined unconditionally
264clean-files += arm/sha256-core.S arm/sha512-core.S
265clean-files += arm64/sha256-core.S arm64/sha512-core.S
266