From 98c89ccfbd7467f946874c2af170d0f504355dd1 Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Fri, 15 Jan 2021 12:35:42 -0800 Subject: [PATCH] [MSVC] Don't add -nostdinc++ -isystem to runtimes builds If the host compiler is MSVC or clang-cl, then the compiler used to buidl the runtimes will be clang-cl, and it doesn't support either of those flags. Worse, because -isystem is a space separated flag, it causes all cmake try_compile tests to fail, so none of the -Wno-* flags make it to the compiler in libcxx. I noticed that we weren't passing -Wno-user-defined-literals to clang-cl and were getting warnings in the build, and this fixes that for me. Differential Revision: https://reviews.llvm.org/D94817 --- runtimes/CMakeLists.txt | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/runtimes/CMakeLists.txt b/runtimes/CMakeLists.txt index 4bb822e07599..a1017d91f36a 100644 --- a/runtimes/CMakeLists.txt +++ b/runtimes/CMakeLists.txt @@ -77,12 +77,15 @@ endif() include(CheckLibraryExists) include(CheckCCompilerFlag) -# We don't have libc++ (yet)... -set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -nostdinc++ -nostdlib++") +# Disable use of the installed C++ standard library when building runtimes. If +# MSVC is true, we must be using the clang-cl driver, which doesn't understand +# these flags. +if (NOT MSVC) + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -nostdinc++ -nostdlib++") -# ...but we need access to libc++ headers for CMake checks to succeed. -if (LLVM_EXTERNAL_LIBCXX_SOURCE_DIR AND "libcxx" IN_LIST LLVM_ENABLE_RUNTIMES) - set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -isystem ${LLVM_EXTERNAL_LIBCXX_SOURCE_DIR}/include") + if (LLVM_EXTERNAL_LIBCXX_SOURCE_DIR AND "libcxx" IN_LIST LLVM_ENABLE_RUNTIMES) + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -isystem ${LLVM_EXTERNAL_LIBCXX_SOURCE_DIR}/include") + endif() endif() # Avoid checking whether the compiler is working.