1
2function(add_diff_binary target_name)
3  cmake_parse_arguments(
4    "DIFF"
5    "" # No optional arguments
6    "SUITE;CXX_STANDARD" # 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  if(DIFF_CXX_STANDARD)
58    set_target_properties(
59      ${fq_target_name}
60      PROPERTIES
61        CXX_STANDARD ${DIFF_CXX_STANDARD}
62    )
63  endif()
64
65  add_dependencies(
66    ${fq_target_name}
67    libc.src.__support.FPUtil.fputil
68    ${fq_deps_list}
69  )
70endfunction()
71
72add_header_library(
73  single_input_single_output_diff
74  HDRS
75    SingleInputSingleOutputDiff.h
76)
77
78add_header_library(
79  binary_op_single_output_diff
80  HDRS
81    BinaryOpSingleOutputDiff.h
82)
83
84add_diff_binary(
85  sinf_diff
86  SRCS
87    sinf_diff.cpp
88  DEPENDS
89    .single_input_single_output_diff
90    libc.src.math.sinf
91)
92
93add_diff_binary(
94  sinf_perf
95  SRCS
96    sinf_perf.cpp
97  DEPENDS
98    .single_input_single_output_diff
99    libc.src.math.sinf
100  COMPILE_OPTIONS
101    -fno-builtin
102)
103
104add_diff_binary(
105  cosf_diff
106  SRCS
107    cosf_diff.cpp
108  DEPENDS
109    .single_input_single_output_diff
110    libc.src.math.cosf
111)
112
113add_diff_binary(
114  cosf_perf
115  SRCS
116    cosf_perf.cpp
117  DEPENDS
118    .single_input_single_output_diff
119    libc.src.math.cosf
120  COMPILE_OPTIONS
121    -fno-builtin
122)
123
124add_diff_binary(
125  expm1f_diff
126  SRCS
127    expm1f_diff.cpp
128  DEPENDS
129    .single_input_single_output_diff
130    libc.src.math.expm1f
131)
132
133add_diff_binary(
134  expm1f_perf
135  SRCS
136    expm1f_perf.cpp
137  DEPENDS
138    .single_input_single_output_diff
139    libc.src.math.expm1f
140  COMPILE_OPTIONS
141    -fno-builtin
142)
143
144add_diff_binary(
145  ceilf_diff
146  SRCS
147    ceilf_diff.cpp
148  DEPENDS
149    .single_input_single_output_diff
150    libc.src.math.ceilf
151)
152
153add_diff_binary(
154  ceilf_perf
155  SRCS
156    ceilf_perf.cpp
157  DEPENDS
158    .single_input_single_output_diff
159    libc.src.math.ceilf
160  COMPILE_OPTIONS
161    -fno-builtin
162)
163
164add_diff_binary(
165  exp2f_diff
166  SRCS
167    exp2f_diff.cpp
168  DEPENDS
169    .single_input_single_output_diff
170    libc.src.math.exp2f
171)
172
173add_diff_binary(
174  exp2f_perf
175  SRCS
176    exp2f_perf.cpp
177  DEPENDS
178    .single_input_single_output_diff
179    libc.src.math.exp2f
180  COMPILE_OPTIONS
181    -fno-builtin
182)
183
184add_diff_binary(
185  expf_diff
186  SRCS
187    expf_diff.cpp
188  DEPENDS
189    .single_input_single_output_diff
190    libc.src.math.expf
191)
192
193add_diff_binary(
194  expf_perf
195  SRCS
196    expf_perf.cpp
197  DEPENDS
198    .single_input_single_output_diff
199    libc.src.math.expf
200  COMPILE_OPTIONS
201    -fno-builtin
202)
203
204add_diff_binary(
205  fabsf_diff
206  SRCS
207    fabsf_diff.cpp
208  DEPENDS
209    .single_input_single_output_diff
210    libc.src.math.fabsf
211)
212
213add_diff_binary(
214  fabsf_perf
215  SRCS
216    fabsf_perf.cpp
217  DEPENDS
218    .single_input_single_output_diff
219    libc.src.math.fabsf
220  COMPILE_OPTIONS
221    -fno-builtin
222)
223
224add_diff_binary(
225  floorf_diff
226  SRCS
227    floorf_diff.cpp
228  DEPENDS
229    .single_input_single_output_diff
230    libc.src.math.floorf
231)
232
233add_diff_binary(
234  floorf_perf
235  SRCS
236    floorf_perf.cpp
237  DEPENDS
238    .single_input_single_output_diff
239    libc.src.math.floorf
240  COMPILE_OPTIONS
241    -fno-builtin
242)
243
244add_diff_binary(
245  log10f_perf
246  SRCS
247    log10f_perf.cpp
248  DEPENDS
249    .single_input_single_output_diff
250    libc.src.math.log10f
251  COMPILE_OPTIONS
252    -fno-builtin
253)
254
255add_diff_binary(
256  log1pf_perf
257  SRCS
258    log1pf_perf.cpp
259  DEPENDS
260    .single_input_single_output_diff
261    libc.src.math.log1pf
262  COMPILE_OPTIONS
263    -fno-builtin
264)
265
266add_diff_binary(
267  log2f_diff
268  SRCS
269    log2f_diff.cpp
270  DEPENDS
271    .single_input_single_output_diff
272    libc.src.math.log2f
273  COMPILE_OPTIONS
274    -fno-builtin
275)
276
277add_diff_binary(
278  log2f_perf
279  SRCS
280    log2f_perf.cpp
281  DEPENDS
282    .single_input_single_output_diff
283    libc.src.math.log2f
284  COMPILE_OPTIONS
285    -fno-builtin
286)
287
288add_diff_binary(
289  logf_diff
290  SRCS
291    logf_diff.cpp
292  DEPENDS
293    .single_input_single_output_diff
294    libc.src.math.logf
295  COMPILE_OPTIONS
296    -fno-builtin
297)
298
299add_diff_binary(
300  logf_perf
301  SRCS
302    logf_perf.cpp
303  DEPENDS
304    .single_input_single_output_diff
305    libc.src.math.logf
306  COMPILE_OPTIONS
307    -fno-builtin
308)
309
310add_diff_binary(
311  logbf_diff
312  SRCS
313    logbf_diff.cpp
314  DEPENDS
315    .single_input_single_output_diff
316    libc.src.math.logbf
317)
318
319add_diff_binary(
320  logbf_perf
321  SRCS
322    logbf_perf.cpp
323  DEPENDS
324    .single_input_single_output_diff
325    libc.src.math.logbf
326  COMPILE_OPTIONS
327    -fno-builtin
328)
329
330add_diff_binary(
331  nearbyintf_diff
332  SRCS
333    nearbyintf_diff.cpp
334  DEPENDS
335    .single_input_single_output_diff
336    libc.src.math.nearbyintf
337)
338
339add_diff_binary(
340  nearbyintf_perf
341  SRCS
342    nearbyintf_perf.cpp
343  DEPENDS
344    .single_input_single_output_diff
345    libc.src.math.nearbyintf
346  COMPILE_OPTIONS
347    -fno-builtin
348)
349
350add_diff_binary(
351  rintf_diff
352  SRCS
353    rintf_diff.cpp
354  DEPENDS
355    .single_input_single_output_diff
356    libc.src.math.rintf
357)
358
359add_diff_binary(
360  rintf_perf
361  SRCS
362    rintf_perf.cpp
363  DEPENDS
364    .single_input_single_output_diff
365    libc.src.math.rintf
366  COMPILE_OPTIONS
367    -fno-builtin
368)
369
370add_diff_binary(
371  roundf_diff
372  SRCS
373    roundf_diff.cpp
374  DEPENDS
375    .single_input_single_output_diff
376    libc.src.math.roundf
377)
378
379add_diff_binary(
380  roundf_perf
381  SRCS
382    roundf_perf.cpp
383  DEPENDS
384    .single_input_single_output_diff
385    libc.src.math.roundf
386  COMPILE_OPTIONS
387    -fno-builtin
388)
389
390add_diff_binary(
391  sqrtf_diff
392  SRCS
393    sqrtf_diff.cpp
394  DEPENDS
395    .single_input_single_output_diff
396    libc.src.math.sqrtf
397)
398
399add_diff_binary(
400  sqrtf_perf
401  SRCS
402    sqrtf_perf.cpp
403  DEPENDS
404    .single_input_single_output_diff
405    libc.src.math.sqrtf
406  COMPILE_OPTIONS
407    -fno-builtin
408)
409
410add_diff_binary(
411  truncf_diff
412  SRCS
413    truncf_diff.cpp
414  DEPENDS
415    .single_input_single_output_diff
416    libc.src.math.truncf
417)
418
419add_diff_binary(
420  truncf_perf
421  SRCS
422    truncf_perf.cpp
423  DEPENDS
424    .single_input_single_output_diff
425    libc.src.math.truncf
426  COMPILE_OPTIONS
427    -fno-builtin
428)
429
430add_diff_binary(
431  hypotf_diff
432  SRCS
433    hypotf_diff.cpp
434  DEPENDS
435    .binary_op_single_output_diff
436    libc.src.math.hypotf
437  COMPILE_OPTIONS
438    -fno-builtin
439)
440
441add_diff_binary(
442  hypotf_perf
443  SRCS
444    hypotf_perf.cpp
445  DEPENDS
446    .binary_op_single_output_diff
447    libc.src.math.hypotf
448  COMPILE_OPTIONS
449    -fno-builtin
450)
451
452add_diff_binary(
453  hypot_diff
454  SRCS
455    hypot_diff.cpp
456  DEPENDS
457    .binary_op_single_output_diff
458    libc.src.math.hypot
459  COMPILE_OPTIONS
460    -fno-builtin
461)
462
463add_diff_binary(
464  hypot_perf
465  SRCS
466    hypot_perf.cpp
467  DEPENDS
468    .binary_op_single_output_diff
469    libc.src.math.hypot
470  COMPILE_OPTIONS
471    -fno-builtin
472)
473
474add_diff_binary(
475  fmodf_diff
476  SRCS
477    fmodf_diff.cpp
478  DEPENDS
479    .single_input_single_output_diff
480    libc.src.math.fmodf
481)
482
483add_diff_binary(
484  fmodf_perf
485  SRCS
486    fmodf_perf.cpp
487  DEPENDS
488    .single_input_single_output_diff
489    libc.src.math.fmodf
490  COMPILE_OPTIONS
491    -fno-builtin
492)
493
494add_diff_binary(
495  fmod_diff
496  SRCS
497    fmod_diff.cpp
498  DEPENDS
499    .single_input_single_output_diff
500    libc.src.math.fmod
501)
502
503add_diff_binary(
504  fmod_perf
505  SRCS
506    fmod_perf.cpp
507  DEPENDS
508    .single_input_single_output_diff
509    libc.src.math.fmod
510  COMPILE_OPTIONS
511    -fno-builtin
512)
513