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()