mirror of
https://github.com/GerbilSoft/rvthtool.git
synced 2025-06-18 11:35:33 -04:00
108 lines
3.8 KiB
CMake
108 lines
3.8 KiB
CMake
# Determine CPU architecture.
|
|
IF(MSVC AND _MSVC_C_ARCHITECTURE_FAMILY)
|
|
# Check the MSVC architecture.
|
|
# Set CMAKE_SYSTEM_PROCESSOR to match, since it doesn't get
|
|
# set to the target architecture correctly.
|
|
# TODO: Verify 32-bit.
|
|
IF(_MSVC_C_ARCHITECTURE_FAMILY MATCHES "^[iI]?[xX3]86$")
|
|
SET(CPU_i386 1)
|
|
SET(CMAKE_SYSTEM_PROCESSOR "x86")
|
|
SET(WIN32_MANIFEST_PROCESSOR_ARCHITECTURE "x86")
|
|
ELSEIF(_MSVC_C_ARCHITECTURE_FAMILY MATCHES "^[xX]64$")
|
|
SET(CPU_amd64 1)
|
|
SET(CMAKE_SYSTEM_PROCESSOR "AMD64")
|
|
SET(WIN32_MANIFEST_PROCESSOR_ARCHITECTURE "amd64")
|
|
ELSEIF(_MSVC_C_ARCHITECTURE_FAMILY MATCHES "[iI][aA]64")
|
|
SET(CPU_ia64 1)
|
|
SET(CMAKE_SYSTEM_PROCESSOR "IA64")
|
|
SET(WIN32_MANIFEST_PROCESSOR_ARCHITECTURE "ia64")
|
|
ELSEIF(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM" OR _MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARMV7")
|
|
SET(CPU_arm 1)
|
|
SET(CMAKE_SYSTEM_PROCESSOR "ARM")
|
|
SET(WIN32_MANIFEST_PROCESSOR_ARCHITECTURE "arm")
|
|
ELSEIF(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM64EC")
|
|
SET(CPU_arm64 1)
|
|
SET(CPU_arm64ec 1)
|
|
SET(CMAKE_SYSTEM_PROCESSOR "ARM64")
|
|
# TODO: Does this change for ARM64EC?
|
|
SET(WIN32_MANIFEST_PROCESSOR_ARCHITECTURE "arm64")
|
|
ELSEIF(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM64")
|
|
SET(CPU_arm64 1)
|
|
SET(CMAKE_SYSTEM_PROCESSOR "ARM64")
|
|
SET(WIN32_MANIFEST_PROCESSOR_ARCHITECTURE "arm64")
|
|
ELSE()
|
|
MESSAGE(FATAL_ERROR "Unsupported value for _MSVC_C_ARCHITECTURE_FAMILY: ${_MSVC_C_ARCHITECTURE_FAMILY}")
|
|
ENDIF()
|
|
ELSE()
|
|
# TODO: Verify cross-compile functionality.
|
|
# TODO: ARM/ARM64 is untested.
|
|
STRING(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" arch)
|
|
IF(arch MATCHES "^(i.|x)86$|^x86_64$|^amd64$")
|
|
IF(CMAKE_CL_64 OR ("${CMAKE_SIZEOF_VOID_P}" EQUAL 8))
|
|
SET(CPU_amd64 1)
|
|
SET(WIN32_MANIFEST_PROCESSOR_ARCHITECTURE "amd64")
|
|
ELSE()
|
|
SET(CPU_i386 1)
|
|
SET(WIN32_MANIFEST_PROCESSOR_ARCHITECTURE "x86")
|
|
ENDIF()
|
|
ELSEIF(arch STREQUAL "ia64")
|
|
SET(CPU_ia64 1)
|
|
SET(WIN32_MANIFEST_PROCESSOR_ARCHITECTURE "ia64")
|
|
ELSEIF(arch MATCHES "^arm(|v[1-7](.|h[fl]|hfe[lb]))?$" OR arch STREQUAL "aarch64" OR arch STREQUAL "arm64" OR arch STREQUAL "cortex")
|
|
IF(CMAKE_CL_64 OR ("${CMAKE_SIZEOF_VOID_P}" EQUAL 8))
|
|
SET(CPU_arm64 1)
|
|
SET(WIN32_MANIFEST_PROCESSOR_ARCHITECTURE "arm64")
|
|
ELSE()
|
|
SET(CPU_arm 1)
|
|
SET(WIN32_MANIFEST_PROCESSOR_ARCHITECTURE "arm")
|
|
ENDIF()
|
|
ELSEIF(arch MATCHES "^ppc" OR arch STREQUAL "powerpc")
|
|
IF(arch STREQUAL "ppc64le")
|
|
SET(CPU_ppc64le 1)
|
|
SET(WIN32_MANIFEST_PROCESSOR_ARCHITECTURE "ppc64le")
|
|
ELSEIF(CMAKE_CL_64 OR ("${CMAKE_SIZEOF_VOID_P}" EQUAL 8))
|
|
SET(CPU_ppc64 1)
|
|
SET(WIN32_MANIFEST_PROCESSOR_ARCHITECTURE "ppc64")
|
|
ELSE()
|
|
SET(CPU_ppc 1)
|
|
SET(WIN32_MANIFEST_PROCESSOR_ARCHITECTURE "ppc")
|
|
ENDIF()
|
|
ELSEIF(arch MATCHES "^riscv")
|
|
# TODO: Win32 manifest processor architecture, if it's ever ported to RISC-V.
|
|
IF(CMAKE_CL_64 OR ("${CMAKE_SIZEOF_VOID_P}" EQUAL 8))
|
|
SET(CPU_riscv64 1)
|
|
SET(WIN32_MANIFEST_PROCESSOR_ARCHITECTURE "riscv64")
|
|
ELSE()
|
|
SET(CPU_riscv32 1)
|
|
SET(WIN32_MANIFEST_PROCESSOR_ARCHITECTURE "riscv32")
|
|
ENDIF()
|
|
ELSE()
|
|
MESSAGE(FATAL_ERROR "Unable to determine CPU architecture.\nCMAKE_SYSTEM_PROCESSOR == ${CMAKE_SYSTEM_PROCESSOR}")
|
|
ENDIF()
|
|
UNSET(arch)
|
|
ENDIF()
|
|
|
|
# i386/amd64: Flags for extended instruction sets.
|
|
IF(CPU_i386 OR CPU_amd64)
|
|
# MSVC does not require anything past /arch:SSE2 for SSSE3.
|
|
# ClangCL does require -mssse3, even on 64-bit.
|
|
IF(MSVC)
|
|
IF(CPU_i386)
|
|
SET(SSE2_FLAG "/arch:SSE2")
|
|
SET(SSSE3_FLAG "/arch:SSE2")
|
|
SET(SSE41_FLAG "/arch:SSE2")
|
|
ENDIF(CPU_i386)
|
|
IF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
|
SET(SSSE3_FLAG "-mssse3")
|
|
SET(SSE41_FLAG "-msse4.1")
|
|
ENDIF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
|
ELSE()
|
|
IF(CPU_i386)
|
|
SET(MMX_FLAG "-mmmx")
|
|
SET(SSE2_FLAG "-msse2")
|
|
ENDIF(CPU_i386)
|
|
SET(SSSE3_FLAG "-mssse3")
|
|
SET(SSE41_FLAG "-msse4.1")
|
|
ENDIF()
|
|
ENDIF(CPU_i386 OR CPU_amd64)
|