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)
