mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-05 13:20:47 -06:00
MSVC: Add support for targeting ARM64EC
This commit is contained in:
@@ -116,6 +116,9 @@
|
|||||||
# if defined(_M_IA64)
|
# if defined(_M_IA64)
|
||||||
# define ARCHITECTURE_ID "IA64"
|
# define ARCHITECTURE_ID "IA64"
|
||||||
|
|
||||||
|
# elif defined(_M_ARM64EC)
|
||||||
|
# define ARCHITECTURE_ID "ARM64EC"
|
||||||
|
|
||||||
# elif defined(_M_X64) || defined(_M_AMD64)
|
# elif defined(_M_X64) || defined(_M_AMD64)
|
||||||
# define ARCHITECTURE_ID "x64"
|
# define ARCHITECTURE_ID "x64"
|
||||||
|
|
||||||
|
|||||||
@@ -154,7 +154,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 "^ARM64")
|
if(_MSVC_${lang}_ARCHITECTURE_FAMILY MATCHES "^ARM64EC")
|
||||||
|
set(_MSVC_${lang}_ARCHITECTURE_FAMILY "ARM64EC")
|
||||||
|
elseif(_MSVC_${lang}_ARCHITECTURE_FAMILY MATCHES "^ARM64")
|
||||||
set(_MSVC_${lang}_ARCHITECTURE_FAMILY "ARM64")
|
set(_MSVC_${lang}_ARCHITECTURE_FAMILY "ARM64")
|
||||||
elseif(_MSVC_${lang}_ARCHITECTURE_FAMILY MATCHES "^ARM")
|
elseif(_MSVC_${lang}_ARCHITECTURE_FAMILY MATCHES "^ARM")
|
||||||
set(_MSVC_${lang}_ARCHITECTURE_FAMILY "ARM")
|
set(_MSVC_${lang}_ARCHITECTURE_FAMILY "ARM")
|
||||||
@@ -224,7 +226,9 @@ elseif(WINDOWS_PHONE OR WINDOWS_STORE)
|
|||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
set(_PLATFORM_DEFINES "/DWIN32")
|
set(_PLATFORM_DEFINES "/DWIN32")
|
||||||
|
if((_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM64EC") OR (_MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM64EC"))
|
||||||
|
set(_PLATFORM_DEFINES "${_PLATFORM_DEFINES} /D_AMD64_ /DAMD64 /D_ARM64EC_ /DARM64EC /D_ARM64EC_WORKAROUND_")
|
||||||
|
endif()
|
||||||
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")
|
||||||
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)
|
||||||
@@ -261,6 +265,8 @@ if(MSVC_C_ARCHITECTURE_ID)
|
|||||||
set(_MACHINE_ARCH_FLAG "/machine:THUMB")
|
set(_MACHINE_ARCH_FLAG "/machine:THUMB")
|
||||||
elseif(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM64")
|
elseif(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM64")
|
||||||
set(_MACHINE_ARCH_FLAG "/machine:ARM64")
|
set(_MACHINE_ARCH_FLAG "/machine:ARM64")
|
||||||
|
elseif(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM64EC")
|
||||||
|
set(_MACHINE_ARCH_FLAG "/machine:ARM64EC")
|
||||||
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()
|
||||||
@@ -271,6 +277,8 @@ elseif(MSVC_CXX_ARCHITECTURE_ID)
|
|||||||
set(_MACHINE_ARCH_FLAG "/machine:THUMB")
|
set(_MACHINE_ARCH_FLAG "/machine:THUMB")
|
||||||
elseif(_MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM64")
|
elseif(_MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM64")
|
||||||
set(_MACHINE_ARCH_FLAG "/machine:ARM64")
|
set(_MACHINE_ARCH_FLAG "/machine:ARM64")
|
||||||
|
elseif(_MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM64EC")
|
||||||
|
set(_MACHINE_ARCH_FLAG "/machine:ARM64EC")
|
||||||
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()
|
||||||
@@ -305,7 +313,11 @@ foreach(t EXE SHARED MODULE)
|
|||||||
string(APPEND CMAKE_${t}_LINKER_FLAGS_RELEASE_INIT " /INCREMENTAL:NO")
|
string(APPEND CMAKE_${t}_LINKER_FLAGS_RELEASE_INIT " /INCREMENTAL:NO")
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
string(APPEND CMAKE_STATIC_LINKER_FLAGS_INIT " ${_MACHINE_ARCH_FLAG}")
|
if((_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM64EC") OR (_MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM64EC"))
|
||||||
|
string(APPEND CMAKE_STATIC_LINKER_FLAGS_INIT " /machine:ARM64X")
|
||||||
|
else()
|
||||||
|
string(APPEND CMAKE_STATIC_LINKER_FLAGS_INIT " ${_MACHINE_ARCH_FLAG}")
|
||||||
|
endif()
|
||||||
unset(_MACHINE_ARCH_FLAG)
|
unset(_MACHINE_ARCH_FLAG)
|
||||||
|
|
||||||
cmake_policy(GET CMP0091 __WINDOWS_MSVC_CMP0091)
|
cmake_policy(GET CMP0091 __WINDOWS_MSVC_CMP0091)
|
||||||
|
|||||||
@@ -200,6 +200,7 @@ public:
|
|||||||
platforms.emplace_back("Win32");
|
platforms.emplace_back("Win32");
|
||||||
platforms.emplace_back("ARM");
|
platforms.emplace_back("ARM");
|
||||||
platforms.emplace_back("ARM64");
|
platforms.emplace_back("ARM64");
|
||||||
|
platforms.emplace_back("ARM64EC");
|
||||||
return platforms;
|
return platforms;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -350,6 +350,13 @@
|
|||||||
"value": "MachineARM64",
|
"value": "MachineARM64",
|
||||||
"flags": []
|
"flags": []
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "TargetMachine",
|
||||||
|
"switch": "MACHINE:ARM64EC",
|
||||||
|
"comment": "MachineARM64EC",
|
||||||
|
"value": "MachineARM64EC",
|
||||||
|
"flags": []
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "TargetMachine",
|
"name": "TargetMachine",
|
||||||
"switch": "MACHINE:EBC",
|
"switch": "MACHINE:EBC",
|
||||||
|
|||||||
@@ -41,6 +41,13 @@
|
|||||||
"value": "MachineARM64",
|
"value": "MachineARM64",
|
||||||
"flags": []
|
"flags": []
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "TargetMachine",
|
||||||
|
"switch": "MACHINE:ARM64X",
|
||||||
|
"comment": "MachineARM64X",
|
||||||
|
"value": "MachineARM64X",
|
||||||
|
"flags": []
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "TargetMachine",
|
"name": "TargetMachine",
|
||||||
"switch": "MACHINE:EBC",
|
"switch": "MACHINE:EBC",
|
||||||
|
|||||||
Reference in New Issue
Block a user