diff options
Diffstat (limited to 'cmake/modules/FindSSE.cmake')
| -rw-r--r-- | cmake/modules/FindSSE.cmake | 45 |
1 files changed, 41 insertions, 4 deletions
diff --git a/cmake/modules/FindSSE.cmake b/cmake/modules/FindSSE.cmake index d001b03..b860dca 100644 --- a/cmake/modules/FindSSE.cmake +++ b/cmake/modules/FindSSE.cmake | |||
| @@ -40,6 +40,41 @@ if(CMAKE_SYSTEM_NAME MATCHES "Linux") | |||
| 40 | string(COMPARE EQUAL "avx2" "${_SSE_THERE}" _AVX2_TRUE) | 40 | string(COMPARE EQUAL "avx2" "${_SSE_THERE}" _AVX2_TRUE) |
| 41 | CHECK_CXX_ACCEPTS_FLAG("-mavx2" _AVX2_OK) | 41 | CHECK_CXX_ACCEPTS_FLAG("-mavx2" _AVX2_OK) |
| 42 | endif() | 42 | endif() |
| 43 | elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") | ||
| 44 | if(CPU MATCHES "amd64" OR CPU MATCHES "i.86") | ||
| 45 | exec_program(cat ARGS "/var/run/dmesg.boot | grep Features" OUTPUT_VARIABLE CPUINFO) | ||
| 46 | |||
| 47 | string(REGEX REPLACE "^.*(SSE).*$" "\\1" _SSE_THERE ${CPUINFO}) | ||
| 48 | string(COMPARE EQUAL "SSE" "${_SSE_THERE}" _SSE_TRUE) | ||
| 49 | CHECK_CXX_ACCEPTS_FLAG("-msse" _SSE_OK) | ||
| 50 | |||
| 51 | string(REGEX REPLACE "^.*(SSE2).*$" "\\1" _SSE_THERE ${CPUINFO}) | ||
| 52 | string(COMPARE EQUAL "SSE2" "${_SSE_THERE}" _SSE2_TRUE) | ||
| 53 | CHECK_CXX_ACCEPTS_FLAG("-msse2" _SSE2_OK) | ||
| 54 | |||
| 55 | string(REGEX REPLACE "^.*(SSE3).*$" "\\1" _SSE_THERE ${CPUINFO}) | ||
| 56 | string(COMPARE EQUAL "SSE3" "${_SSE_THERE}" _SSE3_TRUE) | ||
| 57 | CHECK_CXX_ACCEPTS_FLAG("-msse3" _SSE3_OK) | ||
| 58 | |||
| 59 | string(REGEX REPLACE "^.*(SSSE3).*$" "\\1" _SSE_THERE ${CPUINFO}) | ||
| 60 | string(COMPARE EQUAL "SSSE3" "${_SSE_THERE}" _SSSE3_TRUE) | ||
| 61 | CHECK_CXX_ACCEPTS_FLAG("-mssse3" _SSSE3_OK) | ||
| 62 | |||
| 63 | string(REGEX REPLACE "^.*(SSE4.1).*$" "\\1" _SSE_THERE ${CPUINFO}) | ||
| 64 | string(COMPARE EQUAL "SSE4.1" "${_SSE_THERE}" _SSE41_TRUE) | ||
| 65 | CHECK_CXX_ACCEPTS_FLAG("-msse4.1" _SSE41_OK) | ||
| 66 | string(REGEX REPLACE "^.*(SSE4.2).*$" "\\1" _SSE_THERE ${CPUINFO}) | ||
| 67 | string(COMPARE EQUAL "SSE4.2" "${_SSE_THERE}" _SSE42_TRUE) | ||
| 68 | CHECK_CXX_ACCEPTS_FLAG("-msse4.2" _SSE42_OK) | ||
| 69 | |||
| 70 | string(REGEX REPLACE "^.*(AVX).*$" "\\1" _SSE_THERE ${CPUINFO}) | ||
| 71 | string(COMPARE EQUAL "AVX" "${_SSE_THERE}" _AVX_TRUE) | ||
| 72 | CHECK_CXX_ACCEPTS_FLAG("-mavx" _AVX_OK) | ||
| 73 | |||
| 74 | string(REGEX REPLACE "^.*(AVX2).*$" "\\1" _SSE_THERE ${CPUINFO}) | ||
| 75 | string(COMPARE EQUAL "AVX2" "${_SSE_THERE}" _AVX2_TRUE) | ||
| 76 | CHECK_CXX_ACCEPTS_FLAG("-mavx2" _AVX2_OK) | ||
| 77 | endif() | ||
| 43 | elseif(CMAKE_SYSTEM_NAME MATCHES "Android") | 78 | elseif(CMAKE_SYSTEM_NAME MATCHES "Android") |
| 44 | if(CPU MATCHES "x86_64" OR CPU MATCHES "i.86") | 79 | if(CPU MATCHES "x86_64" OR CPU MATCHES "i.86") |
| 45 | set(_SSE_TRUE TRUE) | 80 | set(_SSE_TRUE TRUE) |
| @@ -94,10 +129,12 @@ elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") | |||
| 94 | endif() | 129 | endif() |
| 95 | elseif(CMAKE_SYSTEM_NAME MATCHES "Windows") | 130 | elseif(CMAKE_SYSTEM_NAME MATCHES "Windows") |
| 96 | # TODO | 131 | # TODO |
| 97 | set(_SSE_TRUE true) | 132 | if(ARCH STREQUAL win32 OR ARCH STREQUAL x64) |
| 98 | set(_SSE_OK true) | 133 | set(_SSE_TRUE true) |
| 99 | set(_SSE2_TRUE true) | 134 | set(_SSE_OK true) |
| 100 | set(_SSE2_OK true) | 135 | set(_SSE2_TRUE true) |
| 136 | set(_SSE2_OK true) | ||
| 137 | endif() | ||
| 101 | endif() | 138 | endif() |
| 102 | 139 | ||
| 103 | include(FindPackageHandleStandardArgs) | 140 | include(FindPackageHandleStandardArgs) |
