diff --git a/CHANGELOG.md b/CHANGELOG.md index 1dd97cc1..226e58b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unversioned +- Dev: Make code sanitizers opt in with the `CHATTERINO_SANITIZER_SUPPORT` CMake option. After that's enabled, use the `SANITIZE_*` flag to enable individual sanitizers. (#6493) + ## 2.5.4 - Bugfix: Fixed crashes that could occur when Lua functions errored with values other than strings. (#6441) diff --git a/CMakeLists.txt b/CMakeLists.txt index e694741a..72db4971 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,6 @@ include(FeatureSummary) list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" - "${CMAKE_SOURCE_DIR}/cmake/sanitizers-cmake/cmake" ) option(BUILD_APP "Build Chatterino" ON) @@ -32,9 +31,20 @@ option(CHATTERINO_PLUGINS "Enable ALPHA plugin support in Chatterino" ON) option(CHATTERINO_USE_GDI_FONTENGINE "Use the legacy GDI fontengine instead of the new DirectWrite one on Windows (Qt 6.8.0 and later)" ON) option(CHATTERINO_ALLOW_PRIVATE_QT_API "Allow uses of Qt's private API - when enabling this, Chatterino must use the EXACT Qt version it was compiled against" OFF) +option(CHATTERINO_SANITIZER_SUPPORT "Attempt to enable Sanitizer support on the test and app targets. Actual sanitizers can then be enabled with the SANITIZE_* options." OFF) +mark_as_advanced(CHATTERINO_SANITIZER_SUPPORT) +add_feature_info("Chatterino code sanitizer support" CHATTERINO_SANITIZER_SUPPORT "") + option(CHATTERINO_UPDATER "Enable update checks" ON) mark_as_advanced(CHATTERINO_UPDATER) +if(CHATTERINO_SANITIZER_SUPPORT) + list(APPEND CMAKE_MODULE_PATH + "${CMAKE_SOURCE_DIR}/cmake/sanitizers-cmake/cmake" + ) + find_package(Sanitizers REQUIRED) +endif() + if(BUILD_TESTS) list(APPEND VCPKG_MANIFEST_FEATURES "tests") endif() @@ -137,8 +147,6 @@ if (WIN32) add_subdirectory(lib/WinToast EXCLUDE_FROM_ALL) endif () -find_package(Sanitizers QUIET) - # Find boost on the system find_package(Boost REQUIRED OPTIONAL_COMPONENTS headers) diff --git a/benchmarks/CMakeLists.txt b/benchmarks/CMakeLists.txt index 2677365e..1abc7e60 100644 --- a/benchmarks/CMakeLists.txt +++ b/benchmarks/CMakeLists.txt @@ -14,7 +14,10 @@ set(benchmark_SOURCES ) add_executable(${PROJECT_NAME} ${benchmark_SOURCES}) -add_sanitizers(${PROJECT_NAME}) + +if(CHATTERINO_SANITIZER_SUPPORT) + add_sanitizers(${PROJECT_NAME}) +endif() target_link_libraries(${PROJECT_NAME} PRIVATE chatterino-lib) target_link_libraries(${PROJECT_NAME} PRIVATE chatterino-mocks) diff --git a/lib/twitch-eventsub-ws/benchmarks/CMakeLists.txt b/lib/twitch-eventsub-ws/benchmarks/CMakeLists.txt index e86ba390..d1d5afe6 100644 --- a/lib/twitch-eventsub-ws/benchmarks/CMakeLists.txt +++ b/lib/twitch-eventsub-ws/benchmarks/CMakeLists.txt @@ -8,7 +8,10 @@ set(SOURCES ) add_executable(${PROJECT_NAME} ${SOURCES}) -add_sanitizers(${PROJECT_NAME}) + +if(CHATTERINO_SANITIZER_SUPPORT) + add_sanitizers(${PROJECT_NAME}) +endif() target_link_libraries(${PROJECT_NAME} PRIVATE twitch-eventsub-ws diff --git a/lib/twitch-eventsub-ws/tests/CMakeLists.txt b/lib/twitch-eventsub-ws/tests/CMakeLists.txt index 48fb9868..7c1e9801 100644 --- a/lib/twitch-eventsub-ws/tests/CMakeLists.txt +++ b/lib/twitch-eventsub-ws/tests/CMakeLists.txt @@ -7,7 +7,10 @@ set(SOURCES ) add_executable(${PROJECT_NAME} ${SOURCES}) -add_sanitizers(${PROJECT_NAME}) + +if(CHATTERINO_SANITIZER_SUPPORT) + add_sanitizers(${PROJECT_NAME}) +endif() target_link_libraries(${PROJECT_NAME} PRIVATE twitch-eventsub-ws GTest::gtest_main) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5f25ae5a..03d7c79c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -922,10 +922,8 @@ if (BUILD_APP) add_executable(${EXECUTABLE_PROJECT} main.cpp) endif() - if(COMMAND add_sanitizers) + if(CHATTERINO_SANITIZER_SUPPORT) add_sanitizers(${EXECUTABLE_PROJECT}) - else() - message(WARNING "Sanitizers support is disabled") endif() if (CHATTERINO_STATIC_QT_BUILD) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index ef88b4c5..bbedbe88 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -66,7 +66,10 @@ set(test_SOURCES ) add_executable(${PROJECT_NAME} ${test_SOURCES}) -add_sanitizers(${PROJECT_NAME}) + +if(CHATTERINO_SANITIZER_SUPPORT) + add_sanitizers(${PROJECT_NAME}) +endif() target_link_libraries(${PROJECT_NAME} PRIVATE chatterino-lib) target_link_libraries(${PROJECT_NAME} PRIVATE chatterino-mocks)