# List of disabled warnings # When adding to the list add a short description and link to the warning's text if available # # https://bugs.webkit.org/show_bug.cgi?id=221508 is for tracking removal of warnings add_compile_options( /wd4018 # 'token' : signed/unsigned mismatch # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-3-c4018 /wd4060 # switch statement contains no 'case' or 'default' labels /wd4068 # unknown pragma # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-1-c4068 /wd4100 # 'identifier' : unreferenced formal parameter # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4100 /wd4127 # conditional expression is constant # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4127 /wd4146 # unary minus operator applied to unsigned type, result still unsigned # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4146 /wd4189 # 'identifier' : local variable is initialized but not referenced # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4189 /wd4201 # nonstandard extension used : nameless struct/union # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4201 /wd4244 # 'argument' : conversion from 'type1' to 'type2', possible loss of data # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4244 /wd4245 # 'conversion' : conversion from 'type1' to 'type2', signed/unsigned mismatch # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4245 /wd4251 # 'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2' # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-1-c4251 /wd4275 # non - DLL-interface class 'class_1' used as base for DLL-interface class 'class_2' # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275 /wd4267 # 'var' : conversion from 'size_t' to 'type', possible loss of data # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-3-c4267 /wd4305 # 'context' : truncation from 'type1' to 'type2' # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-1-c4305 /wd4309 # 'conversion' : truncation of constant value # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4309 /wd4312 # 'operation' : conversion from 'type1' to 'type2' of greater size # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-1-c4312 /wd4324 # 'struct_name' : structure was padded due to __declspec(align()) # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4324 /wd4389 # 'operator' : signed/unsigned mismatch # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4389 /wd4456 # declaration of 'identifier' hides previous local declaration # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4456 /wd4457 # declaration of 'identifier' hides function parameter # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4457 /wd4458 # declaration of 'identifier' hides class member # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4458 /wd4459 # declaration of 'identifier' hides global declaration # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4459 /wd4505 # 'function' : unreferenced local function has been removed # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4505 /wd4611 # interaction between 'function' and C++ object destruction is non-portable # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4611 /wd4646 # function declared with __declspec(noreturn) has non-void return type # https://docs.microsoft.com/mt-mt/cpp/error-messages/compiler-warnings/compiler-warning-level-3-c4646 /wd4701 # Potentially uninitialized local variable 'name' used # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4701 /wd4702 # unreachable code # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4702 /wd4706 # assignment within conditional expression # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4706 # NOTE: Can't fix without changes to style guide /wd4715 # 'function' : not all control paths return a value # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-1-c4715 /wd4722 # 'function' : destructor never returns, potential memory leak # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-1-c4722 /wd4838 # conversion from 'type_1' to 'type_2' requires a narrowing conversion # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-1-c4838 /wd4840 # non-portable use of class 'type' as an argument to a variadic function # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4840 /wd4996 # Your code uses a function, class member, variable, or typedef that's marked deprecated /wd5205 # delete of an abstract class 'type-name' that has a non-virtual destructor results in undefined behavior /wd5054 # operator 'operator-name': deprecated between enumerations of different types /wd5055 # operator 'operator-name': deprecated between enumerations and floating-point types ) # Create pdb files for debugging purposes, also for Release builds add_compile_options(/Zi /GS) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG /OPT:ICF /OPT:REF") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG /OPT:ICF /OPT:REF") # We do not use exceptions add_definitions(-D_HAS_EXCEPTIONS=0) add_compile_options(/EHa- /EHc- /EHs- /fp:except-) # We have some very large object files that have to be linked add_compile_options(/analyze- /bigobj) # Use CRT security features add_definitions(-D_CRT_SECURE_NO_WARNINGS) if (NOT COMPILER_IS_CLANG_CL) add_definitions(-D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1) endif () add_compile_options(-D_ENABLE_EXTENDED_ALIGNED_STORAGE) # Specify the source code encoding add_compile_options(/utf-8 /validate-charset) if (${CMAKE_BUILD_TYPE} MATCHES "Debug") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /OPT:NOREF /OPT:NOICF") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /OPT:NOREF /OPT:NOICF") # To debug linking time issues, uncomment the following three lines: #add_compile_options(/Bv) #set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /VERBOSE /VERBOSE:INCR /TIME") #set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /VERBOSE /VERBOSE:INCR /TIME") elseif (${CMAKE_BUILD_TYPE} MATCHES "Release") add_compile_options(/Oy-) endif () if (NOT ${CMAKE_GENERATOR} MATCHES "Ninja") link_directories("${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}") add_definitions(/MP) endif () if (NOT ${CMAKE_CXX_FLAGS} STREQUAL "") string(REGEX REPLACE "(/EH[a-z]+) " "\\1- " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) # Disable C++ exceptions string(REGEX REPLACE "/EHsc$" "/EHs- /EHc- " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) # Disable C++ exceptions string(REGEX REPLACE "/GR " "/GR- " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) # Disable RTTI # More warnings. /W4 should be specified before -Wno-* options for clang-cl. string(REGEX REPLACE "/W3" "" CMAKE_C_FLAGS ${CMAKE_C_FLAGS}) string(REGEX REPLACE "/W3" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) WEBKIT_PREPEND_GLOBAL_COMPILER_FLAGS(/W4) endif () if (MSVC_STATIC_RUNTIME) message(STATUS "Using multithreaded, static version of the run-time library") set(MSVC_RUNTIME_COMPILE_FLAG "/MT") set(MSVC_RUNTIME_LINKER_FLAGS "/NODEFAULTLIB:MSVCRT /NODEFAULTLIB:MSVCRTD") else () message(STATUS "Using multithreaded, dynamic version of the run-time library") set(MSVC_RUNTIME_COMPILE_FLAG "/MD") # No linker flags are required endif () foreach (flag_var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) # Use the multithreaded static runtime library instead of the default DLL runtime. string(REGEX REPLACE "/MD" "${MSVC_RUNTIME_COMPILE_FLAG}" ${flag_var} "${${flag_var}}") # No debug runtime, even in debug builds. if (NOT DEBUG_SUFFIX) string(REGEX REPLACE "${MSVC_RUNTIME_COMPILE_FLAG}d" "${MSVC_RUNTIME_COMPILE_FLAG}" ${flag_var} "${${flag_var}}") string(REGEX REPLACE "/D_DEBUG" "" ${flag_var} "${${flag_var}}") endif () endforeach () # Make sure incremental linking is turned off, as it creates unacceptably long link times. string(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replace_CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS}) set(CMAKE_SHARED_LINKER_FLAGS "${replace_CMAKE_SHARED_LINKER_FLAGS} /INCREMENTAL:NO") string(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replace_CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS}) set(CMAKE_EXE_LINKER_FLAGS "${replace_CMAKE_EXE_LINKER_FLAGS} /INCREMENTAL:NO") string(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replace_CMAKE_SHARED_LINKER_FLAGS_DEBUG ${CMAKE_SHARED_LINKER_FLAGS_DEBUG}) set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${replace_CMAKE_SHARED_LINKER_FLAGS_DEBUG} /INCREMENTAL:NO") string(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replace_CMAKE_EXE_LINKER_FLAGS_DEBUG ${CMAKE_EXE_LINKER_FLAGS_DEBUG}) set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${replace_CMAKE_EXE_LINKER_FLAGS_DEBUG} /INCREMENTAL:NO") string(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replace_CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO ${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO}) set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${replace_CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /INCREMENTAL:NO") string(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replace_CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO ${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO}) set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${replace_CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /INCREMENTAL:NO") if (COMPILER_IS_CLANG_CL) # FIXME: The clang-cl visual studio integration seemed to set # this to 1900 explicitly even when building in VS2017 with the # newest toolset option, but we want to be versioned to match # VS2017. add_compile_options(-fmsc-version=1911) # FIXME: Building with clang-cl seemed to fail with 128 bit int support set(HAVE_INT128_T OFF) list(REMOVE_ITEM _WEBKIT_CONFIG_FILE_VARIABLES HAVE_INT128_T) endif () # Enable the new lambda processor for better C++ conformance if (NOT COMPILER_IS_CLANG_CL AND MSVC_VERSION GREATER_EQUAL 1928) add_compile_options(/Zc:lambda) endif ()