Meta: Add Windows sanitizer presets

Windows Clang supports both ASAN and UBSAN
This commit is contained in:
ayeteadoe 2025-06-16 15:07:09 -06:00 committed by Andrew Kaster
commit 56d7d50566
Notes: github-actions[bot] 2025-06-17 21:34:50 +00:00
2 changed files with 80 additions and 9 deletions

View file

@ -120,6 +120,21 @@
"VCPKG_OVERLAY_TRIPLETS": "${fileDir}/Meta/CMake/vcpkg/sanitizer-triplets" "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, "hidden": true,
"name": "vcpkg_ci", "name": "vcpkg_ci",
@ -135,7 +150,10 @@
}, },
{ {
"name": "Windows_CI", "name": "Windows_CI",
"inherits": "windows_base", "inherits": [
"vcpkg_ci",
"windows_base"
],
"displayName": "Windows CI Config", "displayName": "Windows CI Config",
"cacheVariables": { "cacheVariables": {
"ENABLE_WINDOWS_CI": "ON" "ENABLE_WINDOWS_CI": "ON"
@ -158,6 +176,21 @@
], ],
"displayName": "Sanitizer CI Config" "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", "name": "Fuzzers",
"inherits": "unix_base", "inherits": "unix_base",
@ -264,12 +297,26 @@
"displayName": "Build with Sanitizers", "displayName": "Build with Sanitizers",
"description": "Build the project 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", "name": "Windows_CI",
"inherits": "windows_base", "inherits": "windows_base",
"configurePreset": "Windows_CI", "configurePreset": "Windows_CI",
"displayName": "Build", "displayName": "Windows_CI Build",
"description": "Build the project" "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", "name": "Swift_Release",
@ -316,6 +363,14 @@
"rhs": "Windows" "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", "name": "Release",
"inherits": "unix_base", "inherits": "unix_base",
@ -338,18 +393,33 @@
}, },
{ {
"name": "Sanitizer", "name": "Sanitizer",
"inherits": "unix_base", "inherits": [
"configurePreset": "Sanitizer", "unix_base",
"environment": { "sanitizer_base"
"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}" "configurePreset": "Sanitizer"
} },
{
"name": "Windows_Sanitizer_Experimental",
"inherits": [
"windows_base",
"sanitizer_base"
],
"configurePreset": "Windows_Sanitizer_Experimental"
}, },
{ {
"name": "Windows_CI", "name": "Windows_CI",
"inherits": "windows_base", "inherits": "windows_base",
"configurePreset": "Windows_CI" "configurePreset": "Windows_CI"
}, },
{
"name": "Windows_Sanitizer_CI",
"inherits": [
"windows_base",
"sanitizer_base"
],
"configurePreset": "Windows_Sanitizer_CI"
},
{ {
"name": "Swift_Release", "name": "Swift_Release",
"inherits": "unix_base", "inherits": "unix_base",

View file

@ -261,6 +261,7 @@ def configure_build_env(preset: str) -> tuple[Path, Path]:
"Swift_Release": build_root_dir / "swift", "Swift_Release": build_root_dir / "swift",
"Windows_CI": build_root_dir / "release", "Windows_CI": build_root_dir / "release",
"Windows_Experimental": build_root_dir / "debug", "Windows_Experimental": build_root_dir / "debug",
"Windows_Sanitizer_CI": build_root_dir / "sanitizers",
} }
build_preset_dir = known_presets.get(preset, None) build_preset_dir = known_presets.get(preset, None)