diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py index 9e25add73..984dc5804 100644 --- a/mesonbuild/environment.py +++ b/mesonbuild/environment.py @@ -185,17 +185,23 @@ def detect_windows_arch(compilers): if float(compiler.get_toolset_version()) < 10.0: # On MSVC 2008 and earlier, check 'BUILD_PLAT', where # 'Win32' means 'x86' - platform = os.environ.get('BUILD_PLAT', 'x86') + platform = os.environ.get('BUILD_PLAT', os_arch) if platform == 'Win32': return 'x86' elif 'VSCMD_ARG_TGT_ARCH' in os.environ: # On MSVC 2017 'Platform' is not set in VsDevCmd.bat return os.environ['VSCMD_ARG_TGT_ARCH'] else: - # On MSVC 2010 and later 'Platform' is only set when the + # Starting with VS 2017, `Platform` is not always set (f.ex., + # if you use VsDevCmd.bat directly instead of vcvars*.bat), but + # `VSCMD_ARG_HOST_ARCH` is always set, so try that first. + if 'VSCMD_ARG_HOST_ARCH' in os.environ: + platform = os.environ['VSCMD_ARG_HOST_ARCH'].lower() + # On VS 2010-2015, 'Platform' is only set when the # target arch is not 'x86'. It's 'x64' when targeting # x86_64 and 'arm' when targeting ARM. - platform = os.environ.get('Platform', 'x86').lower() + else: + platform = os.environ.get('Platform', 'x86').lower() if platform == 'x86': return platform if compiler.id == 'clang-cl' and not compiler.is_64: