xref: /llvm-project/libc/test/src/stdio/CMakeLists.txt (revision 33bdb53d864e3e244d8fd5649062f17b7d4c958d)
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