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