diff --git a/compiler-rt/test/CMakeLists.txt b/compiler-rt/test/CMakeLists.txt --- a/compiler-rt/test/CMakeLists.txt +++ b/compiler-rt/test/CMakeLists.txt @@ -1,5 +1,6 @@ # Needed for lit support in standalone builds. include(AddLLVM) +include(LLVMExternalProjectUtils) option(COMPILER_RT_TEST_STANDALONE_BUILD_LIBS "When set to ON and testing in a standalone build, test the runtime \ @@ -28,14 +29,34 @@ # When ANDROID, we build tests with the host compiler (i.e. CMAKE_C_COMPILER), # and run tests with tools from the host toolchain. if(NOT ANDROID) - if(NOT COMPILER_RT_STANDALONE_BUILD AND NOT LLVM_RUNTIMES_BUILD) - # Use LLVM utils and Clang from the same build tree. - list(APPEND SANITIZER_COMMON_LIT_TEST_DEPS + set(LIT_TEST_DEPS clang clang-resource-headers FileCheck count not llvm-config llvm-nm llvm-objdump llvm-readelf llvm-readobj llvm-size llvm-symbolizer compiler-rt-headers sancov) - if (WIN32) - list(APPEND SANITIZER_COMMON_LIT_TEST_DEPS KillTheDoctor) - endif() + if (WIN32) + list(APPEND LIT_TEST_DEPS KillTheDoctor) + endif() + + if(NOT COMPILER_RT_STANDALONE_BUILD AND NOT LLVM_RUNTIMES_BUILD) + # Use LLVM utils and Clang from the same build tree. + list(APPEND SANITIZER_COMMON_LIT_TEST_DEPS ${LIT_TEST_DEPS}) + elseif(COMPILER_RT_STANDALONE_BUILD) + # If we are making a standalone build, we need to ensure some targets used + # for testing are known and built as deps. + list(APPEND SANITIZER_COMMON_LIT_TEST_DEPS ${LIT_TEST_DEPS}) + + # These are tools needed for testing in a standalone/runtimes build, but we + # don't have a corresponding CMAKE_* flag for. These will need to be rebuilt. + set(LIT_ONLY_TOOLS + FileCheck count not clang-resource-headers llvm-readelf) + foreach(dep ${LIT_ONLY_TOOLS}) + if (NOT TARGET ${dep}) + llvm_ExternalProject_BuildCmd(build_${dep} ${dep} ${BINARY_DIR}) + add_custom_target(${dep} + COMMAND ${build_${dep}} + WORKING_DIRECTORY ${BINARY_DIR} + VERBATIM USES_TERMINAL) + endif() + endforeach() endif() # Tests use C++ standard library headers. if (TARGET cxx-headers OR HAVE_LIBCXX)