mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-21 15:28:41 -05:00
MSVC: Add support for ARM64 architecture
Visual Studio 15.4 adds support for this architecture. Fixes: #17213
This commit is contained in:
@@ -0,0 +1,5 @@
|
|||||||
|
msvc-arm64
|
||||||
|
----------
|
||||||
|
|
||||||
|
* Support for the MSVC ARM64 architecture was added.
|
||||||
|
Visual Studio 2017 Update 4 and above offer an ARM64 toolchain.
|
||||||
@@ -220,7 +220,9 @@ Id flags: ${testflags} ${CMAKE_${lang}_COMPILER_ID_FLAGS_ALWAYS}
|
|||||||
if(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION)
|
if(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION)
|
||||||
set(id_WindowsTargetPlatformVersion "<WindowsTargetPlatformVersion>${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}</WindowsTargetPlatformVersion>")
|
set(id_WindowsTargetPlatformVersion "<WindowsTargetPlatformVersion>${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}</WindowsTargetPlatformVersion>")
|
||||||
endif()
|
endif()
|
||||||
if(id_platform STREQUAL ARM)
|
if(id_platform STREQUAL ARM64)
|
||||||
|
set(id_WindowsSDKDesktopARMSupport "<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>")
|
||||||
|
elseif(id_platform STREQUAL ARM)
|
||||||
set(id_WindowsSDKDesktopARMSupport "<WindowsSDKDesktopARMSupport>true</WindowsSDKDesktopARMSupport>")
|
set(id_WindowsSDKDesktopARMSupport "<WindowsSDKDesktopARMSupport>true</WindowsSDKDesktopARMSupport>")
|
||||||
else()
|
else()
|
||||||
set(id_WindowsSDKDesktopARMSupport "")
|
set(id_WindowsSDKDesktopARMSupport "")
|
||||||
|
|||||||
@@ -76,6 +76,8 @@ function(GetDefaultWindowsPrefixBase var)
|
|||||||
#
|
#
|
||||||
if("${CMAKE_GENERATOR}" MATCHES "(Win64|IA64)")
|
if("${CMAKE_GENERATOR}" MATCHES "(Win64|IA64)")
|
||||||
set(arch_hint "x64")
|
set(arch_hint "x64")
|
||||||
|
elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "ARM64")
|
||||||
|
set(arch_hint "ARM64")
|
||||||
elseif("${CMAKE_GENERATOR}" MATCHES "ARM")
|
elseif("${CMAKE_GENERATOR}" MATCHES "ARM")
|
||||||
set(arch_hint "ARM")
|
set(arch_hint "ARM")
|
||||||
elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
|
elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
|
||||||
|
|||||||
@@ -114,6 +114,9 @@
|
|||||||
# elif defined(_M_IX86)
|
# elif defined(_M_IX86)
|
||||||
# define ARCHITECTURE_ID "X86"
|
# define ARCHITECTURE_ID "X86"
|
||||||
|
|
||||||
|
# elif defined(_M_ARM64)
|
||||||
|
# define ARCHITECTURE_ID "ARM64"
|
||||||
|
|
||||||
# elif defined(_M_ARM)
|
# elif defined(_M_ARM)
|
||||||
# if _M_ARM == 4
|
# if _M_ARM == 4
|
||||||
# define ARCHITECTURE_ID "ARMV4I"
|
# define ARCHITECTURE_ID "ARMV4I"
|
||||||
|
|||||||
@@ -122,7 +122,9 @@ set(CMAKE_BUILD_TYPE_INIT Debug)
|
|||||||
# Compute an architecture family from the architecture id.
|
# Compute an architecture family from the architecture id.
|
||||||
foreach(lang C CXX)
|
foreach(lang C CXX)
|
||||||
set(_MSVC_${lang}_ARCHITECTURE_FAMILY "${MSVC_${lang}_ARCHITECTURE_ID}")
|
set(_MSVC_${lang}_ARCHITECTURE_FAMILY "${MSVC_${lang}_ARCHITECTURE_ID}")
|
||||||
if(_MSVC_${lang}_ARCHITECTURE_FAMILY MATCHES "^ARM")
|
if(_MSVC_${lang}_ARCHITECTURE_FAMILY MATCHES "^ARM64")
|
||||||
|
set(_MSVC_${lang}_ARCHITECTURE_FAMILY "ARM64")
|
||||||
|
elseif(_MSVC_${lang}_ARCHITECTURE_FAMILY MATCHES "^ARM")
|
||||||
set(_MSVC_${lang}_ARCHITECTURE_FAMILY "ARM")
|
set(_MSVC_${lang}_ARCHITECTURE_FAMILY "ARM")
|
||||||
elseif(_MSVC_${lang}_ARCHITECTURE_FAMILY MATCHES "^SH")
|
elseif(_MSVC_${lang}_ARCHITECTURE_FAMILY MATCHES "^SH")
|
||||||
set(_MSVC_${lang}_ARCHITECTURE_FAMILY "SHx")
|
set(_MSVC_${lang}_ARCHITECTURE_FAMILY "SHx")
|
||||||
@@ -175,7 +177,7 @@ elseif(WINDOWS_PHONE OR WINDOWS_STORE)
|
|||||||
set(CMAKE_C_STANDARD_LIBRARIES_INIT "WindowsApp.lib")
|
set(CMAKE_C_STANDARD_LIBRARIES_INIT "WindowsApp.lib")
|
||||||
elseif(WINDOWS_PHONE)
|
elseif(WINDOWS_PHONE)
|
||||||
set(CMAKE_C_STANDARD_LIBRARIES_INIT "WindowsPhoneCore.lib RuntimeObject.lib PhoneAppModelHost.lib")
|
set(CMAKE_C_STANDARD_LIBRARIES_INIT "WindowsPhoneCore.lib RuntimeObject.lib PhoneAppModelHost.lib")
|
||||||
elseif(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM" OR _MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM")
|
elseif(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM" OR _MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM" OR _MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM64" OR _MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM64")
|
||||||
set(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib")
|
set(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib")
|
||||||
else()
|
else()
|
||||||
set(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib")
|
set(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib")
|
||||||
@@ -183,7 +185,7 @@ elseif(WINDOWS_PHONE OR WINDOWS_STORE)
|
|||||||
else()
|
else()
|
||||||
set(_PLATFORM_DEFINES "/DWIN32")
|
set(_PLATFORM_DEFINES "/DWIN32")
|
||||||
|
|
||||||
if(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM" OR _MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM")
|
if(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM" OR _MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM" OR _MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM64" OR _MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM64")
|
||||||
set(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib")
|
set(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib")
|
||||||
elseif(MSVC_VERSION GREATER 1310)
|
elseif(MSVC_VERSION GREATER 1310)
|
||||||
if(CMAKE_VS_PLATFORM_TOOLSET MATCHES "(v[0-9]+_clang_.*|LLVM-vs[0-9]+.*)")
|
if(CMAKE_VS_PLATFORM_TOOLSET MATCHES "(v[0-9]+_clang_.*|LLVM-vs[0-9]+.*)")
|
||||||
@@ -215,6 +217,8 @@ set (CMAKE_LINK_DEF_FILE_FLAG "/DEF:")
|
|||||||
if(MSVC_C_ARCHITECTURE_ID)
|
if(MSVC_C_ARCHITECTURE_ID)
|
||||||
if(MSVC_C_ARCHITECTURE_ID MATCHES "^ARMV.I")
|
if(MSVC_C_ARCHITECTURE_ID MATCHES "^ARMV.I")
|
||||||
set(_MACHINE_ARCH_FLAG "/machine:THUMB")
|
set(_MACHINE_ARCH_FLAG "/machine:THUMB")
|
||||||
|
elseif(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM64")
|
||||||
|
set(_MACHINE_ARCH_FLAG "/machine:ARM64")
|
||||||
elseif(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM")
|
elseif(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM")
|
||||||
set(_MACHINE_ARCH_FLAG "/machine:ARM")
|
set(_MACHINE_ARCH_FLAG "/machine:ARM")
|
||||||
else()
|
else()
|
||||||
@@ -223,6 +227,8 @@ if(MSVC_C_ARCHITECTURE_ID)
|
|||||||
elseif(MSVC_CXX_ARCHITECTURE_ID)
|
elseif(MSVC_CXX_ARCHITECTURE_ID)
|
||||||
if(MSVC_CXX_ARCHITECTURE_ID MATCHES "^ARMV.I")
|
if(MSVC_CXX_ARCHITECTURE_ID MATCHES "^ARMV.I")
|
||||||
set(_MACHINE_ARCH_FLAG "/machine:THUMB")
|
set(_MACHINE_ARCH_FLAG "/machine:THUMB")
|
||||||
|
elseif(_MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM64")
|
||||||
|
set(_MACHINE_ARCH_FLAG "/machine:ARM64")
|
||||||
elseif(_MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM")
|
elseif(_MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM")
|
||||||
set(_MACHINE_ARCH_FLAG "/machine:ARM")
|
set(_MACHINE_ARCH_FLAG "/machine:ARM")
|
||||||
else()
|
else()
|
||||||
|
|||||||
@@ -695,7 +695,12 @@ bool cmGlobalVisualStudio10Generator::FindVCTargetsPath(cmMakefile* mf)
|
|||||||
xw.Content(this->WindowsTargetPlatformVersion);
|
xw.Content(this->WindowsTargetPlatformVersion);
|
||||||
xw.EndElement(); // WindowsTargetPlatformVersion
|
xw.EndElement(); // WindowsTargetPlatformVersion
|
||||||
}
|
}
|
||||||
if (this->GetPlatformName() == "ARM") {
|
if (this->GetPlatformName() == "ARM64") {
|
||||||
|
xw.StartElement("WindowsSDKDesktopARM64Support");
|
||||||
|
xw.Content("true");
|
||||||
|
xw.EndElement(); // WindowsSDK64DesktopARMSupport
|
||||||
|
}
|
||||||
|
else if (this->GetPlatformName() == "ARM") {
|
||||||
xw.StartElement("WindowsSDKDesktopARMSupport");
|
xw.StartElement("WindowsSDKDesktopARMSupport");
|
||||||
xw.Content("true");
|
xw.Content("true");
|
||||||
xw.EndElement(); // WindowsSDKDesktopARMSupport
|
xw.EndElement(); // WindowsSDKDesktopARMSupport
|
||||||
|
|||||||
@@ -526,6 +526,7 @@ cmVS7FlagTable cmLocalVisualStudio7GeneratorLinkFlagTable[] = {
|
|||||||
{ "TargetMachine", "MACHINE:SH5", "Machine SH5", "15", 0 },
|
{ "TargetMachine", "MACHINE:SH5", "Machine SH5", "15", 0 },
|
||||||
{ "TargetMachine", "MACHINE:THUMB", "Machine THUMB", "16", 0 },
|
{ "TargetMachine", "MACHINE:THUMB", "Machine THUMB", "16", 0 },
|
||||||
{ "TargetMachine", "MACHINE:X64", "Machine x64", "17", 0 },
|
{ "TargetMachine", "MACHINE:X64", "Machine x64", "17", 0 },
|
||||||
|
{ "TargetMachine", "MACHINE:ARM64", "Machine ARM64", "18", 0 },
|
||||||
{ "TurnOffAssemblyGeneration", "NOASSEMBLY",
|
{ "TurnOffAssemblyGeneration", "NOASSEMBLY",
|
||||||
"No assembly even if CLR information is present in objects.", "true", 0 },
|
"No assembly even if CLR information is present in objects.", "true", 0 },
|
||||||
{ "ModuleDefinitionFile", "DEF:", "add an export def file", "",
|
{ "ModuleDefinitionFile", "DEF:", "add an export def file", "",
|
||||||
|
|||||||
@@ -87,6 +87,7 @@ static cmVS7FlagTable cmVS141LinkFlagTable[] = {
|
|||||||
|
|
||||||
{ "TargetMachine", "", "Not Set", "NotSet", 0 },
|
{ "TargetMachine", "", "Not Set", "NotSet", 0 },
|
||||||
{ "TargetMachine", "MACHINE:ARM", "MachineARM", "MachineARM", 0 },
|
{ "TargetMachine", "MACHINE:ARM", "MachineARM", "MachineARM", 0 },
|
||||||
|
{ "TargetMachine", "MACHINE:ARM64", "MachineARM64", "MachineARM64", 0 },
|
||||||
{ "TargetMachine", "MACHINE:EBC", "MachineEBC", "MachineEBC", 0 },
|
{ "TargetMachine", "MACHINE:EBC", "MachineEBC", "MachineEBC", 0 },
|
||||||
{ "TargetMachine", "MACHINE:IA64", "MachineIA64", "MachineIA64", 0 },
|
{ "TargetMachine", "MACHINE:IA64", "MachineIA64", "MachineIA64", 0 },
|
||||||
{ "TargetMachine", "MACHINE:MIPS", "MachineMIPS", "MachineMIPS", 0 },
|
{ "TargetMachine", "MACHINE:MIPS", "MachineMIPS", "MachineMIPS", 0 },
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ static cmVS7FlagTable cmVS14LibFlagTable[] = {
|
|||||||
0 },
|
0 },
|
||||||
|
|
||||||
{ "TargetMachine", "MACHINE:ARM", "MachineARM", "MachineARM", 0 },
|
{ "TargetMachine", "MACHINE:ARM", "MachineARM", "MachineARM", 0 },
|
||||||
|
{ "TargetMachine", "MACHINE:ARM64", "MachineARM64", "MachineARM64", 0 },
|
||||||
{ "TargetMachine", "MACHINE:EBC", "MachineEBC", "MachineEBC", 0 },
|
{ "TargetMachine", "MACHINE:EBC", "MachineEBC", "MachineEBC", 0 },
|
||||||
{ "TargetMachine", "MACHINE:IA64", "MachineIA64", "MachineIA64", 0 },
|
{ "TargetMachine", "MACHINE:IA64", "MachineIA64", "MachineIA64", 0 },
|
||||||
{ "TargetMachine", "MACHINE:MIPS", "MachineMIPS", "MachineMIPS", 0 },
|
{ "TargetMachine", "MACHINE:MIPS", "MachineMIPS", "MachineMIPS", 0 },
|
||||||
|
|||||||
@@ -3893,6 +3893,10 @@ void cmVisualStudio10TargetGenerator::WriteApplicationTypeSettings()
|
|||||||
this->WriteString("<AppContainerApplication>true"
|
this->WriteString("<AppContainerApplication>true"
|
||||||
"</AppContainerApplication>\n",
|
"</AppContainerApplication>\n",
|
||||||
2);
|
2);
|
||||||
|
} else if (this->Platform == "ARM64") {
|
||||||
|
this->WriteString("<WindowsSDKDesktopARM64Support>true"
|
||||||
|
"</WindowsSDKDesktopARM64Support>\n",
|
||||||
|
2);
|
||||||
} else if (this->Platform == "ARM") {
|
} else if (this->Platform == "ARM") {
|
||||||
this->WriteString("<WindowsSDKDesktopARMSupport>true"
|
this->WriteString("<WindowsSDKDesktopARMSupport>true"
|
||||||
"</WindowsSDKDesktopARMSupport>\n",
|
"</WindowsSDKDesktopARMSupport>\n",
|
||||||
|
|||||||
Reference in New Issue
Block a user