1prefix ?= /usr 2datadir ?= $(prefix)/share 3 4INSTALL=install 5 6ifneq ($(MAKECMDGOALS),clean) 7include ../config-host.mak 8endif 9 10CPPFLAGS ?= 11 12override CPPFLAGS += \ 13 -D_GNU_SOURCE \ 14 -D__SANE_USERSPACE_TYPES__ \ 15 -I../src/include/ \ 16 -include ../config-host.h \ 17 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 18 19CFLAGS ?= -g -O3 -Wall -Wextra 20XCFLAGS = -Wno-unused-parameter -Wno-sign-compare 21 22ifdef CONFIG_HAVE_STRINGOP_OVERFLOW 23 XCFLAGS += -Wstringop-overflow=0 24endif 25 26ifdef CONFIG_HAVE_ARRAY_BOUNDS 27 XCFLAGS += -Warray-bounds=0 28endif 29 30ifeq ($(CONFIG_USE_SANITIZER),y) 31 XCFLAGS += -fsanitize=address,undefined -fno-omit-frame-pointer -fno-optimize-sibling-calls 32endif 33 34CXXFLAGS ?= $(CFLAGS) 35override CFLAGS += $(XCFLAGS) -DLIBURING_BUILD_TEST 36override CXXFLAGS += $(XCFLAGS) -std=c++11 -DLIBURING_BUILD_TEST 37 38LDFLAGS ?= 39override LDFLAGS += -L../src/ -luring -lpthread 40 41# Please keep this list sorted alphabetically. 42test_srcs := \ 43 232c93d07b74.c \ 44 35fa71a030ca.c \ 45 500f9fbadef8.c \ 46 7ad0e4b2f83c.c \ 47 8a9973408177.c \ 48 917257daa0fe.c \ 49 a0908ae19763.c \ 50 a4c0b3decb33.c \ 51 accept.c \ 52 accept-link.c \ 53 accept-non-empty.c \ 54 accept-reuse.c \ 55 accept-test.c \ 56 across-fork.c \ 57 b19062a56726.c \ 58 b5837bd5311d.c \ 59 bind-listen.c \ 60 buf-ring.c \ 61 buf-ring-nommap.c \ 62 buf-ring-put.c \ 63 ce593a6c480a.c \ 64 close-opath.c \ 65 connect.c \ 66 connect-rep.c \ 67 coredump.c \ 68 cmd-discard.c \ 69 cq-full.c \ 70 cq-overflow.c \ 71 cq-peek-batch.c \ 72 cq-ready.c \ 73 cq-size.c \ 74 d4ae271dfaae.c \ 75 d77a67ed5f27.c \ 76 defer.c \ 77 defer-taskrun.c \ 78 defer-tw-timeout.c \ 79 double-poll-crash.c \ 80 drop-submit.c \ 81 eeed8b54e0df.c \ 82 empty-eownerdead.c \ 83 eploop.c \ 84 eventfd.c \ 85 eventfd-disable.c \ 86 eventfd-reg.c \ 87 eventfd-ring.c \ 88 evloop.c \ 89 exec-target.c \ 90 exit-no-cleanup.c \ 91 fadvise.c \ 92 fallocate.c \ 93 fc2a85cb02ef.c \ 94 fd-install.c \ 95 fd-pass.c \ 96 fdinfo.c \ 97 fifo-nonblock-read.c \ 98 file-register.c \ 99 files-exit-hang-poll.c \ 100 files-exit-hang-timeout.c \ 101 file-update.c \ 102 file-verify.c \ 103 fixed-buf-iter.c \ 104 fixed-buf-merge.c \ 105 fixed-hugepage.c \ 106 fixed-link.c \ 107 fixed-reuse.c \ 108 fpos.c \ 109 fsnotify.c \ 110 fsync.c \ 111 futex.c \ 112 hardlink.c \ 113 ignore-single-mmap.c \ 114 init-mem.c \ 115 io-cancel.c \ 116 iopoll.c \ 117 iopoll-leak.c \ 118 iopoll-overflow.c \ 119 io_uring_enter.c \ 120 io_uring_passthrough.c \ 121 io_uring_register.c \ 122 io_uring_setup.c \ 123 kallsyms.c \ 124 lfs-openat.c \ 125 lfs-openat-write.c \ 126 link.c \ 127 link_drain.c \ 128 link-timeout.c \ 129 linked-defer-close.c \ 130 madvise.c \ 131 min-timeout.c \ 132 min-timeout-wait.c \ 133 mkdir.c \ 134 msg-ring.c \ 135 msg-ring-fd.c \ 136 msg-ring-flags.c \ 137 msg-ring-overflow.c \ 138 multicqes_drain.c \ 139 napi-test.c \ 140 no-mmap-inval.c \ 141 nop-all-sizes.c \ 142 nop.c \ 143 ooo-file-unreg.c \ 144 openat2.c \ 145 open-close.c \ 146 open-direct-link.c \ 147 open-direct-pick.c \ 148 personality.c \ 149 pipe-bug.c \ 150 pipe-eof.c \ 151 pipe-reuse.c \ 152 poll.c \ 153 poll-cancel.c \ 154 poll-cancel-all.c \ 155 poll-cancel-ton.c \ 156 poll-link.c \ 157 poll-many.c \ 158 poll-mshot-overflow.c \ 159 poll-mshot-update.c \ 160 poll-race.c \ 161 poll-race-mshot.c \ 162 poll-ring.c \ 163 poll-v-poll.c \ 164 pollfree.c \ 165 probe.c \ 166 read-before-exit.c \ 167 read-mshot.c \ 168 read-mshot-empty.c \ 169 read-mshot-stdin.c \ 170 read-write.c \ 171 recv-msgall.c \ 172 recv-msgall-stream.c \ 173 recv-multishot.c \ 174 reg-fd-only.c \ 175 reg-hint.c \ 176 reg-reg-ring.c \ 177 regbuf-clone.c \ 178 regbuf-merge.c \ 179 register-restrictions.c \ 180 rename.c \ 181 ringbuf-read.c \ 182 ringbuf-status.c \ 183 ring-leak2.c \ 184 ring-leak.c \ 185 rsrc_tags.c \ 186 rw_merge_test.c \ 187 self.c \ 188 recvsend_bundle.c \ 189 recvsend_bundle-inc.c \ 190 send_recv.c \ 191 send_recvmsg.c \ 192 send-zerocopy.c \ 193 shared-wq.c \ 194 short-read.c \ 195 shutdown.c \ 196 sigfd-deadlock.c \ 197 single-issuer.c \ 198 skip-cqe.c \ 199 socket.c \ 200 socket-io-cmd.c \ 201 socket-getsetsock-cmd.c \ 202 socket-rw.c \ 203 socket-rw-eagain.c \ 204 socket-rw-offset.c \ 205 splice.c \ 206 sq-full.c \ 207 sq-full-cpp.cc \ 208 sqpoll-disable-exit.c \ 209 sqpoll-exec.c \ 210 sq-poll-dup.c \ 211 sqpoll-exit-hang.c \ 212 sq-poll-kthread.c \ 213 sq-poll-share.c \ 214 sqpoll-sleep.c \ 215 sq-space_left.c \ 216 sqwait.c \ 217 stdout.c \ 218 submit-and-wait.c \ 219 submit-link-fail.c \ 220 submit-reuse.c \ 221 symlink.c \ 222 sync-cancel.c \ 223 teardowns.c \ 224 thread-exit.c \ 225 timeout.c \ 226 timeout-new.c \ 227 truncate.c \ 228 tty-write-dpoll.c \ 229 unlink.c \ 230 uring_cmd_ublk.c \ 231 version.c \ 232 waitid.c \ 233 wait-timeout.c \ 234 wakeup-hang.c \ 235 wq-aff.c \ 236 xattr.c \ 237 # EOL 238 239# Please keep this list sorted alphabetically. 240asan_test_srcs := \ 241 xfail_prep_link_timeout_out_of_scope.c \ 242 xfail_register_buffers_out_of_scope.c \ 243 # EOL 244 245all_targets := 246include ../Makefile.quiet 247 248ifeq ($(CONFIG_NOLIBC),y) 249 test_srcs += nolibc.c 250endif 251 252ifdef CONFIG_HAVE_STATX 253 test_srcs += statx.c 254else ifdef CONFIG_HAVE_GLIBC_STATX 255 test_srcs += statx.c 256endif 257all_targets += statx.t 258 259ifdef CONFIG_HAVE_CXX 260 test_srcs += sq-full-cpp.cc 261endif 262all_targets += sq-full-cpp.t 263 264 265test_targets := $(patsubst %.c,%,$(test_srcs)) 266test_targets := $(patsubst %.cc,%,$(test_targets)) 267run_test_targets := $(patsubst %,%.run_test,$(test_targets)) 268test_targets := $(patsubst %,%.t,$(test_targets)) 269all_targets += $(test_targets) 270helpers = helpers.o 271 272ifeq ($(CONFIG_USE_SANITIZER),y) 273 asan_test_targets := $(patsubst %.c,%,$(asan_test_srcs)) 274 asan_test_targets := $(patsubst %.cc,%,$(asan_test_targets)) 275 asan_run_test_targets := $(patsubst %,%.run_test,$(asan_test_targets)) 276 asan_test_targets := $(patsubst %,%.t,$(asan_test_targets)) 277 all_targets += $(asan_test_targets) 278endif 279 280all: $(test_targets) $(asan_test_targets) 281 282helpers.o: helpers.c 283 $(QUIET_CC)$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $< 284 285LIBURING := $(shell if [ -e ../src/liburing.a ]; then echo ../src/liburing.a; fi) 286 287%.t: %.c $(helpers) helpers.h $(LIBURING) 288 $(QUIET_CC)$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $< $(helpers) $(LDFLAGS) 289 290# 291# Clang++ is not happy with -Wmissing-prototypes: 292# 293# cc1plus: warning: command-line option '-Wmissing-prototypes' \ 294# is valid for C/ObjC but not for C++ 295# 296%.t: %.cc $(helpers) helpers.h $(LIBURING) 297 $(QUIET_CXX)$(CXX) \ 298 $(patsubst -Wmissing-prototypes,,$(CPPFLAGS)) \ 299 $(patsubst -Wmissing-prototypes,,$(CXXFLAGS)) \ 300 -o $@ $< $(helpers) $(LDFLAGS) 301 302 303install: $(test_targets) runtests.sh runtests-loop.sh 304 $(INSTALL) -D -d -m 755 $(datadir)/liburing-test/ 305 $(INSTALL) -D -m 755 $(test_targets) $(datadir)/liburing-test/ 306 $(INSTALL) -D -m 755 runtests.sh $(datadir)/liburing-test/ 307 $(INSTALL) -D -m 755 runtests-loop.sh $(datadir)/liburing-test/ 308 309uninstall: 310 @rm -rf $(datadir)/liburing-test/ 311 312clean: 313 @rm -f $(all_targets) helpers.o output/* 314 @rm -rf output/ 315 316runtests: all 317 @./runtests.sh $(test_targets) $(asan_test_targets) 318 319runtests-loop: all 320 @./runtests-loop.sh $(test_targets) $(asan_test_targets) 321 322%.run_test: %.t 323 @./runtests-quiet.sh $< 324 325runtests-parallel: $(run_test_targets) 326 @echo "All tests passed" 327 328.PHONY: all install clean runtests runtests-loop runtests-parallel 329