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