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 () MESSAGE("-- -- Not found SSE2") 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 () MESSAGE("-- -- Not found SSE3") 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 () MESSAGE("-- -- Not found SSE4.2") 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 () MESSAGE("-- -- Not found AVX") ENDIF (AVX_TRUE) STRING(REGEX REPLACE "^.*(fma).*$" "\\1" SSE_THERE ${CPUINFO}) STRING(COMPARE EQUAL "fma" "${SSE_THERE}" FMA_TRUE) IF (FMA_TRUE) MESSAGE("-- -- Found FMA") set(CPU_FMA_AVAILABLE "TRUE" INTERNAL BOOL "FMA available on host") ELSE () MESSAGE("-- -- Not found FMA") ENDIF (FMA_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)