Files
clang-p2996/libc/test/include/CMakeLists.txt
Roland McGrath 5e4b41c1d5 [libc] Add compile tests for each public header (#122527)
This adds a test that consists of compiling `#include <...>`,
pretty much alone, for each public header file in each different
language mode (`-std=...` compiler switch) with -Werror and many
warnings enabled.

There are several headers that have bugs when used alone, and
many more headers that have bugs in certain language modes.  So
for now, compiling the new tests is gated on the cmake switch
-DLLVM_LIBC_BUILD_HEADER_TESTS=ON.  When all the bugs are fixed,
the switch will be removed so future regressions don't land.
2025-01-11 17:24:37 -08:00

553 lines
9.9 KiB
CMake

add_custom_target(libc_include_tests)
add_dependencies(check-libc libc_include_tests)
add_libc_test(
assert_test
SUITE
libc_include_tests
SRCS
assert_test.cpp
DEPENDS
libc.include.llvm-libc-macros.assert_macros
)
add_libc_test(
complex_test
SUITE
libc_include_tests
SRCS
complex_test.cpp
DEPENDS
libc.include.llvm-libc-macros.complex_macros
)
add_libc_test(
sys_queue_test
SUITE
libc_include_tests
SRCS
sys/queue_test.cpp
DEPENDS
libc.include.llvm-libc-macros.sys_queue_macros
libc.src.__support.char_vector
libc.src.__support.CPP.string
COMPILE_OPTIONS
# This is needed because the __containerof macro uses statement expression.
-Wno-gnu-statement-expression-from-macro-expansion
)
add_libc_test(
stdbit_test
SUITE
libc_include_tests
HDRS
stdbit_stub.h
SRCS
stdbit_test.cpp
DEPENDS
libc.include.llvm-libc-macros.stdbit_macros
libc.include.llvm_libc_common_h
libc.include.stdbit
# Intentionally do not depend on libc.src.stdbit.*. The include test is
# simply testing the macros provided by stdbit.h, not the implementation
# of the underlying functions which the type generic macros may dispatch
# to.
)
add_libc_test(
stdbit_c_test
C_TEST
UNIT_TEST_ONLY
SUITE
libc_include_tests
HDRS
stdbit_stub.h
SRCS
stdbit_test.c
COMPILE_OPTIONS
-Wall
-Werror
DEPENDS
libc.include.llvm-libc-macros.stdbit_macros
libc.include.llvm_libc_common_h
libc.include.stdbit
libc.src.assert.__assert_fail
# Intentionally do not depend on libc.src.stdbit.*. The include test is
# simply testing the macros provided by stdbit.h, not the implementation
# of the underlying functions which the type generic macros may dispatch
# to.
)
add_libc_test(
stdckdint_test
SUITE
libc_include_tests
SRCS
stdckdint_test.cpp
DEPENDS
libc.include.llvm-libc-macros.stdckdint_macros
)
add_libc_test(
issubnormal_test
SUITE
libc_include_tests
SRCS
issubnormal_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
issubnormalf_test
SUITE
libc_include_tests
SRCS
issubnormalf_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
issubnormall_test
SUITE
libc_include_tests
SRCS
issubnormall_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
isnormal_test
SUITE
libc_include_tests
SRCS
isnormal_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
isnormalf_test
SUITE
libc_include_tests
SRCS
isnormalf_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
isnormall_test
SUITE
libc_include_tests
SRCS
isnormall_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
fpclassify_test
SUITE
libc_include_tests
SRCS
fpclassify_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
fpclassifyf_test
SUITE
libc_include_tests
SRCS
fpclassifyf_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
fpclassifyl_test
SUITE
libc_include_tests
SRCS
fpclassifyl_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
iszero_test
SUITE
libc_include_tests
SRCS
iszero_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
iszerof_test
SUITE
libc_include_tests
SRCS
iszerof_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
iszerol_test
SUITE
libc_include_tests
SRCS
iszerol_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
signbit_test
SUITE
libc_include_tests
SRCS
signbit_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
signbitf_test
SUITE
libc_include_tests
SRCS
signbitf_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
signbitl_test
SUITE
libc_include_tests
SRCS
signbitl_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
isnan_test
SUITE
libc_include_tests
SRCS
isnan_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
isnanf_test
SUITE
libc_include_tests
SRCS
isnanf_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
isnanl_test
SUITE
libc_include_tests
SRCS
isnanl_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
isinf_test
SUITE
libc_include_tests
SRCS
isinf_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
isinff_test
SUITE
libc_include_tests
SRCS
isinff_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
isinfl_test
SUITE
libc_include_tests
SRCS
isinfl_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
isfinite_test
SUITE
libc_include_tests
SRCS
isfinite_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
isfinitef_test
SUITE
libc_include_tests
SRCS
isfinitef_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
isfinitel_test
SUITE
libc_include_tests
SRCS
isfinitel_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
signbit_c_test
C_TEST
UNIT_TEST_ONLY
SUITE
libc_include_tests
SRCS
signbit_test.c
COMPILE_OPTIONS
-Wall
-Werror
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
isnan_c_test
C_TEST
UNIT_TEST_ONLY
SUITE
libc_include_tests
SRCS
isnan_test.c
COMPILE_OPTIONS
-Wall
-Werror
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
isnormal_c_test
C_TEST
UNIT_TEST_ONLY
SUITE
libc_include_tests
SRCS
isnormal_test.c
COMPILE_OPTIONS
-Wall
-Werror
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
# TODO(https://github.com/llvm/llvm-project/issues/114618): fix linkage failures
# add_libc_test(
# issignaling_c_test
# C_TEST
# UNIT_TEST_ONLY
# SUITE
# libc_include_tests
# SRCS
# issignaling_test.c
# COMPILE_OPTIONS
# -Wall
# -Werror
# DEPENDS
# libc.include.llvm-libc-macros.math_function_macros
# libc.src.math.issignaling
# libc.src.math.issignalingf
# libc.src.math.issignalingl
# )
# add_libc_test(
# iscanonical_c_test
# C_TEST
# UNIT_TEST_ONLY
# SUITE
# libc_include_tests
# SRCS
# iscanonical_test.c
# COMPILE_OPTIONS
# -Wall
# -Werror
# DEPENDS
# libc.include.llvm-libc-macros.math_function_macros
# libc.src.math.iscanonical
# libc.src.math.iscanonicalf
# libc.src.math.iscanonicall
# )
add_libc_test(
isinf_c_test
C_TEST
UNIT_TEST_ONLY
SUITE
libc_include_tests
SRCS
isinf_test.c
COMPILE_OPTIONS
-Wall
-Werror
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
isfinite_c_test
C_TEST
UNIT_TEST_ONLY
SUITE
libc_include_tests
SRCS
isfinite_test.c
COMPILE_OPTIONS
-Wall
-Werror
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
issubnormal_c_test
C_TEST
UNIT_TEST_ONLY
SUITE
libc_include_tests
SRCS
issubnormal_test.c
COMPILE_OPTIONS
-Wall
-Werror
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
fpclassify_c_test
C_TEST
UNIT_TEST_ONLY
SUITE
libc_include_tests
SRCS
fpclassify_test.c
COMPILE_OPTIONS
-Wall
-Werror
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
add_libc_test(
iszero_c_test
C_TEST
UNIT_TEST_ONLY
SUITE
libc_include_tests
SRCS
iszero_test.c
COMPILE_OPTIONS
-Wall
-Werror
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
# Test `#include <...>` of each header in each available language mode.
# This is gated on -DLLVM_LIBC_BUILD_HEADER_TESTS=ON until all the bugs
# in headers are fixed so the tests all compile.
set(TEST_STDC_VERSIONS 89;99;11;17;23)
set(TEST_STDCXX_VERSIONS 03;11;14;17;20;23;26)
function(add_header_test target_name source_file deps std_mode)
if(LLVM_LIBC_BUILD_HEADER_TESTS)
add_libc_test(
${target_name}
C_TEST
HERMETIC_TEST_ONLY
SUITE
libc_include_tests
SRCS
${source_file}
COMPILE_OPTIONS
-Werror
-Wsystem-headers
-Wall
-Wextra
-std=${std_mode}
DEPENDS
${deps}
)
endif()
endfunction()
foreach(target ${TARGET_PUBLIC_HEADERS})
string(REPLACE "libc.include." "" header ${target})
get_target_property(HEADER_NAME ${target} HEADER_NAME)
set(test_stdc_file "${CMAKE_CURRENT_BINARY_DIR}/${header}_test.c")
configure_file(header-test-template.c ${test_stdc_file} @ONLY)
foreach(stdc_version ${TEST_STDC_VERSIONS})
add_header_test(
"${header}_c${stdc_version}_test"
${test_stdc_file}
${target}
"c${stdc_version}"
)
add_header_test(
"${header}_gnu${stdc_version}_test"
${test_stdc_file}
${target}
"gnu${stdc_version}"
)
endforeach()
set(test_stdcxx_file "${CMAKE_CURRENT_BINARY_DIR}/${header}_test.cpp")
configure_file(header-test-template.c ${test_stdcxx_file} @ONLY)
foreach(stdcxx_version ${TEST_STDCXX_VERSIONS})
add_header_test(
"${header}_cpp${stdcxx_version}_test"
${test_stdcxx_file}
${target}
"c++${stdcxx_version}"
)
add_header_test(
"${header}_gnucpp${stdcxx_version}_test"
${test_stdcxx_file}
${target}
"gnu++${stdcxx_version}"
)
endforeach()
endforeach()