# Check if SSE/AVX instructions are available on the machine where # the project is compiled. 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) set(SSE2_FOUND true CACHE BOOL "SSE2 available on host") else() set(SSE2_FOUND false CACHE BOOL "SSE2 available on host") endif() string(REGEX REPLACE "^.*(avx2).*$" "\\1" SSE_THERE "${CPUINFO}") string(COMPARE EQUAL "avx2" "${SSE_THERE}" AVX2_TRUE) if(AVX2_TRUE) set(AVX2_FOUND true CACHE BOOL "AVX2 available on host") else() set(AVX2_FOUND false CACHE BOOL "AVX2 available on host") endif() elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") exec_program("/usr/sbin/sysctl -a | grep machdep.cpu.features" OUTPUT_VARIABLE CPUINFO) string(REGEX REPLACE "^.*[^S](SSE2).*$" "\\1" SSE_THERE "${CPUINFO}") string(COMPARE EQUAL "SSE2" "${SSE_THERE}" SSE2_TRUE) if(SSE2_TRUE) set(SSE2_FOUND true CACHE BOOL "SSE2 available on host") else() set(SSE2_FOUND false CACHE BOOL "SSE2 available on host") endif() exec_program("/usr/sbin/sysctl -a | grep machdep.cpu.leaf7_features" OUTPUT_VARIABLE CPUINFO) string(REGEX REPLACE "^.*(AVX2).*$" "\\1" SSE_THERE "${CPUINFO}") string(COMPARE EQUAL "AVX2" "${SSE_THERE}" AVX2_TRUE) if(AVX2_TRUE) set(AVX2_FOUND true CACHE BOOL "AVX2 available on host") else() set(AVX2_FOUND false CACHE BOOL "AVX2 available on host") endif() elseif(CMAKE_SYSTEM_NAME MATCHES "Windows") # TODO. For now supposing SSE2 is safe enough set(SSE2_FOUND true CACHE BOOL "SSE2 available on host") set(AVX2_FOUND false CACHE BOOL "AVX2 available on host") else() set(SSE2_FOUND true CACHE BOOL "SSE2 available on host") set(AVX2_FOUND false CACHE BOOL "AVX2 available on host") endif() if(NOT SSE2_FOUND) message(STATUS "Could not find hardware support for SSE2 on this machine.") endif() if(NOT AVX2_FOUND) message(STATUS "Could not find hardware support for AVX2 on this machine.") endif() mark_as_advanced(SSE2_FOUND AVX2_FOUND)