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 18CFLAGS ?= -g -O2 -Wall -Wextra 19XCFLAGS = -Wno-unused-parameter -Wno-sign-compare 20 21ifdef CONFIG_HAVE_STRINGOP_OVERFLOW 22 XCFLAGS += -Wstringop-overflow=0 23endif 24 25ifdef CONFIG_HAVE_ARRAY_BOUNDS 26 XCFLAGS += -Warray-bounds=0 27endif 28 29CXXFLAGS ?= $(CFLAGS) 30override CFLAGS += $(XCFLAGS) -DLIBURING_BUILD_TEST 31override CXXFLAGS += $(XCFLAGS) -std=c++11 -DLIBURING_BUILD_TEST 32 33LDFLAGS ?= 34override LDFLAGS += -L../src/ -luring -lpthread 35 36# Please keep this list sorted alphabetically. 37test_srcs := \ 38 232c93d07b74.c \ 39 35fa71a030ca.c \ 40 500f9fbadef8.c \ 41 7ad0e4b2f83c.c \ 42 8a9973408177.c \ 43 917257daa0fe.c \ 44 a0908ae19763.c \ 45 a4c0b3decb33.c \ 46 accept.c \ 47 accept-link.c \ 48 accept-reuse.c \ 49 accept-test.c \ 50 across-fork.c \ 51 b19062a56726.c \ 52 b5837bd5311d.c \ 53 buf-ring.c \ 54 ce593a6c480a.c \ 55 close-opath.c \ 56 connect.c \ 57 cq-full.c \ 58 cq-overflow.c \ 59 cq-peek-batch.c \ 60 cq-ready.c \ 61 cq-size.c \ 62 d4ae271dfaae.c \ 63 d77a67ed5f27.c \ 64 defer.c \ 65 double-poll-crash.c \ 66 drop-submit.c \ 67 eeed8b54e0df.c \ 68 empty-eownerdead.c \ 69 eventfd.c \ 70 eventfd-disable.c \ 71 eventfd-reg.c \ 72 eventfd-ring.c \ 73 exec-target.c \ 74 exit-no-cleanup.c \ 75 fadvise.c \ 76 fallocate.c \ 77 fc2a85cb02ef.c \ 78 file-register.c \ 79 files-exit-hang-poll.c \ 80 files-exit-hang-timeout.c \ 81 file-update.c \ 82 file-verify.c \ 83 fixed-buf-iter.c \ 84 fixed-link.c \ 85 fixed-reuse.c \ 86 fpos.c \ 87 fsync.c \ 88 hardlink.c \ 89 io-cancel.c \ 90 iopoll.c \ 91 io_uring_enter.c \ 92 io_uring_register.c \ 93 io_uring_setup.c \ 94 lfs-openat.c \ 95 lfs-openat-write.c \ 96 link.c \ 97 link_drain.c \ 98 link-timeout.c \ 99 madvise.c \ 100 mkdir.c \ 101 msg-ring.c \ 102 multicqes_drain.c \ 103 nop-all-sizes.c \ 104 nop.c \ 105 openat2.c \ 106 open-close.c \ 107 open-direct-link.c \ 108 open-direct-pick.c \ 109 personality.c \ 110 pipe-eof.c \ 111 pipe-reuse.c \ 112 poll.c \ 113 poll-cancel.c \ 114 poll-cancel-all.c \ 115 poll-cancel-ton.c \ 116 poll-link.c \ 117 poll-many.c \ 118 poll-mshot-update.c \ 119 poll-ring.c \ 120 poll-v-poll.c \ 121 pollfree.c \ 122 probe.c \ 123 read-before-exit.c \ 124 read-write.c \ 125 recv-msgall.c \ 126 recv-msgall-stream.c \ 127 register-restrictions.c \ 128 rename.c \ 129 ringbuf-read.c \ 130 ring-leak2.c \ 131 ring-leak.c \ 132 rsrc_tags.c \ 133 rw_merge_test.c \ 134 self.c \ 135 sendmsg_fs_cve.c \ 136 send_recv.c \ 137 send_recvmsg.c \ 138 shared-wq.c \ 139 short-read.c \ 140 shutdown.c \ 141 sigfd-deadlock.c \ 142 skip-cqe.c \ 143 socket.c \ 144 socket-rw.c \ 145 socket-rw-eagain.c \ 146 socket-rw-offset.c \ 147 splice.c \ 148 sq-full.c \ 149 sq-full-cpp.cc \ 150 sqpoll-cancel-hang.c \ 151 sqpoll-disable-exit.c \ 152 sq-poll-dup.c \ 153 sqpoll-exit-hang.c \ 154 sq-poll-kthread.c \ 155 sq-poll-share.c \ 156 sqpoll-sleep.c \ 157 sq-space_left.c \ 158 stdout.c \ 159 submit-link-fail.c \ 160 submit-reuse.c \ 161 symlink.c \ 162 teardowns.c \ 163 thread-exit.c \ 164 timeout.c \ 165 timeout-new.c \ 166 timeout-overflow.c \ 167 tty-write-dpoll.c \ 168 unlink.c \ 169 wakeup-hang.c \ 170 xattr.c \ 171 skip-cqe.c \ 172 # EOL 173 174all_targets := 175include ../Makefile.quiet 176 177ifdef CONFIG_HAVE_STATX 178 test_srcs += statx.c 179else ifdef CONFIG_HAVE_GLIBC_STATX 180 test_srcs += statx.c 181endif 182all_targets += statx.t 183 184ifdef CONFIG_HAVE_CXX 185 test_srcs += sq-full-cpp.cc 186endif 187all_targets += sq-full-cpp.t 188 189 190test_targets := $(patsubst %.c,%,$(test_srcs)) 191test_targets := $(patsubst %.cc,%,$(test_targets)) 192run_test_targets := $(patsubst %,%.run_test,$(test_targets)) 193test_targets := $(patsubst %,%.t,$(test_targets)) 194all_targets += $(test_targets) 195 196# 197# Build ../src/syscall.c manually from test's Makefile to support 198# liburing nolibc. 199# 200# Functions in ../src/syscall.c require libc to work with, if we 201# build liburing without libc, we don't have those functions 202# in liburing.a. So build it manually here. 203# 204helpers = helpers.o ../src/syscall.o 205 206all: $(test_targets) 207 208../src/syscall.o: ../src/syscall.c 209 $(QUIET_CC)$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $< 210 211helpers.o: helpers.c 212 $(QUIET_CC)$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $< 213 214%.t: %.c $(helpers) helpers.h ../src/liburing.a 215 $(QUIET_CC)$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $< $(helpers) $(LDFLAGS) 216 217%.t: %.cc $(helpers) helpers.h ../src/liburing.a 218 $(QUIET_CXX)$(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ $< $(helpers) $(LDFLAGS) 219 220 221install: $(test_targets) runtests.sh runtests-loop.sh 222 $(INSTALL) -D -d -m 755 $(datadir)/liburing-test/ 223 $(INSTALL) -D -m 755 $(test_targets) $(datadir)/liburing-test/ 224 $(INSTALL) -D -m 755 runtests.sh $(datadir)/liburing-test/ 225 $(INSTALL) -D -m 755 runtests-loop.sh $(datadir)/liburing-test/ 226 227clean: 228 @rm -f $(all_targets) helpers.o output/* 229 @rm -rf output/ 230 231runtests: all 232 @./runtests.sh $(test_targets) 233 234runtests-loop: all 235 @./runtests-loop.sh $(test_targets) 236 237%.run_test: %.t 238 @./runtests-quiet.sh $< 239 240runtests-parallel: $(run_test_targets) 241 @echo "All tests passed" 242 243.PHONY: all install clean runtests runtests-loop runtests-parallel 244