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

Keith Miller keith_miller at apple.com
Tue Apr 30 16:43:44 PDT 2024


+1 

Cheers,
Keith

> On Apr 30, 2024, at 10:06 AM, Yusuke Suzuki via webkit-dev <webkit-dev at lists.webkit.org> wrote:
> 
> 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
> _______________________________________________
> webkit-dev mailing list
> webkit-dev at lists.webkit.org
> https://lists.webkit.org/mailman/listinfo/webkit-dev



More information about the webkit-dev mailing list