View Issue Details Jump to Notes ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0015622CMakeCCMakepublic2015-06-17 22:392016-06-10 14:31
ReporterPaul "TBBle" Hampson 
Assigned ToKitware Robot 
PrioritynormalSeverityfeatureReproducibilityN/A
StatusclosedResolutionmoved 
PlatformOSOS Version
Product Version 
Target VersionFixed in Version 
Summary0015622: Add support for 64-bit Visual Studio Toolchains
DescriptionVisual Studio 2013 onwards have added a property to MSBuild "PreferredToolArchitecture" which can be set to "x64" to use the 64-bit compiler toolchain. This toolchain can produce all the same output targets: Win32, x64 and ARM; as the default (32-bit) compiler toolchain can.

It'd be great if this was supported somehow in CMake. Now that we have the -A flag for output architecture from the Visual Studio generators, this might be a duplicated set of generators, which only support -A for output architecture support. If there is an appropriate CMAKE property, that'd work too.

Ideally, we could flag off CMAKE_SYSTEM_PROCESSOR and CMAKE_HOST_SYSTEM_PROCESSOR to control this sort of cross-compiler behaviour, except that would:
 (a) introduce a behaviour change for existing projects (hence perhaps a Visual Studio generator-specific policy); and
 (b) require "fixing" CMAKE_SYSTEM_PROCESSOR, see issue 0015170

"PreferredToolArchitecture" is safe to set to "x64" on 32-bit platforms, as the VS2013 MSBuild scripts detect when the build is run on a 32-bit host or without the 64-bit toolset installed, and (silently) fall back to the 32-bit toolset.

As a workaround, "PreferredToolArchitecture" can be set as an environment variable, in case anyone finds this feature request and doesn't want to wait for implementation.
Additional InformationMSBuild documentation at https://msdn.microsoft.com/en-us/library/dd293607(v=vs.120).aspx [^] shows this flag for VS2013 and VS2015 RC.

In VS2010 and VS2012, you could set the property "_IsNativeEnvironment" to "true" to use the 64-bit toolchain. This was not formally documented on MSDN, but in various blog posts. Anecdotally, it didn't support cross-compiling 32-bit or ARM targets from the 64-bit toolchain.

The "_IsNativeEnvironment" property is actually an internal property for the MSBuild C++ targets, but you must set it manually in pre-VS2013 because the IDE is always 32-bit and always provides the PROCESSOR_ARCHITECTURE environment variable as "x86". The actual intent of the toolchain code was to detect and enable _IsNativeEnvironment when running from a 64-bit environment, as seen in this snippet:

    <_IsNativeEnvironment Condition="'$(PROCESSOR_ARCHITECTURE)' == 'AMD64' and '$(Platform)' == 'X64'">true</_IsNativeEnvironment>
    <_IsNativeEnvironment Condition="'$(PROCESSOR_ARCHITECTURE)' == 'IA64' and '$(Platform)' == 'Itanium'">true</_IsNativeEnvironment>

See https://social.msdn.microsoft.com/Forums/en-US/d6b352ea-12b6-4867-b86d-a052fbab1da4/how-can-switch-to-native-x64-compiler-to-compile-x64-program [^] for discussion.

This logic is still present in VS2013, but the "PreferredToolArchitecture" presents the user-selectable interface. VS2013 attempts to honour the "_IsNativeEnvironment" property and set "PreferredToolArchitecture" to match, but apparently that doesn't work, see https://connect.microsoft.com/VisualStudio/feedback/details/800059/isnativeenvironment-true-no-longer-works-on-visual-studio-2013-rc [^]

A request for this appeared on Stack Overflow at http://stackoverflow.com/questions/23186620/use-native-64bit-toolset-in-visual-studio-2013 [^] and a CMake mailing list request for a workaround at http://www.cmake.org/pipermail/cmake/2014-February/057045.html [^]
TagsNo tags attached.
Attached Files

 Relationships
related to 0014752closedKitware Robot Unable to run Visual Studio 2013 x64 C++ Compiler using execute_process() Command 

  Notes
(0042799)
Kitware Robot (administrator)
2016-06-10 14:29

Resolving issue as `moved`.

This issue tracker is no longer used. Further discussion of this issue may take place in the current CMake Issues page linked in the banner at the top of this page.

 Issue History
Date Modified Username Field Change
2015-06-17 22:39 Paul "TBBle" Hampson New Issue
2015-10-28 12:56 Brad King Relationship added related to 0014752
2016-06-10 14:29 Kitware Robot Note Added: 0042799
2016-06-10 14:29 Kitware Robot Status new => resolved
2016-06-10 14:29 Kitware Robot Resolution open => moved
2016-06-10 14:29 Kitware Robot Assigned To => Kitware Robot
2016-06-10 14:31 Kitware Robot Status resolved => closed


Copyright © 2000 - 2018 MantisBT Team