[webkit-dev] Proposal: Dropping MSVC support and use clang-cl exclusively on Windows

Yusuke Suzuki ysuzuki at apple.com
Tue Apr 30 10:06:15 PDT 2024


Hello WebKittens!

Right now, MSVC support is putting significant burden on JavaScriptCore. It lacks many features for JSC development,
as a result, we have so many workarounds for MSVC in JavaScriptCore (For example, LLInt CLoop 16-bit opcode is disabled only for MSVC since MSVC cannot compile it reasonably).

I talked with JSC team and Don at Sony, and now I would like to propose dropping MSVC support on Windows port and using clang-cl exclusively on Windows.

There are many motivating factors for this change.

1. Post-commit testing bots (WinCairo) are using clang-cl. So literally, there is zero test coverage on MSVC build right now.
2. On the other hand, EWS is using MSVC for build test. This discrepancy is making maintenance of Windows ports harder and harder.
3. MSVC has various compilation issues which makes JSC lesser quality. Lack of `__builtin_frame_address` support makes JSC bloating JIT code much. CheckedArith has bunch of special code due to lack of overflow-detecting `__builtin_add_overflow` like operations, and so on.  (but TBH, given there is zero coverage, we even don't know whether it is working right now!)
4. Major third-parties using Windows WebKit (e.g. Bun.js, praywright etc.) are using clang-cl, not MSVC.

Not only solving existing issues, using clang-cl opens significant code / implementation quality improvements opportunities for Windows.

1. MSVC does not support various C++20 features, so it is putting our C++20 adoption much behind (For example, we cannot use  concept). By using clang-cl, we can start much newer set of C++20 features, improving code quality, static checks etc.
2. This paves a way to make Windows JSC implementation super solid. clang-cl offers sysv-abi feature for function attributes. This allows using Linux / macOS amd64 ABI on certain annotated functions. This basically means that we potentially unify our interpreter and JIT implementations completely in Linux / macOS / Windows for x64, (which makes our LLInt / Wasm LLInt on Windows super solid, plus, it paves a way to fully enable all JIT tiers on Windows including FTL).

We already discussed with Don and we agreed on this.
And now I would like to formally propose MSVC deprecation towards more cleaner and solid Windows port.

Best regards,
-Yusuke Suzuki


More information about the webkit-dev mailing list