RFR: 8199736: Define WIN32_LEAN_AND_MEAN before including windows.h
Magnus Ihse Bursie
magnus.ihse.bursie at oracle.com
Tue Apr 3 10:18:56 UTC 2018
On 2018-03-26 01:03, David Holmes wrote:
> Hi Robin,
>
> On 23/03/2018 10:37 PM, Robin Westberg wrote:
>> Hi Kim & Erik,
>>
>> Certainly makes sense to define it from the build system, I’ve
>> updated the patch accordingly:
>>
>> Full: http://cr.openjdk.java.net/~rwestberg/8199736/webrev.01/
>> <http://cr.openjdk.java.net/~rwestberg/8199736/webrev.01/>
>> Incremental:
>> http://cr.openjdk.java.net/~rwestberg/8199736/webrev.00-01/
>> <http://cr.openjdk.java.net/~rwestberg/8199736/webrev.00-01/>
>
> I'm a little unclear on the hotspot changes. If we define
> WIN32_LEAN_AND_MEAN then certain APIs like sockets are excluded from
> windows.h so we then have to include the specific header files like
> winsock2.h - is that right?
Using WIN32_LEAN_AND_MEAN is good industry practice. We already do so
for the JDK libraries. This trims down the number of files included by
windows.h to a more manageble number. Several years ago, Microsoft did
the (in my opinion) bad decision to let windows.h include a huge number
of interfaces, unless this macro was defined. Using WIN32_LEAN_AND_MEAN
and then explicitly including other API headers makes compilation
faster, and the intention of the code clearer.
On top of this, due to naming conflicts, it is not possible at all to
use winsock2.h unless you define WIN32_LEAN_AND_MEAN, windows.h will
then pull in the old v1 of winsock.
/Magnus
>
> src/hotspot/share/interpreter/bytecodes.cpp
>
> I'm curious about this change. u_short comes from types.h on
> non-Windows, is it simply missing on Windows (at least once we have
> WIN32_LEAN_AND_MEAN defined) ?
>
> src/hotspot/share/utilities/ostream.cpp
>
> 1029 #endif
> 1030 #if defined(_WINDOWS)
>
> Using elif could be marginally faster given the two sets of conditions
> are mutually exclusive.
>
> Thanks,
> David
>
>> (Not quite sure if the definition belongs where I put it or a bit
>> later where most other windows-specific JVM flags are defined, but
>> seemed reasonable to put it close to where it is defined for the JDK
>> libraries).
>>
>> Best regards,
>> Robin
>>
>>> On 22 Mar 2018, at 16:52, Kim Barrett <kim.barrett at oracle.com> wrote:
>>>
>>>> On Mar 22, 2018, at 10:34 AM, Robin Westberg
>>>> <robin.westberg at oracle.com> wrote:
>>>>
>>>> Hi all,
>>>>
>>>> Please review the following change that defines WIN32_LEAN_AND_MEAN
>>>> [1] before including windows.h. This marginally improves build
>>>> times, and makes it possible to include winsock2.h.
>>>>
>>>> Issue: https://bugs.openjdk.java.net/browse/JDK-8199736
>>>> <https://bugs.openjdk.java.net/browse/JDK-8199736>
>>>> Webrev: http://cr.openjdk.java.net/~rwestberg/8199736/webrev.00/
>>>> <http://cr.openjdk.java.net/~rwestberg/8199736/webrev.00/>
>>>> Testing: hs-tier1
>>>>
>>>> Best regards,
>>>> Robin
>>>>
>>>> [1]
>>>> https://msdn.microsoft.com/en-us/library/windows/desktop/aa383745%28v=vs.85%29.aspx#faster_builds_with_smaller_header_files
>>>> <https://msdn.microsoft.com/en-us/library/windows/desktop/aa383745(v=vs.85).aspx#faster_builds_with_smaller_header_files>
>>>>
>>>
>>> I think the addition of the WIN32_LEAN_AND_MEAN definition should be
>>> done through the build
>>> system, so that it applies everywhere.
>>>
>>
More information about the hotspot-dev
mailing list