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