]> git.proxmox.com Git - mirror_zfs.git/blame - module/Kbuild.in
LUA: Backport CVE-2020-24370's patch
[mirror_zfs.git] / module / Kbuild.in
CommitLineData
71504277
AS
1# When integrated in to a monolithic kernel the spl module must appear
2# first. This ensures its module initialization function is run before
3# any of the other module initialization functions which depend on it.
71504277
AS
4
5ZFS_MODULE_CFLAGS += -std=gnu99 -Wno-declaration-after-statement
ae7b167a 6ZFS_MODULE_CFLAGS += -Wmissing-prototypes
71504277
AS
7ZFS_MODULE_CFLAGS += @KERNEL_DEBUG_CFLAGS@ @NO_FORMAT_ZERO_LENGTH@
8
9ifneq ($(KBUILD_EXTMOD),)
10zfs_include = @abs_top_srcdir@/include
ad9e7676
AZ
11icp_include = @abs_srcdir@/icp/include
12zstd_include = @abs_srcdir@/zstd/include
71504277 13ZFS_MODULE_CFLAGS += -include @abs_top_builddir@/zfs_config.h
109d2c93 14ZFS_MODULE_CFLAGS += -I@abs_top_builddir@/include
ad9e7676
AZ
15src = @abs_srcdir@
16obj = @abs_builddir@
71504277
AS
17else
18zfs_include = $(srctree)/include/zfs
ad9e7676
AZ
19icp_include = $(srctree)/$(src)/icp/include
20zstd_include = $(srctree)/$(src)/zstd/include
71504277
AS
21ZFS_MODULE_CFLAGS += -include $(zfs_include)/zfs_config.h
22endif
23
24ZFS_MODULE_CFLAGS += -I$(zfs_include)/os/linux/kernel
25ZFS_MODULE_CFLAGS += -I$(zfs_include)/os/linux/spl
26ZFS_MODULE_CFLAGS += -I$(zfs_include)/os/linux/zfs
27ZFS_MODULE_CFLAGS += -I$(zfs_include)
28ZFS_MODULE_CPPFLAGS += -D_KERNEL
29ZFS_MODULE_CPPFLAGS += @KERNEL_DEBUG_CPPFLAGS@
30
bd88c036
RE
31# KASAN enables -Werror=frame-larger-than=1024, which
32# breaks oh so many parts of our build.
33ifeq ($(CONFIG_KASAN),y)
34ZFS_MODULE_CFLAGS += -Wno-error=frame-larger-than=
35endif
36
677c6f84
RY
37# Generated binary search code is particularly bad with this optimization.
38# Oddly, range_tree.c is not affected when unrolling is not done and dsl_scan.c
39# is not affected when unrolling is done.
40# Disable it until the following upstream issue is resolved:
41# https://github.com/llvm/llvm-project/issues/62790
42ifeq ($(CONFIG_X86),y)
43ifeq ($(CONFIG_CC_IS_CLANG),y)
44CFLAGS_zfs/dsl_scan.o += -mllvm -x86-cmov-converter=false
45CFLAGS_zfs/metaslab.o += -mllvm -x86-cmov-converter=false
46CFLAGS_zfs/range_tree.o += -mllvm -x86-cmov-converter=false
47CFLAGS_zfs/zap_micro.o += -mllvm -x86-cmov-converter=false
48endif
49endif
50
71504277
AS
51ifneq ($(KBUILD_EXTMOD),)
52@CONFIG_QAT_TRUE@ZFS_MODULE_CFLAGS += -I@QAT_SRC@/include
53@CONFIG_QAT_TRUE@KBUILD_EXTRA_SYMBOLS += @QAT_SYMBOLS@
54endif
55
ad9e7676
AZ
56asflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS)
57ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS)
58
fe975048
DS
59ifeq ($(CONFIG_ARM64),y)
60CFLAGS_REMOVE_zcommon/zfs_fletcher_aarch64_neon.o += -mgeneral-regs-only
61CFLAGS_REMOVE_zfs/vdev_raidz_math_aarch64_neon.o += -mgeneral-regs-only
62CFLAGS_REMOVE_zfs/vdev_raidz_math_aarch64_neonx2.o += -mgeneral-regs-only
63endif
64
ad9e7676
AZ
65# Suppress unused-value warnings in sparc64 architecture headers
66ccflags-$(CONFIG_SPARC64) += -Wno-unused-value
67
68
69obj-$(CONFIG_ZFS) := spl.o zfs.o
70
71SPL_OBJS := \
72 spl-atomic.o \
73 spl-condvar.o \
74 spl-cred.o \
75 spl-err.o \
76 spl-generic.o \
77 spl-kmem-cache.o \
78 spl-kmem.o \
79 spl-kstat.o \
80 spl-proc.o \
81 spl-procfs-list.o \
957dc103 82 spl-shrinker.o \
ad9e7676
AZ
83 spl-taskq.o \
84 spl-thread.o \
85 spl-trace.o \
86 spl-tsd.o \
87 spl-vmem.o \
88 spl-xdr.o \
4ed5e250
WA
89 spl-zlib.o \
90 spl-zone.o
ad9e7676
AZ
91
92spl-objs += $(addprefix os/linux/spl/,$(SPL_OBJS))
93
94zfs-objs += avl/avl.o
95
96ICP_OBJS := \
97 algs/aes/aes_impl.o \
98 algs/aes/aes_impl_generic.o \
99 algs/aes/aes_modes.o \
985c33b1
TR
100 algs/blake3/blake3.o \
101 algs/blake3/blake3_generic.o \
102 algs/blake3/blake3_impl.o \
ad9e7676
AZ
103 algs/edonr/edonr.o \
104 algs/modes/cbc.o \
105 algs/modes/ccm.o \
106 algs/modes/ctr.o \
107 algs/modes/ecb.o \
108 algs/modes/gcm.o \
109 algs/modes/gcm_generic.o \
110 algs/modes/modes.o \
4c5fec01
TR
111 algs/sha2/sha2_generic.o \
112 algs/sha2/sha256_impl.o \
113 algs/sha2/sha512_impl.o \
ad9e7676
AZ
114 algs/skein/skein.o \
115 algs/skein/skein_block.o \
116 algs/skein/skein_iv.o \
117 api/kcf_cipher.o \
118 api/kcf_ctxops.o \
119 api/kcf_mac.o \
120 core/kcf_callprov.o \
121 core/kcf_mech_tabs.o \
122 core/kcf_prov_lib.o \
123 core/kcf_prov_tabs.o \
124 core/kcf_sched.o \
125 illumos-crypto.o \
126 io/aes.o \
127 io/sha2_mod.o \
128 io/skein_mod.o \
129 spi/kcf_spi.o
130
131ICP_OBJS_X86_64 := \
132 asm-x86_64/aes/aes_aesni.o \
133 asm-x86_64/aes/aes_amd64.o \
134 asm-x86_64/aes/aeskey.o \
985c33b1
TR
135 asm-x86_64/blake3/blake3_avx2.o \
136 asm-x86_64/blake3/blake3_avx512.o \
137 asm-x86_64/blake3/blake3_sse2.o \
138 asm-x86_64/blake3/blake3_sse41.o \
4c5fec01
TR
139 asm-x86_64/sha2/sha256-x86_64.o \
140 asm-x86_64/sha2/sha512-x86_64.o \
ad9e7676
AZ
141 asm-x86_64/modes/aesni-gcm-x86_64.o \
142 asm-x86_64/modes/gcm_pclmulqdq.o \
3e254aaa 143 asm-x86_64/modes/ghash-x86_64.o
ad9e7676
AZ
144
145ICP_OBJS_X86 := \
146 algs/aes/aes_impl_aesni.o \
147 algs/aes/aes_impl_x86-64.o \
148 algs/modes/gcm_pclmulqdq.o
149
4c5fec01
TR
150ICP_OBJS_ARM := \
151 asm-arm/sha2/sha256-armv7.o \
152 asm-arm/sha2/sha512-armv7.o
985c33b1
TR
153
154ICP_OBJS_ARM64 := \
155 asm-aarch64/blake3/b3_aarch64_sse2.o \
4c5fec01
TR
156 asm-aarch64/blake3/b3_aarch64_sse41.o \
157 asm-aarch64/sha2/sha256-armv8.o \
158 asm-aarch64/sha2/sha512-armv8.o
985c33b1
TR
159
160ICP_OBJS_PPC_PPC64 := \
161 asm-ppc64/blake3/b3_ppc64le_sse2.o \
4c5fec01
TR
162 asm-ppc64/blake3/b3_ppc64le_sse41.o \
163 asm-ppc64/sha2/sha256-p8.o \
164 asm-ppc64/sha2/sha512-p8.o \
165 asm-ppc64/sha2/sha256-ppc.o \
166 asm-ppc64/sha2/sha512-ppc.o
985c33b1 167
ad9e7676
AZ
168zfs-objs += $(addprefix icp/,$(ICP_OBJS))
169zfs-$(CONFIG_X86) += $(addprefix icp/,$(ICP_OBJS_X86))
bc00d2c7 170zfs-$(CONFIG_UML_X86)+= $(addprefix icp/,$(ICP_OBJS_X86))
ad9e7676 171zfs-$(CONFIG_X86_64) += $(addprefix icp/,$(ICP_OBJS_X86_64))
4c5fec01 172zfs-$(CONFIG_ARM) += $(addprefix icp/,$(ICP_OBJS_ARM))
985c33b1
TR
173zfs-$(CONFIG_ARM64) += $(addprefix icp/,$(ICP_OBJS_ARM64))
174zfs-$(CONFIG_PPC) += $(addprefix icp/,$(ICP_OBJS_PPC_PPC64))
175zfs-$(CONFIG_PPC64) += $(addprefix icp/,$(ICP_OBJS_PPC_PPC64))
176
177$(addprefix $(obj)/icp/,$(ICP_OBJS) $(ICP_OBJS_X86) $(ICP_OBJS_X86_64) \
68c0771c 178 $(ICP_OBJS_ARM64) $(ICP_OBJS_PPC_PPC64)) : asflags-y += -I$(icp_include) -I$(zfs_include)/os/linux/spl -I$(zfs_include)
ad9e7676 179
985c33b1 180$(addprefix $(obj)/icp/,$(ICP_OBJS) $(ICP_OBJS_X86) $(ICP_OBJS_X86_64) \
68c0771c 181 $(ICP_OBJS_ARM64) $(ICP_OBJS_PPC_PPC64)) : ccflags-y += -I$(icp_include) -I$(zfs_include)/os/linux/spl -I$(zfs_include)
ad9e7676 182
61cca6fa 183# Suppress objtool "return with modified stack frame" warnings.
ad9e7676 184OBJECT_FILES_NON_STANDARD_aesni-gcm-x86_64.o := y
985c33b1 185
4c5fec01
TR
186# Suppress objtool "unsupported stack pointer realignment" warnings.
187# See #6950 for the reasoning.
188OBJECT_FILES_NON_STANDARD_sha256-x86_64.o := y
189OBJECT_FILES_NON_STANDARD_sha512-x86_64.o := y
190
ad9e7676
AZ
191LUA_OBJS := \
192 lapi.o \
193 lauxlib.o \
194 lbaselib.o \
195 lcode.o \
196 lcompat.o \
197 lcorolib.o \
198 lctype.o \
199 ldebug.o \
200 ldo.o \
201 lfunc.o \
202 lgc.o \
203 llex.o \
204 lmem.o \
205 lobject.o \
206 lopcodes.o \
207 lparser.o \
208 lstate.o \
209 lstring.o \
210 lstrlib.o \
211 ltable.o \
212 ltablib.o \
213 ltm.o \
214 lvm.o \
215 lzio.o \
216 setjmp/setjmp.o
217
218zfs-objs += $(addprefix lua/,$(LUA_OBJS))
219
220
221NVPAIR_OBJS := \
222 fnvpair.o \
223 nvpair.o \
224 nvpair_alloc_fixed.o \
225 nvpair_alloc_spl.o
226
227zfs-objs += $(addprefix nvpair/,$(NVPAIR_OBJS))
228
229
230UNICODE_OBJS := \
231 u8_textprep.o \
232 uconv.o
233
234zfs-objs += $(addprefix unicode/,$(UNICODE_OBJS))
235
236
237ZCOMMON_OBJS := \
238 cityhash.o \
239 zfeature_common.o \
240 zfs_comutil.o \
241 zfs_deleg.o \
242 zfs_fletcher.o \
243 zfs_fletcher_superscalar.o \
244 zfs_fletcher_superscalar4.o \
245 zfs_namecheck.o \
246 zfs_prop.o \
247 zpool_prop.o \
248 zprop_common.o
249
250ZCOMMON_OBJS_X86 := \
251 zfs_fletcher_avx512.o \
252 zfs_fletcher_intel.o \
253 zfs_fletcher_sse.o
254
255ZCOMMON_OBJS_ARM64 := \
256 zfs_fletcher_aarch64_neon.o
257
258zfs-objs += $(addprefix zcommon/,$(ZCOMMON_OBJS))
259zfs-$(CONFIG_X86) += $(addprefix zcommon/,$(ZCOMMON_OBJS_X86))
bc00d2c7 260zfs-$(CONFIG_UML_X86)+= $(addprefix zcommon/,$(ZCOMMON_OBJS_X86))
ad9e7676
AZ
261zfs-$(CONFIG_ARM64) += $(addprefix zcommon/,$(ZCOMMON_OBJS_ARM64))
262
263
264# Zstd uses -O3 by default, so we should follow
265ZFS_ZSTD_FLAGS := -O3
266
267# -fno-tree-vectorize gets set for gcc in zstd/common/compiler.h
268# Set it for other compilers, too.
269ZFS_ZSTD_FLAGS += -fno-tree-vectorize
270
271# SSE register return with SSE disabled if -march=znverX is passed
272ZFS_ZSTD_FLAGS += -U__BMI__
273
274# Quiet warnings about frame size due to unused code in unmodified zstd lib
275ZFS_ZSTD_FLAGS += -Wframe-larger-than=20480
276
277ZSTD_OBJS := \
278 zfs_zstd.o \
279 zstd_sparc.o
280
281ZSTD_UPSTREAM_OBJS := \
282 lib/common/entropy_common.o \
283 lib/common/error_private.o \
284 lib/common/fse_decompress.o \
285 lib/common/pool.o \
286 lib/common/zstd_common.o \
287 lib/compress/fse_compress.o \
288 lib/compress/hist.o \
289 lib/compress/huf_compress.o \
290 lib/compress/zstd_compress.o \
291 lib/compress/zstd_compress_literals.o \
292 lib/compress/zstd_compress_sequences.o \
293 lib/compress/zstd_compress_superblock.o \
294 lib/compress/zstd_double_fast.o \
295 lib/compress/zstd_fast.o \
296 lib/compress/zstd_lazy.o \
297 lib/compress/zstd_ldm.o \
298 lib/compress/zstd_opt.o \
299 lib/decompress/huf_decompress.o \
300 lib/decompress/zstd_ddict.o \
301 lib/decompress/zstd_decompress.o \
302 lib/decompress/zstd_decompress_block.o
303
304zfs-objs += $(addprefix zstd/,$(ZSTD_OBJS) $(ZSTD_UPSTREAM_OBJS))
305
306# Disable aarch64 neon SIMD instructions for kernel mode
307$(addprefix $(obj)/zstd/,$(ZSTD_OBJS) $(ZSTD_UPSTREAM_OBJS)) : ccflags-y += -I$(zstd_include) $(ZFS_ZSTD_FLAGS)
308$(addprefix $(obj)/zstd/,$(ZSTD_OBJS) $(ZSTD_UPSTREAM_OBJS)) : asflags-y += -I$(zstd_include)
309$(addprefix $(obj)/zstd/,$(ZSTD_UPSTREAM_OBJS)) : ccflags-y += -include $(zstd_include)/aarch64_compat.h -include $(zstd_include)/zstd_compat_wrapper.h -Wp,-w
310$(obj)/zstd/zfs_zstd.o : ccflags-y += -include $(zstd_include)/zstd_compat_wrapper.h
311
312
313ZFS_OBJS := \
314 abd.o \
315 aggsum.o \
316 arc.o \
985c33b1 317 blake3_zfs.o \
ad9e7676
AZ
318 blkptr.o \
319 bplist.o \
320 bpobj.o \
321 bptree.o \
322 bqueue.o \
67a1b037 323 brt.o \
ad9e7676
AZ
324 btree.o \
325 dataset_kstats.o \
326 dbuf.o \
327 dbuf_stats.o \
328 ddt.o \
329 ddt_zap.o \
330 dmu.o \
331 dmu_diff.o \
332 dmu_object.o \
333 dmu_objset.o \
334 dmu_recv.o \
335 dmu_redact.o \
336 dmu_send.o \
337 dmu_traverse.o \
338 dmu_tx.o \
339 dmu_zfetch.o \
340 dnode.o \
341 dnode_sync.o \
342 dsl_bookmark.o \
343 dsl_crypt.o \
344 dsl_dataset.o \
345 dsl_deadlist.o \
346 dsl_deleg.o \
347 dsl_destroy.o \
348 dsl_dir.o \
349 dsl_pool.o \
350 dsl_prop.o \
351 dsl_scan.o \
352 dsl_synctask.o \
353 dsl_userhold.o \
354 edonr_zfs.o \
355 fm.o \
356 gzip.o \
357 hkdf.o \
358 lz4.o \
359 lz4_zfs.o \
360 lzjb.o \
361 metaslab.o \
362 mmp.o \
363 multilist.o \
364 objlist.o \
365 pathname.o \
366 range_tree.o \
367 refcount.o \
368 rrwlock.o \
369 sa.o \
3e254aaa 370 sha2_zfs.o \
ad9e7676
AZ
371 skein_zfs.o \
372 spa.o \
ad9e7676
AZ
373 spa_checkpoint.o \
374 spa_config.o \
375 spa_errlog.o \
376 spa_history.o \
377 spa_log_spacemap.o \
378 spa_misc.o \
379 spa_stats.o \
380 space_map.o \
381 space_reftree.o \
382 txg.o \
383 uberblock.o \
384 unique.o \
385 vdev.o \
ad9e7676
AZ
386 vdev_draid.o \
387 vdev_draid_rand.o \
388 vdev_indirect.o \
389 vdev_indirect_births.o \
390 vdev_indirect_mapping.o \
391 vdev_initialize.o \
392 vdev_label.o \
393 vdev_mirror.o \
394 vdev_missing.o \
395 vdev_queue.o \
396 vdev_raidz.o \
397 vdev_raidz_math.o \
398 vdev_raidz_math_scalar.o \
399 vdev_rebuild.o \
400 vdev_removal.o \
401 vdev_root.o \
402 vdev_trim.o \
403 zap.o \
404 zap_leaf.o \
405 zap_micro.o \
406 zcp.o \
407 zcp_get.o \
408 zcp_global.o \
409 zcp_iter.o \
410 zcp_set.o \
411 zcp_synctask.o \
412 zfeature.o \
413 zfs_byteswap.o \
985c33b1 414 zfs_chksum.o \
ad9e7676
AZ
415 zfs_fm.o \
416 zfs_fuid.o \
4c5fec01 417 zfs_impl.o \
ad9e7676
AZ
418 zfs_ioctl.o \
419 zfs_log.o \
420 zfs_onexit.o \
421 zfs_quota.o \
422 zfs_ratelimit.o \
423 zfs_replay.o \
424 zfs_rlock.o \
425 zfs_sa.o \
426 zfs_vnops.o \
427 zil.o \
428 zio.o \
429 zio_checksum.o \
430 zio_compress.o \
431 zio_inject.o \
432 zle.o \
433 zrlock.o \
434 zthr.o \
435 zvol.o
436
437ZFS_OBJS_OS := \
438 abd_os.o \
439 arc_os.o \
440 mmp_os.o \
441 policy.o \
442 qat.o \
443 qat_compress.o \
444 qat_crypt.o \
445 spa_misc_os.o \
446 trace.o \
447 vdev_disk.o \
448 vdev_file.o \
5caeef02 449 vdev_label_os.o \
ad9e7676
AZ
450 zfs_acl.o \
451 zfs_ctldir.o \
452 zfs_debug.o \
453 zfs_dir.o \
454 zfs_file_os.o \
455 zfs_ioctl_os.o \
456 zfs_racct.o \
457 zfs_sysfs.o \
458 zfs_uio.o \
459 zfs_vfsops.o \
460 zfs_vnops_os.o \
461 zfs_znode.o \
462 zio_crypt.o \
463 zpl_ctldir.o \
464 zpl_export.o \
465 zpl_file.o \
5a35c68b 466 zpl_file_range.o \
ad9e7676
AZ
467 zpl_inode.o \
468 zpl_super.o \
469 zpl_xattr.o \
470 zvol_os.o
471
472ZFS_OBJS_X86 := \
473 vdev_raidz_math_avx2.o \
474 vdev_raidz_math_avx512bw.o \
475 vdev_raidz_math_avx512f.o \
476 vdev_raidz_math_sse2.o \
477 vdev_raidz_math_ssse3.o
478
479ZFS_OBJS_ARM64 := \
480 vdev_raidz_math_aarch64_neon.o \
481 vdev_raidz_math_aarch64_neonx2.o
482
483ZFS_OBJS_PPC_PPC64 := \
484 vdev_raidz_math_powerpc_altivec.o
485
486zfs-objs += $(addprefix zfs/,$(ZFS_OBJS)) $(addprefix os/linux/zfs/,$(ZFS_OBJS_OS))
487zfs-$(CONFIG_X86) += $(addprefix zfs/,$(ZFS_OBJS_X86))
bc00d2c7 488zfs-$(CONFIG_UML_X86)+= $(addprefix zfs/,$(ZFS_OBJS_X86))
ad9e7676
AZ
489zfs-$(CONFIG_ARM64) += $(addprefix zfs/,$(ZFS_OBJS_ARM64))
490zfs-$(CONFIG_PPC) += $(addprefix zfs/,$(ZFS_OBJS_PPC_PPC64))
491zfs-$(CONFIG_PPC64) += $(addprefix zfs/,$(ZFS_OBJS_PPC_PPC64))
492
786641dc
TH
493UBSAN_SANITIZE_zap_leaf.o := n
494UBSAN_SANITIZE_zap_micro.o := n
495UBSAN_SANITIZE_sa.o := n
496
ad9e7676
AZ
497# Suppress incorrect warnings from versions of objtool which are not
498# aware of x86 EVEX prefix instructions used for AVX512.
499OBJECT_FILES_NON_STANDARD_vdev_raidz_math_avx512bw.o := y
500OBJECT_FILES_NON_STANDARD_vdev_raidz_math_avx512f.o := y
71504277 501
ad9e7676
AZ
502ifeq ($(CONFIG_ALTIVEC),y)
503$(obj)/zfs/vdev_raidz_math_powerpc_altivec.o : c_flags += -maltivec
71504277 504endif