Cmake: Detect CPU Features

This commit is contained in:
2016-02-18 22:58:13 +01:00
parent c45fd63591
commit 1967a13d7f
2 changed files with 72 additions and 3 deletions

53
cmake/CPUFeatures Normal file
View File

@@ -0,0 +1,53 @@
cmake_minimum_required(VERSION 3.2)
macro(CHECK_CPU)
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
EXEC_PROGRAM(cat ARGS "/proc/cpuinfo" OUTPUT_VARIABLE CPUINFO)
STRING(REGEX REPLACE "^.*(sse2).*$" "\\1" SSE_THERE ${CPUINFO})
STRING(COMPARE EQUAL "sse2" "${SSE_THERE}" SSE2_TRUE)
IF (SSE2_TRUE)
MESSAGE("-- -- Found SSE2")
set(CPU_SSE2_AVAILABLE true INTERNAL BOOL "SSE2 available on host")
ELSE ()
set(CPU_SSE2_AVAILABLE false INTERNAL BOOL "SSE2 not available on host")
ENDIF (SSE2_TRUE)
STRING(REGEX REPLACE "^.*(sse3).*$" "\\1" SSE_THERE ${CPUINFO})
STRING(COMPARE EQUAL "sse3" "${SSE_THERE}" SSE3_TRUE)
IF (SSE3_TRUE)
MESSAGE("-- -- Found SSE3")
set(CPU_SSE3_AVAILABLE true INTERNAL BOOL "SSE3 available on host")
ELSE ()
set(CPU_SSE3_AVAILABLE false INTERNAL BOOL "SSE3 not available on host")
ENDIF (SSE3_TRUE)
STRING(REGEX REPLACE "^.*(sse4_2).*$" "\\1" SSE_THERE ${CPUINFO})
STRING(COMPARE EQUAL "sse4_2" "${SSE_THERE}" SSE4.2_TRUE)
IF (SSE4.2_TRUE)
MESSAGE("-- -- Found SSE4.2")
set(CPU_SSE4.2_AVAILABLE true INTERNAL BOOL "SSE4.2 available on host")
ELSE ()
set(CPU_SSE4.2_AVAILABLE false INTERNAL BOOL "SSE4.2 not available on host")
ENDIF (SSE4.2_TRUE)
STRING(REGEX REPLACE "^.*(avx).*$" "\\1" SSE_THERE ${CPUINFO})
STRING(COMPARE EQUAL "avx" "${SSE_THERE}" AVX_TRUE)
IF (AVX_TRUE)
MESSAGE("-- -- Found AVX")
set(CPU_AVX_AVAILABLE true INTERNAL BOOL "AVX available on host")
ELSE ()
set(CPU_AVX_AVAILABLE false INTERNAL BOOL "AVX not available on host")
ENDIF (AVX_TRUE)
else()
MESSAGE("Error detecting CPU features")
endif(CMAKE_SYSTEM_NAME MATCHES "Linux")
endmacro(CHECK_CPU)
if(CPU_DETECTED)
else()
MESSAGE("-- Detecting CPU Features")
CHECK_CPU()
MESSAGE("-- Detecting CPU Features - done")
set(CPU_DETECTED true CACHE INTERNAL "asd")
endif(CPU_DETECTED)