To make this more concrete I created a V8 CL <https://chromium-review.googlesource.com/c/v8/v8/+/3042215> that demonstrates what is involved, using obj/v8/v8_libbase/condition-variable.obj as the test case. That file builds. Other files do not.
Some of the files are just hacked into compliance, but it gives a sense of how it would work. On Thu, Jul 22, 2021 at 10:23 AM Bruce Dawson <[email protected]> wrote: > I'm a Chrome developer and I've been working on reducing how frequently > windows.h is included in source files when building Chrome for Windows. It > used to be (2018) that more than 78% of Chrome's translation units included > windows.h When I picked up this project again in June this had been reduced > and about half of Chrome's translation units pulled in windows.h. Since > June I have reduced this to less than 22%. About 9% of the remaining uses > of windows.h (2% of source files used when building Chrome) are in v8 - 761 > translation units. > > The advantages of reducing usage of windows.h are (very slightly) reduced > compile times, reduced namespace pollution (no more #define DrawText > DrawTextW), reduced warning-flag manipulation, etc. Mostly it's about > avoiding those macro definitions. > > So... > > I'm looking at getting v8 to use windows.h less. The techniques are well > understood and proven and are best summarized in the contents of > windows_types.h > <https://source.chromium.org/chromium/chromium/src/+/main:base/win/windows_types.h;l=9?q=windows_types.h&sq=>. > This creates the minimal set of typedefs and defines needed to compile > Chrome's header files and portable code. In a few cases > (CONDITION_VARIABLE, for instance) it is necessary to define Chrome proxy's > for Windows types, and cast between them when calling Windows functions > <https://source.chromium.org/chromium/chromium/src/+/main:base/win/windows_types.h;l=299?q=windows_types.h> > . > > This is a medium sized project that will require landing lots of small > CLs. I've done enough investigation to get a sense of the scope. I'll need > to create V8 proxy-types for CONDITION_VARIABLE, SRWLOCK, and > CRITICAL_SECTION, create typedefs for HANDLE (this is easy - there's no > casting required), and explicitly include windows.h in a few source files > that actually need it. And I'll need to fix whatever other issues pop up, > but I'm not expecting anything worse than what I've seen before. I think > that the vast majority of v8 files will be able to compile without > windows.h. > > The overall project is tracked by crbug.com/796644 and the bugs which > block it. > > Is this a project that V8 would support? If so, can I get a > volunteer/sponsor who I can work with for advice and some code reviews? > > -- Bruce Dawson, he/him -- -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev --- You received this message because you are subscribed to the Google Groups "v8-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/v8-dev/CAE5mQiMF_Yx4cvVKtfhw1bGxqdKCx0U7%3DEz%2BMqGm%2BO%2BBG47U7w%40mail.gmail.com.
