Commit 5c50eeaf authored by Brad King's avatar Brad King

VS: Fix x64 host recognition by x86 cmake process

In commit 57e48f16 (VS: Add Visual Studio 16 2019 generator,
2019-01-09, v3.14.0-rc1~150^2) and commit 0fd742a6 (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`.
parent bf02d625
Pipeline #132219 passed with stage
...@@ -18,8 +18,15 @@ ...@@ -18,8 +18,15 @@
#elif defined(_M_IA64) #elif defined(_M_IA64)
# define HOST_PLATFORM_NAME "Itanium" # define HOST_PLATFORM_NAME "Itanium"
# define HOST_TOOLS_ARCH "" # define HOST_TOOLS_ARCH ""
#elif defined(_WIN64)
# define HOST_PLATFORM_NAME "x64"
# define HOST_TOOLS_ARCH "x64"
#else #else
# include "cmsys/SystemInformation.hxx" static bool VSIsWow64()
{
BOOL isWow64 = false;
return IsWow64Process(GetCurrentProcess(), &isWow64) && isWow64;
}
#endif #endif
static std::string VSHostPlatformName() static std::string VSHostPlatformName()
...@@ -27,8 +34,7 @@ static std::string VSHostPlatformName() ...@@ -27,8 +34,7 @@ static std::string VSHostPlatformName()
#ifdef HOST_PLATFORM_NAME #ifdef HOST_PLATFORM_NAME
return HOST_PLATFORM_NAME; return HOST_PLATFORM_NAME;
#else #else
cmsys::SystemInformation info; if (VSIsWow64()) {
if (info.Is64Bits()) {
return "x64"; return "x64";
} else { } else {
return "Win32"; return "Win32";
...@@ -41,8 +47,7 @@ static std::string VSHostArchitecture() ...@@ -41,8 +47,7 @@ static std::string VSHostArchitecture()
#ifdef HOST_TOOLS_ARCH #ifdef HOST_TOOLS_ARCH
return HOST_TOOLS_ARCH; return HOST_TOOLS_ARCH;
#else #else
cmsys::SystemInformation info; if (VSIsWow64()) {
if (info.Is64Bits()) {
return "x64"; return "x64";
} else { } else {
return "x86"; return "x86";
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment