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