@@ -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"
7576if ($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
162172if ($LASTEXITCODE -ne 0 ) { throw " cmake failed with exit code $LASTEXITCODE " }
163173
164174# Workaround for what is probably a CMake bug
0 commit comments