Skip to content

Commit d9bcca9

Browse files
committed
Fix ASAN CRT: don't pass any CRT flag when ASAN is enabled
clang-cl with -fsanitize=address rejects ALL explicit CRT flags (/MT, /MTd, /MD, /MDd). Let clang-cl manage its own CRT selection for ASAN builds.
1 parent 4d3b28c commit d9bcca9

1 file changed

Lines changed: 48 additions & 38 deletions

File tree

windows-release.ps1

Lines changed: 48 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,10 @@ $env:PATH = $PathWithPerl
7171
$env:CFLAGS = "/Zi"
7272
$env:CXXFLAGS = "/Zi"
7373

74-
# ASAN requires the dynamic CRT (/MD or /MDd) - static CRT (/MT, /MTd) is incompatible
74+
# ASAN with clang-cl manages its own CRT selection — passing any explicit CRT
75+
# flag (/MT, /MTd, /MD, /MDd) causes "invalid argument not allowed with -fsanitize=address"
7576
if ($ENABLE_SANITIZERS) {
76-
$CmakeMsvcRuntimeLibrary = "MultiThreadedDLL"
77-
if ($CMAKE_BUILD_TYPE -eq "Debug") {
78-
$CmakeMsvcRuntimeLibrary = "MultiThreadedDebugDLL"
79-
}
77+
$CmakeMsvcRuntimeLibrary = ""
8078
} else {
8179
$CmakeMsvcRuntimeLibrary = "MultiThreaded"
8280
if ($CMAKE_BUILD_TYPE -eq "Debug") {
@@ -126,39 +124,51 @@ if ($ENABLE_SANITIZERS -and $ClangLibPath) {
126124
}
127125
}
128126

129-
cmake -S . -B $WebKitBuild `
130-
-DPORT="JSCOnly" `
131-
-DENABLE_STATIC_JSC=ON `
132-
-DALLOW_LINE_AND_COLUMN_NUMBER_IN_BUILTINS=ON `
133-
"-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}" `
134-
-DUSE_THIN_ARCHIVES=OFF `
135-
-DENABLE_JIT=ON `
136-
-DENABLE_DFG_JIT=ON `
137-
-DENABLE_FTL_JIT=ON `
138-
-DENABLE_WEBASSEMBLY_BBQJIT=ON `
139-
-DENABLE_WEBASSEMBLY_OMGJIT=ON `
140-
-DENABLE_SAMPLING_PROFILER=ON `
141-
"-DENABLE_WEBASSEMBLY=${WebAssemblyState}" `
142-
-DUSE_BUN_JSC_ADDITIONS=ON `
143-
-DUSE_BUN_EVENT_LOOP=ON `
144-
-DENABLE_BUN_SKIP_FAILING_ASSERTIONS=ON `
145-
"-DICU_ROOT=${ICU_STATIC_ROOT}" `
146-
"-DICU_LIBRARY=${ICU_STATIC_LIBRARY}" `
147-
"-DICU_INCLUDE_DIR=${ICU_STATIC_INCLUDE_DIR}" `
148-
"-DCMAKE_C_COMPILER=${ClangPath}" `
149-
"-DCMAKE_CXX_COMPILER=${ClangPath}" `
150-
"-DCMAKE_LINKER=${LldLinkPath}" `
151-
"-DCMAKE_C_FLAGS_RELEASE=/Zi /O2 /Ob2 /DNDEBUG /DU_STATIC_IMPLEMENTATION ${ARM64SehWorkaround}" `
152-
"-DCMAKE_CXX_FLAGS_RELEASE=/Zi /O2 /Ob2 /DNDEBUG /DU_STATIC_IMPLEMENTATION /clang:-fno-c++-static-destructors ${ARM64SehWorkaround}" `
153-
"-DCMAKE_C_FLAGS_DEBUG=/Zi /FS /O0 /Ob0 /DU_STATIC_IMPLEMENTATION ${ARM64SehWorkaround}" `
154-
"-DCMAKE_CXX_FLAGS_DEBUG=/Zi /FS /O0 /Ob0 /DU_STATIC_IMPLEMENTATION /clang:-fno-c++-static-destructors ${ARM64SehWorkaround}" `
155-
-DENABLE_REMOTE_INSPECTOR=ON `
156-
"-DCMAKE_MSVC_RUNTIME_LIBRARY=${CmakeMsvcRuntimeLibrary}" `
157-
"-DENABLE_SANITIZERS=${ENABLE_SANITIZERS}" `
158-
"-DENABLE_ASSERTS=${ENABLE_ASSERTS}" `
159-
"-DCLANG_LIB_PATH=${ClangRtLibPath}" `
160-
-G Ninja
161-
# TODO: "-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded" `
127+
$cmakeArgs = @(
128+
"-S", ".",
129+
"-B", $WebKitBuild,
130+
"-DPORT=JSCOnly",
131+
"-DENABLE_STATIC_JSC=ON",
132+
"-DALLOW_LINE_AND_COLUMN_NUMBER_IN_BUILTINS=ON",
133+
"-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}",
134+
"-DUSE_THIN_ARCHIVES=OFF",
135+
"-DENABLE_JIT=ON",
136+
"-DENABLE_DFG_JIT=ON",
137+
"-DENABLE_FTL_JIT=ON",
138+
"-DENABLE_WEBASSEMBLY_BBQJIT=ON",
139+
"-DENABLE_WEBASSEMBLY_OMGJIT=ON",
140+
"-DENABLE_SAMPLING_PROFILER=ON",
141+
"-DENABLE_WEBASSEMBLY=${WebAssemblyState}",
142+
"-DUSE_BUN_JSC_ADDITIONS=ON",
143+
"-DUSE_BUN_EVENT_LOOP=ON",
144+
"-DENABLE_BUN_SKIP_FAILING_ASSERTIONS=ON",
145+
"-DICU_ROOT=${ICU_STATIC_ROOT}",
146+
"-DICU_LIBRARY=${ICU_STATIC_LIBRARY}",
147+
"-DICU_INCLUDE_DIR=${ICU_STATIC_INCLUDE_DIR}",
148+
"-DCMAKE_C_COMPILER=${ClangPath}",
149+
"-DCMAKE_CXX_COMPILER=${ClangPath}",
150+
"-DCMAKE_LINKER=${LldLinkPath}",
151+
"-DCMAKE_C_FLAGS_RELEASE=/Zi /O2 /Ob2 /DNDEBUG /DU_STATIC_IMPLEMENTATION ${ARM64SehWorkaround}",
152+
"-DCMAKE_CXX_FLAGS_RELEASE=/Zi /O2 /Ob2 /DNDEBUG /DU_STATIC_IMPLEMENTATION /clang:-fno-c++-static-destructors ${ARM64SehWorkaround}",
153+
"-DCMAKE_C_FLAGS_DEBUG=/Zi /FS /O0 /Ob0 /DU_STATIC_IMPLEMENTATION ${ARM64SehWorkaround}",
154+
"-DCMAKE_CXX_FLAGS_DEBUG=/Zi /FS /O0 /Ob0 /DU_STATIC_IMPLEMENTATION /clang:-fno-c++-static-destructors ${ARM64SehWorkaround}",
155+
"-DENABLE_REMOTE_INSPECTOR=ON",
156+
"-DENABLE_SANITIZERS=${ENABLE_SANITIZERS}",
157+
"-DENABLE_ASSERTS=${ENABLE_ASSERTS}",
158+
"-DCLANG_LIB_PATH=${ClangRtLibPath}",
159+
"-G", "Ninja"
160+
)
161+
162+
# ASAN with clang-cl manages its own CRT — any explicit CRT flag (/MT, /MTd, /MD, /MDd) causes errors.
163+
# Set to empty to prevent CMake from adding any CRT flag; clang-cl will select the right CRT.
164+
if ($ENABLE_SANITIZERS) {
165+
$cmakeArgs += "-DCMAKE_MSVC_RUNTIME_LIBRARY="
166+
$cmakeArgs += "-DCMAKE_POLICY_CMP0091=NEW"
167+
} else {
168+
$cmakeArgs += "-DCMAKE_MSVC_RUNTIME_LIBRARY=${CmakeMsvcRuntimeLibrary}"
169+
}
170+
171+
cmake @cmakeArgs
162172
if ($LASTEXITCODE -ne 0) { throw "cmake failed with exit code $LASTEXITCODE" }
163173

164174
# Workaround for what is probably a CMake bug

0 commit comments

Comments
 (0)