@@ -1262,22 +1262,37 @@ env_vars.Add(
12621262
12631263VSINSTALLDIR = 'C:/Program Files/Microsoft Visual Studio/2022/Professional'
12641264MSVC_TOOLSET_VERSION = "14.31.31103"
1265+ DEFAULT_WINDOWS_SDK_VERSION = "10.0.17763.0"
1266+ WINDOWS_KITS_10_LIB_ROOT = "C:/Program Files (x86)/Windows Kits/10/Lib"
1267+ # Keep the vcvars args symbolic so env.subst() picks up command-line overrides.
1268+ DEFAULT_MSVC_USE_SCRIPT_ARGS = "x64 $MSVC_SDK_VERSION -vcvars_ver=$MSVC_TOOLSET_VERSION"
1269+
1270+
1271+ def get_windows_sdk_libdir (sdk_version ):
1272+ return os .path .join (WINDOWS_KITS_10_LIB_ROOT , sdk_version )
1273+
12651274
12661275env_vars .Add ('MSVC_USE_SCRIPT' , help = 'Sets the script used to setup Visual Studio.' ,
12671276 default = f'{ VSINSTALLDIR } /VC/Auxiliary/Build/vcvarsall.bat' )
12681277
12691278env_vars .Add ('VSINSTALLDIR' , help = 'The path where Visual Studio is installed.' ,
12701279 default = VSINSTALLDIR )
12711280
1272- env_vars .Add ('MSVC_USE_SCRIPT_ARGS' , help = 'Sets the script used to setup Visual Studio.' ,
1273- default = f'x64 -vcvars_ver= { MSVC_TOOLSET_VERSION } ' )
1281+ env_vars .Add ('MSVC_USE_SCRIPT_ARGS' , help = 'Sets the arguments used to setup Visual Studio.' ,
1282+ default = DEFAULT_MSVC_USE_SCRIPT_ARGS )
12741283
12751284env_vars .Add (
12761285 'MSVC_TOOLSET_VERSION' ,
12771286 help = 'Sets the full toolset version of Visual C++ to use.' ,
12781287 default = MSVC_TOOLSET_VERSION ,
12791288)
12801289
1290+ env_vars .Add (
1291+ 'MSVC_SDK_VERSION' ,
1292+ help = 'Sets the Windows 10 SDK version used by Visual C++.' ,
1293+ default = DEFAULT_WINDOWS_SDK_VERSION ,
1294+ )
1295+
12811296env_vars .Add (
12821297 'MSVC_VERSION' ,
12831298 help = 'Sets the version of Visual C++ to use (e.g. 14.2 for VS2019, 14.3 for VS2022)' ,
@@ -1573,6 +1588,22 @@ if GetOption('help'):
15731588
15741589 Return ()
15751590
1591+ selected_windows_sdk_version = variables_only_env .get ("MSVC_SDK_VERSION" )
1592+ if variables_only_env .get ("TARGET_OS" ) == "windows" :
1593+ if not selected_windows_sdk_version :
1594+ fatal_error (
1595+ None ,
1596+ "MSVC_SDK_VERSION must name a Windows 10 SDK version. Override it on the SCons command line with MSVC_SDK_VERSION=<sdk version>." ,
1597+ )
1598+
1599+ selected_windows_sdk_libdir = get_windows_sdk_libdir (selected_windows_sdk_version )
1600+ if not os .path .isdir (selected_windows_sdk_libdir ):
1601+ fatal_error (
1602+ None ,
1603+ "Pinned Windows SDK not found at '{}'. Install that SDK or override it on the SCons command line with MSVC_SDK_VERSION=<sdk version>." ,
1604+ selected_windows_sdk_libdir ,
1605+ )
1606+
15761607if ('CC' in variables_only_env ) != ('CXX' in variables_only_env ):
15771608 print ('Cannot customize C compiler without customizing C++ compiler, and vice versa' )
15781609 Exit (1 )
@@ -1654,6 +1685,7 @@ envDict = dict(
16541685 LIBDEPS_TAG_EXPANSIONS = [],
16551686 MSVC_VERSION = variables_only_env .get ("MSVC_VERSION" ),
16561687 MSVC_TOOLSET_VERSION = variables_only_env .get ("MSVC_TOOLSET_VERSION" ),
1688+ MSVC_SDK_VERSION = variables_only_env .get ("MSVC_SDK_VERSION" ),
16571689 VSINSTALLDIR = variables_only_env .get ("VSINSTALLDIR" ),
16581690 MSVC_USE_SCRIPT = variables_only_env .get ("MSVC_USE_SCRIPT" ),
16591691 MSVC_USE_SCRIPT_ARGS = variables_only_env .get ("MSVC_USE_SCRIPT_ARGS" ),
@@ -3973,19 +4005,19 @@ def doConfigure(myenv):
39734005 "C++ libraries." )
39744006 myenv .Append (CPPDEFINES = ["_GLIBCXX_DEBUG" ])
39754007
3976- # Check if we have a modern Windows SDK
4008+ # Check if we have a Windows 10 SDK.
39774009 if env .TargetOSIs ('windows' ):
39784010
39794011 def CheckWindowsSDKVersion (context ):
39804012
39814013 test_body = """
39824014 #include <windows.h>
3983- #if !defined(NTDDI_WINBLUE )
3984- #error Need Windows SDK Version 8.1 or higher
4015+ #if !defined(NTDDI_WIN10 )
4016+ #error Need Windows SDK Version 10 or higher
39854017 #endif
39864018 """
39874019
3988- context .Message ('Checking Windows SDK is 8.1 or newer... ' )
4020+ context .Message ('Checking Windows SDK is 10 or newer... ' )
39894021 ret = context .TryCompile (textwrap .dedent (test_body ), ".c" )
39904022 context .Result (ret )
39914023 return ret
@@ -3999,7 +4031,7 @@ def doConfigure(myenv):
39994031 )
40004032
40014033 if not conf .CheckWindowsSDKVersion ():
4002- myenv .ConfError ('Windows SDK Version 8.1 or higher is required to build MongoDB' )
4034+ myenv .ConfError ('Windows SDK Version 10 or higher is required to build MongoDB' )
40034035
40044036 conf .Finish ()
40054037
0 commit comments