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