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