@@ -51,14 +51,21 @@ check_symbol_exists(lrint "math.h" HAVE_LRINT)
5151check_symbol_exists(elf_aux_info "sys/auxv.h" HAVE_ELF_AUX_INFO)
5252cmake_pop_check_state()
5353
54- if (CMAKE_SYSTEM_PROCESSOR MATCHES "(i[0-9]86|x86|X86|amd64|AMD64|x86_64)" )
54+ message (STATUS "Check CPU arch: CMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} CMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR} " )
55+
56+ if (CMAKE_GENERATOR_PLATFORM MATCHES "(arm64|ARM64|arm64ec|ARM64EC)" )
57+ # Microsoft ARM mode, override other checks
58+ # CMake still doesn't recognize it, CMAKE_SYSTEM_PROCESSOR is AMD64
59+ set (OPUS_CPU_ARM_MS)
60+ set (OPUS_CPU_ARM 1)
61+ elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "(arm|aarch64|ARM)" )
62+ set (OPUS_CPU_ARM 1)
63+ elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "(i[0-9]86|x86|X86|amd64|AMD64|x86_64)" )
5564 if (CMAKE_SIZEOF_VOID_P EQUAL 8)
5665 set (OPUS_CPU_X64 1)
5766 else ()
5867 set (OPUS_CPU_X86 1)
5968 endif ()
60- elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "(arm|aarch64|ARM)" )
61- set (OPUS_CPU_ARM 1)
6269endif ()
6370
6471if (NOT OPUS_DISABLE_INTRINSICS)
@@ -68,12 +75,16 @@ endif()
6875if (OPUS_CPU_X86 OR OPUS_CPU_X64 AND NOT OPUS_DISABLE_INTRINSICS)
6976 opus_detect_sse(COMPILER_SUPPORT_SIMD)
7077elseif (OPUS_CPU_ARM AND NOT OPUS_DISABLE_INTRINSICS)
71- opus_detect_neon(COMPILER_SUPPORT_NEON)
78+ if (OPUS_CPU_ARM_MS)
79+ set (COMPILER_SUPPORT_NEON 1)
80+ else ()
81+ opus_detect_neon(COMPILER_SUPPORT_NEON)
82+ endif ()
7283 if (COMPILER_SUPPORT_NEON)
7384 option (OPUS_USE_NEON "Option to enable NEON" ON )
7485 option (OPUS_MAY_HAVE_NEON "Does runtime check for neon support" ON )
7586 option (OPUS_PRESUME_NEON "Assume target CPU has NEON support" OFF )
76- if (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64" )
87+ if (OPUS_CPU_ARM_MS OR CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64" )
7788 set (OPUS_PRESUME_NEON ON )
7889 elseif (CMAKE_SYSTEM_NAME MATCHES "iOS" )
7990 set (OPUS_PRESUME_NEON ON )
0 commit comments