mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-06 05:40:54 -06:00
MSVC: Distinguish among ARM architectures more precisely (#14552)
Detect the exact ARM architecture instead of just "ARM". Treat "ARM" as an architecture family that includes THUMB (ARMV4I and ARMV5I).
This commit is contained in:
@@ -131,14 +131,18 @@ endif()
|
||||
# default to Debug builds
|
||||
set(CMAKE_BUILD_TYPE_INIT Debug)
|
||||
|
||||
# Compute an architecture family from the architecture id.
|
||||
foreach(lang C CXX)
|
||||
set(_MSVC_${lang}_ARCHITECTURE_FAMILY "${MSVC_${lang}_ARCHITECTURE_ID}")
|
||||
if(_MSVC_${lang}_ARCHITECTURE_FAMILY MATCHES "^ARM")
|
||||
set(_MSVC_${lang}_ARCHITECTURE_FAMILY "ARM")
|
||||
elseif(_MSVC_${lang}_ARCHITECTURE_FAMILY MATCHES "^SH")
|
||||
set(_MSVC_${lang}_ARCHITECTURE_FAMILY "SHx")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(WINCE)
|
||||
foreach(lang C CXX)
|
||||
set(_MSVC_${lang}_ARCHITECTURE_FAMILY "${MSVC_${lang}_ARCHITECTURE_ID}")
|
||||
if(_MSVC_${lang}_ARCHITECTURE_FAMILY STREQUAL "THUMB")
|
||||
set(_MSVC_${lang}_ARCHITECTURE_FAMILY "ARM")
|
||||
elseif(_MSVC_${lang}_ARCHITECTURE_FAMILY MATCHES "^SH")
|
||||
set(_MSVC_${lang}_ARCHITECTURE_FAMILY "SHx")
|
||||
endif()
|
||||
string(TOUPPER "${_MSVC_${lang}_ARCHITECTURE_FAMILY}" _MSVC_${lang}_ARCHITECTURE_FAMILY_UPPER)
|
||||
endforeach()
|
||||
|
||||
@@ -168,7 +172,7 @@ elseif(WINDOWS_PHONE OR WINDOWS_STORE)
|
||||
set(_FLAGS_CXX " /DUNICODE /D_UNICODE /GR /EHsc")
|
||||
if(WINDOWS_PHONE)
|
||||
set(CMAKE_C_STANDARD_LIBRARIES_INIT "WindowsPhoneCore.lib RuntimeObject.lib PhoneAppModelHost.lib")
|
||||
elseif(MSVC_C_ARCHITECTURE_ID STREQUAL ARM OR MSVC_CXX_ARCHITECTURE_ID STREQUAL ARM)
|
||||
elseif(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM" OR _MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM")
|
||||
set(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib")
|
||||
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")
|
||||
@@ -176,7 +180,7 @@ elseif(WINDOWS_PHONE OR WINDOWS_STORE)
|
||||
else()
|
||||
set(_PLATFORM_DEFINES "/DWIN32")
|
||||
|
||||
if(MSVC_C_ARCHITECTURE_ID STREQUAL ARM OR MSVC_CXX_ARCHITECTURE_ID 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")
|
||||
elseif(MSVC_VERSION GREATER 1310)
|
||||
set(_RTC1 "/RTC1")
|
||||
@@ -200,9 +204,21 @@ set(CMAKE_CXX_STANDARD_LIBRARIES_INIT "${CMAKE_C_STANDARD_LIBRARIES_INIT}")
|
||||
set (CMAKE_LINK_DEF_FILE_FLAG "/DEF:")
|
||||
# set the machine type
|
||||
if(MSVC_C_ARCHITECTURE_ID)
|
||||
set(_MACHINE_ARCH_FLAG "/machine:${MSVC_C_ARCHITECTURE_ID}")
|
||||
if(MSVC_C_ARCHITECTURE_ID MATCHES "^ARMV.I")
|
||||
set(_MACHINE_ARCH_FLAG "/machine:THUMB")
|
||||
elseif(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM")
|
||||
set(_MACHINE_ARCH_FLAG "/machine:ARM")
|
||||
else()
|
||||
set(_MACHINE_ARCH_FLAG "/machine:${MSVC_C_ARCHITECTURE_ID}")
|
||||
endif()
|
||||
elseif(MSVC_CXX_ARCHITECTURE_ID)
|
||||
set(_MACHINE_ARCH_FLAG "/machine:${MSVC_CXX_ARCHITECTURE_ID}")
|
||||
if(MSVC_CXX_ARCHITECTURE_ID MATCHES "^ARMV.I")
|
||||
set(_MACHINE_ARCH_FLAG "/machine:THUMB")
|
||||
elseif(_MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM")
|
||||
set(_MACHINE_ARCH_FLAG "/machine:ARM")
|
||||
else()
|
||||
set(_MACHINE_ARCH_FLAG "/machine:${MSVC_CXX_ARCHITECTURE_ID}")
|
||||
endif()
|
||||
elseif(MSVC_Fortran_ARCHITECTURE_ID)
|
||||
set(_MACHINE_ARCH_FLAG "/machine:${MSVC_Fortran_ARCHITECTURE_ID}")
|
||||
endif()
|
||||
|
||||
Reference in New Issue
Block a user