]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - module/Kbuild.in
Introduce BLAKE3 checksums as an OpenZFS feature
[FreeBSD/FreeBSD.git] / module / Kbuild.in
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.
4
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@
8
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 = $(srctree)/$(src)/icp/include
20 zstd_include = $(srctree)/$(src)/zstd/include
21 ZFS_MODULE_CFLAGS += -include $(zfs_include)/zfs_config.h
22 endif
23
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@
30
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
36
37 ifneq ($(KBUILD_EXTMOD),)
38 @CONFIG_QAT_TRUE@ZFS_MODULE_CFLAGS += -I@QAT_SRC@/include
39 @CONFIG_QAT_TRUE@KBUILD_EXTRA_SYMBOLS += @QAT_SYMBOLS@
40 endif
41
42 asflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS)
43 ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS)
44
45 # Suppress unused-value warnings in sparc64 architecture headers
46 ccflags-$(CONFIG_SPARC64) += -Wno-unused-value
47
48
49 obj-$(CONFIG_ZFS) := spl.o zfs.o
50
51 SPL_OBJS := \
52         spl-atomic.o \
53         spl-condvar.o \
54         spl-cred.o \
55         spl-err.o \
56         spl-generic.o \
57         spl-kmem-cache.o \
58         spl-kmem.o \
59         spl-kstat.o \
60         spl-proc.o \
61         spl-procfs-list.o \
62         spl-taskq.o \
63         spl-thread.o \
64         spl-trace.o \
65         spl-tsd.o \
66         spl-vmem.o \
67         spl-xdr.o \
68         spl-zlib.o
69
70 spl-objs += $(addprefix os/linux/spl/,$(SPL_OBJS))
71
72 zfs-objs += avl/avl.o
73
74 ICP_OBJS := \
75         algs/aes/aes_impl.o \
76         algs/aes/aes_impl_generic.o \
77         algs/aes/aes_modes.o \
78         algs/blake3/blake3.o \
79         algs/blake3/blake3_generic.o \
80         algs/blake3/blake3_impl.o \
81         algs/blake3/blake3_x86-64.o \
82         algs/edonr/edonr.o \
83         algs/modes/cbc.o \
84         algs/modes/ccm.o \
85         algs/modes/ctr.o \
86         algs/modes/ecb.o \
87         algs/modes/gcm.o \
88         algs/modes/gcm_generic.o \
89         algs/modes/modes.o \
90         algs/sha2/sha2.o \
91         algs/skein/skein.o \
92         algs/skein/skein_block.o \
93         algs/skein/skein_iv.o \
94         api/kcf_cipher.o \
95         api/kcf_ctxops.o \
96         api/kcf_mac.o \
97         core/kcf_callprov.o \
98         core/kcf_mech_tabs.o \
99         core/kcf_prov_lib.o \
100         core/kcf_prov_tabs.o \
101         core/kcf_sched.o \
102         illumos-crypto.o \
103         io/aes.o \
104         io/sha2_mod.o \
105         io/skein_mod.o \
106         spi/kcf_spi.o
107
108 ICP_OBJS_X86_64 := \
109         asm-x86_64/aes/aes_aesni.o \
110         asm-x86_64/aes/aes_amd64.o \
111         asm-x86_64/aes/aeskey.o \
112         asm-x86_64/blake3/blake3_avx2.o \
113         asm-x86_64/blake3/blake3_avx512.o \
114         asm-x86_64/blake3/blake3_sse2.o \
115         asm-x86_64/blake3/blake3_sse41.o \
116         asm-x86_64/modes/aesni-gcm-x86_64.o \
117         asm-x86_64/modes/gcm_pclmulqdq.o \
118         asm-x86_64/modes/ghash-x86_64.o \
119         asm-x86_64/sha2/sha256_impl.o \
120         asm-x86_64/sha2/sha512_impl.o
121
122
123 ICP_OBJS_X86 := \
124         algs/aes/aes_impl_aesni.o \
125         algs/aes/aes_impl_x86-64.o \
126         algs/modes/gcm_pclmulqdq.o
127
128
129 ICP_OBJS_ARM64 := \
130         asm-aarch64/blake3/b3_aarch64_sse2.o \
131         asm-aarch64/blake3/b3_aarch64_sse41.o
132
133
134 ICP_OBJS_PPC_PPC64 := \
135         asm-ppc64/blake3/b3_ppc64le_sse2.o \
136         asm-ppc64/blake3/b3_ppc64le_sse41.o
137
138 zfs-objs             += $(addprefix icp/,$(ICP_OBJS))
139 zfs-$(CONFIG_X86)    += $(addprefix icp/,$(ICP_OBJS_X86))
140 zfs-$(CONFIG_X86_64) += $(addprefix icp/,$(ICP_OBJS_X86_64))
141 zfs-$(CONFIG_ARM64)  += $(addprefix icp/,$(ICP_OBJS_ARM64))
142 zfs-$(CONFIG_PPC)    += $(addprefix icp/,$(ICP_OBJS_PPC_PPC64))
143 zfs-$(CONFIG_PPC64)  += $(addprefix icp/,$(ICP_OBJS_PPC_PPC64))
144
145 $(addprefix $(obj)/icp/,$(ICP_OBJS) $(ICP_OBJS_X86) $(ICP_OBJS_X86_64) \
146         $(ICP_OBJS_ARM64) $(ICP_OBJS_PPC_PPC64)) : asflags-y += -I$(icp_include)
147
148 $(addprefix $(obj)/icp/,$(ICP_OBJS) $(ICP_OBJS_X86) $(ICP_OBJS_X86_64) \
149         $(ICP_OBJS_ARM64) $(ICP_OBJS_PPC_PPC64)) : ccflags-y += -I$(icp_include)
150
151 # Suppress objtool "can't find jump dest instruction at" warnings.  They
152 # are caused by the constants which are defined in the text section of the
153 # assembly file using .byte instructions (e.g. bswap_mask).  The objtool
154 # utility tries to interpret them as opcodes and obviously fails doing so.
155 OBJECT_FILES_NON_STANDARD_aesni-gcm-x86_64.o := y
156 OBJECT_FILES_NON_STANDARD_ghash-x86_64.o := y
157
158 # Suppress objtool "unsupported stack pointer realignment" warnings. We are
159 # not using a DRAP register while aligning the stack to a 64 byte boundary.
160 # See #6950 for the reasoning.
161 OBJECT_FILES_NON_STANDARD_sha256_impl.o := y
162 OBJECT_FILES_NON_STANDARD_sha512_impl.o := y
163
164
165 LUA_OBJS := \
166         lapi.o \
167         lauxlib.o \
168         lbaselib.o \
169         lcode.o \
170         lcompat.o \
171         lcorolib.o \
172         lctype.o \
173         ldebug.o \
174         ldo.o \
175         lfunc.o \
176         lgc.o \
177         llex.o \
178         lmem.o \
179         lobject.o \
180         lopcodes.o \
181         lparser.o \
182         lstate.o \
183         lstring.o \
184         lstrlib.o \
185         ltable.o \
186         ltablib.o \
187         ltm.o \
188         lvm.o \
189         lzio.o \
190         setjmp/setjmp.o
191
192 zfs-objs += $(addprefix lua/,$(LUA_OBJS))
193
194
195 NVPAIR_OBJS := \
196         fnvpair.o \
197         nvpair.o \
198         nvpair_alloc_fixed.o \
199         nvpair_alloc_spl.o
200
201 zfs-objs += $(addprefix nvpair/,$(NVPAIR_OBJS))
202
203
204 UNICODE_OBJS := \
205         u8_textprep.o \
206         uconv.o
207
208 zfs-objs += $(addprefix unicode/,$(UNICODE_OBJS))
209
210
211 ZCOMMON_OBJS := \
212         cityhash.o \
213         zfeature_common.o \
214         zfs_comutil.o \
215         zfs_deleg.o \
216         zfs_fletcher.o \
217         zfs_fletcher_superscalar.o \
218         zfs_fletcher_superscalar4.o \
219         zfs_namecheck.o \
220         zfs_prop.o \
221         zpool_prop.o \
222         zprop_common.o
223
224 ZCOMMON_OBJS_X86 := \
225         zfs_fletcher_avx512.o \
226         zfs_fletcher_intel.o \
227         zfs_fletcher_sse.o
228
229 ZCOMMON_OBJS_ARM64 := \
230         zfs_fletcher_aarch64_neon.o
231
232 zfs-objs            += $(addprefix zcommon/,$(ZCOMMON_OBJS))
233 zfs-$(CONFIG_X86)   += $(addprefix zcommon/,$(ZCOMMON_OBJS_X86))
234 zfs-$(CONFIG_ARM64) += $(addprefix zcommon/,$(ZCOMMON_OBJS_ARM64))
235
236
237 # Zstd uses -O3 by default, so we should follow
238 ZFS_ZSTD_FLAGS := -O3
239
240 # -fno-tree-vectorize gets set for gcc in zstd/common/compiler.h
241 # Set it for other compilers, too.
242 ZFS_ZSTD_FLAGS += -fno-tree-vectorize
243
244 # SSE register return with SSE disabled if -march=znverX is passed
245 ZFS_ZSTD_FLAGS += -U__BMI__
246
247 # Quiet warnings about frame size due to unused code in unmodified zstd lib
248 ZFS_ZSTD_FLAGS += -Wframe-larger-than=20480
249
250 ZSTD_OBJS := \
251         zfs_zstd.o \
252         zstd_sparc.o
253
254 ZSTD_UPSTREAM_OBJS := \
255         lib/common/entropy_common.o \
256         lib/common/error_private.o \
257         lib/common/fse_decompress.o \
258         lib/common/pool.o \
259         lib/common/zstd_common.o \
260         lib/compress/fse_compress.o \
261         lib/compress/hist.o \
262         lib/compress/huf_compress.o \
263         lib/compress/zstd_compress.o \
264         lib/compress/zstd_compress_literals.o \
265         lib/compress/zstd_compress_sequences.o \
266         lib/compress/zstd_compress_superblock.o \
267         lib/compress/zstd_double_fast.o \
268         lib/compress/zstd_fast.o \
269         lib/compress/zstd_lazy.o \
270         lib/compress/zstd_ldm.o \
271         lib/compress/zstd_opt.o \
272         lib/decompress/huf_decompress.o \
273         lib/decompress/zstd_ddict.o \
274         lib/decompress/zstd_decompress.o \
275         lib/decompress/zstd_decompress_block.o
276
277 zfs-objs += $(addprefix zstd/,$(ZSTD_OBJS) $(ZSTD_UPSTREAM_OBJS))
278
279 # Disable aarch64 neon SIMD instructions for kernel mode
280 $(addprefix $(obj)/zstd/,$(ZSTD_OBJS) $(ZSTD_UPSTREAM_OBJS)) : ccflags-y += -I$(zstd_include) $(ZFS_ZSTD_FLAGS)
281 $(addprefix $(obj)/zstd/,$(ZSTD_OBJS) $(ZSTD_UPSTREAM_OBJS)) : asflags-y += -I$(zstd_include)
282 $(addprefix $(obj)/zstd/,$(ZSTD_UPSTREAM_OBJS)) : ccflags-y += -include $(zstd_include)/aarch64_compat.h -include $(zstd_include)/zstd_compat_wrapper.h -Wp,-w
283 $(obj)/zstd/zfs_zstd.o : ccflags-y += -include $(zstd_include)/zstd_compat_wrapper.h
284
285
286 ZFS_OBJS := \
287         abd.o \
288         aggsum.o \
289         arc.o \
290         blake3_zfs.o \
291         blkptr.o \
292         bplist.o \
293         bpobj.o \
294         bptree.o \
295         bqueue.o \
296         btree.o \
297         dataset_kstats.o \
298         dbuf.o \
299         dbuf_stats.o \
300         ddt.o \
301         ddt_zap.o \
302         dmu.o \
303         dmu_diff.o \
304         dmu_object.o \
305         dmu_objset.o \
306         dmu_recv.o \
307         dmu_redact.o \
308         dmu_send.o \
309         dmu_traverse.o \
310         dmu_tx.o \
311         dmu_zfetch.o \
312         dnode.o \
313         dnode_sync.o \
314         dsl_bookmark.o \
315         dsl_crypt.o \
316         dsl_dataset.o \
317         dsl_deadlist.o \
318         dsl_deleg.o \
319         dsl_destroy.o \
320         dsl_dir.o \
321         dsl_pool.o \
322         dsl_prop.o \
323         dsl_scan.o \
324         dsl_synctask.o \
325         dsl_userhold.o \
326         edonr_zfs.o \
327         fm.o \
328         gzip.o \
329         hkdf.o \
330         lz4.o \
331         lz4_zfs.o \
332         lzjb.o \
333         metaslab.o \
334         mmp.o \
335         multilist.o \
336         objlist.o \
337         pathname.o \
338         range_tree.o \
339         refcount.o \
340         rrwlock.o \
341         sa.o \
342         sha256.o \
343         skein_zfs.o \
344         spa.o \
345         spa_boot.o \
346         spa_checkpoint.o \
347         spa_config.o \
348         spa_errlog.o \
349         spa_history.o \
350         spa_log_spacemap.o \
351         spa_misc.o \
352         spa_stats.o \
353         space_map.o \
354         space_reftree.o \
355         txg.o \
356         uberblock.o \
357         unique.o \
358         vdev.o \
359         vdev_cache.o \
360         vdev_draid.o \
361         vdev_draid_rand.o \
362         vdev_indirect.o \
363         vdev_indirect_births.o \
364         vdev_indirect_mapping.o \
365         vdev_initialize.o \
366         vdev_label.o \
367         vdev_mirror.o \
368         vdev_missing.o \
369         vdev_queue.o \
370         vdev_raidz.o \
371         vdev_raidz_math.o \
372         vdev_raidz_math_scalar.o \
373         vdev_rebuild.o \
374         vdev_removal.o \
375         vdev_root.o \
376         vdev_trim.o \
377         zap.o \
378         zap_leaf.o \
379         zap_micro.o \
380         zcp.o \
381         zcp_get.o \
382         zcp_global.o \
383         zcp_iter.o \
384         zcp_set.o \
385         zcp_synctask.o \
386         zfeature.o \
387         zfs_byteswap.o \
388         zfs_chksum.o \
389         zfs_fm.o \
390         zfs_fuid.o \
391         zfs_ioctl.o \
392         zfs_log.o \
393         zfs_onexit.o \
394         zfs_quota.o \
395         zfs_ratelimit.o \
396         zfs_replay.o \
397         zfs_rlock.o \
398         zfs_sa.o \
399         zfs_vnops.o \
400         zil.o \
401         zio.o \
402         zio_checksum.o \
403         zio_compress.o \
404         zio_inject.o \
405         zle.o \
406         zrlock.o \
407         zthr.o \
408         zvol.o
409
410 ZFS_OBJS_OS := \
411         abd_os.o \
412         arc_os.o \
413         mmp_os.o \
414         policy.o \
415         qat.o \
416         qat_compress.o \
417         qat_crypt.o \
418         spa_misc_os.o \
419         trace.o \
420         vdev_disk.o \
421         vdev_file.o \
422         zfs_acl.o \
423         zfs_ctldir.o \
424         zfs_debug.o \
425         zfs_dir.o \
426         zfs_file_os.o \
427         zfs_ioctl_os.o \
428         zfs_racct.o \
429         zfs_sysfs.o \
430         zfs_uio.o \
431         zfs_vfsops.o \
432         zfs_vnops_os.o \
433         zfs_znode.o \
434         zio_crypt.o \
435         zpl_ctldir.o \
436         zpl_export.o \
437         zpl_file.o \
438         zpl_inode.o \
439         zpl_super.o \
440         zpl_xattr.o \
441         zvol_os.o
442
443 ZFS_OBJS_X86 := \
444         vdev_raidz_math_avx2.o \
445         vdev_raidz_math_avx512bw.o \
446         vdev_raidz_math_avx512f.o \
447         vdev_raidz_math_sse2.o \
448         vdev_raidz_math_ssse3.o
449
450 ZFS_OBJS_ARM64 := \
451         vdev_raidz_math_aarch64_neon.o \
452         vdev_raidz_math_aarch64_neonx2.o
453
454 ZFS_OBJS_PPC_PPC64 := \
455         vdev_raidz_math_powerpc_altivec.o
456
457 zfs-objs            += $(addprefix zfs/,$(ZFS_OBJS)) $(addprefix os/linux/zfs/,$(ZFS_OBJS_OS))
458 zfs-$(CONFIG_X86)   += $(addprefix zfs/,$(ZFS_OBJS_X86))
459 zfs-$(CONFIG_ARM64) += $(addprefix zfs/,$(ZFS_OBJS_ARM64))
460 zfs-$(CONFIG_PPC)   += $(addprefix zfs/,$(ZFS_OBJS_PPC_PPC64))
461 zfs-$(CONFIG_PPC64) += $(addprefix zfs/,$(ZFS_OBJS_PPC_PPC64))
462
463 # Suppress incorrect warnings from versions of objtool which are not
464 # aware of x86 EVEX prefix instructions used for AVX512.
465 OBJECT_FILES_NON_STANDARD_vdev_raidz_math_avx512bw.o := y
466 OBJECT_FILES_NON_STANDARD_vdev_raidz_math_avx512f.o := y
467
468 ifeq ($(CONFIG_ALTIVEC),y)
469 $(obj)/zfs/vdev_raidz_math_powerpc_altivec.o : c_flags += -maltivec
470 endif