Browse Source

Added SSE detection

Thomas Buck 10 years ago
parent
commit
4f383dbc60
4 changed files with 171 additions and 6 deletions
  1. 16
    5
      README.md
  2. 124
    0
      cmake/FindSSE.cmake
  3. 30
    0
      src/CMakeLists.txt
  4. 1
    1
      src/OpenRaider.cpp

+ 16
- 5
README.md View File

218
 
218
 
219
 The included Unit Test Framework [greatest](https://github.com/silentbicycle/greatest/) by Scott Vokes is licensed under the [ISC License](http://www.isc.org/downloads/software-support-policy/isc-license/).
219
 The included Unit Test Framework [greatest](https://github.com/silentbicycle/greatest/) by Scott Vokes is licensed under the [ISC License](http://www.isc.org/downloads/software-support-policy/isc-license/).
220
 
220
 
221
-The included cmake scripts [FindALUT](https://github.com/rpavlik/cmake-modules/blob/master/FindALUT.cmake), [FindSDL2](https://github.com/dhewm/dhewm3/blob/master/neo/sys/cmake/FindSDL2.cmake) and [FindSDL2TTF](https://github.com/Deraen/ohj2710/blob/master/cmake_modules/FindSDL2TTF.cmake) are released under the Boost Software License (for FindALUT) and under the BSD License for the other two. Authors: Ryan Pavlik, Iowa State University, Eric Wing and Kitware Inc.
221
+There are some included cmake scripts:
222
+
223
+* [FindALUT](https://github.com/rpavlik/cmake-modules/blob/master/FindALUT.cmake)
224
+* [FindSDL2](https://github.com/dhewm/dhewm3/blob/master/neo/sys/cmake/FindSDL2.cmake)
225
+* [FindSDL2TTF](https://github.com/Deraen/ohj2710/blob/master/cmake_modules/FindSDL2TTF.cmake)
226
+* [FindSSE](https://gitorious.org/vc/vc/source/a1d8b9fc31060d870386613cc72319546c850b87:cmake/FindSSE.cmake)
227
+
228
+See the respective files in `cmake` for their licensing.
229
+
230
+* Copyright 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>, Iowa State University, Distributed under the Boost Software License.
231
+* Copyright 2003-2009 Kitware, Inc.
232
+* Eric Wing
222
 
233
 
223
 OpenRaider is based on code, specs, and alogrithms from:
234
 OpenRaider is based on code, specs, and alogrithms from:
224
 
235
 
225
-+ GooseEgg/Freyja 3d Modelers by Mongoose
226
-+ TR Rosetta Stone spec sheet by Anonymous
227
-+ TRView 1.0.0 by Yuri Zhivago, with patches by Mongoose
236
+* GooseEgg/Freyja 3d Modelers by Mongoose
237
+* TR Rosetta Stone spec sheet by Anonymous
238
+* TRView 1.0.0 by Yuri Zhivago, with patches by Mongoose
228
 
239
 
229
 All code should be GPLed, unless otherwise noted.
240
 All code should be GPLed, unless otherwise noted.
230
 
241
 
231
-2013, 2014 improvements & clean-up by xythobuz.
242
+2013, 2014 improvements, clean-up by xythobuz.

+ 124
- 0
cmake/FindSSE.cmake View File

1
+# Check if SSE instructions are available on the machine where 
2
+# the project is compiled.
3
+
4
+IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
5
+    EXEC_PROGRAM(cat ARGS "/proc/cpuinfo" OUTPUT_VARIABLE CPUINFO)
6
+
7
+    # TODO
8
+    set(SSE_FOUND true CACHE BOOL "SSE available on host")
9
+
10
+    STRING(REGEX REPLACE "^.*(sse2).*$" "\\1" SSE_THERE ${CPUINFO})
11
+    STRING(COMPARE EQUAL "sse2" "${SSE_THERE}" SSE2_TRUE)
12
+    IF (SSE2_TRUE)
13
+        set(SSE2_FOUND true CACHE BOOL "SSE2 available on host")
14
+    ELSE (SSE2_TRUE)
15
+        set(SSE2_FOUND false CACHE BOOL "SSE2 available on host")
16
+    ENDIF (SSE2_TRUE)
17
+
18
+    # /proc/cpuinfo apparently omits sse3 :(
19
+    STRING(REGEX REPLACE "^.*[^s](sse3).*$" "\\1" SSE_THERE ${CPUINFO})
20
+    STRING(COMPARE EQUAL "sse3" "${SSE_THERE}" SSE3_TRUE)
21
+    IF (NOT SSE3_TRUE)
22
+        STRING(REGEX REPLACE "^.*(T2300).*$" "\\1" SSE_THERE ${CPUINFO})
23
+        STRING(COMPARE EQUAL "T2300" "${SSE_THERE}" SSE3_TRUE)
24
+    ENDIF (NOT SSE3_TRUE)
25
+
26
+    STRING(REGEX REPLACE "^.*(ssse3).*$" "\\1" SSE_THERE ${CPUINFO})
27
+    STRING(COMPARE EQUAL "ssse3" "${SSE_THERE}" SSSE3_TRUE)
28
+    IF (SSE3_TRUE OR SSSE3_TRUE)
29
+        set(SSE3_FOUND true CACHE BOOL "SSE3 available on host")
30
+    ELSE (SSE3_TRUE OR SSSE3_TRUE)
31
+        set(SSE3_FOUND false CACHE BOOL "SSE3 available on host")
32
+    ENDIF (SSE3_TRUE OR SSSE3_TRUE)
33
+    IF (SSSE3_TRUE)
34
+        set(SSSE3_FOUND true CACHE BOOL "SSSE3 available on host")
35
+    ELSE (SSSE3_TRUE)
36
+        set(SSSE3_FOUND false CACHE BOOL "SSSE3 available on host")
37
+    ENDIF (SSSE3_TRUE)
38
+
39
+    STRING(REGEX REPLACE "^.*(sse4_1).*$" "\\1" SSE_THERE ${CPUINFO})
40
+    STRING(COMPARE EQUAL "sse4_1" "${SSE_THERE}" SSE41_TRUE)
41
+    IF (SSE41_TRUE)
42
+        set(SSE4_1_FOUND true CACHE BOOL "SSE4.1 available on host")
43
+    ELSE (SSE41_TRUE)
44
+        set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host")
45
+    ENDIF (SSE41_TRUE)
46
+ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Darwin")
47
+    EXEC_PROGRAM("/usr/sbin/sysctl -n machdep.cpu.features" OUTPUT_VARIABLE
48
+        CPUINFO)
49
+
50
+    STRING(REGEX REPLACE "^.*[^S](SSE).*$" "\\1" SSE_THERE ${CPUINFO})
51
+    STRING(COMPARE EQUAL "SSE" "${SSE_THERE}" SSE_TRUE)
52
+    IF (SSE_TRUE)
53
+        set(SSE_FOUND true CACHE BOOL "SSE available on host")
54
+    ELSE (SSE_TRUE)
55
+        set(SSE_FOUND false CACHE BOOL "SSE available on host")
56
+    ENDIF (SSE_TRUE)
57
+
58
+    STRING(REGEX REPLACE "^.*[^S](SSE2).*$" "\\1" SSE_THERE ${CPUINFO})
59
+    STRING(COMPARE EQUAL "SSE2" "${SSE_THERE}" SSE2_TRUE)
60
+    IF (SSE2_TRUE)
61
+        set(SSE2_FOUND true CACHE BOOL "SSE2 available on host")
62
+    ELSE (SSE2_TRUE)
63
+        set(SSE2_FOUND false CACHE BOOL "SSE2 available on host")
64
+    ENDIF (SSE2_TRUE)
65
+
66
+    STRING(REGEX REPLACE "^.*[^S](SSE3).*$" "\\1" SSE_THERE ${CPUINFO})
67
+    STRING(COMPARE EQUAL "SSE3" "${SSE_THERE}" SSE3_TRUE)
68
+    IF (SSE3_TRUE)
69
+        set(SSE3_FOUND true CACHE BOOL "SSE3 available on host")
70
+    ELSE (SSE3_TRUE)
71
+        set(SSE3_FOUND false CACHE BOOL "SSE3 available on host")
72
+    ENDIF (SSE3_TRUE)
73
+
74
+    STRING(REGEX REPLACE "^.*(SSSE3).*$" "\\1" SSE_THERE ${CPUINFO})
75
+    STRING(COMPARE EQUAL "SSSE3" "${SSE_THERE}" SSSE3_TRUE)
76
+    IF (SSSE3_TRUE)
77
+        set(SSSE3_FOUND true CACHE BOOL "SSSE3 available on host")
78
+    ELSE (SSSE3_TRUE)
79
+        set(SSSE3_FOUND false CACHE BOOL "SSSE3 available on host")
80
+    ENDIF (SSSE3_TRUE)
81
+
82
+    STRING(REGEX REPLACE "^.*(SSE4.1).*$" "\\1" SSE_THERE ${CPUINFO})
83
+    STRING(COMPARE EQUAL "SSE4.1" "${SSE_THERE}" SSE41_TRUE)
84
+    IF (SSE41_TRUE)
85
+        set(SSE4_1_FOUND true CACHE BOOL "SSE4.1 available on host")
86
+    ELSE (SSE41_TRUE)
87
+        set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host")
88
+    ENDIF (SSE41_TRUE)
89
+ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Windows")
90
+    # TODO
91
+    set(SSE_FOUND    true  CACHE BOOL "SSE available on host")
92
+    set(SSE2_FOUND   true  CACHE BOOL "SSE2 available on host")
93
+    set(SSE3_FOUND   false CACHE BOOL "SSE3 available on host")
94
+    set(SSSE3_FOUND  false CACHE BOOL "SSSE3 available on host")
95
+    set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host")
96
+ELSE(CMAKE_SYSTEM_NAME MATCHES "Linux")
97
+    set(SSE_FOUND    true  CACHE BOOL "SSE available on host")
98
+    set(SSE2_FOUND   true  CACHE BOOL "SSE2 available on host")
99
+    set(SSE3_FOUND   false CACHE BOOL "SSE3 available on host")
100
+    set(SSSE3_FOUND  false CACHE BOOL "SSSE3 available on host")
101
+    set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host")
102
+ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux")
103
+
104
+if(NOT SSE_FOUND)
105
+    MESSAGE(STATUS "Could not find hardware support for SSE on this machine.")
106
+endif(NOT SSE_FOUND)
107
+
108
+if(NOT SSE2_FOUND)
109
+    MESSAGE(STATUS "Could not find hardware support for SSE2 on this machine.")
110
+endif(NOT SSE2_FOUND)
111
+
112
+if(NOT SSE3_FOUND)
113
+    MESSAGE(STATUS "Could not find hardware support for SSE3 on this machine.")
114
+endif(NOT SSE3_FOUND)
115
+
116
+if(NOT SSSE3_FOUND)
117
+    MESSAGE(STATUS "Could not find hardware support for SSSE3 on this machine.")
118
+endif(NOT SSSE3_FOUND)
119
+
120
+if(NOT SSE4_1_FOUND)
121
+    MESSAGE(STATUS "Could not find hardware support for SSE4.1 on this machine.")
122
+endif(NOT SSE4_1_FOUND)
123
+
124
+mark_as_advanced(SSE_FOUND SSE2_FOUND SSE3_FOUND SSSE3_FOUND SSE4_1_FOUND)

+ 30
- 0
src/CMakeLists.txt View File

47
 
47
 
48
 #################################################################
48
 #################################################################
49
 
49
 
50
+# Check for SSE, enable if available
51
+include (../cmake/FindSSE.cmake)
52
+if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
53
+    if (SSE_FOUND)
54
+        set (SSE_FOUND_MSG "${SSE_FOUND_MSG} SSE")
55
+        set (OpenRaider_CXX_FLAGS "${OpenRaider_CXX_FLAGS} -msse")
56
+    endif (SSE_FOUND)
57
+    if (SSE2_FOUND)
58
+        set (SSE_FOUND_MSG "${SSE_FOUND_MSG} SSE2")
59
+        set (OpenRaider_CXX_FLAGS "${OpenRaider_CXX_FLAGS} -msse2")
60
+    endif (SSE2_FOUND)
61
+    if (SSE3_FOUND)
62
+        set (SSE_FOUND_MSG "${SSE_FOUND_MSG} SSE3")
63
+        set (OpenRaider_CXX_FLAGS "${OpenRaider_CXX_FLAGS} -msse3")
64
+    endif (SSE3_FOUND)
65
+    if (SSSE3_FOUND)
66
+        set (SSE_FOUND_MSG "${SSE_FOUND_MSG} SSSE3")
67
+        set (OpenRaider_CXX_FLAGS "${OpenRaider_CXX_FLAGS} -mssse3")
68
+    endif (SSSE3_FOUND)
69
+    if (SSE4_1_FOUND)
70
+        set (SSE_FOUND_MSG "${SSE_FOUND_MSG} SSE4.1")
71
+        set (OpenRaider_CXX_FLAGS "${OpenRaider_CXX_FLAGS} -msse4.1")
72
+    endif (SSE4_1_FOUND)
73
+
74
+    # Display message if something is enabled
75
+    if (NOT "${SSE_FOUND_MSG}" STREQUAL "")
76
+        message ("Enabled${SSE_FOUND_MSG}...")
77
+    endif (NOT "${SSE_FOUND_MSG}" STREQUAL "")
78
+endif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
79
+
50
 # Apply Flags
80
 # Apply Flags
51
 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenRaider_CXX_FLAGS}")
81
 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenRaider_CXX_FLAGS}")
52
 set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${OpenRaider_CXX_FLAGS} ${OpenRaider_CXX_FLAGS_DEBUG}")
82
 set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${OpenRaider_CXX_FLAGS} ${OpenRaider_CXX_FLAGS_DEBUG}")

+ 1
- 1
src/OpenRaider.cpp View File

63
     printf("Build date: %s @ %s\n", __DATE__, __TIME__);
63
     printf("Build date: %s @ %s\n", __DATE__, __TIME__);
64
     printf("Build host: %s\n", BUILD_HOST);
64
     printf("Build host: %s\n", BUILD_HOST);
65
     printf("Web site  : http://github.com/xythobuz/OpenRaider\n");
65
     printf("Web site  : http://github.com/xythobuz/OpenRaider\n");
66
-    printf("Contact   : xythobuz@xythobuz.de");
66
+    printf("Contact   : xythobuz@xythobuz.de\n");
67
 }
67
 }
68
 
68
 
69
 
69
 

Loading…
Cancel
Save