| 1 | /*
|
|---|
| 2 | * sdkddkver.h
|
|---|
| 3 | *
|
|---|
| 4 | * Macros to set up the compilation environment, such that it provides
|
|---|
| 5 | * support for a user specified host OS version, (default Win2K).
|
|---|
| 6 | *
|
|---|
| 7 | * $Id: sdkddkver.h,v f02731a7c98a 2016/06/02 21:15:06 keithmarshall $
|
|---|
| 8 | *
|
|---|
| 9 | * Written by Earnie Boyd <earnie@users.sourceforge.net>
|
|---|
| 10 | * Copyright (C) 2012, 2013, 2015, MinGW.org Project
|
|---|
| 11 | *
|
|---|
| 12 | *
|
|---|
| 13 | * Permission is hereby granted, free of charge, to any person obtaining a
|
|---|
| 14 | * copy of this software and associated documentation files (the "Software"),
|
|---|
| 15 | * to deal in the Software without restriction, including without limitation
|
|---|
| 16 | * the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|---|
| 17 | * and/or sell copies of the Software, and to permit persons to whom the
|
|---|
| 18 | * Software is furnished to do so, subject to the following conditions:
|
|---|
| 19 | *
|
|---|
| 20 | * The above copyright notice and this permission notice (including the next
|
|---|
| 21 | * paragraph) shall be included in all copies or substantial portions of the
|
|---|
| 22 | * Software.
|
|---|
| 23 | *
|
|---|
| 24 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|---|
| 25 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|---|
| 26 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|---|
| 27 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|---|
| 28 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|---|
| 29 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|---|
| 30 | * DEALINGS IN THE SOFTWARE.
|
|---|
| 31 | *
|
|---|
| 32 | */
|
|---|
| 33 | #ifndef _SDKDDKVER_H
|
|---|
| 34 | #define _SDKDDKVER_H
|
|---|
| 35 | #pragma GCC system_header
|
|---|
| 36 |
|
|---|
| 37 | /* Define masks for extracting version components from NTDDI_VERSION;
|
|---|
| 38 | * values and names are guessed based on comments in the documentation; see
|
|---|
| 39 | * http://msdn.microsoft.com/en-us/library/windows/desktop/aa383745(v=vs.85).aspx
|
|---|
| 40 | */
|
|---|
| 41 | #define OSVERSION_MASK 0xFFFF0000
|
|---|
| 42 | #define SPVERSION_MASK 0x0000FF00
|
|---|
| 43 | #define SUBVERSION_MASK 0x000000FF
|
|---|
| 44 |
|
|---|
| 45 | /* Macros to facilitate such extraction; derived from comments on MSDN or
|
|---|
| 46 | * on social.microsoft.com
|
|---|
| 47 | */
|
|---|
| 48 | #define OSVER(ver) ((ver) & OSVERSION_MASK)
|
|---|
| 49 | #define SPVER(ver) (((ver) & SPVERSION_MASK) >> 8)
|
|---|
| 50 | #define SUBVER(ver) ((ver) & SUBVERSION_MASK)
|
|---|
| 51 | #define WINNTVER(ver) ((ver) >> 16)
|
|---|
| 52 |
|
|---|
| 53 | /* Macros to construct a minimal NTDDI_VERSION from a _WIN32_WINNT value.
|
|---|
| 54 | */
|
|---|
| 55 | #define NTDDI_VERSION_FROM_WIN32_WINNT(ver) _NTDDI_VERSION_FROM_WIN32_WINNT(ver)
|
|---|
| 56 | #define _NTDDI_VERSION_FROM_WIN32_WINNT(ver) ver##0000
|
|---|
| 57 |
|
|---|
| 58 | /* Version constants specifying _WIN32_WINNT versions; these are defined at
|
|---|
| 59 | * http://msdn.microsoft.com/en-us/library/windows/desktop/aa383745(v=vs.85).aspx
|
|---|
| 60 | * (values for legacy platforms have been inferred from historical knowledge).
|
|---|
| 61 | */
|
|---|
| 62 | #define _WIN32_WINNT_NT4 0x0400 /* Windows NT4 */
|
|---|
| 63 | #define _WIN32_WINNT_NT4E 0x0401 /* Windows NT4E */
|
|---|
| 64 | #define _WIN32_WINDOWS_95 0x0400 /* Windows 95 */
|
|---|
| 65 | #define _WIN32_WINDOWS_98 0x0410 /* Windows 98 */
|
|---|
| 66 | #define _WIN32_WINDOWS_ME 0x0490 /* Windows Millenium Edition */
|
|---|
| 67 | #define _WIN32_WINNT_WIN2K 0x0500 /* Windows 2000 */
|
|---|
| 68 | #define _WIN32_WINNT_WINXP 0x0501 /* Windows XP */
|
|---|
| 69 | #define _WIN32_WINNT_WS03 0x0502 /* Windows Server 2003 */
|
|---|
| 70 | #define _WIN32_WINNT_WIN6 0x0600 /* Alias for Windows Vista */
|
|---|
| 71 | #define _WIN32_WINNT_VISTA 0x0600 /* Windows Vista */
|
|---|
| 72 | #define _WIN32_WINNT_WS08 0x0600 /* Windows Server 2008 */
|
|---|
| 73 | #define _WIN32_WINNT_LONGHORN 0x0600 /* Alias for Windows Vista */
|
|---|
| 74 | #define _WIN32_WINNT_WIN7 0x0601 /* Windows 7 */
|
|---|
| 75 | #define _WIN32_WINNT_WIN8 0x0602 /* Windows 8 */
|
|---|
| 76 | #define _WIN32_WINNT_WINBLUE 0x0603 /* Windows 8.1 */
|
|---|
| 77 |
|
|---|
| 78 | /* Version constants specifying Internet Explorer versions; also defined at
|
|---|
| 79 | * http://msdn.microsoft.com/en-us/library/windows/desktop/aa383745(v=vs.85).aspx
|
|---|
| 80 | */
|
|---|
| 81 | #define _WIN32_IE_IE50 0x0500
|
|---|
| 82 | #define _WIN32_IE_IE501 0x0501
|
|---|
| 83 | #define _WIN32_IE_IE55 0x0550
|
|---|
| 84 | #define _WIN32_IE_IE56 0x0560
|
|---|
| 85 | #define _WIN32_IE_IE60 0x0600
|
|---|
| 86 | #define _WIN32_IE_IE60SP1 0x0601
|
|---|
| 87 | #define _WIN32_IE_IE60SP2 0x0603
|
|---|
| 88 | #define _WIN32_IE_IE70 0x0700
|
|---|
| 89 | #define _WIN32_IE_IE80 0x0800
|
|---|
| 90 |
|
|---|
| 91 | #define _WIN32_IE_IE30 0x0300
|
|---|
| 92 | #define _WIN32_IE_IE301 0x0301
|
|---|
| 93 | #define _WIN32_IE_IE302 0x0302
|
|---|
| 94 | #define _WIN32_IE_IE40 0x0400
|
|---|
| 95 | #define _WIN32_IE_IE401 0x0401
|
|---|
| 96 |
|
|---|
| 97 | /* Version constants specifying NTDDI_VERSION; these are also defined at
|
|---|
| 98 | * http://msdn.microsoft.com/en-us/library/windows/desktop/aa383745(v=vs.85).aspx
|
|---|
| 99 | */
|
|---|
| 100 | #define __NTDDI_WIN5 0x05000000
|
|---|
| 101 | #define __NTDDI_WIN51 0x05010000
|
|---|
| 102 | #define __NTDDI_WIN52 0x05020000
|
|---|
| 103 | #define __NTDDI_WIN6 0x06000000
|
|---|
| 104 | #define __NTDDI_WIN61 0x06010000
|
|---|
| 105 | #define __NTDDI_WIN62 0x06020000
|
|---|
| 106 | #define __NTDDI_WIN63 0x06030000
|
|---|
| 107 | #define __NTDDI_SP0 0x00000000
|
|---|
| 108 | #define __NTDDI_SP1 0x00000100
|
|---|
| 109 | #define __NTDDI_SP2 0x00000200
|
|---|
| 110 | #define __NTDDI_SP3 0x00000300
|
|---|
| 111 | #define __NTDDI_SP4 0x00000400
|
|---|
| 112 |
|
|---|
| 113 | #define NTDDI_WIN2K __NTDDI_WIN5 + __NTDDI_SP0
|
|---|
| 114 | #define NTDDI_WIN2KSP1 __NTDDI_WIN5 + __NTDDI_SP1
|
|---|
| 115 | #define NTDDI_WIN2KSP2 __NTDDI_WIN5 + __NTDDI_SP2
|
|---|
| 116 | #define NTDDI_WIN2KSP3 __NTDDI_WIN5 + __NTDDI_SP3
|
|---|
| 117 | #define NTDDI_WIN2KSP4 __NTDDI_WIN5 + __NTDDI_SP4
|
|---|
| 118 |
|
|---|
| 119 | #define NTDDI_WINXP __NTDDI_WIN51 + __NTDDI_SP0
|
|---|
| 120 | #define NTDDI_WINXPSP1 __NTDDI_WIN51 + __NTDDI_SP1
|
|---|
| 121 | #define NTDDI_WINXPSP2 __NTDDI_WIN51 + __NTDDI_SP2
|
|---|
| 122 | #define NTDDI_WINXPSP3 __NTDDI_WIN51 + __NTDDI_SP3
|
|---|
| 123 |
|
|---|
| 124 | #define NTDDI_WS03 __NTDDI_WIN52 + __NTDDI_SP0
|
|---|
| 125 | #define NTDDI_WS03SP1 __NTDDI_WIN52 + __NTDDI_SP1
|
|---|
| 126 | #define NTDDI_WS03SP2 __NTDDI_WIN52 + __NTDDI_SP2
|
|---|
| 127 |
|
|---|
| 128 | #define NTDDI_VISTA __NTDDI_WIN6 + __NTDDI_SP0
|
|---|
| 129 | #define NTDDI_VISTASP1 __NTDDI_WIN6 + __NTDDI_SP1
|
|---|
| 130 | #define NTDDI_VISTASP2 __NTDDI_WIN6 + __NTDDI_SP2
|
|---|
| 131 |
|
|---|
| 132 | #define NTDDI_LONGHORN NTDDI_VISTA
|
|---|
| 133 |
|
|---|
| 134 | #define NTDDI_WIN6 NTDDI_VISTA
|
|---|
| 135 | #define NTDDI_WIN6SP1 NTDDI_VISTASP1
|
|---|
| 136 | #define NTDDI_WIN6SP2 NTDDI_VISTASP2
|
|---|
| 137 |
|
|---|
| 138 | #define NTDDI_WS08 __NTDDI_WIN6 + __NTDDI_SP1
|
|---|
| 139 |
|
|---|
| 140 | #define NTDDI_WIN7 __NTDDI_WIN61 + __NTDDI_SP0
|
|---|
| 141 |
|
|---|
| 142 | #define NTDDI_WIN8 __NTDDI_WIN62 + __NTDDI_SP0
|
|---|
| 143 |
|
|---|
| 144 | #define NTDDI_WINBLUE __NTDDI_WIN63 + __NTDDI_SP0
|
|---|
| 145 |
|
|---|
| 146 | /* Although NTDDI_VERSION is now the preferred designator for the
|
|---|
| 147 | * level of support required from the operating system, legacy code
|
|---|
| 148 | * is likely to have specified WINVER, from which _WIN32_WINNT may
|
|---|
| 149 | * be inferred.
|
|---|
| 150 | */
|
|---|
| 151 | #if defined WINVER && ! defined _WIN32_WINNT
|
|---|
| 152 | # define _WIN32_WINNT WINVER
|
|---|
| 153 |
|
|---|
| 154 | /* Additionally, legacy code intended for deployment on the Win9x
|
|---|
| 155 | * series operating systems may have specified _WIN32_WINDOWS, as
|
|---|
| 156 | * an alternative to, or in addition to, _WIN32_WINNT.
|
|---|
| 157 | */
|
|---|
| 158 | #elif defined _WIN32_WINDOWS && ! defined _WIN32_WINNT
|
|---|
| 159 | # define _WIN32_WINNT _WIN32_WINDOWS
|
|---|
| 160 | #endif
|
|---|
| 161 |
|
|---|
| 162 | /* Stipulate defaults; check consistency of any user specified overrides.
|
|---|
| 163 | */
|
|---|
| 164 | #ifdef NTDDI_VERSION
|
|---|
| 165 | # ifdef _WIN32_WINNT
|
|---|
| 166 | # if _WIN32_WINNT != WINNTVER(NTDDI_VERSION)
|
|---|
| 167 | # error "_WIN32_WINNT setting conflicts with specified NTDDI_VERSION"
|
|---|
| 168 | # endif
|
|---|
| 169 | # else
|
|---|
| 170 | # define _WIN32_WINNT WINNTVER(NTDDI_VERSION)
|
|---|
| 171 | # ifndef WINVER
|
|---|
| 172 | # define WINVER _WIN32_WINNT
|
|---|
| 173 | # endif
|
|---|
| 174 | # endif
|
|---|
| 175 | #endif
|
|---|
| 176 |
|
|---|
| 177 | #ifndef _WIN32_WINNT
|
|---|
| 178 | # ifdef WINVER
|
|---|
| 179 | # define _WIN32_WINNT WINVER
|
|---|
| 180 | # else
|
|---|
| 181 | # ifdef _WARN_DEFAULTS
|
|---|
| 182 | # warning "Assuming default setting of _WIN32_WINNT_WIN2K for _WIN32_WINNT"
|
|---|
| 183 | # endif
|
|---|
| 184 | # define _WIN32_WINNT _WIN32_WINNT_WIN2K
|
|---|
| 185 | # endif
|
|---|
| 186 | #endif
|
|---|
| 187 |
|
|---|
| 188 | #ifndef WINVER
|
|---|
| 189 | # define WINVER _WIN32_WINNT
|
|---|
| 190 | #elif WINVER != _WIN32_WINNT
|
|---|
| 191 | /* TODO(REVIEW): is this appropriate for WINVER consistency checking?
|
|---|
| 192 | */
|
|---|
| 193 | # error "_WIN32_WINNT setting conflicts with specified WINVER"
|
|---|
| 194 | #endif
|
|---|
| 195 |
|
|---|
| 196 | #ifndef NTDDI_VERSION
|
|---|
| 197 | # ifdef _WARN_DEFAULTS
|
|---|
| 198 | # warning "Assuming default NTDDI_VERSION setting to match _WIN32_WINNT"
|
|---|
| 199 | # endif
|
|---|
| 200 | # define NTDDI_VERSION NTDDI_VERSION_FROM_WIN32_WINNT(_WIN32_WINNT)
|
|---|
| 201 | #endif
|
|---|
| 202 |
|
|---|
| 203 | /* Map GCC architecture identification macros to their MSVC equivalents.
|
|---|
| 204 | * This mapping was previously specified in <winnt.h>, and duplicated in
|
|---|
| 205 | * <windows.h>; it is now only defined here, because both <windows.h> and
|
|---|
| 206 | * <winnt.h> must include this file anyway, and the potentially error prone
|
|---|
| 207 | * burden of maintaining duplicates is as unnecessary as it is undesirable.
|
|---|
| 208 | */
|
|---|
| 209 | #ifndef _M_IX86
|
|---|
| 210 | /* Note that we must process the _M_IX86 equivalent macros in diminishing
|
|---|
| 211 | * order of processor version, since GCC defines __i386__ as identification
|
|---|
| 212 | * for the X86 processor family, in addition to any one of the other three
|
|---|
| 213 | * macros, which may be used to identify a particular processor version.
|
|---|
| 214 | */
|
|---|
| 215 | # if defined(__i686__)
|
|---|
| 216 | # define _M_IX86 600
|
|---|
| 217 |
|
|---|
| 218 | # elif defined(__i586__)
|
|---|
| 219 | # define _M_IX86 500
|
|---|
| 220 |
|
|---|
| 221 | # elif defined(__i486__)
|
|---|
| 222 | # define _M_IX86 400
|
|---|
| 223 |
|
|---|
| 224 | # elif defined(__i386__)
|
|---|
| 225 | # define _M_IX86 300
|
|---|
| 226 | # endif
|
|---|
| 227 | #endif
|
|---|
| 228 |
|
|---|
| 229 | /* The preceding logic may have established the host type as X86, or it
|
|---|
| 230 | * may have done nothing at all; we must check further.
|
|---|
| 231 | */
|
|---|
| 232 | #ifdef _M_IX86
|
|---|
| 233 | /* We've established that we ARE compiling for an X86 host; any MinGW32
|
|---|
| 234 | * compiler SHOULD have set this for us already...
|
|---|
| 235 | */
|
|---|
| 236 | # ifndef _X86_
|
|---|
| 237 | /* ...but cross-check it anyway, in case the user may have some unusual
|
|---|
| 238 | * compiler configuration in place.
|
|---|
| 239 | */
|
|---|
| 240 | # define _X86_ 1
|
|---|
| 241 | # endif
|
|---|
| 242 |
|
|---|
| 243 | # ifndef _M_IX86_FP
|
|---|
| 244 | /* MSVC defines this, to provide additional information about particular
|
|---|
| 245 | * capabilties of the X86 host environment; specifically...
|
|---|
| 246 | */
|
|---|
| 247 | # ifdef __SSE2__
|
|---|
| 248 | /* ...this indicates that the SSE2 instruction set (or better) may be
|
|---|
| 249 | * assumed to be supported...
|
|---|
| 250 | */
|
|---|
| 251 | # define _M_IX86_FP 2
|
|---|
| 252 |
|
|---|
| 253 | # elif defined(__SSE__)
|
|---|
| 254 | /* ...whereas, this promises only basic SSE instruction set support...
|
|---|
| 255 | */
|
|---|
| 256 | # define _M_IX86_FP 1
|
|---|
| 257 |
|
|---|
| 258 | # else
|
|---|
| 259 | /* ...and this disallows its use, entirely.
|
|---|
| 260 | */
|
|---|
| 261 | # define _M_IX86_FP 0
|
|---|
| 262 | # endif
|
|---|
| 263 | # endif
|
|---|
| 264 |
|
|---|
| 265 | /* When not compiling for an X86 host; check mapping from other possible
|
|---|
| 266 | * GCC architecture identifiers, to their MSVC equivalents.
|
|---|
| 267 | */
|
|---|
| 268 | #elif defined(__x86_64__) || defined(__amd64__)
|
|---|
| 269 | /* This represents an Intel X86-64, or (compatible) AMD-64 processor;
|
|---|
| 270 | * MSVC defines...
|
|---|
| 271 | */
|
|---|
| 272 | # ifndef _M_X64
|
|---|
| 273 | /* ...this to represent the former, together with...
|
|---|
| 274 | */
|
|---|
| 275 | # define _M_X64 1
|
|---|
| 276 | # endif
|
|---|
| 277 | # ifndef _M_AMD64
|
|---|
| 278 | /* ...this alias, to represent the latter.
|
|---|
| 279 | */
|
|---|
| 280 | # define _M_AMD64 1
|
|---|
| 281 | # endif
|
|---|
| 282 |
|
|---|
| 283 | #elif defined(__ia64__)
|
|---|
| 284 | /* This represents an Intel Itanium processor, which MSVC designates
|
|---|
| 285 | * by defining this feature test macro.
|
|---|
| 286 | */
|
|---|
| 287 | # ifndef _M_IA64
|
|---|
| 288 | # define _M_IA64 1
|
|---|
| 289 | # endif
|
|---|
| 290 | #endif /* !_M_IX86 */
|
|---|
| 291 |
|
|---|
| 292 | #endif /* _SDKDDKVER_H: $RCSfile: sdkddkver.h,v $: end of file */
|
|---|