Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.xiph.org/xiph/opus.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/OpusFunctions.cmake')
-rw-r--r--cmake/OpusFunctions.cmake30
1 files changed, 22 insertions, 8 deletions
diff --git a/cmake/OpusFunctions.cmake b/cmake/OpusFunctions.cmake
index fcf3351f..3f22ad81 100644
--- a/cmake/OpusFunctions.cmake
+++ b/cmake/OpusFunctions.cmake
@@ -142,14 +142,28 @@ function(opus_detect_neon COMPILER_SUPPORT_NEON)
endfunction()
function(opus_supports_cpu_detection RUNTIME_CPU_CAPABILITY_DETECTION)
- if(MSVC)
- check_include_file(intrin.h HAVE_INTRIN_H)
- else()
- check_include_file(cpuid.h HAVE_CPUID_H)
- endif()
- if(HAVE_INTRIN_H OR HAVE_CPUID_H)
- set(RUNTIME_CPU_CAPABILITY_DETECTION 1 PARENT_SCOPE)
- elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(arm|aarch64)")
+ set(RUNTIME_CPU_CAPABILITY_DETECTION 0 PARENT_SCOPE)
+ if(OPUS_CPU_X86 OR OPUS_CPU_X64)
+ if(MSVC)
+ check_include_file(intrin.h HAVE_INTRIN_H)
+ if(HAVE_INTRIN_H)
+ # if intrin.h is available we assume __cpuid is there
+ set(RUNTIME_CPU_CAPABILITY_DETECTION 1 PARENT_SCOPE)
+ endif()
+ else()
+ include(CFeatureCheck)
+ c_feature_check(CPU_INFO_BY_ASM)
+ set(CPU_INFO_BY_ASM_SUPPORTED ${CPU_INFO_BY_ASM_SUPPORTED} PARENT_SCOPE)
+ check_include_file(cpuid.h HAVE_CPUID_H)
+ if(HAVE_CPUID_H)
+ c_feature_check(CPU_INFO_BY_C)
+ set(CPU_INFO_BY_C_SUPPORTED ${CPU_INFO_BY_C_SUPPORTED} PARENT_SCOPE)
+ endif()
+ if(CPU_INFO_BY_ASM_SUPPORTED OR CPU_INFO_BY_C_SUPPORTED)
+ set(RUNTIME_CPU_CAPABILITY_DETECTION 1 PARENT_SCOPE)
+ endif()
+ endif()
+ elseif(OPUS_CPU_ARM)
# ARM cpu detection is implemented for Windows and anything
# using a Linux kernel (such as Android).
if (CMAKE_SYSTEM_NAME MATCHES "(Windows|Linux|Android)")