diff --git a/libc/cmake/modules/LLVMLibCTestRules.cmake b/libc/cmake/modules/LLVMLibCTestRules.cmake --- a/libc/cmake/modules/LLVMLibCTestRules.cmake +++ b/libc/cmake/modules/LLVMLibCTestRules.cmake @@ -568,6 +568,7 @@ # ARGS # ENV # COMPILE_OPTIONS +# LINK_LIBRARIES # LOADER_ARGS # ) function(add_libc_hermetic_test test_name) @@ -579,7 +580,7 @@ "HERMETIC_TEST" "" # No optional arguments "SUITE" # Single value arguments - "SRCS;HDRS;DEPENDS;ARGS;ENV;COMPILE_OPTIONS;LOADER_ARGS" # Multi-value arguments + "SRCS;HDRS;DEPENDS;ARGS;ENV;COMPILE_OPTIONS;LINK_LIBRARIES;LOADER_ARGS" # Multi-value arguments ${ARGN} ) @@ -660,13 +661,15 @@ target_link_options(${fq_build_target_name} PRIVATE -nostdlib -static) target_link_libraries( ${fq_build_target_name} - libc.startup.${LIBC_TARGET_OS}.crt1 - LibcHermeticTestMain LibcHermeticTest - # The NVIDIA 'nvlink' linker does not currently support static libraries. - $<$>:${fq_target_name}.__libc__>) + PRIVATE + ${HERMETIC_TEST_LINK_LIBRARIES} + libc.startup.${LIBC_TARGET_OS}.crt1 + LibcHermeticTestMain LibcHermeticTest + # The NVIDIA 'nvlink' linker does not currently support static libraries. + $<$>:${fq_target_name}.__libc__>) add_dependencies(${fq_build_target_name} LibcHermeticTest - ${HERMETIC_TEST_DEPENDS}) + ${fq_deps_list}) # Tests on the GPU require an external loader utility to launch the kernel. if(TARGET libc.utils.gpu.loader) diff --git a/libc/test/UnitTest/CMakeLists.txt b/libc/test/UnitTest/CMakeLists.txt --- a/libc/test/UnitTest/CMakeLists.txt +++ b/libc/test/UnitTest/CMakeLists.txt @@ -77,8 +77,6 @@ RoundingModeUtils.cpp RoundingModeUtils.h ) -target_include_directories(LibcFPTestHelpers PUBLIC ${LIBC_SOURCE_DIR}) -target_link_libraries(LibcFPTestHelpers LibcUnitTest) add_dependencies( LibcFPTestHelpers LibcUnitTest @@ -93,8 +91,6 @@ MemoryMatcher.h MemoryMatcher.cpp ) -target_include_directories(LibcMemoryHelpers PUBLIC ${LIBC_SOURCE_DIR}) -target_link_libraries(LibcMemoryHelpers LibcUnitTest) add_dependencies( LibcMemoryHelpers LibcUnitTest @@ -106,8 +102,6 @@ PrintfMatcher.h PrintfMatcher.cpp ) -target_include_directories(LibcPrintfHelpers PUBLIC ${LIBC_SOURCE_DIR}) -target_link_libraries(LibcPrintfHelpers LibcUnitTest) add_dependencies( LibcPrintfHelpers LibcUnitTest @@ -121,8 +115,6 @@ ScanfMatcher.h ScanfMatcher.cpp ) -target_include_directories(LibcScanfHelpers PUBLIC ${LIBC_SOURCE_DIR}) -target_link_libraries(LibcScanfHelpers LibcUnitTest) add_dependencies( LibcScanfHelpers LibcUnitTest @@ -130,3 +122,9 @@ libc.src.stdio.scanf_core.core_structs libc.test.UnitTest.string_utils ) + +foreach(lib LibcFPTestHelpers LibcMemoryHelpers LibcPrintfHelpers LibcScanfHelpers) + target_include_directories(${lib} PUBLIC ${LIBC_SOURCE_DIR}) + target_compile_options(${lib} PRIVATE -fno-exceptions -fno-rtti) +target_link_libraries(${lib} LibcUnitTest) +endforeach()