From 0b22aae518a7961afa3efeef6f96befd92744915 Mon Sep 17 00:00:00 2001 From: Diego Iastrubni Date: Thu, 6 Jun 2024 11:36:16 +0300 Subject: [PATCH] Meta: Fix compilation flags for clang-cl As part of https://github.com/LadybirdWebBrowser/ladybird/issues/38 - the first baby step, is to make sure that we do not use compile flags not supported by clang-cl. --- Meta/CMake/common_compile_options.cmake | 27 +++++++++++++++++++------ Meta/CMake/lagom_compile_options.cmake | 17 +++++++++++++--- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/Meta/CMake/common_compile_options.cmake b/Meta/CMake/common_compile_options.cmake index f60189cffdf..a2749e24b04 100644 --- a/Meta/CMake/common_compile_options.cmake +++ b/Meta/CMake/common_compile_options.cmake @@ -5,17 +5,25 @@ set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_COLOR_DIAGNOSTICS ON) -add_compile_options(-Wall) -add_compile_options(-Wextra) +if (MSVC) + add_compile_options(/W4) + # do not warn about unused function + add_compile_options(/wd4505) + # disable exceptions + add_compile_options(/EHsc) + # disable floating-point expression contraction + add_compile_options(/fp:precise) +else() + add_compile_options(-Wall -Wextra) + add_compile_options(-fno-exceptions) + add_compile_options(-ffp-contract=off) +endif() add_compile_options(-Wno-invalid-offsetof) add_compile_options(-Wno-unknown-warning-option) add_compile_options(-Wno-unused-command-line-argument) -add_compile_options(-fno-exceptions) - -add_compile_options(-ffp-contract=off) if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "18") add_compile_options(-Wpadded-bitfield) @@ -27,7 +35,7 @@ if (NOT CMAKE_HOST_SYSTEM_NAME MATCHES SerenityOS) add_compile_options(-Werror) endif() -if (CMAKE_CXX_COMPILER_ID MATCHES "Clang$") +if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT CMAKE_CXX_SIMULATE_ID MATCHES "MSVC") # Clang's default constexpr-steps limit is 1048576(2^20), GCC doesn't have one add_compile_options(-fconstexpr-steps=16777216) @@ -41,6 +49,13 @@ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") # FIXME: This warning seems useful but has too many false positives with GCC 13. add_compile_options(-Wno-dangling-reference) +elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang$" AND CMAKE_CXX_SIMULATE_ID MATCHES "MSVC") + add_compile_options(-Wno-reserved-identifier) + add_compile_options(-Wno-user-defined-literals) + add_definitions(-D_CRT_SECURE_NO_WARNINGS) + + # TODO: this seems wrong, but we use this kind of code too much + # add_compile_options(-Wno-unsafe-buffer-usage) endif() if (UNIX AND NOT APPLE AND NOT ENABLE_FUZZERS) diff --git a/Meta/CMake/lagom_compile_options.cmake b/Meta/CMake/lagom_compile_options.cmake index e1b0fa8fc54..6a5f67bd237 100644 --- a/Meta/CMake/lagom_compile_options.cmake +++ b/Meta/CMake/lagom_compile_options.cmake @@ -2,8 +2,17 @@ include(${CMAKE_CURRENT_LIST_DIR}/common_compile_options.cmake) add_compile_options(-Wno-maybe-uninitialized) add_compile_options(-Wno-shorten-64-to-32) -add_compile_options(-fsigned-char) -add_compile_options(-ggnu-pubnames) + +if(NOT MSVC) + add_compile_options(-fsigned-char) + add_compile_options(-ggnu-pubnames) +else() + # char is signed + add_compile_options(/J) + # full symbolic debugginng information + add_compile_options(/Z7) +endif() + if (NOT WIN32) add_compile_options(-fPIC) endif() @@ -13,7 +22,9 @@ if (LINUX) endif() if (CMAKE_BUILD_TYPE STREQUAL "Debug") - add_compile_options(-ggdb3) + if (NOT MSVC) + add_compile_options(-ggdb3) + endif() add_compile_options(-Og) else() add_compile_options(-O2)