• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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