Cmake: Detect CPU Features
This commit is contained in:
@@ -1,15 +1,31 @@
|
||||
cmake_minimum_required(VERSION 3.2)
|
||||
project(NeuralNetwork CXX)
|
||||
|
||||
include(cmake/CPUFeatures)
|
||||
|
||||
OPTION(BUILD_SHARED_LIBS "Build also shared library." ON)
|
||||
OPTION(USE_AVX "IF avx should be used." ON)
|
||||
OPTION(USE_SSE "IF sse should be used." ON)
|
||||
OPTION(USE_SSE2 "IF only sse2 should be used." OFF)
|
||||
|
||||
if(CPU_AVX_AVAILABLE)
|
||||
OPTION(USE_AVX "If AVX instruction set should be used." ON)
|
||||
endif(CPU_AVX_AVAILABLE)
|
||||
|
||||
if(CPU_SSE3_AVAILABLE)
|
||||
|
||||
OPTION(USE_SSE "If SSE instruction set should be used." ON)
|
||||
|
||||
if(CPU_SSE4.2_AVAILABLE)
|
||||
OPTION(USE_SSE2 "If SSE 2 instruction set should be used." OFF)
|
||||
else()
|
||||
OPTION(USE_SSE2 "If SSE 2 instruction set should be used." ON)
|
||||
endif(CPU_SSE4.2_AVAILABLE)
|
||||
|
||||
endif(CPU_SSE3_AVAILABLE)
|
||||
|
||||
OPTION(ENABLE_TESTS "enables tests" ON)
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -Weffc++ -Wshadow -Wstrict-aliasing -ansi -Woverloaded-virtual -Wdelete-non-virtual-dtor -Wno-unused-function")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++14")
|
||||
|
||||
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
|
||||
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -pthread")
|
||||
|
||||
|
||||
53
cmake/CPUFeatures
Normal file
53
cmake/CPUFeatures
Normal 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)
|
||||
Reference in New Issue
Block a user