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_diff_binary(
71  sinf_diff
72  SRCS
73    sinf_diff.cpp
74  DEPENDS
75    .single_input_single_output_diff
76    libc.src.math.sinf
77)
78
79add_diff_binary(
80  sinf_perf
81  SRCS
82    sinf_perf.cpp
83  DEPENDS
84    .single_input_single_output_diff
85    libc.src.math.sinf
86  COMPILE_OPTIONS
87    -fno-builtin
88)
89
90add_diff_binary(
91  cosf_diff
92  SRCS
93    cosf_diff.cpp
94  DEPENDS
95    .single_input_single_output_diff
96    libc.src.math.cosf
97)
98
99add_diff_binary(
100  cosf_perf
101  SRCS
102    cosf_perf.cpp
103  DEPENDS
104    .single_input_single_output_diff
105    libc.src.math.cosf
106  COMPILE_OPTIONS
107    -fno-builtin
108)
109
110add_diff_binary(
111  expm1f_diff
112  SRCS
113    expm1f_diff.cpp
114  DEPENDS
115    .single_input_single_output_diff
116    libc.src.math.expm1f
117)
118
119add_diff_binary(
120  expm1f_perf
121  SRCS
122    expm1f_perf.cpp
123  DEPENDS
124    .single_input_single_output_diff
125    libc.src.math.expm1f
126  COMPILE_OPTIONS
127    -fno-builtin
128)
129
130add_diff_binary(
131  ceilf_diff
132  SRCS
133    ceilf_diff.cpp
134  DEPENDS
135    .single_input_single_output_diff
136    libc.src.math.ceilf
137)
138
139add_diff_binary(
140  ceilf_perf
141  SRCS
142    ceilf_perf.cpp
143  DEPENDS
144    .single_input_single_output_diff
145    libc.src.math.ceilf
146  COMPILE_OPTIONS
147    -fno-builtin
148)
149
150add_diff_binary(
151  exp2f_diff
152  SRCS
153    exp2f_diff.cpp
154  DEPENDS
155    .single_input_single_output_diff
156    libc.src.math.exp2f
157)
158
159add_diff_binary(
160  exp2f_perf
161  SRCS
162    exp2f_perf.cpp
163  DEPENDS
164    .single_input_single_output_diff
165    libc.src.math.exp2f
166  COMPILE_OPTIONS
167    -fno-builtin
168)
169
170add_diff_binary(
171  expf_diff
172  SRCS
173    expf_diff.cpp
174  DEPENDS
175    .single_input_single_output_diff
176    libc.src.math.expf
177)
178
179add_diff_binary(
180  expf_perf
181  SRCS
182    expf_perf.cpp
183  DEPENDS
184    .single_input_single_output_diff
185    libc.src.math.expf
186  COMPILE_OPTIONS
187    -fno-builtin
188)
189
190add_diff_binary(
191  fabsf_diff
192  SRCS
193    fabsf_diff.cpp
194  DEPENDS
195    .single_input_single_output_diff
196    libc.src.math.fabsf
197)
198
199add_diff_binary(
200  fabsf_perf
201  SRCS
202    fabsf_perf.cpp
203  DEPENDS
204    .single_input_single_output_diff
205    libc.src.math.fabsf
206  COMPILE_OPTIONS
207    -fno-builtin
208)
209
210add_diff_binary(
211  floorf_diff
212  SRCS
213    floorf_diff.cpp
214  DEPENDS
215    .single_input_single_output_diff
216    libc.src.math.floorf
217)
218
219add_diff_binary(
220  floorf_perf
221  SRCS
222    floorf_perf.cpp
223  DEPENDS
224    .single_input_single_output_diff
225    libc.src.math.floorf
226  COMPILE_OPTIONS
227    -fno-builtin
228)
229
230add_diff_binary(
231  logbf_diff
232  SRCS
233    logbf_diff.cpp
234  DEPENDS
235    .single_input_single_output_diff
236    libc.src.math.logbf
237)
238
239add_diff_binary(
240  logbf_perf
241  SRCS
242    logbf_perf.cpp
243  DEPENDS
244    .single_input_single_output_diff
245    libc.src.math.logbf
246  COMPILE_OPTIONS
247    -fno-builtin
248)
249
250add_diff_binary(
251  nearbyintf_diff
252  SRCS
253    nearbyintf_diff.cpp
254  DEPENDS
255    .single_input_single_output_diff
256    libc.src.math.nearbyintf
257)
258
259add_diff_binary(
260  nearbyintf_perf
261  SRCS
262    nearbyintf_perf.cpp
263  DEPENDS
264    .single_input_single_output_diff
265    libc.src.math.nearbyintf
266  COMPILE_OPTIONS
267    -fno-builtin
268)
269
270add_diff_binary(
271  rintf_diff
272  SRCS
273    rintf_diff.cpp
274  DEPENDS
275    .single_input_single_output_diff
276    libc.src.math.rintf
277)
278
279add_diff_binary(
280  rintf_perf
281  SRCS
282    rintf_perf.cpp
283  DEPENDS
284    .single_input_single_output_diff
285    libc.src.math.rintf
286  COMPILE_OPTIONS
287    -fno-builtin
288)
289
290add_diff_binary(
291  roundf_diff
292  SRCS
293    roundf_diff.cpp
294  DEPENDS
295    .single_input_single_output_diff
296    libc.src.math.roundf
297)
298
299add_diff_binary(
300  roundf_perf
301  SRCS
302    roundf_perf.cpp
303  DEPENDS
304    .single_input_single_output_diff
305    libc.src.math.roundf
306  COMPILE_OPTIONS
307    -fno-builtin
308)
309
310add_diff_binary(
311  sqrtf_diff
312  SRCS
313    sqrtf_diff.cpp
314  DEPENDS
315    .single_input_single_output_diff
316    libc.src.math.sqrtf
317)
318
319add_diff_binary(
320  sqrtf_perf
321  SRCS
322    sqrtf_perf.cpp
323  DEPENDS
324    .single_input_single_output_diff
325    libc.src.math.sqrtf
326  COMPILE_OPTIONS
327    -fno-builtin
328)
329
330add_diff_binary(
331  truncf_diff
332  SRCS
333    truncf_diff.cpp
334  DEPENDS
335    .single_input_single_output_diff
336    libc.src.math.truncf
337)
338
339add_diff_binary(
340  truncf_perf
341  SRCS
342    truncf_perf.cpp
343  DEPENDS
344    .single_input_single_output_diff
345    libc.src.math.truncf
346  COMPILE_OPTIONS
347    -fno-builtin
348)
349