-
Notifications
You must be signed in to change notification settings - Fork 9
/
CMakeLists.txt
221 lines (201 loc) · 2.86 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
cmake_minimum_required( VERSION 3.2.2 )
project( qHilbert )
### Verbosity
set( CMAKE_COLOR_MAKEFILE ON )
set( CMAKE_EXPORT_COMPILE_COMMANDS ON )
### Optimizations
if( MSVC )
add_compile_options( /W4 )
elseif( CMAKE_COMPILER_IS_GNUCXX )
add_compile_options( -Ofast )
add_compile_options( -Wall )
add_compile_options( -Wextra )
endif()
### Libraries
## GLM
option( GLM_TEST_ENABLE "" OFF )
add_subdirectory(
dependencies/glm
)
### Targets
add_library(
qHilbert
STATIC
source/qHilbert.cpp
)
target_include_directories(
qHilbert
PUBLIC
include
)
target_link_libraries(
qHilbert
PUBLIC
glm
)
set_target_properties(
qHilbert
PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED YES
CXX_EXTENSIONS ON
)
### Tests
enable_testing()
# Generic
add_executable(
Benchmark-generic
tests/benchmark.cpp
)
target_link_libraries(
Benchmark-generic
PRIVATE
qHilbert
)
set_target_properties(
Benchmark-generic
PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED YES
CXX_EXTENSIONS ON
)
add_test(
NAME Benchmark-generic
COMMAND Benchmark-generic
)
# Native
add_executable(
Benchmark-native
tests/benchmark.cpp
)
target_compile_options(
Benchmark-native
PRIVATE
-mbmi2
)
target_link_libraries(
Benchmark-native
PRIVATE
qHilbert
)
set_target_properties(
Benchmark-native
PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED YES
CXX_EXTENSIONS ON
)
add_test(
NAME Benchmark-native
COMMAND Benchmark-native
)
# bmi2
add_executable(
Benchmark-bmi2
tests/benchmark.cpp
)
target_compile_options(
Benchmark-bmi2
PRIVATE
-mbmi2
)
target_link_libraries(
Benchmark-bmi2
PRIVATE
qHilbert
)
set_target_properties(
Benchmark-bmi2
PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED YES
CXX_EXTENSIONS ON
)
add_test(
NAME Benchmark-bmi2
COMMAND Benchmark-bmi2
)
# SSE4.2
add_executable(
Benchmark-sse42
tests/benchmark.cpp
)
target_compile_options(
Benchmark-sse42
PRIVATE
-mbmi2
-msse4.2
)
target_link_libraries(
Benchmark-sse42
PRIVATE
qHilbert
)
set_target_properties(
Benchmark-sse42
PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED YES
CXX_EXTENSIONS ON
)
add_test(
NAME Benchmark-sse42
COMMAND Benchmark-sse42
)
# AVX2
add_executable(
Benchmark-avx2
tests/benchmark.cpp
)
target_compile_options(
Benchmark-avx2
PRIVATE
-mbmi2
-msse4.2
-mavx2
)
target_link_libraries(
Benchmark-avx2
PRIVATE
qHilbert
)
set_target_properties(
Benchmark-avx2
PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED YES
CXX_EXTENSIONS ON
)
add_test(
NAME Benchmark-avx2
COMMAND Benchmark-avx2
)
# AVX512
add_executable(
Benchmark-avx512
tests/benchmark.cpp
)
target_compile_options(
Benchmark-avx512
PRIVATE
-mbmi2
-msse4.2
-mavx2
-mavx512f
)
target_link_libraries(
Benchmark-avx512
PRIVATE
qHilbert
)
set_target_properties(
Benchmark-avx512
PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED YES
CXX_EXTENSIONS ON
)
add_test(
NAME Benchmark-avx512
COMMAND Benchmark-avx512
)