diff --git a/CMakePresets.json b/CMakePresets.json index 5ea950c02ef..00a420e130c 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -120,6 +120,21 @@ "VCPKG_OVERLAY_TRIPLETS": "${fileDir}/Meta/CMake/vcpkg/sanitizer-triplets" } }, + { + "name": "Windows_Sanitizer_Experimental", + "inherits": [ + "Windows_Experimental" + ], + "displayName": "Windows Sanitizer Config", + "binaryDir": "${fileDir}/Build/sanitizers", + "cacheVariables": { + "ENABLE_WINDOWS_CI": "OFF", + "ENABLE_UNDEFINED_SANITIZER": "ON", + "ENABLE_ADDRESS_SANITIZER": "ON", + "CMAKE_BUILD_TYPE": "RelWithDebInfo", + "VCPKG_OVERLAY_TRIPLETS": "${fileDir}/Meta/CMake/vcpkg/sanitizer-triplets" + } + }, { "hidden": true, "name": "vcpkg_ci", @@ -135,7 +150,10 @@ }, { "name": "Windows_CI", - "inherits": "windows_base", + "inherits": [ + "vcpkg_ci", + "windows_base" + ], "displayName": "Windows CI Config", "cacheVariables": { "ENABLE_WINDOWS_CI": "ON" @@ -158,6 +176,21 @@ ], "displayName": "Sanitizer CI Config" }, + { + "name": "Windows_Sanitizer_CI", + "inherits": [ + "Windows_CI" + ], + "displayName": "Windows Sanitizer CI Config", + "binaryDir": "${fileDir}/Build/sanitizers", + "cacheVariables": { + "ENABLE_WINDOWS_CI": "ON", + "ENABLE_UNDEFINED_SANITIZER": "ON", + "ENABLE_ADDRESS_SANITIZER": "ON", + "CMAKE_BUILD_TYPE": "RelWithDebInfo", + "VCPKG_OVERLAY_TRIPLETS": "${fileDir}/Meta/CMake/vcpkg/sanitizer-triplets" + } + }, { "name": "Fuzzers", "inherits": "unix_base", @@ -264,12 +297,26 @@ "displayName": "Build with Sanitizers", "description": "Build the project with Sanitizers" }, + { + "name": "Windows_Sanitizer_Experimental", + "inherits": "windows_base", + "configurePreset": "Windows_Sanitizer_Experimental", + "displayName": "Build with Sanitizers", + "description": "Build the project with Sanitizers" + }, { "name": "Windows_CI", "inherits": "windows_base", "configurePreset": "Windows_CI", - "displayName": "Build", - "description": "Build the project" + "displayName": "Windows_CI Build", + "description": "Build the project for Windows CI" + }, + { + "name": "Windows_Sanitizer_CI", + "inherits": "windows_base", + "configurePreset": "Windows_Sanitizer_CI", + "displayName": "Windows_Sanitizer_CI Build", + "description": "Build the project with sanitizers for Windows CI" }, { "name": "Swift_Release", @@ -316,6 +363,14 @@ "rhs": "Windows" } }, + { + "hidden": true, + "name": "sanitizer_base", + "environment": { + "ASAN_OPTIONS": "strict_string_checks=1:check_initialization_order=1:strict_init_order=1:detect_stack_use_after_return=1:allocator_may_return_null=1:$penv{ASAN_OPTIONS}", + "UBSAN_OPTIONS": "print_stacktrace=1:print_summary=1:halt_on_error=1:$penv{UBSAN_OPTIONS}" + } + }, { "name": "Release", "inherits": "unix_base", @@ -338,18 +393,33 @@ }, { "name": "Sanitizer", - "inherits": "unix_base", - "configurePreset": "Sanitizer", - "environment": { - "ASAN_OPTIONS": "strict_string_checks=1:check_initialization_order=1:strict_init_order=1:detect_stack_use_after_return=1:allocator_may_return_null=1:$penv{ASAN_OPTIONS}", - "UBSAN_OPTIONS": "print_stacktrace=1:print_summary=1:halt_on_error=1:$penv{UBSAN_OPTIONS}" - } + "inherits": [ + "unix_base", + "sanitizer_base" + ], + "configurePreset": "Sanitizer" + }, + { + "name": "Windows_Sanitizer_Experimental", + "inherits": [ + "windows_base", + "sanitizer_base" + ], + "configurePreset": "Windows_Sanitizer_Experimental" }, { "name": "Windows_CI", "inherits": "windows_base", "configurePreset": "Windows_CI" }, + { + "name": "Windows_Sanitizer_CI", + "inherits": [ + "windows_base", + "sanitizer_base" + ], + "configurePreset": "Windows_Sanitizer_CI" + }, { "name": "Swift_Release", "inherits": "unix_base", diff --git a/Meta/ladybird.py b/Meta/ladybird.py index 86a55050ed0..8aa4f9dd6c3 100755 --- a/Meta/ladybird.py +++ b/Meta/ladybird.py @@ -261,6 +261,7 @@ def configure_build_env(preset: str) -> tuple[Path, Path]: "Swift_Release": build_root_dir / "swift", "Windows_CI": build_root_dir / "release", "Windows_Experimental": build_root_dir / "debug", + "Windows_Sanitizer_CI": build_root_dir / "sanitizers", } build_preset_dir = known_presets.get(preset, None)