1
2function(add_diff_binary target_name)
3  cmake_parse_arguments(
4    "DIFF"
5    "" # No optional arguments
6    "SUITE" # Single value arguments
7    "SRCS;HDRS;DEPENDS;COMPILE_OPTIONS" # Multi-value arguments
8    ${ARGN}
9  )
10  if(NOT DIFF_SRCS)
11    message(FATAL_ERROR "'add_diff_binary' target requires a SRCS list of .cpp "
12                        "files.")
13  endif()
14  if(NOT DIFF_DEPENDS)
15    message(FATAL_ERROR "'add_diff_binary' target requires a DEPENDS list of "
16                        "'add_entrypoint_object' targets.")
17  endif()
18
19  get_fq_target_name(${target_name} fq_target_name)
20  get_fq_deps_list(fq_deps_list ${DIFF_DEPENDS})
21  get_object_files_for_test(
22      link_object_files skipped_entrypoints_list ${fq_deps_list})
23  if(skipped_entrypoints_list)
24    set(msg "Will not build ${fq_target_name} as it has missing deps: "
25            "${skipped_entrypoints_list}.")
26    message(STATUS ${msg})
27    return()
28  endif()
29
30  add_executable(
31    ${fq_target_name}
32    EXCLUDE_FROM_ALL
33    ${DIFF_SRCS}
34    ${DIFF_HDRS}
35  )
36  target_include_directories(
37    ${fq_target_name}
38    PRIVATE
39      ${LIBC_SOURCE_DIR}
40      ${LIBC_BUILD_DIR}
41      ${LIBC_BUILD_DIR}/include
42  )
43  if(DIFF_COMPILE_OPTIONS)
44    target_compile_options(
45      ${fq_target_name}
46      PRIVATE ${DIFF_COMPILE_OPTIONS}
47    )
48  endif()
49
50  target_link_libraries(
51      ${fq_target_name}
52      PRIVATE ${link_object_files} libc_test_utils)
53
54  set_target_properties(${fq_target_name}
55    PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
56
57  add_dependencies(
58    ${fq_target_name}
59    libc.src.__support.FPUtil.fputil
60    ${fq_deps_list}
61  )
62endfunction()
63
64add_header_library(
65  single_input_single_output_diff
66  HDRS
67    SingleInputSingleOutputDiff.h
68)
69
70add_header_library(
71  binary_op_single_output_diff
72  HDRS
73    BinaryOpSingleOutputDiff.h
74)
75
76add_diff_binary(
77  sinf_diff
78  SRCS
79    sinf_diff.cpp
80  DEPENDS
81    .single_input_single_output_diff
82    libc.src.math.sinf
83)
84
85add_diff_binary(
86  sinf_perf
87  SRCS
88    sinf_perf.cpp
89  DEPENDS
90    .single_input_single_output_diff
91    libc.src.math.sinf
92  COMPILE_OPTIONS
93    -fno-builtin
94)
95
96add_diff_binary(
97  cosf_diff
98  SRCS
99    cosf_diff.cpp
100  DEPENDS
101    .single_input_single_output_diff
102    libc.src.math.cosf
103)
104
105add_diff_binary(
106  cosf_perf
107  SRCS
108    cosf_perf.cpp
109  DEPENDS
110    .single_input_single_output_diff
111    libc.src.math.cosf
112  COMPILE_OPTIONS
113    -fno-builtin
114)
115
116add_diff_binary(
117  expm1f_diff
118  SRCS
119    expm1f_diff.cpp
120  DEPENDS
121    .single_input_single_output_diff
122    libc.src.math.expm1f
123)
124
125add_diff_binary(
126  expm1f_perf
127  SRCS
128    expm1f_perf.cpp
129  DEPENDS
130    .single_input_single_output_diff
131    libc.src.math.expm1f
132  COMPILE_OPTIONS
133    -fno-builtin
134)
135
136add_diff_binary(
137  ceilf_diff
138  SRCS
139    ceilf_diff.cpp
140  DEPENDS
141    .single_input_single_output_diff
142    libc.src.math.ceilf
143)
144
145add_diff_binary(
146  ceilf_perf
147  SRCS
148    ceilf_perf.cpp
149  DEPENDS
150    .single_input_single_output_diff
151    libc.src.math.ceilf
152  COMPILE_OPTIONS
153    -fno-builtin
154)
155
156add_diff_binary(
157  exp2f_diff
158  SRCS
159    exp2f_diff.cpp
160  DEPENDS
161    .single_input_single_output_diff
162    libc.src.math.exp2f
163)
164
165add_diff_binary(
166  exp2f_perf
167  SRCS
168    exp2f_perf.cpp
169  DEPENDS
170    .single_input_single_output_diff
171    libc.src.math.exp2f
172  COMPILE_OPTIONS
173    -fno-builtin
174)
175
176add_diff_binary(
177  expf_diff
178  SRCS
179    expf_diff.cpp
180  DEPENDS
181    .single_input_single_output_diff
182    libc.src.math.expf
183)
184
185add_diff_binary(
186  expf_perf
187  SRCS
188    expf_perf.cpp
189  DEPENDS
190    .single_input_single_output_diff
191    libc.src.math.expf
192  COMPILE_OPTIONS
193    -fno-builtin
194)
195
196add_diff_binary(
197  fabsf_diff
198  SRCS
199    fabsf_diff.cpp
200  DEPENDS
201    .single_input_single_output_diff
202    libc.src.math.fabsf
203)
204
205add_diff_binary(
206  fabsf_perf
207  SRCS
208    fabsf_perf.cpp
209  DEPENDS
210    .single_input_single_output_diff
211    libc.src.math.fabsf
212  COMPILE_OPTIONS
213    -fno-builtin
214)
215
216add_diff_binary(
217  floorf_diff
218  SRCS
219    floorf_diff.cpp
220  DEPENDS
221    .single_input_single_output_diff
222    libc.src.math.floorf
223)
224
225add_diff_binary(
226  floorf_perf
227  SRCS
228    floorf_perf.cpp
229  DEPENDS
230    .single_input_single_output_diff
231    libc.src.math.floorf
232  COMPILE_OPTIONS
233    -fno-builtin
234)
235
236add_diff_binary(
237  logf_diff
238  SRCS
239    logf_diff.cpp
240  DEPENDS
241    .single_input_single_output_diff
242    libc.src.math.logf
243  COMPILE_OPTIONS
244    -fno-builtin
245)
246
247add_diff_binary(
248  logf_perf
249  SRCS
250    logf_perf.cpp
251  DEPENDS
252    .single_input_single_output_diff
253    libc.src.math.logf
254  COMPILE_OPTIONS
255    -fno-builtin
256)
257
258add_diff_binary(
259  logbf_diff
260  SRCS
261    logbf_diff.cpp
262  DEPENDS
263    .single_input_single_output_diff
264    libc.src.math.logbf
265)
266
267add_diff_binary(
268  logbf_perf
269  SRCS
270    logbf_perf.cpp
271  DEPENDS
272    .single_input_single_output_diff
273    libc.src.math.logbf
274  COMPILE_OPTIONS
275    -fno-builtin
276)
277
278add_diff_binary(
279  nearbyintf_diff
280  SRCS
281    nearbyintf_diff.cpp
282  DEPENDS
283    .single_input_single_output_diff
284    libc.src.math.nearbyintf
285)
286
287add_diff_binary(
288  nearbyintf_perf
289  SRCS
290    nearbyintf_perf.cpp
291  DEPENDS
292    .single_input_single_output_diff
293    libc.src.math.nearbyintf
294  COMPILE_OPTIONS
295    -fno-builtin
296)
297
298add_diff_binary(
299  rintf_diff
300  SRCS
301    rintf_diff.cpp
302  DEPENDS
303    .single_input_single_output_diff
304    libc.src.math.rintf
305)
306
307add_diff_binary(
308  rintf_perf
309  SRCS
310    rintf_perf.cpp
311  DEPENDS
312    .single_input_single_output_diff
313    libc.src.math.rintf
314  COMPILE_OPTIONS
315    -fno-builtin
316)
317
318add_diff_binary(
319  roundf_diff
320  SRCS
321    roundf_diff.cpp
322  DEPENDS
323    .single_input_single_output_diff
324    libc.src.math.roundf
325)
326
327add_diff_binary(
328  roundf_perf
329  SRCS
330    roundf_perf.cpp
331  DEPENDS
332    .single_input_single_output_diff
333    libc.src.math.roundf
334  COMPILE_OPTIONS
335    -fno-builtin
336)
337
338add_diff_binary(
339  sqrtf_diff
340  SRCS
341    sqrtf_diff.cpp
342  DEPENDS
343    .single_input_single_output_diff
344    libc.src.math.sqrtf
345)
346
347add_diff_binary(
348  sqrtf_perf
349  SRCS
350    sqrtf_perf.cpp
351  DEPENDS
352    .single_input_single_output_diff
353    libc.src.math.sqrtf
354  COMPILE_OPTIONS
355    -fno-builtin
356)
357
358add_diff_binary(
359  truncf_diff
360  SRCS
361    truncf_diff.cpp
362  DEPENDS
363    .single_input_single_output_diff
364    libc.src.math.truncf
365)
366
367add_diff_binary(
368  truncf_perf
369  SRCS
370    truncf_perf.cpp
371  DEPENDS
372    .single_input_single_output_diff
373    libc.src.math.truncf
374  COMPILE_OPTIONS
375    -fno-builtin
376)
377
378add_diff_binary(
379  hypotf_perf
380  SRCS
381    hypotf_perf.cpp
382  DEPENDS
383    .binary_op_single_output_diff
384    libc.src.math.hypotf
385  COMPILE_OPTIONS
386    -fno-builtin
387)
388
389add_diff_binary(
390  hypot_perf
391  SRCS
392    hypot_perf.cpp
393  DEPENDS
394    .binary_op_single_output_diff
395    libc.src.math.hypot
396  COMPILE_OPTIONS
397    -fno-builtin
398)
399