xref: /relibc/tests/Makefile (revision a2f2484e4559206922b0fcc16217598a6867c8a2)
1# Binaries that should generate the same output every time
2EXPECT_NAMES=\
3	alloca \
4	args \
5	arpainet \
6	assert \
7	constructor \
8	ctype \
9	destructor \
10	dirent/scandir \
11	errno \
12	error \
13	fcntl/create \
14	fcntl/fcntl \
15	fnmatch \
16	futimens \
17	libgen \
18	locale \
19	math \
20	netdb/getaddrinfo \
21	netdb/netdb \
22    ptrace \
23	regex \
24	select \
25	setjmp \
26	signal \
27	stdio/all \
28	stdio/buffer \
29	stdio/fgets \
30	stdio/fputs \
31	stdio/fread \
32	stdio/freopen \
33	stdio/fseek \
34	stdio/fwrite \
35	stdio/getc_unget \
36	stdio/mutex \
37	stdio/popen \
38	stdio/printf \
39	stdio/rename \
40	stdio/scanf \
41	stdio/setvbuf \
42	stdio/sprintf \
43	stdlib/a64l \
44	stdlib/alloc \
45	stdlib/atof \
46	stdlib/atoi \
47	stdlib/div \
48	stdlib/env \
49	stdlib/lcg48 \
50	stdlib/mkostemps \
51	stdlib/rand \
52	stdlib/strtod \
53	stdlib/strtol \
54	stdlib/strtoul \
55	stdlib/system \
56	string/mem \
57	string/strcat \
58	string/strchr \
59	string/strcpy \
60	string/strcspn \
61	string/strlen \
62	string/strncmp \
63	string/strpbrk \
64	string/strrchr \
65	string/strspn \
66	string/strstr \
67	string/strtok \
68	string/strtok_r \
69	string/strsignal \
70	strings \
71	time/asctime \
72	time/gmtime \
73	time/localtime \
74	time/macros \
75	time/mktime \
76	time/strftime \
77	time/time \
78	tls \
79	unistd/access \
80	unistd/brk \
81	unistd/dup \
82	unistd/exec \
83	unistd/fchdir \
84	unistd/fork \
85	unistd/fsync \
86	unistd/ftruncate \
87	unistd/getopt \
88	unistd/getopt_long \
89	unistd/pipe \
90	unistd/rmdir \
91	unistd/sleep \
92	unistd/swab \
93	unistd/write \
94	waitpid \
95	wchar/mbrtowc \
96	wchar/mbsrtowcs \
97	wchar/printf-on-wchars \
98	wchar/putwchar \
99	wchar/wcrtomb \
100	wchar/wcscspn \
101	wchar/wcsrchr \
102	wchar/wcsstr \
103	wchar/wcstod \
104	wchar/wcstok \
105	wchar/wcstol
106	# TODO: Fix these
107	# mkfifo
108
109# Binaries that may generate varied output
110NAMES=\
111	$(EXPECT_NAMES) \
112	dirent/main \
113	pwd \
114	stdio/tempnam \
115	stdio/tmpnam \
116	stdlib/bsearch \
117	stdlib/mktemp \
118	stdlib/realpath \
119	sys_epoll/epoll \
120	sys_utsname/uname \
121	time/gettimeofday \
122	unistd/chdir \
123	unistd/getcwd \
124	unistd/gethostname \
125	unistd/getid \
126	unistd/getpagesize \
127	unistd/isatty \
128	unistd/link \
129	unistd/pathconf \
130	unistd/setid \
131	unistd/stat \
132	unistd/sysconf
133#	resource/getrusage
134#	time/times
135
136BINS=$(patsubst %,bins/%,$(NAMES))
137EXPECT_BINS=$(patsubst %,bins/%,$(EXPECT_NAMES))
138
139TEST_RUNNER?=sh --
140
141.PHONY: all clean run expected verify
142
143all: $(BINS)
144
145clean:
146	rm -rf bins gen *.out
147
148run: | $(BINS)
149	for name in $(NAMES); \
150	do \
151		echo "# $${name} #"; \
152		"bins/$${name}" test args || exit $$?; \
153	done
154
155expected: | $(EXPECT_BINS)
156	rm -rf expected
157	mkdir -p expected
158	for name in $(EXPECT_NAMES); \
159	do \
160		echo "# $${name} #"; \
161		mkdir -p expected/`dirname $${name}`; \
162		"bins/$${name}" test args > "expected/$${name}.stdout" 2> "expected/$${name}.stderr" || exit $$?; \
163	done
164
165verify: | $(EXPECT_BINS)
166	$(TEST_RUNNER) ./verify.sh $(EXPECT_NAMES)
167
168CFLAGS=\
169	-std=c11 \
170	-fno-builtin \
171	-fno-stack-protector \
172	-static \
173	-Wall \
174	-pedantic \
175	-g \
176	-I .
177
178LIBS=
179
180NATIVE_RELIBC?=0
181ifeq ($(NATIVE_RELIBC),0)
182CFLAGS+=\
183	-nostdinc \
184	-nostdlib \
185	-isystem ../sysroot/include \
186	../sysroot/lib/crt0.o \
187	../sysroot/lib/crti.o
188
189LIBS=\
190	../sysroot/lib/libc.a \
191	../sysroot/lib/crtn.o
192
193../sysroot:
194	$(MAKE) -C .. sysroot
195
196bins/%: %.c ../sysroot
197	mkdir -p "$$(dirname "$@")"
198	$(CC) $(CFLAGS) "$<" $(LIBS) -o "$@"
199else
200bins/%: %.c
201	mkdir -p "$$(dirname "$@")"
202	$(CC) $(CFLAGS) "$<" $(LIBS) -o "$@"
203endif
204