1add_custom_target(libc_stdio_unittests) 2 3add_libc_test( 4 fileop_test 5 SUITE 6 libc_stdio_unittests 7 SRCS 8 fileop_test.cpp 9 DEPENDS 10 libc.include.stdio 11 libc.src.errno.errno 12 libc.src.stdio.clearerr 13 libc.src.stdio.fclose 14 libc.src.stdio.feof 15 libc.src.stdio.ferror 16 libc.src.stdio.fflush 17 libc.src.stdio.fileno 18 libc.src.stdio.fopen 19 libc.src.stdio.fputs 20 libc.src.stdio.fread 21 libc.src.stdio.fseek 22 libc.src.stdio.fwrite 23) 24 25add_libc_test( 26 ungetc_test 27 SUITE 28 libc_stdio_unittests 29 SRCS 30 ungetc_test.cpp 31 DEPENDS 32 libc.include.stdio 33 libc.src.stdio.fclose 34 libc.src.stdio.fopen 35 libc.src.stdio.fread 36 libc.src.stdio.fseek 37 libc.src.stdio.fwrite 38 libc.src.stdio.ungetc 39) 40 41add_libc_test( 42 setbuf_test 43 SUITE 44 libc_stdio_unittests 45 SRCS 46 setbuf_test.cpp 47 DEPENDS 48 libc.include.stdio 49 libc.src.stdio.fclose 50 libc.src.stdio.fopen 51 libc.src.stdio.fread 52 libc.src.stdio.fwrite 53 libc.src.stdio.setbuf 54 libc.src.stdio.ungetc 55) 56 57add_libc_test( 58 setvbuf_test 59 SUITE 60 libc_stdio_unittests 61 SRCS 62 setvbuf_test.cpp 63 DEPENDS 64 libc.include.stdio 65 libc.src.errno.errno 66 libc.src.stdio.fclose 67 libc.src.stdio.fopen 68 libc.src.stdio.fread 69 libc.src.stdio.fwrite 70 libc.src.stdio.setvbuf 71) 72 73add_libc_test( 74 unlocked_fileop_test 75 SUITE 76 libc_stdio_unittests 77 SRCS 78 unlocked_fileop_test.cpp 79 DEPENDS 80 libc.include.stdio 81 libc.src.errno.errno 82 libc.src.stdio.clearerr_unlocked 83 libc.src.stdio.fclose 84 libc.src.stdio.feof_unlocked 85 libc.src.stdio.ferror_unlocked 86 libc.src.stdio.flockfile 87 libc.src.stdio.fopen 88 libc.src.stdio.fread_unlocked 89 libc.src.stdio.funlockfile 90 libc.src.stdio.fwrite_unlocked 91) 92 93add_libc_test( 94 fopencookie_test 95 SUITE 96 libc_stdio_unittests 97 SRCS 98 fopencookie_test.cpp 99 DEPENDS 100 libc.include.stdio 101 libc.hdr.types.size_t 102 libc.src.errno.errno 103 libc.src.stdio.clearerr 104 libc.src.stdio.fclose 105 libc.src.stdio.feof 106 libc.src.stdio.ferror 107 libc.src.stdio.fflush 108 libc.src.stdio.fopencookie 109 libc.src.stdio.fread 110 libc.src.stdio.fseek 111 libc.src.stdio.fwrite 112 LINK_LIBRARIES 113 LibcMemoryHelpers 114) 115 116if(LIBC_CONF_PRINTF_DISABLE_FLOAT) 117 list(APPEND sprintf_test_copts "-DLIBC_COPT_PRINTF_DISABLE_FLOAT") 118endif() 119if(LIBC_CONF_PRINTF_FLOAT_TO_STR_USE_DYADIC_FLOAT) 120 list(APPEND sprintf_test_copts "-DLIBC_COPT_FLOAT_TO_STR_REDUCED_PRECISION") 121endif() 122if(LIBC_CONF_PRINTF_DISABLE_INDEX_MODE) 123 list(APPEND sprintf_test_copts "-DLIBC_COPT_PRINTF_DISABLE_INDEX_MODE") 124endif() 125if(LIBC_CONF_PRINTF_DISABLE_WRITE_INT) 126 list(APPEND sprintf_test_copts "-DLIBC_COPT_PRINTF_DISABLE_WRITE_INT") 127endif() 128if(LIBC_CONF_PRINTF_DISABLE_FIXED_POINT) 129 list(APPEND sprintf_test_copts "-DLIBC_COPT_PRINTF_DISABLE_FIXED_POINT") 130endif() 131if(LIBC_CONF_PRINTF_DISABLE_STRERROR) 132 list(APPEND sprintf_test_copts "-DLIBC_COPT_PRINTF_DISABLE_STRERROR") 133endif() 134 135add_fp_unittest( 136 sprintf_test 137 UNIT_TEST_ONLY 138 SUITE 139 libc_stdio_unittests 140 SRCS 141 sprintf_test.cpp 142 DEPENDS 143 libc.src.stdio.sprintf 144 libc.src.__support.FPUtil.fp_bits 145 libc.include.inttypes 146 COMPILE_OPTIONS 147 ${sprintf_test_copts} 148) 149 150add_libc_test( 151 snprintf_test 152 SUITE 153 libc_stdio_unittests 154 SRCS 155 snprintf_test.cpp 156 DEPENDS 157 libc.src.stdio.snprintf 158) 159 160if(LLVM_LIBC_FULL_BUILD) 161 # In fullbuild mode, fprintf's tests use the internal FILE for other functions. 162 list(APPEND fprintf_test_deps 163 libc.src.stdio.fclose 164 libc.src.stdio.ferror 165 libc.src.stdio.fopen 166 libc.src.stdio.fread 167 ) 168 # This is to be used for tests which write to libc's platform streams 169 # under full build but write to system-lib's streams otherwise. 170 set(hermetic_test_only HERMETIC_TEST_ONLY) 171else() 172# Else in overlay mode they use the system's FILE. 173 set(use_system_file "-DLIBC_COPT_STDIO_USE_SYSTEM_FILE") 174endif() 175 176add_libc_test( 177 fprintf_test 178 SUITE 179 libc_stdio_unittests 180 SRCS 181 fprintf_test.cpp 182 DEPENDS 183 libc.src.stdio.fprintf 184 ${fprintf_test_deps} 185 COMPILE_OPTIONS 186 ${use_system_file} 187) 188 189add_libc_test( 190 printf_test 191 ${hermetic_test_only} 192 SUITE 193 libc_stdio_unittests 194 SRCS 195 printf_test.cpp 196 DEPENDS 197 libc.src.stdio.printf 198) 199 200add_libc_test( 201 asprintf_test 202 SUITE 203 libc_stdio_unittests 204 SRCS 205 asprintf_test.cpp 206 DEPENDS 207 libc.src.stdio.asprintf 208 libc.src.string.memset 209 libc.include.stdlib 210 libc.src.stdio.sprintf 211 ) 212 213add_fp_unittest( 214 vsprintf_test 215 UNIT_TEST_ONLY 216 SUITE 217 libc_stdio_unittests 218 SRCS 219 vsprintf_test.cpp 220 DEPENDS 221 libc.src.stdio.vsprintf 222) 223 224add_libc_test( 225 vsnprintf_test 226 SUITE 227 libc_stdio_unittests 228 SRCS 229 vsnprintf_test.cpp 230 DEPENDS 231 libc.src.stdio.vsnprintf 232) 233 234add_libc_test( 235 vfprintf_test 236 SUITE 237 libc_stdio_unittests 238 SRCS 239 vfprintf_test.cpp 240 DEPENDS 241 libc.src.stdio.vfprintf 242 ${fprintf_test_deps} 243 COMPILE_OPTIONS 244 ${use_system_file} 245) 246 247add_libc_test( 248 vprintf_test 249 ${hermetic_test_only} 250 SUITE 251 libc_stdio_unittests 252 SRCS 253 vprintf_test.cpp 254 DEPENDS 255 libc.src.stdio.vprintf 256) 257 258add_libc_test( 259 vasprintf_test 260 SUITE 261 libc_stdio_unittests 262 SRCS 263 vasprintf_test.cpp 264 DEPENDS 265 libc.src.stdio.vasprintf 266 libc.src.string.memset 267 libc.include.stdlib 268 libc.src.stdio.sprintf 269 ) 270 271if(LLVM_LIBC_FULL_BUILD) 272 # In fullbuild mode, fscanf's tests use the internal FILE for other functions. 273 list(APPEND fscanf_test_deps 274 libc.src.stdio.fclose 275 libc.src.stdio.ferror 276 libc.src.stdio.fopen 277 libc.src.stdio.fwrite 278 ) 279endif() 280 281# FIXME: These tests currently fail on AMDGPU due to an optimization bug in the 282# `amdgpu-attributor` pass. Disable until that's fixed. 283if(NOT LIBC_TARGET_ARCHITECTURE_IS_AMDGPU) 284 add_libc_test( 285 fscanf_test 286 SUITE 287 libc_stdio_unittests 288 SRCS 289 fscanf_test.cpp 290 DEPENDS 291 libc.src.stdio.fscanf 292 ${fscanf_test_deps} 293 libc.src.__support.CPP.string_view 294 COMPILE_OPTIONS 295 ${use_system_file} 296 ) 297 298 add_libc_test( 299 vfscanf_test 300 SUITE 301 libc_stdio_unittests 302 SRCS 303 vfscanf_test.cpp 304 DEPENDS 305 libc.src.stdio.vfscanf 306 ${fscanf_test_deps} 307 libc.src.__support.CPP.string_view 308 COMPILE_OPTIONS 309 ${use_system_file} 310 ) 311endif() 312 313if(LIBC_CONF_SCANF_DISABLE_FLOAT) 314 list(APPEND sscanf_test_copts "-DLIBC_COPT_SCANF_DISABLE_FLOAT") 315endif() 316if(LIBC_CONF_SCANF_DISABLE_INDEX_MODE) 317 list(APPEND sscanf_test_copts "-DLIBC_COPT_SCANF_DISABLE_INDEX_MODE") 318endif() 319 320add_libc_test( 321 sscanf_test 322 SUITE 323 libc_stdio_unittests 324 SRCS 325 sscanf_test.cpp 326 DEPENDS 327 libc.src.stdio.sscanf 328 LINK_LIBRARIES 329 LibcFPTestHelpers 330 COMPILE_OPTIONS 331 ${sscanf_test_copts} 332) 333 334add_libc_test( 335 vsscanf_test 336 SUITE 337 libc_stdio_unittests 338 SRCS 339 vsscanf_test.cpp 340 DEPENDS 341 libc.src.stdio.vsscanf 342 LINK_LIBRARIES 343 LibcFPTestHelpers 344 COMPILE_OPTIONS 345 ${sscanf_test_copts} 346) 347 348add_libc_test( 349 puts_test 350 HERMETIC_TEST_ONLY # writes to libc's stdout 351 SUITE 352 libc_stdio_unittests 353 SRCS 354 puts_test.cpp 355 DEPENDS 356 libc.src.stdio.puts 357) 358 359add_libc_test( 360 fputs_test 361 HERMETIC_TEST_ONLY # writes to libc's stdout and stderr 362 SUITE 363 libc_stdio_unittests 364 SRCS 365 fputs_test.cpp 366 DEPENDS 367 libc.src.stdio.fputs 368 libc.src.stdio.stdout 369 libc.src.stdio.stderr 370) 371 372add_libc_test( 373 fputc_test 374 HERMETIC_TEST_ONLY # writes to libc's stdout and stderr 375 SUITE 376 libc_stdio_unittests 377 SRCS 378 fputc_test.cpp 379 DEPENDS 380 libc.src.stdio.fputc 381 libc.src.stdio.putchar 382 libc.src.stdio.stdout 383 libc.src.stdio.stderr 384) 385 386add_libc_test( 387 fopen_test 388 SUITE 389 libc_stdio_unittests 390 SRCS 391 fopen_test.cpp 392 DEPENDS 393 libc.src.stdio.fread 394 libc.src.stdio.fwrite 395 libc.src.stdio.fclose 396 libc.src.stdio.fopen 397) 398 399add_libc_test( 400 putc_test 401 SUITE 402 libc_stdio_unittests 403 SRCS 404 putc_test.cpp 405 DEPENDS 406 libc.src.stdio.putc 407 libc.src.stdio.fclose 408 libc.src.stdio.ferror 409 libc.src.stdio.fopen 410 libc.src.stdio.fread 411) 412 413if(${LIBC_TARGET_OS} STREQUAL "linux") 414 add_libc_test( 415 remove_test 416 SUITE 417 libc_stdio_unittests 418 SRCS 419 remove_test.cpp 420 DEPENDS 421 libc.include.unistd 422 libc.src.errno.errno 423 libc.src.fcntl.open 424 libc.src.stdio.remove 425 libc.src.sys.stat.mkdirat 426 libc.src.unistd.access 427 libc.src.unistd.close 428 ) 429 430 add_libc_test( 431 rename_test 432 SUITE 433 libc_stdio_unittests 434 SRCS 435 rename_test.cpp 436 DEPENDS 437 libc.src.errno.errno 438 libc.src.fcntl.open 439 libc.src.stdio.rename 440 libc.src.unistd.access 441 libc.src.unistd.close 442 libc.test.UnitTest.ErrnoSetterMatcher 443 ) 444 445 add_libc_test( 446 fdopen_test 447 SUITE 448 libc_stdio_unittests 449 SRCS 450 fdopen_test.cpp 451 DEPENDS 452 libc.src.fcntl.open 453 libc.src.stdio.fclose 454 libc.src.stdio.fdopen 455 libc.src.stdio.fgets 456 libc.src.stdio.fputs 457 libc.src.unistd.close 458 libc.test.UnitTest.ErrnoSetterMatcher 459 ) 460endif() 461 462add_libc_test( 463 fgetc_test 464 SUITE 465 libc_stdio_unittests 466 SRCS 467 fgetc_test.cpp 468 DEPENDS 469 libc.include.stdio 470 libc.src.errno.errno 471 libc.src.stdio.fclose 472 libc.src.stdio.feof 473 libc.src.stdio.ferror 474 libc.src.stdio.fgetc 475 libc.src.stdio.fopen 476 libc.src.stdio.fwrite 477 libc.src.stdio.getc 478) 479 480add_libc_test( 481 fgetc_unlocked_test 482 SUITE 483 libc_stdio_unittests 484 SRCS 485 fgetc_unlocked_test.cpp 486 DEPENDS 487 libc.include.stdio 488 libc.src.errno.errno 489 libc.src.stdio.fclose 490 libc.src.stdio.ferror 491 libc.src.stdio.ferror_unlocked 492 libc.src.stdio.feof 493 libc.src.stdio.feof_unlocked 494 libc.src.stdio.fgetc_unlocked 495 libc.src.stdio.flockfile 496 libc.src.stdio.fopen 497 libc.src.stdio.funlockfile 498 libc.src.stdio.fwrite 499 libc.src.stdio.getc_unlocked 500) 501 502add_libc_test( 503 fgets_test 504 SUITE 505 libc_stdio_unittests 506 SRCS 507 fgets_test.cpp 508 DEPENDS 509 libc.include.stdio 510 libc.src.errno.errno 511 libc.src.stdio.fclose 512 libc.src.stdio.feof 513 libc.src.stdio.ferror 514 libc.src.stdio.fgets 515 libc.src.stdio.fopen 516 libc.src.stdio.fwrite 517) 518 519add_libc_test( 520 ftell_test 521 SUITE 522 libc_stdio_unittests 523 SRCS 524 ftell_test.cpp 525 DEPENDS 526 libc.include.stdio 527 libc.src.stdio.fclose 528 libc.src.stdio.fflush 529 libc.src.stdio.fopen 530 libc.src.stdio.fread 531 libc.src.stdio.fseek 532 libc.src.stdio.ftell 533 libc.src.stdio.fseeko 534 libc.src.stdio.ftello 535 libc.src.stdio.fwrite 536 libc.src.stdio.setvbuf 537) 538 539# Create an output directory for any temporary test files. 540file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/testdata) 541 542if(LIBC_TARGET_OS_IS_GPU) 543 return() 544endif() 545 546add_subdirectory(printf_core) 547add_subdirectory(scanf_core) 548add_subdirectory(testdata) 549