about summary refs log tree commit diff
path: root/absl/copts/AbseilConfigureCopts.cmake
diff options
context:
space:
mode:
authorLoo Rong Jie <loorongjie@gmail.com>2019-03-22T19·23+0800
committerDerek Mauro <761129+derekmauro@users.noreply.github.com>2019-03-22T19·23-0400
commit253eb7416421661873afbaa33828a850db978541 (patch)
tree0c4bdcdafe4b37af181991063f54113d880c1fdc /absl/copts/AbseilConfigureCopts.cmake
parente75672f6afc7e8f23ee7b532e86d1b3b9be3984e (diff)
[CMake] Set correct flags for clang-cl (#278)
clang-cl produce binaries with MSVC ABI and wants to be as flag-compatible with pure MSVC as possible, so this leads to all sorts of weird cases.

clang-cl alias /Wall as clang's -Weverything which is way too verbose, so it needs /W3 like pure MSVC.
clang-cl only understand GCC style warning flags (-W[no]blah) and just silent drop MSVC style warning flags (/wd[num]).
clang-cl needs MSVC define flags since it is consuming the same header files as pure MSVC.
CMake set CMAKE_CXX_COMPILER_ID as Clang when clang-cl is detected, so need extra if (MSVC) to differentiate it.

We are not doing clang-cl specialization in Bazel as currently there is no reliable way to detect clang-cl in Bazel..

This PR should be NFC for LLVM/GCC users on Unix platforms.

Other changes:

Add ABSL_ prefix to variable names to avoid name collision in CMake.
Diffstat (limited to 'absl/copts/AbseilConfigureCopts.cmake')
-rw-r--r--absl/copts/AbseilConfigureCopts.cmake39
1 files changed, 23 insertions, 16 deletions
diff --git a/absl/copts/AbseilConfigureCopts.cmake b/absl/copts/AbseilConfigureCopts.cmake
index f68895d917fd..5084958c3581 100644
--- a/absl/copts/AbseilConfigureCopts.cmake
+++ b/absl/copts/AbseilConfigureCopts.cmake
@@ -5,26 +5,33 @@ set(ABSL_LSAN_LINKOPTS "")
 set(ABSL_HAVE_LSAN OFF)
 
 if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
-  set(ABSL_DEFAULT_COPTS "${GCC_FLAGS}")
-  set(ABSL_TEST_COPTS "${GCC_FLAGS};${GCC_TEST_FLAGS}")
-  set(ABSL_EXCEPTIONS_FLAG "${GCC_EXCEPTIONS_FLAGS}")
+  set(ABSL_DEFAULT_COPTS "${ABSL_GCC_FLAGS}")
+  set(ABSL_TEST_COPTS "${ABSL_GCC_FLAGS};${ABSL_GCC_TEST_FLAGS}")
+  set(ABSL_EXCEPTIONS_FLAG "${ABSL_GCC_EXCEPTIONS_FLAGS}")
 elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
   # MATCHES so we get both Clang and AppleClang
-  set(ABSL_DEFAULT_COPTS "${LLVM_FLAGS}")
-  set(ABSL_TEST_COPTS "${LLVM_FLAGS};${LLVM_TEST_FLAGS}")
-  set(ABSL_EXCEPTIONS_FLAG "${LLVM_EXCEPTIONS_FLAGS}")
-  if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
-    # AppleClang doesn't have lsan
-    # https://developer.apple.com/documentation/code_diagnostics
-    if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 3.5)
-      set(ABSL_LSAN_LINKOPTS "-fsanitize=leak")
-      set(ABSL_HAVE_LSAN ON)
+  if (MSVC)
+    # clang-cl is half MSVC, half LLVM
+    set(ABSL_DEFAULT_COPTS "${ABSL_CLANG_CL_FLAGS}")
+    set(ABSL_TEST_COPTS "${ABSL_CLANG_CL_FLAGS};${ABSL_CLANG_CL_TEST_FLAGS}")
+    set(ABSL_EXCEPTIONS_FLAG "${ABSL_CLANG_CL_EXCEPTIONS_FLAGS}")
+  else()
+    set(ABSL_DEFAULT_COPTS "${ABSL_LLVM_FLAGS}")
+    set(ABSL_TEST_COPTS "${ABSL_LLVM_FLAGS};${ABSL_LLVM_TEST_FLAGS}")
+    set(ABSL_EXCEPTIONS_FLAG "${ABSL_LLVM_EXCEPTIONS_FLAGS}")
+    if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+      # AppleClang doesn't have lsan
+      # https://developer.apple.com/documentation/code_diagnostics
+      if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 3.5)
+        set(ABSL_LSAN_LINKOPTS "-fsanitize=leak")
+        set(ABSL_HAVE_LSAN ON)
+      endif()
     endif()
   endif()
 elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
-  set(ABSL_DEFAULT_COPTS "${MSVC_FLAGS}")
-  set(ABSL_TEST_COPTS "${MSVC_FLAGS};${MSVC_TEST_FLAGS}")
-  set(ABSL_EXCEPTIONS_FLAG "${MSVC_EXCEPTIONS_FLAGS}")
+  set(ABSL_DEFAULT_COPTS "${ABSL_MSVC_FLAGS}")
+  set(ABSL_TEST_COPTS "${ABSL_MSVC_FLAGS};${ABSL_MSVC_TEST_FLAGS}")
+  set(ABSL_EXCEPTIONS_FLAG "${ABSL_MSVC_EXCEPTIONS_FLAGS}")
 else()
   message(WARNING "Unknown compiler: ${CMAKE_CXX_COMPILER}.  Building with no default flags")
   set(ABSL_DEFAULT_COPTS "")
@@ -42,4 +49,4 @@ elseif(NOT "${CMAKE_CXX_STANDARD}")
   set(ABSL_CXX_STANDARD 11)
 else()
   set(ABSL_CXX_STANDARD "${CMAKE_CXX_STANDARD}")
-endif()
\ No newline at end of file
+endif()