diff --git a/CMakeLists.txt b/CMakeLists.txt index a9dbc967ef3..0e39699d364 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,24 +34,24 @@ include(lagom_compile_options) include(lagom_install_options) if (ENABLE_ADDRESS_SANITIZER) - add_compile_options(-fsanitize=address -fno-omit-frame-pointer) - add_link_options(-fsanitize=address) + add_cxx_compile_options(-fsanitize=address -fno-omit-frame-pointer) + add_cxx_link_options(-fsanitize=address) endif() if (ENABLE_MEMORY_SANITIZER) - add_compile_options(-fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer) - add_link_options(-fsanitize=memory -fsanitize-memory-track-origins) + add_cxx_compile_options(-fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer) + add_cxx_link_options(-fsanitize=memory -fsanitize-memory-track-origins) endif() if (ENABLE_UNDEFINED_SANITIZER) - add_compile_options(-fsanitize=undefined -fno-omit-frame-pointer) + add_cxx_compile_options(-fsanitize=undefined -fno-omit-frame-pointer) if (UNDEFINED_BEHAVIOR_IS_FATAL) - add_compile_options(-fno-sanitize-recover=undefined) + add_cxx_compile_options(-fno-sanitize-recover=undefined) endif() if (APPLE AND CMAKE_CXX_COMPILER_ID MATCHES "Clang$" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "17") - add_compile_options(-fno-sanitize=function) + add_cxx_compile_options(-fno-sanitize=function) endif() - add_link_options(-fsanitize=undefined) + add_cxx_link_options(-fsanitize=undefined) endif() if (HAIKU) @@ -61,9 +61,9 @@ if (HAIKU) add_compile_definitions(__USE_GNU) endif() -add_compile_options(-DAK_DONT_REPLACE_STD) -add_compile_options(-Wno-expansion-to-defined) -add_compile_options(-Wno-user-defined-literals) +add_compile_definitions(AK_DONT_REPLACE_STD) +add_cxx_compile_options(-Wno-expansion-to-defined) +add_cxx_compile_options(-Wno-user-defined-literals) if (ANDROID OR APPLE) serenity_option(ENABLE_QT OFF CACHE BOOL "Build ladybird application using Qt GUI") diff --git a/Meta/CMake/common_compile_options.cmake b/Meta/CMake/common_compile_options.cmake index 1b87923fd0e..0e824805597 100644 --- a/Meta/CMake/common_compile_options.cmake +++ b/Meta/CMake/common_compile_options.cmake @@ -5,74 +5,90 @@ set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_COLOR_DIAGNOSTICS ON) +macro(add_cxx_compile_options) + set(args "") + foreach(arg ${ARGN}) + string(APPEND args ${arg}$) + endforeach() + add_compile_options($<$:${args}>) +endmacro() + +macro(add_cxx_link_options) + set(args "") + foreach(arg ${ARGN}) + string(APPEND args ${arg}$) + endforeach() + add_link_options($<$:${args}>) +endmacro() + if (MSVC) - add_compile_options(/W4) + add_cxx_compile_options(/W4) # do not warn about unused function - add_compile_options(/wd4505) + add_cxx_compile_options(/wd4505) # disable exceptions - add_compile_options(/EHsc) + add_cxx_compile_options(/EHsc) # disable floating-point expression contraction - add_compile_options(/fp:precise) + add_cxx_compile_options(/fp:precise) else() - add_compile_options(-Wall -Wextra) - add_compile_options(-fno-exceptions) - add_compile_options(-ffp-contract=off) + add_cxx_compile_options(-Wall -Wextra) + add_cxx_compile_options(-fno-exceptions) + add_cxx_compile_options(-ffp-contract=off) endif() -add_compile_options(-Wcast-qual) -add_compile_options(-Wformat=2) -add_compile_options(-Wimplicit-fallthrough) -add_compile_options(-Wmissing-declarations) -add_compile_options(-Wsuggest-override) +add_cxx_compile_options(-Wcast-qual) +add_cxx_compile_options(-Wformat=2) +add_cxx_compile_options(-Wimplicit-fallthrough) +add_cxx_compile_options(-Wmissing-declarations) +add_cxx_compile_options(-Wsuggest-override) -add_compile_options(-Wno-invalid-offsetof) -add_compile_options(-Wno-unknown-warning-option) -add_compile_options(-Wno-unused-command-line-argument) +add_cxx_compile_options(-Wno-invalid-offsetof) +add_cxx_compile_options(-Wno-unknown-warning-option) +add_cxx_compile_options(-Wno-unused-command-line-argument) if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "18") - add_compile_options(-Wpadded-bitfield) + add_cxx_compile_options(-Wpadded-bitfield) endif() if (NOT CMAKE_HOST_SYSTEM_NAME MATCHES SerenityOS) # FIXME: Something makes this go crazy and flag unused variables that aren't flagged as such when building with the toolchain. # Disable -Werror for now. - add_compile_options(-Werror) + add_cxx_compile_options(-Werror) endif() 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) + add_cxx_compile_options(-fconstexpr-steps=16777216) - add_compile_options(-Wmissing-prototypes) + add_cxx_compile_options(-Wmissing-prototypes) - add_compile_options(-Wno-implicit-const-int-float-conversion) - add_compile_options(-Wno-user-defined-literals) - add_compile_options(-Wno-vla-cxx-extension) + add_cxx_compile_options(-Wno-implicit-const-int-float-conversion) + add_cxx_compile_options(-Wno-user-defined-literals) + add_cxx_compile_options(-Wno-vla-cxx-extension) elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") # Only ignore expansion-to-defined for g++, clang's implementation doesn't complain about function-like macros - add_compile_options(-Wno-expansion-to-defined) - add_compile_options(-Wno-literal-suffix) + add_cxx_compile_options(-Wno-expansion-to-defined) + add_cxx_compile_options(-Wno-literal-suffix) # FIXME: This warning seems useful but has too many false positives with GCC 13. - add_compile_options(-Wno-dangling-reference) + add_cxx_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_cxx_compile_options(-Wno-reserved-identifier) + add_cxx_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) + # add_cxx_compile_options(-Wno-unsafe-buffer-usage) endif() if (UNIX AND NOT APPLE AND NOT ENABLE_FUZZERS) - add_compile_options(-fno-semantic-interposition) - add_compile_options(-fvisibility-inlines-hidden) + add_cxx_compile_options(-fno-semantic-interposition) + add_cxx_compile_options(-fvisibility-inlines-hidden) endif() if (NOT WIN32) - add_compile_options(-fstack-protector-strong) - add_link_options(-fstack-protector-strong) + add_cxx_compile_options(-fstack-protector-strong) + add_cxx_link_options(-fstack-protector-strong) endif() -add_compile_options(-fstrict-flex-arrays=2) +add_cxx_compile_options(-fstrict-flex-arrays=2) diff --git a/Meta/CMake/lagom_compile_options.cmake b/Meta/CMake/lagom_compile_options.cmake index 8b3c0919eb2..357cc2150b5 100644 --- a/Meta/CMake/lagom_compile_options.cmake +++ b/Meta/CMake/lagom_compile_options.cmake @@ -1,24 +1,24 @@ include(${CMAKE_CURRENT_LIST_DIR}/common_compile_options.cmake) -add_compile_options(-Wno-maybe-uninitialized) -add_compile_options(-Wno-shorten-64-to-32) +add_cxx_compile_options(-Wno-maybe-uninitialized) +add_cxx_compile_options(-Wno-shorten-64-to-32) if(NOT MSVC) - add_compile_options(-fsigned-char) - add_compile_options(-ggnu-pubnames) + add_cxx_compile_options(-fsigned-char) + add_cxx_compile_options(-ggnu-pubnames) else() # char is signed - add_compile_options(/J) + add_cxx_compile_options(/J) # full symbolic debugginng information - add_compile_options(/Z7) + add_cxx_compile_options(/Z7) endif() if (NOT WIN32) - add_compile_options(-fPIC) + add_cxx_compile_options(-fPIC) endif() if (LINUX) - add_compile_options(-D_FILE_OFFSET_BITS=64) + add_compile_definitions(_FILE_OFFSET_BITS=64) endif() if (APPLE) @@ -27,33 +27,33 @@ endif() if (CMAKE_BUILD_TYPE STREQUAL "Debug") if (NOT MSVC) - add_compile_options(-ggdb3) + add_cxx_compile_options(-ggdb3) endif() - add_compile_options(-Og) + add_cxx_compile_options(-Og) else() - add_compile_options(-O2) - add_compile_options(-g1) + add_cxx_compile_options(-O2) + add_cxx_compile_options(-g1) endif() -function(add_linker_flag_if_supported flag) +function(add_cxx_linker_flag_if_supported flag) include(CheckLinkerFlag) check_linker_flag(CXX ${flag} LAGOM_LINKER_SUPPORTS_${flag}) if (${LAGOM_LINKER_SUPPORTS_${flag}}) - add_link_options(${flag}) + add_cxx_link_options(${flag}) endif() endfunction() -add_linker_flag_if_supported(LINKER:--gdb-index) +add_cxx_linker_flag_if_supported(LINKER:--gdb-index) if (NOT ENABLE_FUZZERS) - add_linker_flag_if_supported(LINKER:-Bsymbolic-non-weak-functions) + add_cxx_linker_flag_if_supported(LINKER:-Bsymbolic-non-weak-functions) endif() if (ENABLE_LAGOM_COVERAGE_COLLECTION) if (CMAKE_CXX_COMPILER_ID MATCHES "Clang$" AND NOT ENABLE_FUZZERS) - add_compile_options(-fprofile-instr-generate -fcoverage-mapping) - add_link_options(-fprofile-instr-generate) + add_cxx_compile_options(-fprofile-instr-generate -fcoverage-mapping) + add_cxx_link_options(-fprofile-instr-generate) else() message(FATAL_ERROR "Collecting code coverage is unsupported in this configuration.") diff --git a/Meta/Lagom/CMakeLists.txt b/Meta/Lagom/CMakeLists.txt index 77385b6a383..e32a96649ba 100644 --- a/Meta/Lagom/CMakeLists.txt +++ b/Meta/Lagom/CMakeLists.txt @@ -88,27 +88,27 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON) if (EMSCRIPTEN) set(CMAKE_EXECUTABLE_SUFFIX ".js") - add_compile_options(-gsource-map) - add_link_options(--emrun "SHELL:-s ALLOW_MEMORY_GROWTH") + add_cxx_compile_options(-gsource-map) + add_cxx_link_options(--emrun "SHELL:-s ALLOW_MEMORY_GROWTH") endif() if (ENABLE_ADDRESS_SANITIZER) - add_compile_options(-fsanitize=address -fno-omit-frame-pointer) + add_cxx_compile_options(-fsanitize=address -fno-omit-frame-pointer) set(LINKER_FLAGS "${LINKER_FLAGS} -fsanitize=address") endif() if (ENABLE_MEMORY_SANITIZER) - add_compile_options(-fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer) + add_cxx_compile_options(-fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer) set(LINKER_FLAGS "${LINKER_FLAGS} -fsanitize=memory -fsanitize-memory-track-origins") endif() if (ENABLE_UNDEFINED_SANITIZER) - add_compile_options(-fsanitize=undefined -fno-omit-frame-pointer) + add_cxx_compile_options(-fsanitize=undefined -fno-omit-frame-pointer) if (UNDEFINED_BEHAVIOR_IS_FATAL) - add_compile_options(-fno-sanitize-recover=undefined) + add_cxx_compile_options(-fno-sanitize-recover=undefined) endif() if (APPLE AND CMAKE_CXX_COMPILER_ID MATCHES "Clang$" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "17") - add_compile_options(-fno-sanitize=function) + add_cxx_compile_options(-fno-sanitize=function) endif() set(LINKER_FLAGS "${LINKER_FLAGS} -fsanitize=undefined") endif() @@ -125,7 +125,7 @@ if (HAIKU) endif() if (ENABLE_FUZZERS) - add_compile_options(-fno-omit-frame-pointer) + add_cxx_compile_options(-fno-omit-frame-pointer) endif() CHECK_INCLUDE_FILE(pulse/pulseaudio.h HAVE_PULSEAUDIO) @@ -134,14 +134,14 @@ add_library(JSClangPlugin INTERFACE) add_library(GenericClangPlugin INTERFACE) if (CMAKE_CXX_COMPILER_ID MATCHES "Clang$") - add_compile_options(-Wno-overloaded-virtual) + add_cxx_compile_options(-Wno-overloaded-virtual) # FIXME: Re-enable this check when the warning stops triggering, or document why we can't stop it from triggering. # For now, there is a lot of unused private fields in LibWeb that trigger this that could be removed. # See issue #14137 for details - add_compile_options(-Wno-unused-private-field) + add_cxx_compile_options(-Wno-unused-private-field) if (ENABLE_FUZZERS_LIBFUZZER) - add_compile_options(-fsanitize=fuzzer) + add_cxx_compile_options(-fsanitize=fuzzer) set(LINKER_FLAGS "${LINKER_FLAGS} -fsanitize=fuzzer") endif() diff --git a/Userland/Libraries/LibCrypto/CMakeLists.txt b/Userland/Libraries/LibCrypto/CMakeLists.txt index 947a9aca34a..f596c444b1a 100644 --- a/Userland/Libraries/LibCrypto/CMakeLists.txt +++ b/Userland/Libraries/LibCrypto/CMakeLists.txt @@ -1,4 +1,4 @@ -add_compile_options(-Wvla) +add_cxx_compile_options(-Wvla) set(SOURCES AEAD/ChaCha20Poly1305.cpp diff --git a/Userland/Libraries/LibTLS/CMakeLists.txt b/Userland/Libraries/LibTLS/CMakeLists.txt index 13ce1c6ba16..326df1f4cc6 100644 --- a/Userland/Libraries/LibTLS/CMakeLists.txt +++ b/Userland/Libraries/LibTLS/CMakeLists.txt @@ -1,4 +1,4 @@ -add_compile_options(-Wvla) +add_cxx_compile_options(-Wvla) set(SOURCES Certificate.cpp