Test UnboundedBlockingQueue in ThreadPoolExecutorTest
[folly.git] / CMake / FollyCompiler.cmake
index 006540961d61d59848edbeb1bc4eaf82389bd186..3c8093755c75c18bdcb3d2d301f777b4420eef40 100755 (executable)
@@ -43,6 +43,20 @@ if (MSVC_USE_STATIC_RUNTIME)
   endforeach()\r
 endif()\r
 \r
+# The Ninja generator doesn't de-dup the exception mode flag, so remove the\r
+# default flag so that MSVC doesn't warn about it on every single file.\r
+if ("${CMAKE_GENERATOR}" STREQUAL "Ninja")\r
+  foreach(flag_var\r
+      CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE\r
+      CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO\r
+      CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE\r
+      CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)\r
+    if (${flag_var} MATCHES "/EHsc")\r
+      string(REGEX REPLACE "/EHsc" "" ${flag_var} "${${flag_var}}")\r
+    endif()\r
+  endforeach()\r
+endif()\r
+\r
 # In order for /Zc:inline, which speeds up the build significantly, to work\r
 # we need to remove the /Ob0 parameter that CMake adds by default, because that\r
 # would normally disable all inlining.\r
@@ -58,6 +72,7 @@ function(apply_folly_compile_options_to_target THETARGET)
   target_compile_options(${THETARGET}\r
     PUBLIC\r
       /EHa # Enable both SEH and C++ Exceptions.\r
+      /GF # There are bugs with constexpr StringPiece when string pooling is disabled.\r
       /Zc:referenceBinding # Disallow temporaries from binding to non-const lvalue references.\r
       /Zc:rvalueCast # Enforce the standard rules for explicit type conversion.\r
       /Zc:implicitNoexcept # Enable implicit noexcept specifications where required, such as destructors.\r
@@ -81,14 +96,12 @@ function(apply_folly_compile_options_to_target THETARGET)
       # Debug builds\r
       $<$<CONFIG:DEBUG>:\r
         /Gy- # Disable function level linking.\r
-        /GF- # Disable string pooling.\r
 \r
         $<$<BOOL:${MSVC_ENABLE_DEBUG_INLINING}>:/Ob2> # Add /Ob2 if allowing inlining in debug mode.\r
       >\r
 \r
       # Non-debug builds\r
       $<$<NOT:$<CONFIG:DEBUG>>:\r
-        /GF # Enable string pooling. (this is enabled by default by the optimization level, but we enable it here for clarity)\r
         /Gw # Optimize global data. (-fdata-sections)\r
         /Gy # Enable function level linking. (-ffunction-sections)\r
         /Qpar # Enable parallel code generation.\r
@@ -108,6 +121,7 @@ function(apply_folly_compile_options_to_target THETARGET)
       /wd4366 # result of unary '&' operator may be unaligned\r
       /wd4587 # behavior change; constructor no longer implicitly called\r
       /wd4592 # symbol will be dynamically initialized (implementation limitation)\r
+      /wd4628 # digraphs not supported with -Ze\r
       /wd4723 # potential divide by 0\r
       /wd4724 # potential mod by 0\r
       /wd4868 # compiler may not enforce left-to-right evaluation order\r
@@ -241,8 +255,8 @@ function(apply_folly_compile_options_to_target THETARGET)
       \r
       _STL_EXTRA_DISABLED_WARNINGS=4774\ 4987\r
 \r
-      $<$<BOOL:${MSVC_ENABLE_CPP_LATEST}>:"_HAS_AUTO_PTR_ETC=1"> # We're building in C++ 17 or greater mode, but certain dependencies (Boost) still have dependencies on unary_function and binary_function, so we have to make sure not to remove them.\r
-      $<$<BOOL:${MSVC_ENABLE_LEAN_AND_MEAN_WINDOWS}>:"WIN32_LEAN_AND_MEAN"> # Don't include most of Windows.h\r
+      $<$<BOOL:${MSVC_ENABLE_CPP_LATEST}>:_HAS_AUTO_PTR_ETC=1> # We're building in C++ 17 or greater mode, but certain dependencies (Boost) still have dependencies on unary_function and binary_function, so we have to make sure not to remove them.\r
+      $<$<BOOL:${MSVC_ENABLE_LEAN_AND_MEAN_WINDOWS}>:WIN32_LEAN_AND_MEAN> # Don't include most of Windows.h\r
   )\r
 \r
   # Ignore a warning about an object file not defining any symbols,\r