xref: /llvm-project/libc/test/src/CMakeLists.txt (revision 7f37b34d31914120a5bb6bd341e7616773df7613)
1function(add_fp_unittest name)
2  cmake_parse_arguments(
3    "MATH_UNITTEST"
4    "NEED_MPFR;NEED_MPC;UNIT_TEST_ONLY;HERMETIC_TEST_ONLY" # Optional arguments
5    "" # Single value arguments
6    "LINK_LIBRARIES;DEPENDS" # Multi-value arguments
7    ${ARGN}
8  )
9
10  if(MATH_UNITTEST_NEED_MPC)
11    set(MATH_UNITTEST_NEED_MPFR TRUE)
12    if(NOT LIBC_TESTS_CAN_USE_MPC)
13      message(VERBOSE "Complex test ${name} will be skipped as MPC library is not available.")
14      return()
15    endif()
16    list(APPEND MATH_UNITTEST_LINK_LIBRARIES libcMPCWrapper)
17  endif()
18
19  if(MATH_UNITTEST_NEED_MPFR)
20    if(NOT LIBC_TESTS_CAN_USE_MPFR)
21      message(VERBOSE "Math test ${name} will be skipped as MPFR library is not available.")
22      return()
23    endif()
24  endif()
25
26  if(MATH_UNITTEST_HERMETIC_TEST_ONLY)
27    set(test_type HERMETIC_TEST_ONLY)
28  elseif(MATH_UNITTEST_UNIT_TEST_ONLY)
29    set(test_type UNIT_TEST_ONLY)
30  endif()
31  if(MATH_UNITTEST_NEED_MPFR)
32    if(MATH_UNITTEST_HERMETIC_TEST_ONLY)
33      message(FATAL_ERROR "Hermetic math test cannot require MPFR.")
34    endif()
35    set(test_type UNIT_TEST_ONLY)
36    list(APPEND MATH_UNITTEST_LINK_LIBRARIES libcMPFRWrapper -lmpfr -lgmp)
37    if(NOT(LIBC_TARGET_OS_IS_DARWIN))
38      # macOS does not have libatomic.
39      list(APPEND MATH_UNITTEST_LINK_LIBRARIES -latomic)
40    endif()
41  endif()
42  list(APPEND MATH_UNITTEST_LINK_LIBRARIES LibcFPTestHelpers)
43
44  set(deps libc.hdr.math_macros)
45  if(MATH_UNITTEST_DEPENDS)
46    list(APPEND deps ${MATH_UNITTEST_DEPENDS})
47  endif()
48
49  add_libc_test(
50    ${name}
51    ${test_type}
52    LINK_LIBRARIES "${MATH_UNITTEST_LINK_LIBRARIES}"
53    "${MATH_UNITTEST_UNPARSED_ARGUMENTS}"
54    DEPENDS "${deps}"
55  )
56endfunction(add_fp_unittest)
57
58add_subdirectory(__support)
59add_subdirectory(complex)
60add_subdirectory(ctype)
61add_subdirectory(errno)
62add_subdirectory(fenv)
63add_subdirectory(math)
64add_subdirectory(search)
65add_subdirectory(stdbit)
66add_subdirectory(stdfix)
67add_subdirectory(stdio)
68add_subdirectory(stdlib)
69add_subdirectory(string)
70add_subdirectory(strings)
71add_subdirectory(wchar)
72add_subdirectory(time)
73add_subdirectory(unistd)
74
75# Depends on utilities in stdlib
76add_subdirectory(inttypes)
77
78if(${LIBC_TARGET_OS} STREQUAL "linux")
79  add_subdirectory(fcntl)
80  add_subdirectory(sched)
81  add_subdirectory(sys)
82  add_subdirectory(termios)
83endif()
84
85if(NOT LLVM_LIBC_FULL_BUILD)
86  return()
87endif()
88
89add_subdirectory(arpa)
90add_subdirectory(assert)
91add_subdirectory(compiler)
92add_subdirectory(dirent)
93add_subdirectory(locale)
94add_subdirectory(setjmp)
95add_subdirectory(signal)
96add_subdirectory(spawn)
97
98if(${LIBC_TARGET_OS} STREQUAL "linux")
99  add_subdirectory(pthread)
100endif()
101