mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-19 11:18:40 +08:00
VS: Fix x64 host recognition by x86 cmake process
In commit57e48f16f2
(VS: Add Visual Studio 16 2019 generator, 2019-01-09, v3.14.0-rc1~150^2) and commit0fd742a6ff
(VS: Teach VS 2019 generator to select host tools matching host arch, 2019-01-28, v3.14.0-rc1~63^2) we intended to select the `x64` target architecture and `x64` host tools by default on x64 host machines. Fix detection of a x64 host when CMake itself is a 32-bit x86 process. The KWSys SystemInformation `Is64Bits` member is not set correctly, which led to this bug. Pending investigation on the KWSys side, simply test ourselves via `IsWow64Process`.
This commit is contained in:
@@ -18,8 +18,15 @@
|
||||
#elif defined(_M_IA64)
|
||||
# define HOST_PLATFORM_NAME "Itanium"
|
||||
# define HOST_TOOLS_ARCH ""
|
||||
#elif defined(_WIN64)
|
||||
# define HOST_PLATFORM_NAME "x64"
|
||||
# define HOST_TOOLS_ARCH "x64"
|
||||
#else
|
||||
# include "cmsys/SystemInformation.hxx"
|
||||
static bool VSIsWow64()
|
||||
{
|
||||
BOOL isWow64 = false;
|
||||
return IsWow64Process(GetCurrentProcess(), &isWow64) && isWow64;
|
||||
}
|
||||
#endif
|
||||
|
||||
static std::string VSHostPlatformName()
|
||||
@@ -27,8 +34,7 @@ static std::string VSHostPlatformName()
|
||||
#ifdef HOST_PLATFORM_NAME
|
||||
return HOST_PLATFORM_NAME;
|
||||
#else
|
||||
cmsys::SystemInformation info;
|
||||
if (info.Is64Bits()) {
|
||||
if (VSIsWow64()) {
|
||||
return "x64";
|
||||
} else {
|
||||
return "Win32";
|
||||
@@ -41,8 +47,7 @@ static std::string VSHostArchitecture()
|
||||
#ifdef HOST_TOOLS_ARCH
|
||||
return HOST_TOOLS_ARCH;
|
||||
#else
|
||||
cmsys::SystemInformation info;
|
||||
if (info.Is64Bits()) {
|
||||
if (VSIsWow64()) {
|
||||
return "x64";
|
||||
} else {
|
||||
return "x86";
|
||||
|
Reference in New Issue
Block a user