From 87343631b915f22520c781701c285719f7bc34a5 Mon Sep 17 00:00:00 2001 From: MS Date: Thu, 27 Jan 2022 10:48:01 -0800 Subject: [PATCH] Added support for clang-cl on windows (CMake) (#7038) * Moved the CMake check for Clang *after* the one for MSVC, as clang-cl matches both Clang and MSVC. * Removed /MP definition - controlled by CMake * Added CPP define for _CRT_SECURE_NO_WARNINGS so clang can see it (it seems it doesnt pick up the pragma in util.cpp) --- CMakeLists.txt | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e75faeb1f..1a7ceaaad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -283,6 +283,19 @@ elseif(CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsigned-char") +# MSVC **MUST** come before the Clang check, as clang-cl is flagged by CMake as "MSVC", but it still textually +# matches as Clang in its Compiler Id :) +# Note: in CMake >= 3.14 we can check CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "GNU" or "MSVC" to differentiate... +elseif(MSVC) + # Visual Studio pedantic build settings + # warning C4512: assignment operator could not be generated + # warning C4316: object allocated on the heap may not be aligned + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4 /WX /wd4512 /wd4316") + + if(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D_CRT_SECURE_NO_WARNINGS") + endif() + elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") if(APPLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") @@ -316,14 +329,6 @@ elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsigned-char") -elseif(MSVC) - # Visual Studio pedantic build settings - # warning C4512: assignment operator could not be generated - # warning C4316: object allocated on the heap may not be aligned - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4 /WX /wd4512 /wd4316") - - # multi-core build. - add_definitions("/MP") endif() # Append FLATBUFFERS_CXX_FLAGS to CMAKE_CXX_FLAGS.