diff options
| author | manuel <manuel@mausz.at> | 2016-11-24 21:27:41 +0100 |
|---|---|---|
| committer | manuel <manuel@mausz.at> | 2016-11-24 21:27:41 +0100 |
| commit | 8cdf8dec703d882b46ca50a769fabb95ffc48e2c (patch) | |
| tree | f7fe8233508f79d3dc94f8f445ce6342e7dfbdbb /project/cmake/modules/FindSSE.cmake | |
| parent | 5823b05feb29a59510c32a9c28ca18b50b9b6399 (diff) | |
| download | kodi-pvr-build-8cdf8dec703d882b46ca50a769fabb95ffc48e2c.tar.gz kodi-pvr-build-8cdf8dec703d882b46ca50a769fabb95ffc48e2c.tar.bz2 kodi-pvr-build-8cdf8dec703d882b46ca50a769fabb95ffc48e2c.zip | |
sync with upstream
Diffstat (limited to 'project/cmake/modules/FindSSE.cmake')
| -rw-r--r-- | project/cmake/modules/FindSSE.cmake | 238 |
1 files changed, 138 insertions, 100 deletions
diff --git a/project/cmake/modules/FindSSE.cmake b/project/cmake/modules/FindSSE.cmake index c76b811..0554663 100644 --- a/project/cmake/modules/FindSSE.cmake +++ b/project/cmake/modules/FindSSE.cmake | |||
| @@ -1,105 +1,143 @@ | |||
| 1 | # Check if SSE instructions are available on the machine where | 1 | # Check if SSE instructions are available on the machine where |
| 2 | # the project is compiled. | 2 | # the project is compiled. |
| 3 | include(TestCXXAcceptsFlag) | ||
| 3 | 4 | ||
| 4 | IF(CMAKE_SYSTEM_NAME MATCHES "Linux") | 5 | if(CMAKE_SYSTEM_NAME MATCHES "Linux") |
| 5 | EXEC_PROGRAM(cat ARGS "/proc/cpuinfo" OUTPUT_VARIABLE CPUINFO) | 6 | if(CPU MATCHES "x86_64" OR CPU MATCHES "i.86") |
| 6 | 7 | exec_program(cat ARGS "/proc/cpuinfo" OUTPUT_VARIABLE CPUINFO) | |
| 7 | STRING(REGEX REPLACE "^.*(sse2).*$" "\\1" SSE_THERE ${CPUINFO}) | 8 | |
| 8 | STRING(COMPARE EQUAL "sse2" "${SSE_THERE}" SSE2_TRUE) | 9 | string(REGEX REPLACE "^.*(sse).*$" "\\1" _SSE_THERE ${CPUINFO}) |
| 9 | IF (SSE2_TRUE) | 10 | string(COMPARE EQUAL "sse" "${_SSE_THERE}" _SSE_TRUE) |
| 10 | set(SSE2_FOUND true CACHE BOOL "SSE2 available on host") | 11 | CHECK_CXX_ACCEPTS_FLAG("-msse" _SSE_OK) |
| 11 | ELSE (SSE2_TRUE) | 12 | |
| 12 | set(SSE2_FOUND false CACHE BOOL "SSE2 available on host") | 13 | string(REGEX REPLACE "^.*(sse2).*$" "\\1" _SSE_THERE ${CPUINFO}) |
| 13 | ENDIF (SSE2_TRUE) | 14 | string(COMPARE EQUAL "sse2" "${_SSE_THERE}" _SSE2_TRUE) |
| 14 | 15 | CHECK_CXX_ACCEPTS_FLAG("-msse2" _SSE2_OK) | |
| 15 | # /proc/cpuinfo apparently omits sse3 :( | 16 | |
| 16 | STRING(REGEX REPLACE "^.*[^s](sse3).*$" "\\1" SSE_THERE ${CPUINFO}) | 17 | # /proc/cpuinfo apparently omits sse3 :( |
| 17 | STRING(COMPARE EQUAL "sse3" "${SSE_THERE}" SSE3_TRUE) | 18 | string(REGEX REPLACE "^.*[^s](sse3).*$" "\\1" _SSE_THERE ${CPUINFO}) |
| 18 | IF (NOT SSE3_TRUE) | 19 | string(COMPARE EQUAL "sse3" "${_SSE_THERE}" _SSE3_TRUE) |
| 19 | STRING(REGEX REPLACE "^.*(T2300).*$" "\\1" SSE_THERE ${CPUINFO}) | 20 | if(NOT _SSE3_TRUE) |
| 20 | STRING(COMPARE EQUAL "T2300" "${SSE_THERE}" SSE3_TRUE) | 21 | string(REGEX REPLACE "^.*(T2300).*$" "\\1" _SSE_THERE ${CPUINFO}) |
| 21 | ENDIF (NOT SSE3_TRUE) | 22 | string(COMPARE EQUAL "T2300" "${_SSE_THERE}" _SSE3_TRUE) |
| 22 | 23 | endif() | |
| 23 | STRING(REGEX REPLACE "^.*(ssse3).*$" "\\1" SSE_THERE ${CPUINFO}) | 24 | CHECK_CXX_ACCEPTS_FLAG("-msse3" _SSE3_OK) |
| 24 | STRING(COMPARE EQUAL "ssse3" "${SSE_THERE}" SSSE3_TRUE) | 25 | |
| 25 | IF (SSE3_TRUE OR SSSE3_TRUE) | 26 | string(REGEX REPLACE "^.*(ssse3).*$" "\\1" _SSE_THERE ${CPUINFO}) |
| 26 | set(SSE3_FOUND true CACHE BOOL "SSE3 available on host") | 27 | string(COMPARE EQUAL "ssse3" "${_SSE_THERE}" _SSSE3_TRUE) |
| 27 | ELSE (SSE3_TRUE OR SSSE3_TRUE) | 28 | CHECK_CXX_ACCEPTS_FLAG("-mssse3" _SSSE3_OK) |
| 28 | set(SSE3_FOUND false CACHE BOOL "SSE3 available on host") | 29 | |
| 29 | ENDIF (SSE3_TRUE OR SSSE3_TRUE) | 30 | string(REGEX REPLACE "^.*(sse4_1).*$" "\\1" _SSE_THERE ${CPUINFO}) |
| 30 | IF (SSSE3_TRUE) | 31 | string(COMPARE EQUAL "sse4_1" "${_SSE_THERE}" _SSE41_TRUE) |
| 31 | set(SSSE3_FOUND true CACHE BOOL "SSSE3 available on host") | 32 | CHECK_CXX_ACCEPTS_FLAG("-msse4.1" _SSE41_OK) |
| 32 | ELSE (SSSE3_TRUE) | 33 | |
| 33 | set(SSSE3_FOUND false CACHE BOOL "SSSE3 available on host") | 34 | string(REGEX REPLACE "^.*(sse4_2).*$" "\\1" _SSE_THERE ${CPUINFO}) |
| 34 | ENDIF (SSSE3_TRUE) | 35 | string(COMPARE EQUAL "sse4_2" "${_SSE_THERE}" _SSE42_TRUE) |
| 35 | 36 | CHECK_CXX_ACCEPTS_FLAG("-msse4.2" _SSE42_OK) | |
| 36 | STRING(REGEX REPLACE "^.*(sse4_1).*$" "\\1" SSE_THERE ${CPUINFO}) | 37 | |
| 37 | STRING(COMPARE EQUAL "sse4_1" "${SSE_THERE}" SSE41_TRUE) | 38 | string(REGEX REPLACE "^.*(avx).*$" "\\1" _SSE_THERE ${CPUINFO}) |
| 38 | IF (SSE41_TRUE) | 39 | string(COMPARE EQUAL "avx" "${_SSE_THERE}" _AVX_TRUE) |
| 39 | set(SSE4_1_FOUND true CACHE BOOL "SSE4.1 available on host") | 40 | CHECK_CXX_ACCEPTS_FLAG("-mavx" _AVX_OK) |
| 40 | ELSE (SSE41_TRUE) | 41 | |
| 41 | set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host") | 42 | string(REGEX REPLACE "^.*(avx2).*$" "\\1" _SSE_THERE ${CPUINFO}) |
| 42 | ENDIF (SSE41_TRUE) | 43 | string(COMPARE EQUAL "avx2" "${_SSE_THERE}" _AVX2_TRUE) |
| 43 | ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Darwin") | 44 | CHECK_CXX_ACCEPTS_FLAG("-mavx2" _AVX2_OK) |
| 44 | EXEC_PROGRAM("/usr/sbin/sysctl -n machdep.cpu.features" OUTPUT_VARIABLE | 45 | endif() |
| 45 | CPUINFO) | 46 | elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") |
| 46 | 47 | if(NOT CPU MATCHES "arm") | |
| 47 | STRING(REGEX REPLACE "^.*[^S](SSE2).*$" "\\1" SSE_THERE ${CPUINFO}) | 48 | exec_program("/usr/sbin/sysctl -n machdep.cpu.features machdep.cpu.leaf7_features" OUTPUT_VARIABLE CPUINFO) |
| 48 | STRING(COMPARE EQUAL "SSE2" "${SSE_THERE}" SSE2_TRUE) | 49 | |
| 49 | IF (SSE2_TRUE) | 50 | string(REGEX REPLACE "^.*[^S](SSE).*$" "\\1" _SSE_THERE ${CPUINFO}) |
| 50 | set(SSE2_FOUND true CACHE BOOL "SSE2 available on host") | 51 | string(COMPARE EQUAL "SSE" "${_SSE_THERE}" _SSE_TRUE) |
| 51 | ELSE (SSE2_TRUE) | 52 | CHECK_CXX_ACCEPTS_FLAG("-msse" _SSE_OK) |
| 52 | set(SSE2_FOUND false CACHE BOOL "SSE2 available on host") | 53 | |
| 53 | ENDIF (SSE2_TRUE) | 54 | string(REGEX REPLACE "^.*[^S](SSE2).*$" "\\1" _SSE_THERE ${CPUINFO}) |
| 54 | 55 | string(COMPARE EQUAL "SSE2" "${_SSE_THERE}" _SSE2_TRUE) | |
| 55 | STRING(REGEX REPLACE "^.*[^S](SSE3).*$" "\\1" SSE_THERE ${CPUINFO}) | 56 | CHECK_CXX_ACCEPTS_FLAG("-msse2" _SSE2_OK) |
| 56 | STRING(COMPARE EQUAL "SSE3" "${SSE_THERE}" SSE3_TRUE) | 57 | |
| 57 | IF (SSE3_TRUE) | 58 | string(REGEX REPLACE "^.*[^S](SSE3).*$" "\\1" _SSE_THERE ${CPUINFO}) |
| 58 | set(SSE3_FOUND true CACHE BOOL "SSE3 available on host") | 59 | string(COMPARE EQUAL "SSE3" "${_SSE_THERE}" _SSE3_TRUE) |
| 59 | ELSE (SSE3_TRUE) | 60 | CHECK_CXX_ACCEPTS_FLAG("-msse3" _SSE3_OK) |
| 60 | set(SSE3_FOUND false CACHE BOOL "SSE3 available on host") | 61 | |
| 61 | ENDIF (SSE3_TRUE) | 62 | string(REGEX REPLACE "^.*(SSSE3).*$" "\\1" _SSE_THERE ${CPUINFO}) |
| 62 | 63 | string(COMPARE EQUAL "SSSE3" "${_SSE_THERE}" _SSSE3_TRUE) | |
| 63 | STRING(REGEX REPLACE "^.*(SSSE3).*$" "\\1" SSE_THERE ${CPUINFO}) | 64 | CHECK_CXX_ACCEPTS_FLAG("-mssse3" _SSSE3_OK) |
| 64 | STRING(COMPARE EQUAL "SSSE3" "${SSE_THERE}" SSSE3_TRUE) | 65 | |
| 65 | IF (SSSE3_TRUE) | 66 | string(REGEX REPLACE "^.*(SSE4.1).*$" "\\1" _SSE_THERE ${CPUINFO}) |
| 66 | set(SSSE3_FOUND true CACHE BOOL "SSSE3 available on host") | 67 | string(COMPARE EQUAL "SSE4.1" "${_SSE_THERE}" _SSE41_TRUE) |
| 67 | ELSE (SSSE3_TRUE) | 68 | CHECK_CXX_ACCEPTS_FLAG("-msse4.1" _SSE41_OK) |
| 68 | set(SSSE3_FOUND false CACHE BOOL "SSSE3 available on host") | 69 | |
| 69 | ENDIF (SSSE3_TRUE) | 70 | string(REGEX REPLACE "^.*(SSE4.2).*$" "\\1" _SSE_THERE ${CPUINFO}) |
| 70 | 71 | string(COMPARE EQUAL "SSE4.2" "${_SSE_THERE}" _SSE42_TRUE) | |
| 71 | STRING(REGEX REPLACE "^.*(SSE4.1).*$" "\\1" SSE_THERE ${CPUINFO}) | 72 | CHECK_CXX_ACCEPTS_FLAG("-msse4.2" _SSE42_OK) |
| 72 | STRING(COMPARE EQUAL "SSE4.1" "${SSE_THERE}" SSE41_TRUE) | 73 | |
| 73 | IF (SSE41_TRUE) | 74 | string(REGEX REPLACE "^.*(AVX).*$" "\\1" _SSE_THERE ${CPUINFO}) |
| 74 | set(SSE4_1_FOUND true CACHE BOOL "SSE4.1 available on host") | 75 | string(COMPARE EQUAL "AVX" "${_SSE_THERE}" _AVX_TRUE) |
| 75 | ELSE (SSE41_TRUE) | 76 | CHECK_CXX_ACCEPTS_FLAG("-mavx" _AVX_OK) |
| 76 | set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host") | 77 | |
| 77 | ENDIF (SSE41_TRUE) | 78 | string(REGEX REPLACE "^.*(AVX2).*$" "\\1" _SSE_THERE ${CPUINFO}) |
| 78 | ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Windows") | 79 | string(COMPARE EQUAL "AVX2" "${_SSE_THERE}" _AVX2_TRUE) |
| 80 | CHECK_CXX_ACCEPTS_FLAG("-mavx2" _AVX2_OK) | ||
| 81 | endif() | ||
| 82 | elseif(CMAKE_SYSTEM_NAME MATCHES "Windows") | ||
| 79 | # TODO | 83 | # TODO |
| 80 | set(SSE2_FOUND true CACHE BOOL "SSE2 available on host") | 84 | set(_SSE_TRUE true) |
| 81 | set(SSE3_FOUND false CACHE BOOL "SSE3 available on host") | 85 | set(_SSE_OK true) |
| 82 | set(SSSE3_FOUND false CACHE BOOL "SSSE3 available on host") | 86 | set(_SSE2_TRUE true) |
| 83 | set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host") | 87 | set(_SSE2_OK true) |
| 84 | ELSE(CMAKE_SYSTEM_NAME MATCHES "Linux") | 88 | endif() |
| 85 | set(SSE2_FOUND true CACHE BOOL "SSE2 available on host") | 89 | |
| 86 | set(SSE3_FOUND false CACHE BOOL "SSE3 available on host") | 90 | include(FindPackageHandleStandardArgs) |
| 87 | set(SSSE3_FOUND false CACHE BOOL "SSSE3 available on host") | 91 | find_package_handle_standard_args(SSE |
| 88 | set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host") | 92 | REQUIRED_VARS _SSE_TRUE _SSE_OK |
| 89 | ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux") | 93 | FAIL_MESSAGE "Could not find hardware support for SSE") |
| 90 | 94 | find_package_handle_standard_args(SSE2 | |
| 91 | if(NOT SSE2_FOUND) | 95 | REQUIRED_VARS _SSE2_TRUE _SSE2_OK |
| 92 | MESSAGE(STATUS "Could not find hardware support for SSE2 on this machine.") | 96 | FAIL_MESSAGE "Could not find hardware support for SSE2") |
| 93 | endif(NOT SSE2_FOUND) | 97 | find_package_handle_standard_args(SSE3 |
| 94 | if(NOT SSE3_FOUND) | 98 | REQUIRED_VARS _SSE3_TRUE _SSE3_OK |
| 95 | MESSAGE(STATUS "Could not find hardware support for SSE3 on this machine.") | 99 | FAIL_MESSAGE "Could not find hardware support for SSE3") |
| 96 | endif(NOT SSE3_FOUND) | 100 | find_package_handle_standard_args(SSSE3 |
| 97 | if(NOT SSSE3_FOUND) | 101 | REQUIRED_VARS _SSSE3_TRUE _SSSE3_OK |
| 98 | MESSAGE(STATUS "Could not find hardware support for SSSE3 on this machine.") | 102 | FAIL_MESSAGE "Could not find hardware support for SSSE3") |
| 99 | endif(NOT SSSE3_FOUND) | 103 | find_package_handle_standard_args(SSE4_1 |
| 100 | if(NOT SSE4_1_FOUND) | 104 | REQUIRED_VARS _SSE41_TRUE _SSE41_OK |
| 101 | MESSAGE(STATUS "Could not find hardware support for SSE4.1 on this machine.") | 105 | FAIL_MESSAGE "Could not find hardware support for SSE4.1") |
| 102 | endif(NOT SSE4_1_FOUND) | 106 | find_package_handle_standard_args(SSE4_2 |
| 103 | 107 | REQUIRED_VARS _SSE42_TRUE _SSE42_OK | |
| 104 | mark_as_advanced(SSE2_FOUND SSE3_FOUND SSSE3_FOUND SSE4_1_FOUND) | 108 | FAIL_MESSAGE "Could not find hardware support for SSE4.2") |
| 109 | find_package_handle_standard_args(AVX | ||
| 110 | REQUIRED_VARS _AVX_TRUE _AVX_OK | ||
| 111 | FAIL_MESSAGE "Could not find hardware support for AVX") | ||
| 112 | find_package_handle_standard_args(AVX2 | ||
| 113 | REQUIRED_VARS _AVX2_TRUE _AVX2_OK | ||
| 114 | FAIL_MESSAGE "Could not find hardware support for AVX2") | ||
| 115 | |||
| 116 | mark_as_advanced(SSE2_FOUND SSE3_FOUND SSSE3_FOUND SSE4_1_FOUND SSE4_2_FOUND AVX_FOUND AVX2_FOUND) | ||
| 117 | |||
| 118 | unset(_SSE_THERE) | ||
| 119 | unset(_SSE_TRUE) | ||
| 120 | unset(_SSE_OK) | ||
| 121 | unset(_SSE_OK CACHE) | ||
| 122 | unset(_SSE2_TRUE) | ||
| 123 | unset(_SSE2_OK) | ||
| 124 | unset(_SSE2_OK CACHE) | ||
| 125 | unset(_SSE3_TRUE) | ||
| 126 | unset(_SSE3_OK) | ||
| 127 | unset(_SSE3_OK CACHE) | ||
| 128 | unset(_SSSE3_TRUE) | ||
| 129 | unset(_SSSE3_OK) | ||
| 130 | unset(_SSSE3_OK CACHE) | ||
| 131 | unset(_SSE4_1_TRUE) | ||
| 132 | unset(_SSE41_OK) | ||
| 133 | unset(_SSE41_OK CACHE) | ||
| 134 | unset(_SSE4_2_TRUE) | ||
| 135 | unset(_SSE42_OK) | ||
| 136 | unset(_SSE42_OK CACHE) | ||
| 137 | unset(_AVX_TRUE) | ||
| 138 | unset(_AVX_OK) | ||
| 139 | unset(_AVX_OK CACHE) | ||
| 140 | unset(_AVX2_TRUE) | ||
| 141 | unset(_AVX2_OK) | ||
| 142 | unset(_AVX2_OK CACHE) | ||
| 105 | 143 | ||
