Files
clang-p2996/libc/test/UnitTest/CMakeLists.txt
Tue Ly 055be3c30c [libc] Enable hermetic floating point tests again.
Fixing an issue with LLVM libc's fenv.h defined rounding mode macros
differently from system libc, making get_round() return different values from
fegetround().  Also letting math tests to skip rounding modes that cannot be
set.  This should allow math tests to be run on platforms in which fenv.h is not
implemented yet.

This allows us to re-enable hermatic floating point tests in
https://reviews.llvm.org/D151123 and reverting https://reviews.llvm.org/D152742.

Reviewed By: jhuber6

Differential Revision: https://reviews.llvm.org/D152873
2023-06-14 10:53:35 -04:00

170 lines
3.7 KiB
CMake

function(add_unittest_framework_library name)
cmake_parse_arguments(
"TEST_LIB"
"" # No optional arguments
"" # No single value arguments
"SRCS;HDRS;DEPENDS" # Multi value arguments
${ARGN}
)
if(NOT TEST_LIB_SRCS)
message(FATAL_ERROR "'add_unittest_framework_library' requires SRCS; for "
"header only libraries, use 'add_header_library'")
endif()
# The Nvidia 'nvlink' linker does not support static libraries.
if(LIBC_GPU_TARGET_ARCHITECTURE_IS_NVPTX)
set(library_type OBJECT)
else()
set(library_type STATIC)
endif()
foreach(lib IN ITEMS ${name}.unit ${name}.hermetic)
add_library(
${lib}
${library_type}
EXCLUDE_FROM_ALL
${TEST_LIB_SRCS}
${TEST_LIB_HDRS}
)
target_include_directories(${lib} PUBLIC ${LIBC_SOURCE_DIR})
target_compile_options(${lib} PRIVATE -fno-exceptions -fno-rtti)
endforeach()
target_include_directories(${name}.hermetic PRIVATE ${LIBC_BUILD_DIR}/include)
target_compile_options(${name}.hermetic
PRIVATE ${LIBC_HERMETIC_TEST_COMPILE_OPTIONS} -ffreestanding -nostdinc++)
if(TEST_LIB_DEPENDS)
foreach(dep IN LISTS ${TEST_LIB_DEPENDS})
if(TARGET ${dep}.unit)
add_dependencies(${name}.unit ${dep}.unit)
else()
add_dependencies(${name}.unit ${dep})
endif()
if(TARGET ${dep}.hermetic)
add_dependencies(${name}.hermetic ${dep}.hermetic)
else()
add_dependencies(${name}.hermetic ${dep})
endif()
endforeach()
endif()
endfunction()
add_unittest_framework_library(
LibcTest
SRCS
CmakeFilePath.cpp
LibcTest.cpp
LibcTestMain.cpp
TestLogger.cpp
HDRS
LibcTest.h
Test.h
TestLogger.h
DEPENDS
libc.src.__support.c_string
libc.src.__support.CPP.string
libc.src.__support.CPP.string_view
libc.src.__support.CPP.type_traits
libc.src.__support.OSUtil.osutil
libc.src.__support.uint128
)
set(libc_death_test_srcs LibcDeathTestExecutors.cpp)
if(${LIBC_TARGET_OS} STREQUAL "linux")
list(APPEND libc_death_test_srcs ExecuteFunctionUnix.cpp)
endif()
add_unittest_framework_library(
LibcDeathTestExecutors
SRCS
${libc_death_test_srcs}
HDRS
ExecuteFunction.h
)
add_unittest_framework_library(
LibcHermeticTestSupport
SRCS
HermeticTestUtils.cpp
)
add_header_library(
string_utils
HDRS
StringUtils.h
DEPENDS
libc.src.__support.CPP.string
libc.src.__support.CPP.type_traits
)
add_unittest_framework_library(
LibcFPTestHelpers
SRCS
RoundingModeUtils.cpp
HDRS
FPMatcher.h
RoundingModeUtils.h
DEPENDS
LibcTest
libc.test.UnitTest.string_utils
libc.src.__support.FPUtil.fp_bits
libc.src.__support.FPUtil.fpbits_str
libc.src.__support.FPUtil.fenv_impl
libc.src.__support.FPUtil.rounding_mode
)
add_unittest_framework_library(
LibcFPExceptionHelpers
SRCS
FPExceptMatcher.cpp
HDRS
FPExceptMatcher.h
DEPENDS
LibcTest
libc.src.__support.FPUtil.fp_bits
libc.src.__support.FPUtil.fenv_impl
)
add_unittest_framework_library(
LibcMemoryHelpers
SRCS
MemoryMatcher.cpp
HDRS
MemoryMatcher.h
DEPENDS
LibcTest
libc.src.__support.CPP.span
)
add_unittest_framework_library(
LibcPrintfHelpers
SRCS
PrintfMatcher.cpp
HDRS
PrintfMatcher.h
DEPENDS
LibcTest
libc.src.__support.FPUtil.fp_bits
libc.src.stdio.printf_core.core_structs
libc.test.UnitTest.string_utils
)
add_unittest_framework_library(
LibcScanfHelpers
SRCS
ScanfMatcher.cpp
HDRS
ScanfMatcher.h
DEPENDS
LibcTest
libc.src.__support.FPUtil.fp_bits
libc.src.stdio.scanf_core.core_structs
libc.test.UnitTest.string_utils
)
add_header_library(
ErrnoSetterMatcher
HDRS
ErrnoSetterMatcher
)