DetermineCompiler: Restore identification of MSVC with no INCLUDE dirs

Since commit bd844387df (ROCMClang: Add the ROCm toolkit derived clang
compiler to CMake, 2020-08-28, v3.21.0-rc1~66^2~6), our generated
compiler id source file contains a preprocessor condition of the form

    #elif ... && __has_include(...)

When MSVC is invoked with no include directories in the `INCLUDE`
environment variable or in `-I` flags, its implementation of
`__has_include` errors out immediately.  This breaks identification of
the compiler.

Work around the problem by adding a fallback attempt to compile the
identification source using a dummy include directory.
This commit is contained in:
Brad King
2021-06-29 12:53:02 -04:00
parent fb02657b6a
commit c6aaaf066a
2 changed files with 8 additions and 0 deletions

View File

@@ -85,6 +85,10 @@ else()
# ARMClang need target options
"--target=arm-arm-none-eabi -mcpu=cortex-m3"
# MSVC needs at least one include directory for __has_include to function,
# but custom toolchains may run MSVC with no INCLUDE env var and no -I flags.
"-I__does_not_exist__"
)
endif()
if(CMAKE_C_COMPILER_TARGET)

View File

@@ -80,6 +80,10 @@ else()
# ARMClang need target options
"--target=arm-arm-none-eabi -mcpu=cortex-m3"
# MSVC needs at least one include directory for __has_include to function,
# but custom toolchains may run MSVC with no INCLUDE env var and no -I flags.
"-I__does_not_exist__"
)
endif()