1#	$OpenBSD: Makefile,v 1.16 2024/03/04 19:35:13 miod Exp $
2
3# Copyright (c) 2021 Moritz Buhl <mbuhl@openbsd.org>
4#
5# Permission to use, copy, modify, and distribute this software for any
6# purpose with or without fee is hereby granted, provided that the above
7# copyright notice and this permission notice appear in all copies.
8#
9# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
17# Each test program in PROGS may define several numbered subtests.
18# In a first step compile all programs and extract their parameters.
19# For each PROG define new regression subtests based on the test number.
20
21.if defined(NUMBERS)
22REGRESS_TARGETS =	${NUMBERS:C/(.*)/run-${PROG}-\1 cleanup-${PROG}-\1/}
23.else
24REGRESS_TARGETS =	${PROGS:S/^/run-/}
25.endif
26
27PROGS =
28PROGS+= cexp_test
29PROGS+= conj_test
30PROGS+= csqrt_test
31PROGS+= ctrig_test
32PROGS+= exponential_test
33PROGS+= fenv_test
34PROGS+= fma_test
35PROGS+= fmaxmin_test
36PROGS+= ilogb_test
37PROGS+= invctrig_test
38PROGS+= invtrig_test
39PROGS+= logarithm_test
40PROGS+= lrint_test
41PROGS+= lround_test
42PROGS+= nan_test
43PROGS+= nearbyint_test
44PROGS+= next_test
45PROGS+= rem_test
46PROGS+= trig_test
47
48# failing tests
49FAILING = run-cexp_test-{2,3,4} run-csqrt_test-{1,2,3} \
50	run-ctrig_test-{2,3,6} run-fma_test-7 \
51	run-invctrig_test-{1,2,3,4} run-invtrig_test-{1,2,3,5,6} \
52	run-lround_test-1 run-nan_test-1 run-next_test-5 run-rem_test-3
53
54. if ${MACHINE} == alpha
55FAILING+=	run-conj_test-1
56FAILING+=	run-ctrig_test-{4,5}
57FAILING+=	run-exponential_test-1
58FAILING+=	run-fenv_test-{2,3,4,6,7,8}
59FAILING+=	run-fma_test-{1,2,4,5,6}
60FAILING+=	run-fmaxmin_test-{7,11}
61FAILING+=	run-invtrig_test-{4,7}
62FAILING+=	run-lrint_test-1
63FAILING+=	run-nearbyint_test-1
64FAILING+=	run-next_test-{1,4}
65FAILING+=	run-rem_test-1
66FAILING+=	run-trig_test-2
67. elif ${MACHINE} == amd64
68FAILING+=	run-cexp_test-{1,7}
69FAILING+=	run-ctrig_test-{1,4}
70FAILING+=	run-exponential_test-1
71FAILING+=	run-invtrig_test-7
72FAILING+=	run-logarithm_test-1
73FAILING+=	run-next_test-{1,2,4}
74. elif ${MACHINE} == arm64
75FAILING+=	run-cexp_test-{1,7}
76FAILING+=	run-ctrig_test-{1,4,5}
77FAILING+=	run-exponential_test-1
78FAILING+=	run-fma_test-{1,2,4,5,6,7}
79FAILING+=	run-invtrig_test-7
80FAILING+=	run-logarithm_test-{1,5}
81FAILING+=	run-lrint_test-1
82FAILING+=	run-nearbyint_test-1
83FAILING+=	run-next_test-{1,2,4}
84FAILING+=	run-rem_test-{1,2}
85FAILING+=	run-trig_test-1
86. elif ${MACHINE} == armv7
87FAILING+=	run-cexp_test-7
88FAILING+=	run-ctrig_test-{1,4,5}
89FAILING+=	run-exponential_test-1
90FAILING+=	run-invtrig_test-7
91FAILING+=	run-logarithm_test-1
92FAILING+=	run-lrint_test-1
93FAILING+=	run-nearbyint_test-1
94FAILING+=	run-trig_test-1
95. elif ${MACHINE} == hppa
96FAILING+=	run-ctrig_test-{4,5}
97FAILING+=	run-exponential_test-1
98FAILING+=	run-fmaxmin_test-11
99FAILING+=	run-invtrig_test-7
100FAILING+=	run-lrint_test-1
101FAILING+=	run-next_test-4
102FAILING+=	run-trig_test-3
103. elif ${MACHINE} == i386
104FAILING+=	run-cexp_test-{1,7}
105FAILING+=	run-ctrig_test-{1,4,5}
106FAILING+=	run-fma_test-{1,6}
107FAILING+=	run-invtrig_test-4
108FAILING+=	run-logarithm_test-{1,3}
109FAILING+=	run-lrint_test-1
110FAILING+=	run-nearbyint_test-1
111FAILING+=	run-next_test-{1,2,4}
112. elif ${MACHINE_ARCH} == m88k
113FAILING+=	run-cexp_test-7
114FAILING+=	run-ctrig_test-{1,4,5}
115FAILING+=	run-exponential_test-1
116FAILING+=	run-fma_test-{1,3,6}
117FAILING+=	run-fmaxmin_test-{1,12}
118FAILING+=	run-invtrig_test-7
119FAILING+=	run-logarithm_test-{1,3}
120FAILING+=	run-lrint_test-1
121FAILING+=	run-nearbyint_test-1
122FAILING+=	run-next_test-4
123. elif ${MACHINE} == powerpc64
124FAILING+=	run-cexp_test-7
125FAILING+=	run-ctrig_test-{1,4,5}
126FAILING+=	run-exponential_test-1
127FAILING+=	run-invtrig_test-7
128FAILING+=	run-logarithm_test-1
129. elif ${MACHINE} == macppc
130FAILING+=	run-cexp_test-7
131FAILING+=	run-ctrig_test-{1,4,5}
132FAILING+=	run-exponential_test-1
133FAILING+=	run-fenv_test-{7,8}
134FAILING+=	run-invtrig_test-7
135FAILING+=	run-logarithm_test-{1,3}
136FAILING+=	run-lrint_test-1
137. elif ${MACHINE_ARCH} == sh
138FAILING+=	run-ctrig_test-5
139FAILING+=	run-exponential_test-{1,2,4}
140FAILING+=	run-fenv_test-{1,2,3,4,5,6,7,8}
141FAILING+=	run-fma_test-{1,3,4,5,6}
142FAILING+=	run-invtrig_test-{4,7}
143FAILING+=	run-logarithm_test-1
144FAILING+=	run-lrint_test-1
145FAILING+=	run-nearbyint_test-1
146FAILING+=	run-next_test-{1,3,4}
147FAILING+=	run-rem_test-1
148FAILING+=	run-trig_test-{1,2}
149. elif ${MACHINE} == sparc64
150FAILING+=	run-ctrig_test-{4,5}
151FAILING+=	run-exponential_test-1
152FAILING+=	run-fma_test-{1,2,4,5,6}
153FAILING+=	run-invtrig_test-{4,7}
154FAILING+=	run-logarithm_test-{1,5}
155FAILING+=	run-lrint_test-1
156FAILING+=	run-next_test-{1,2,4}
157FAILING+=	run-rem_test-{1,2}
158FAILING+=	run-trig_test-{1,2}
159. elif ${MACHINE} == octeon
160FAILING+=	run-cexp_test-7
161FAILING+=	run-ctrig_test-{1,4,5}
162FAILING+=	run-exponential_test-1
163FAILING+=	run-fma_test-{1,2,3,4,5,6}
164FAILING+=	run-invtrig_test-{4,7}
165FAILING+=	run-logarithm_test-{1,5}
166FAILING+=	run-lrint_test-1
167FAILING+=	run-nearbyint_test-1
168FAILING+=	run-next_test-{1,2,3,4}
169FAILING+=	run-rem_test-{1,2}
170FAILING+=	run-trig_test-{1,2}
171. elif ${MACHINE} == riscv64
172FAILING+=	run-cexp_test-7
173FAILING+=	run-ctrig_test-{1,4,5}
174FAILING+=	run-exponential_test-1
175FAILING+=	run-fma_test-{1,2,4,5,6}
176FAILING+=	run-ilogb_test-3
177FAILING+=	run-invtrig_test-{4,7}
178FAILING+=	run-logarithm_test-{1,5}
179FAILING+=	run-lrint_test-1
180FAILING+=	run-nearbyint_test-1
181FAILING+=	run-next_test-{1,2,4}
182FAILING+=	run-rem_test-{1,2}
183FAILING+=	run-trig_test-{1,2}
184. endif
185
186REGRESS_EXPECTED_FAILURES!= echo ${FAILING}
187
188LDADD=	-lm
189DPADD=	${LIBM}
190CFLAGS+=	-fno-builtin
191
192.for t in ${TESTS}
193REGRESS_TARGETS+=	run-$t
194run-$t: $t
195	./$t
196.endfor
197
198. for p in ${PROGS}
199SRCS_$p =		$p.c atf-c.c
200. endfor
201
202SRCS_rem_test += fls.c
203
204.for p in ${PROGS}
205run-$p: $p
206	ulimit -c unlimited && \
207	ntests="`./$p -n`" && \
208	echo "1..$$ntests" && \
209	tnumbers="`jot -ns' ' - 1 $$ntests`" && \
210	${.MAKE} -C ${.CURDIR} PROG=$p NUMBERS="$$tnumbers" regress
211.endfor
212
213.if defined(NUMBERS)
214CUR_USER !=		id -g
215
216. for n in ${NUMBERS}
217DESCR_$n !=		eval `./${PROG} -i $n` && echo $$DESCR
218REQ_USER_$n !=		eval `./${PROG} -i $n` && echo $$REQ_USER
219
220.  if ${REQ_USER_$n} == "root"
221REGRESS_ROOT_TARGETS +=	run-${PROG}-$n
222.  endif
223
224run-${PROG}-$n:
225	@echo "$n ${DESCR_$n}"
226.  if ${REQ_USER_$n} == "root"
227	${SUDO} ./${PROG} -r $n
228.  elif ${REQ_USER_$n} == "unprivileged" && ${CUR_USER} == 0
229	${SUDO} su ${BUILDUSER} -c exec ./${PROG} -r $n
230.  elif ${REQ_USER_$n} == "unprivileged" || ${REQ_USER_$n} == ""
231	./${PROG} -r $n
232.  else
233	# bad REQ_USER: ${REQ_USER_$n}
234	false
235.  endif
236
237cleanup-${PROG}-$n:
238	-./${PROG} -c $n
239
240. endfor
241.endif
242
243.include <bsd.regress.mk>
244