1ZFSTOP= ${SRCTOP}/sys/contrib/openzfs 2 3.PATH: ${ZFSTOP}/lib/libzpool 4 5# ZFS_COMMON_SRCS 6.PATH: ${ZFSTOP}/module/zfs 7.PATH: ${ZFSTOP}/module/zcommon 8.PATH: ${ZFSTOP}/module/unicode 9# LUA_SRCS 10.PATH: ${ZFSTOP}/module/lua 11# ZSTD_SRCS 12.PATH: ${ZFSTOP}/module/zstd 13.PATH: ${ZFSTOP}/module/zstd/lib/common 14.PATH: ${ZFSTOP}/module/zstd/lib/compress 15.PATH: ${ZFSTOP}/module/zstd/lib/decompress 16 17.if exists(${SRCTOP}/sys/cddl/contrib/opensolaris/common/atomic/${MACHINE_ARCH}/opensolaris_atomic.S) 18.PATH: ${SRCTOP}/sys/cddl/contrib/opensolaris/common/atomic/${MACHINE_ARCH} 19ATOMIC_SRCS= opensolaris_atomic.S 20ACFLAGS+= -Wa,--noexecstack 21.else 22.PATH: ${SRCTOP}/sys/cddl/compat/opensolaris/kern 23ATOMIC_SRCS= opensolaris_atomic.c 24.endif 25 26.if ${MACHINE_ARCH} == "powerpc" || ${MACHINE_ARCH} == "powerpcspe" 27# Don't waste GOT entries on small data. 28PICFLAG= -fPIC 29.endif 30 31PACKAGE= zfs 32LIB_PACKAGE= 33 34LIB= zpool 35 36USER_C = \ 37 arc_os.c \ 38 kernel.c \ 39 taskq.c \ 40 util.c \ 41 zfs_debug.c 42 43.PATH: ${ZFSTOP}/module/os/linux/zfs 44 45KERNEL_C = \ 46 simd_stat.c \ 47 zfeature_common.c \ 48 zfs_comutil.c \ 49 zfs_deleg.c \ 50 zfs_fletcher.c \ 51 zfs_fletcher_superscalar.c \ 52 zfs_fletcher_superscalar4.c \ 53 zfs_namecheck.c \ 54 zfs_prop.c \ 55 zfs_zstd.c \ 56 zpool_prop.c \ 57 zprop_common.c \ 58 abd.c \ 59 abd_os.c \ 60 aggsum.c \ 61 arc.c \ 62 blake3_zfs.c \ 63 blkptr.c \ 64 bplist.c \ 65 bpobj.c \ 66 bptree.c \ 67 bqueue.c \ 68 btree.c \ 69 brt.c \ 70 cityhash.c \ 71 dbuf.c \ 72 dbuf_stats.c \ 73 ddt.c \ 74 ddt_log.c \ 75 ddt_stats.c \ 76 ddt_zap.c \ 77 dmu.c \ 78 dmu_diff.c \ 79 dmu_direct.c \ 80 dmu_object.c \ 81 dmu_objset.c \ 82 dmu_recv.c \ 83 dmu_redact.c \ 84 dmu_send.c \ 85 dmu_traverse.c \ 86 dmu_tx.c \ 87 dmu_zfetch.c \ 88 dnode.c \ 89 dnode_sync.c \ 90 dsl_bookmark.c \ 91 dsl_dataset.c \ 92 dsl_deadlist.c \ 93 dsl_deleg.c \ 94 dsl_dir.c \ 95 dsl_crypt.c \ 96 dsl_pool.c \ 97 dsl_prop.c \ 98 dsl_scan.c \ 99 dsl_synctask.c \ 100 dsl_destroy.c \ 101 dsl_userhold.c \ 102 edonr_zfs.c \ 103 entropy_common.c \ 104 error_private.c \ 105 fm.c \ 106 fse_compress.c \ 107 fse_decompress.c \ 108 gzip.c \ 109 hist.c \ 110 hkdf.c \ 111 huf_compress.c \ 112 huf_decompress.c \ 113 lzjb.c \ 114 lz4.c \ 115 lz4_zfs.c \ 116 metaslab.c \ 117 mmp.c \ 118 multilist.c \ 119 objlist.c \ 120 pathname.c \ 121 pool.c \ 122 range_tree.c \ 123 refcount.c \ 124 rrwlock.c \ 125 sa.c \ 126 sha2_zfs.c \ 127 skein_zfs.c \ 128 spa.c \ 129 spa_checkpoint.c \ 130 spa_config.c \ 131 spa_errlog.c \ 132 spa_history.c \ 133 spa_log_spacemap.c \ 134 spa_misc.c \ 135 spa_stats.c \ 136 space_map.c \ 137 space_reftree.c \ 138 txg.c \ 139 trace.c \ 140 uberblock.c \ 141 unique.c \ 142 vdev.c \ 143 vdev_draid.c \ 144 vdev_draid_rand.c \ 145 vdev_file.c \ 146 vdev_indirect_births.c \ 147 vdev_indirect.c \ 148 vdev_indirect_mapping.c \ 149 vdev_initialize.c \ 150 vdev_label.c \ 151 vdev_label_os.c \ 152 vdev_mirror.c \ 153 vdev_missing.c \ 154 vdev_queue.c \ 155 vdev_raidz.c \ 156 vdev_raidz_math_aarch64_neon.c \ 157 vdev_raidz_math_aarch64_neonx2.c \ 158 vdev_raidz_math_avx2.c \ 159 vdev_raidz_math_avx512bw.c \ 160 vdev_raidz_math_avx512f.c \ 161 vdev_raidz_math.c \ 162 vdev_raidz_math_scalar.c \ 163 vdev_rebuild.c \ 164 vdev_removal.c \ 165 vdev_root.c \ 166 vdev_trim.c \ 167 xxhash.c \ 168 zap.c \ 169 zap_leaf.c \ 170 zap_micro.c \ 171 zcp.c \ 172 zcp_get.c \ 173 zcp_global.c \ 174 zcp_iter.c \ 175 zcp_set.c \ 176 zcp_synctask.c \ 177 zfeature.c \ 178 zfs_byteswap.c \ 179 zfs_chksum.c \ 180 zfs_crrd.c \ 181 zfs_debug_common.c \ 182 zfs_fm.c \ 183 zfs_fuid.c \ 184 zfs_sa.c \ 185 zfs_znode.c \ 186 zfs_racct.c \ 187 zfs_ratelimit.c \ 188 zfs_rlock.c \ 189 zil.c \ 190 zio.c \ 191 zio_checksum.c \ 192 zio_compress.c \ 193 zio_crypt.c \ 194 zio_inject.c \ 195 zle.c \ 196 zrlock.c \ 197 zstd_common.c \ 198 zstd_compress.c \ 199 zstd_compress_literals.c \ 200 zstd_compress_sequences.c \ 201 zstd_compress_superblock.c \ 202 zstd_ddict.c \ 203 zstd_decompress.c \ 204 zstd_decompress_block.c \ 205 zstd_double_fast.c \ 206 zstd_fast.c \ 207 zstd_lazy.c \ 208 zstd_ldm.c \ 209 zstd_opt.c \ 210 zthr.c 211 212ARCH_C = 213.if ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "i386" 214ARCH_C += vdev_raidz_math_sse2.c \ 215 vdev_raidz_math_ssse3.c \ 216 zfs_fletcher_intel.c \ 217 zfs_fletcher_sse.c 218CFLAGS += -DHAVE_SSE2 -DHAVE_SSE3 219.endif 220.if ${MACHINE_ARCH} == "amd64" 221ARCH_C += zfs_fletcher_avx512.c 222CFLAGS+= -DHAVE_AVX2 -DHAVE_AVX -D__x86_64 -DHAVE_AVX512F \ 223 -DHAVE_AVX512BW 224.endif 225.if ${MACHINE_CPUARCH} == "aarch64" 226ARCH_C += zfs_fletcher_aarch64_neon.c 227.endif 228 229LUA_C = \ 230 lapi.c \ 231 lauxlib.c \ 232 lbaselib.c \ 233 lcode.c \ 234 lcompat.c \ 235 lcorolib.c \ 236 lctype.c \ 237 ldebug.c \ 238 ldo.c \ 239 lfunc.c \ 240 lgc.c \ 241 llex.c \ 242 lmem.c \ 243 lobject.c \ 244 lopcodes.c \ 245 lparser.c \ 246 lstate.c \ 247 lstring.c \ 248 lstrlib.c \ 249 ltable.c \ 250 ltablib.c \ 251 ltm.c \ 252 lvm.c \ 253 lzio.c 254 255UNICODE_C = u8_textprep.c 256 257SRCS+= ${USER_C} ${KERNEL_C} ${LUA_C} ${UNICODE_C} ${ARCH_C} 258 259 260WARNS?= 2 261CFLAGS+= \ 262 -DIN_BASE \ 263 -I${ZFSTOP}/include \ 264 -I${ZFSTOP}/lib/libspl/include \ 265 -I${ZFSTOP}/lib/libspl/include/os/freebsd \ 266 -I${SRCTOP}/sys/contrib/openzfs/lib/libzpool/include \ 267 -I${SRCTOP}/sys \ 268 -I${ZFSTOP}/include/os/freebsd/zfs \ 269 -I${SRCTOP}/cddl/compat/opensolaris/include \ 270 -I${ZFSTOP}/module/icp/include \ 271 -I${SRCTOP}/compat/linuxkpi/common/include/linux \ 272 -include ${ZFSTOP}/include/os/freebsd/spl/sys/ccompile.h \ 273 -DHAVE_ISSETUGID \ 274 -include ${SRCTOP}/sys/modules/zfs/zfs_config.h \ 275 -I${SRCTOP}/sys/modules/zfs \ 276 -I${ZFSTOP}/include/os/freebsd/zfs \ 277 -DLIB_ZPOOL_BUILD -DZFS_DEBUG \ 278 279# XXX: pthread doesn't have mutex_owned() equivalent, so we need to look 280# into libthr private structures. That's sooo evil, but it's only for 281# ZFS debugging tools needs. 282CFLAGS+= -DWANTS_MUTEX_OWNED 283CFLAGS+= -I${SRCTOP}/lib/libpthread/thread 284CFLAGS+= -I${SRCTOP}/lib/libpthread/sys 285CFLAGS+= -I${SRCTOP}/lib/libthr/arch/${MACHINE_CPUARCH}/include 286CFLAGS.gcc+= -fms-extensions 287 288LIBADD= md pthread z spl icp nvpair avl umem 289 290CSTD= c99 291 292# Since there are many asserts in this library, it makes no sense to compile 293# it without debugging. 294 295CFLAGS+= -g -DDEBUG=1 296 297CFLAGS.gcc+= -Wno-pointer-to-int-cast 298 299# Pointer values are used as debugging "tags" to mark reference count 300# ownerships and in some cases the tag reference is dropped after an 301# object is freed. 302CFLAGS.dbuf.c= ${NO_WUSE_AFTER_FREE} 303CFLAGS.entropy_common.c= -fno-tree-vectorize 304CFLAGS.entropy_common.c+= ${NO_WBITWISE_INSTEAD_OF_LOGICAL} 305CFLAGS.error_private.c= -fno-tree-vectorize 306CFLAGS.error_private.c+= ${NO_WBITWISE_INSTEAD_OF_LOGICAL} 307CFLAGS.fse_compress.c= -fno-tree-vectorize 308CFLAGS.fse_compress.c+= ${NO_WBITWISE_INSTEAD_OF_LOGICAL} 309CFLAGS.fse_decompress.c= -fno-tree-vectorize 310CFLAGS.fse_decompress.c+= ${NO_WBITWISE_INSTEAD_OF_LOGICAL} 311CFLAGS.hist.c= -fno-tree-vectorize 312CFLAGS.hist.c+= ${NO_WBITWISE_INSTEAD_OF_LOGICAL} 313CFLAGS.huf_compress.c= -fno-tree-vectorize 314CFLAGS.huf_compress.c+= ${NO_WBITWISE_INSTEAD_OF_LOGICAL} 315CFLAGS.huf_decompress.c= -fno-tree-vectorize 316CFLAGS.huf_decompress.c+= ${NO_WBITWISE_INSTEAD_OF_LOGICAL} 317CFLAGS.pool.c= -fno-tree-vectorize 318CFLAGS.pool.c+= ${NO_WBITWISE_INSTEAD_OF_LOGICAL} 319CFLAGS.xxhash.c= -fno-tree-vectorize 320CFLAGS.xxhash.c+= ${NO_WBITWISE_INSTEAD_OF_LOGICAL} 321CFLAGS.zstd_compress.c= -fno-tree-vectorize 322CFLAGS.zstd_compress.c+= ${NO_WBITWISE_INSTEAD_OF_LOGICAL} 323CFLAGS.zstd_compress_literals.c= -fno-tree-vectorize 324CFLAGS.zstd_compress_literals.c+= ${NO_WBITWISE_INSTEAD_OF_LOGICAL} 325CFLAGS.zstd_compress_sequences.c= -fno-tree-vectorize 326CFLAGS.zstd_compress_sequences.c+= ${NO_WBITWISE_INSTEAD_OF_LOGICAL} 327CFLAGS.zstd_compress_superblock.c= -fno-tree-vectorize 328CFLAGS.zstd_compress_superblock.c+= ${NO_WBITWISE_INSTEAD_OF_LOGICAL} 329CFLAGS.zstd_double_fast.c= -fno-tree-vectorize 330CFLAGS.zstd_double_fast.c+= ${NO_WBITWISE_INSTEAD_OF_LOGICAL} 331CFLAGS.zstd_fast.c= -fno-tree-vectorize 332CFLAGS.zstd_fast.c+= ${NO_WBITWISE_INSTEAD_OF_LOGICAL} 333CFLAGS.zstd_lazy.c= -fno-tree-vectorize 334CFLAGS.zstd_lazy.c+= ${NO_WBITWISE_INSTEAD_OF_LOGICAL} 335CFLAGS.zstd_ldm.c= -fno-tree-vectorize 336CFLAGS.zstd_ldm.c+= ${NO_WBITWISE_INSTEAD_OF_LOGICAL} 337CFLAGS.zstd_opt.c= -fno-tree-vectorize 338CFLAGS.zstd_opt.c+= ${NO_WBITWISE_INSTEAD_OF_LOGICAL} 339CFLAGS.zstd_ddict.c= -fno-tree-vectorize 340CFLAGS.zstd_ddict.c+= ${NO_WBITWISE_INSTEAD_OF_LOGICAL} 341CFLAGS.zstd_decompress.c= -fno-tree-vectorize 342CFLAGS.zstd_decompress.c+= ${NO_WBITWISE_INSTEAD_OF_LOGICAL} 343CFLAGS.zstd_decompress_block.c= -fno-tree-vectorize 344CFLAGS.zstd_decompress_block.c+= ${NO_WBITWISE_INSTEAD_OF_LOGICAL} 345 346.include <bsd.lib.mk> 347