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  log2f_diff
238  SRCS
239    log2f_diff.cpp
240  DEPENDS
241    .single_input_single_output_diff
242    libc.src.math.log2f
243  COMPILE_OPTIONS
244    -fno-builtin
245)
246
247add_diff_binary(
248  log2f_perf
249  SRCS
250    log2f_perf.cpp
251  DEPENDS
252    .single_input_single_output_diff
253    libc.src.math.log2f
254  COMPILE_OPTIONS
255    -fno-builtin
256)
257
258add_diff_binary(
259  logf_diff
260  SRCS
261    logf_diff.cpp
262  DEPENDS
263    .single_input_single_output_diff
264    libc.src.math.logf
265  COMPILE_OPTIONS
266    -fno-builtin
267)
268
269add_diff_binary(
270  logf_perf
271  SRCS
272    logf_perf.cpp
273  DEPENDS
274    .single_input_single_output_diff
275    libc.src.math.logf
276  COMPILE_OPTIONS
277    -fno-builtin
278)
279
280add_diff_binary(
281  logbf_diff
282  SRCS
283    logbf_diff.cpp
284  DEPENDS
285    .single_input_single_output_diff
286    libc.src.math.logbf
287)
288
289add_diff_binary(
290  logbf_perf
291  SRCS
292    logbf_perf.cpp
293  DEPENDS
294    .single_input_single_output_diff
295    libc.src.math.logbf
296  COMPILE_OPTIONS
297    -fno-builtin
298)
299
300add_diff_binary(
301  nearbyintf_diff
302  SRCS
303    nearbyintf_diff.cpp
304  DEPENDS
305    .single_input_single_output_diff
306    libc.src.math.nearbyintf
307)
308
309add_diff_binary(
310  nearbyintf_perf
311  SRCS
312    nearbyintf_perf.cpp
313  DEPENDS
314    .single_input_single_output_diff
315    libc.src.math.nearbyintf
316  COMPILE_OPTIONS
317    -fno-builtin
318)
319
320add_diff_binary(
321  rintf_diff
322  SRCS
323    rintf_diff.cpp
324  DEPENDS
325    .single_input_single_output_diff
326    libc.src.math.rintf
327)
328
329add_diff_binary(
330  rintf_perf
331  SRCS
332    rintf_perf.cpp
333  DEPENDS
334    .single_input_single_output_diff
335    libc.src.math.rintf
336  COMPILE_OPTIONS
337    -fno-builtin
338)
339
340add_diff_binary(
341  roundf_diff
342  SRCS
343    roundf_diff.cpp
344  DEPENDS
345    .single_input_single_output_diff
346    libc.src.math.roundf
347)
348
349add_diff_binary(
350  roundf_perf
351  SRCS
352    roundf_perf.cpp
353  DEPENDS
354    .single_input_single_output_diff
355    libc.src.math.roundf
356  COMPILE_OPTIONS
357    -fno-builtin
358)
359
360add_diff_binary(
361  sqrtf_diff
362  SRCS
363    sqrtf_diff.cpp
364  DEPENDS
365    .single_input_single_output_diff
366    libc.src.math.sqrtf
367)
368
369add_diff_binary(
370  sqrtf_perf
371  SRCS
372    sqrtf_perf.cpp
373  DEPENDS
374    .single_input_single_output_diff
375    libc.src.math.sqrtf
376  COMPILE_OPTIONS
377    -fno-builtin
378)
379
380add_diff_binary(
381  truncf_diff
382  SRCS
383    truncf_diff.cpp
384  DEPENDS
385    .single_input_single_output_diff
386    libc.src.math.truncf
387)
388
389add_diff_binary(
390  truncf_perf
391  SRCS
392    truncf_perf.cpp
393  DEPENDS
394    .single_input_single_output_diff
395    libc.src.math.truncf
396  COMPILE_OPTIONS
397    -fno-builtin
398)
399
400add_diff_binary(
401  hypotf_perf
402  SRCS
403    hypotf_perf.cpp
404  DEPENDS
405    .binary_op_single_output_diff
406    libc.src.math.hypotf
407  COMPILE_OPTIONS
408    -fno-builtin
409    -Wno-c++17-extensions
410)
411
412add_diff_binary(
413  hypot_perf
414  SRCS
415    hypot_perf.cpp
416  DEPENDS
417    .binary_op_single_output_diff
418    libc.src.math.hypot
419  COMPILE_OPTIONS
420    -fno-builtin
421    -Wno-c++17-extensions
422)
423