summaryrefslogtreecommitdiffstats
path: root/CMakeLists.txt
blob: c332448b0ce90c5f1c7b72fedc32cf883bbdab5f (plain)
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
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
cmake_minimum_required(VERSION 3.22)

set(CMAKE_C_COMPILER gcc)
set(CMAKE_CXX_COMPILER g++)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED True)

set(namespace "de")
project("Practical Dynamic Extension" VERSION 0.1.0)

set(debug false)
set(tests True)
set(bench false)
set(vldb_bench true)
set(tail_bench true)

# ALEX doesn't build under C++20
set(build_alex false)

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin")
set(CMAKE_CXX_FLAGS=-latomic -mcx16)

add_compile_options(-Iinclude -Iexternal/PLEX/include -Iexternal -mcx16 -march=native -Werror -Wno-attributes) # -fconcepts-diagnostics-depth=3)

find_package(OpenMP REQUIRED)
add_compile_options(${OpenMP_CXX_FLAGS})
link_libraries(OpenMP::OpenMP_CXX)

if (BSD) 
    add_link_options(-L/usr/local/lib)
    add_compile_options(-I/usr/local/include)
    set(CMAKE_CXX_EXTENSIONS)
endif()

if (debug) 
    add_compile_options(-g -O0 -Wall)
    if (!BSD)
        add_compile_options(-fsanitize=address)
        add_link_options(-fsanitize=address)
        add_compile_options(-fsanitize=undefined)
        add_link_options(-fsanitize=undefined)
    endif()
else()
    add_compile_options(-O3 -g -Wall)
endif()

# Test build instructions
if (tests) 
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin/tests")
    file(MAKE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/tests/data")

    add_executable(mutable_buffer_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/mutable_buffer_tests.cpp)
    target_link_libraries(mutable_buffer_tests PUBLIC gsl check subunit  pthread atomic)
    target_link_options(mutable_buffer_tests PUBLIC -mcx16)
    target_include_directories(mutable_buffer_tests PRIVATE include external/psudb-common/cpp/include)

    add_executable(rangequery_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/rangequery_tests.cpp)
    target_link_libraries(rangequery_tests PUBLIC gsl check subunit  pthread atomic)
    target_link_options(rangequery_tests PUBLIC -mcx16)
    target_include_directories(rangequery_tests PRIVATE include external/psudb-common/cpp/include)

    add_executable(irs_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/irs_tests.cpp)
    target_link_libraries(irs_tests PUBLIC gsl check subunit  pthread atomic)
    target_link_options(irs_tests PUBLIC -mcx16)
    target_include_directories(irs_tests PRIVATE include external/psudb-common/cpp/include)


    add_executable(rangecount_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/rangecount_tests.cpp)
    target_link_libraries(rangecount_tests PUBLIC gsl check subunit  pthread atomic)
    target_link_options(rangecount_tests PUBLIC -mcx16)
    target_include_directories(rangecount_tests PRIVATE include external/psudb-common/cpp/include)


    add_executable(vptree_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/vptree_tests.cpp)
    target_link_libraries(vptree_tests PUBLIC gsl check subunit  pthread atomic)
    target_link_options(vptree_tests PUBLIC -mcx16)
    target_include_directories(vptree_tests PRIVATE include external/vptree external/psudb-common/cpp/include)
    
    add_executable(de_tier_tag ${CMAKE_CURRENT_SOURCE_DIR}/tests/de_tier_tag.cpp)
    target_link_libraries(de_tier_tag PUBLIC gsl check subunit  pthread atomic)
    target_link_options(de_tier_tag PUBLIC -mcx16)
    target_include_directories(de_tier_tag PRIVATE include external/psudb-common/cpp/include external)

    add_executable(de_tier_tomb ${CMAKE_CURRENT_SOURCE_DIR}/tests/de_tier_tomb.cpp)
    target_link_libraries(de_tier_tomb PUBLIC gsl check subunit  pthread atomic)
    target_link_options(de_tier_tomb PUBLIC -mcx16)
    target_include_directories(de_tier_tomb PRIVATE include external/PLEX/include external/psudb-common/cpp/include external)

    add_executable(de_level_tag ${CMAKE_CURRENT_SOURCE_DIR}/tests/de_level_tag.cpp)
    target_link_libraries(de_level_tag PUBLIC gsl check subunit  pthread atomic)
    target_link_options(de_level_tag PUBLIC -mcx16)
    target_include_directories(de_level_tag PRIVATE include external/psudb-common/cpp/include external)

    add_executable(de_level_tomb ${CMAKE_CURRENT_SOURCE_DIR}/tests/de_level_tomb.cpp)
    target_link_libraries(de_level_tomb PUBLIC gsl check subunit  pthread atomic)
    target_link_options(de_level_tomb PUBLIC -mcx16)
    target_include_directories(de_level_tomb PRIVATE include external/ctpl external/PLEX/include external/psudb-common/cpp/include external)

    add_executable(de_bsm_tomb ${CMAKE_CURRENT_SOURCE_DIR}/tests/de_bsm_tomb.cpp)
    target_link_libraries(de_bsm_tomb PUBLIC gsl check subunit  pthread atomic)
    target_link_options(de_bsm_tomb PUBLIC -mcx16)
    target_include_directories(de_bsm_tomb PRIVATE include external/PLEX/include external/psudb-common/cpp/include external)

    add_executable(de_bsm_tag ${CMAKE_CURRENT_SOURCE_DIR}/tests/de_bsm_tag.cpp)
    target_link_libraries(de_bsm_tag PUBLIC gsl check subunit  pthread atomic)
    target_link_options(de_bsm_tag PUBLIC -mcx16)
    target_include_directories(de_bsm_tag PRIVATE include external/PLEX/include external/psudb-common/cpp/include external)

    add_executable(de_level_concurrent ${CMAKE_CURRENT_SOURCE_DIR}/tests/de_level_concurrent.cpp)
    target_link_libraries(de_level_concurrent PUBLIC gsl check subunit  pthread atomic)
    target_link_options(de_level_concurrent PUBLIC -mcx16)
    target_include_directories(de_level_concurrent PRIVATE include external/ctpl external/PLEX/include external/psudb-common/cpp/include external)

    add_executable(de_tier_concurrent ${CMAKE_CURRENT_SOURCE_DIR}/tests/de_tier_concurrent.cpp)
    target_link_libraries(de_tier_concurrent PUBLIC gsl check subunit  pthread atomic)
    target_link_options(de_tier_concurrent PUBLIC -mcx16)
    target_include_directories(de_tier_concurrent PRIVATE include external/ctpl external/PLEX/include external/psudb-common/cpp/include external)
    
    add_executable(memisam_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/memisam_tests.cpp)
    target_link_libraries(memisam_tests PUBLIC gsl check subunit  pthread atomic)
    target_link_options(memisam_tests PUBLIC -mcx16)
    target_include_directories(memisam_tests PRIVATE include external/psudb-common/cpp/include)

    add_executable(alias_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/alias_tests.cpp)
    target_link_libraries(alias_tests PUBLIC gsl check subunit  pthread atomic)
    target_link_options(alias_tests PUBLIC -mcx16)
    target_include_directories(alias_tests PRIVATE include external/psudb-common/cpp/include)

    add_executable(pgm_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/pgm_tests.cpp)
    target_link_libraries(pgm_tests PUBLIC gsl check subunit  pthread gomp atomic)
    target_include_directories(pgm_tests PRIVATE include external/PGM-index/include external/psudb-common/cpp/include)
    target_link_options(pgm_tests PUBLIC -mcx16)
    target_compile_options(pgm_tests PUBLIC)

    # Triespline code doesn't build under OpenBSD due to ambiguous function call;
    # this is likely a difference between gcc and clang, rather than an OS thing 
    if (NOT BSD) 
        add_executable(triespline_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/triespline_tests.cpp)
        target_link_libraries(triespline_tests PUBLIC gsl check subunit  pthread atomic)
        target_link_options(triespline_tests PUBLIC -mcx16)
        target_include_directories(triespline_tests PRIVATE include external/psudb-common/cpp/include external/PLEX/include)
        
        add_executable(triespline_debug ${CMAKE_CURRENT_SOURCE_DIR}/tests/triespline_debug.cpp)
        target_link_libraries(triespline_debug PUBLIC gsl check subunit  pthread atomic)
        target_link_options(triespline_debug PUBLIC -mcx16)
        target_include_directories(triespline_debug PRIVATE include external/psudb-common/cpp/include external/PLEX/include)
    endif()

    add_executable(fst_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/fst_tests.cpp)
    target_link_libraries(fst_tests PUBLIC gsl check subunit  pthread atomic)
    target_link_options(fst_tests PUBLIC -mcx16)
    target_include_directories(fst_tests PRIVATE include external/psudb-common/cpp/include external/PLEX/include external/fast_succinct_trie/include)
endif()

if (vldb_bench)
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin/benchmarks")

    add_executable(irs_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/vldb/irs_bench.cpp)
    target_link_libraries(irs_bench PUBLIC gsl pthread atomic)
    target_include_directories(irs_bench PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    target_link_options(irs_bench PUBLIC -mcx16)
    target_compile_options(irs_bench PUBLIC)

    add_executable(vptree_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/vldb/vptree_bench.cpp)
    target_link_libraries(vptree_bench PUBLIC gsl pthread atomic)
    target_include_directories(vptree_bench PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    target_link_options(vptree_bench PUBLIC -mcx16)
    target_compile_options(vptree_bench PUBLIC)


    add_executable(vptree_bench_alt ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/vldb/vptree_bench_alt.cpp)
    target_link_libraries(vptree_bench_alt PUBLIC gsl pthread atomic)
    target_include_directories(vptree_bench_alt PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    target_link_options(vptree_bench_alt PUBLIC -mcx16)
    target_compile_options(vptree_bench_alt PUBLIC)


    # add_executable(vptree_parmsweep ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/vldb/vptree_parmsweep.cpp)
    # target_link_libraries(vptree_parmsweep PUBLIC gsl pthread atomic)
    # target_include_directories(vptree_parmsweep PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    # target_link_options(vptree_parmsweep PUBLIC -mcx16)
    # target_compile_options(vptree_parmsweep PUBLIC)

    add_executable(vptree_bsm_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/vldb/vptree_bsm_bench.cpp)
    target_link_libraries(vptree_bsm_bench PUBLIC gsl pthread atomic)
    target_include_directories(vptree_bsm_bench PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    target_link_options(vptree_bsm_bench PUBLIC -mcx16)
    target_compile_options(vptree_bsm_bench PUBLIC)

    add_executable(vptree_bsm_bench_alt ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/vldb/vptree_bsm_bench_alt.cpp)
    target_link_libraries(vptree_bsm_bench_alt PUBLIC gsl pthread atomic)
    target_include_directories(vptree_bsm_bench_alt PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    target_link_options(vptree_bsm_bench_alt PUBLIC -mcx16)
    target_compile_options(vptree_bsm_bench_alt PUBLIC)

    add_executable(fst_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/vldb/fst_bench.cpp)
    target_link_libraries(fst_bench PUBLIC gsl pthread atomic)
    target_include_directories(fst_bench PRIVATE include external external/fast_succinct_trie/include external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    target_link_options(fst_bench PUBLIC -mcx16)
    target_compile_options(fst_bench PUBLIC)

    add_executable(fst_bsm_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/vldb/fst_bsm_bench.cpp)
    target_link_libraries(fst_bsm_bench PUBLIC gsl pthread atomic)
    target_include_directories(fst_bsm_bench PRIVATE include external external/fast_succinct_trie/include external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    target_link_options(fst_bsm_bench PUBLIC -mcx16)
    target_compile_options(fst_bsm_bench PUBLIC)

    add_executable(ts_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/vldb/ts_bench.cpp)
    target_link_libraries(ts_bench PUBLIC gsl pthread atomic)
    target_include_directories(ts_bench PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    target_link_options(ts_bench PUBLIC -mcx16)
    target_compile_options(ts_bench PUBLIC)

    # add_executable(ts_parmsweep ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/vldb/ts_parmsweep.cpp)
    # target_link_libraries(ts_parmsweep PUBLIC gsl pthread atomic)
    # target_include_directories(ts_parmsweep PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    # target_link_options(ts_parmsweep PUBLIC -mcx16)
    # target_compile_options(ts_parmsweep PUBLIC)

    add_executable(ts_bsm_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/vldb/ts_bsm_bench.cpp)
    target_link_libraries(ts_bsm_bench PUBLIC gsl pthread atomic)
    target_include_directories(ts_bsm_bench PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    target_link_options(ts_bsm_bench PUBLIC -mcx16)
    target_compile_options(ts_bsm_bench PUBLIC)

    add_executable(pgm_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/vldb/pgm_bench.cpp)
    target_link_libraries(pgm_bench PUBLIC gsl pthread atomic gomp)
    target_include_directories(pgm_bench PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    target_link_options(pgm_bench PUBLIC -mcx16)
    target_compile_options(pgm_bench PUBLIC)

    add_executable(dynamic_pgm_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/vldb/dynamic_pgm_bench.cpp)
    target_link_libraries(dynamic_pgm_bench PUBLIC gsl pthread atomic gomp)
    target_include_directories(dynamic_pgm_bench PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    target_link_options(dynamic_pgm_bench PUBLIC -mcx16)
    target_compile_options(dynamic_pgm_bench PUBLIC)

    add_executable(btree_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/vldb/btree_bench.cpp)
    target_link_libraries(btree_bench PUBLIC gsl pthread atomic gomp)
    target_include_directories(btree_bench PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    target_link_options(btree_bench PUBLIC -mcx16)
    target_compile_options(btree_bench PUBLIC)

    if (build_alex)
        add_executable(alex_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/vldb/alex_bench.cpp)
        target_link_libraries(alex_bench PUBLIC gsl )
        target_include_directories(alex_bench PRIVATE external/psudb-common/cpp/include external/alex/src/core/ benchmarks/include)
        target_compile_options(alex_bench PUBLIC)
        set_property(TARGET alex_bench PROPERTY CXX_STANDARD 14)
    endif()

    add_executable(mtree_bench_alt ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/vldb/mtree_bench_alt.cpp)
    target_link_libraries(mtree_bench_alt PUBLIC gsl pthread atomic gomp)
    target_include_directories(mtree_bench_alt PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    target_link_options(mtree_bench_alt PUBLIC -mcx16)
    target_compile_options(mtree_bench_alt PUBLIC)

    add_executable(bigann_sample ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/bigann_sample.cpp)
    target_link_libraries(bigann_sample PUBLIC gsl pthread atomic gomp)
    target_include_directories(bigann_sample PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    target_link_options(bigann_sample PUBLIC -mcx16)
    target_compile_options(bigann_sample PUBLIC)

    add_executable(mtree_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/vldb/mtree_bench.cpp)
    target_link_libraries(mtree_bench PUBLIC gsl pthread atomic gomp)
    target_include_directories(mtree_bench PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    target_link_options(mtree_bench PUBLIC -mcx16)
    target_compile_options(mtree_bench PUBLIC)

    # add_executable(thread_scaling_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/vldb/thread_scaling_bench.cpp)
    # target_link_libraries(thread_scaling_bench PUBLIC gsl pthread atomic)
    # target_include_directories(thread_scaling_bench PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    # target_link_options(thread_scaling_bench PUBLIC -mcx16)
    # target_compile_options(thread_scaling_bench PUBLIC)

    add_executable(btree_thread_scaling_bench
    ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/vldb/btree_thread_scaling_bench.cpp)
    target_link_libraries(btree_thread_scaling_bench PUBLIC gsl pthread atomic)
    target_include_directories(btree_thread_scaling_bench PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    target_link_options(btree_thread_scaling_bench PUBLIC -mcx16)
    target_compile_options(btree_thread_scaling_bench PUBLIC)

endif()

if (tail_bench)
    add_executable(config_sweep ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/tail-latency/config_sweep.cpp)
    target_link_libraries(config_sweep PUBLIC gsl pthread atomic)
    target_include_directories(config_sweep PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    target_link_options(config_sweep PUBLIC -mcx16)

    add_executable(fixed_shard_count ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/tail-latency/fixed_shard_count.cpp)
    target_link_libraries(fixed_shard_count PUBLIC gsl pthread atomic)
    target_include_directories(fixed_shard_count PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    target_link_options(fixed_shard_count PUBLIC -mcx16)
endif()

if (bench) 
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin/benchmarks")

    add_executable(reconstruction_interference ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/reconstruction_interference.cpp)
    target_link_libraries(reconstruction_interference PUBLIC gsl pthread atomic)
    target_link_options(reconstruction_interference PUBLIC -mcx16)
    target_include_directories(reconstruction_interference PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)

    add_executable(insertion_tput ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/insertion_tput.cpp)
    target_link_libraries(insertion_tput PUBLIC gsl pthread atomic)
    target_include_directories(insertion_tput PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    target_link_options(insertion_tput PUBLIC -mcx16)


    add_executable(string_insertion_tput ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/string_insertion_tput.cpp)
    target_link_libraries(string_insertion_tput PUBLIC gsl pthread atomic)
    target_include_directories(string_insertion_tput PRIVATE include external external/fast_succinct_trie/include external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    target_link_options(string_insertion_tput PUBLIC -mcx16)


    add_executable(query_workload_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/query_workload_bench.cpp)
    target_link_libraries(query_workload_bench PUBLIC gsl pthread atomic)
    target_include_directories(query_workload_bench PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    target_link_options(query_workload_bench PUBLIC -mcx16)

    add_executable(poplar_trie ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/poplar_trie.cpp)
    target_link_libraries(poplar_trie PUBLIC gsl pthread atomic)
    target_include_directories(poplar_trie PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include external/poplar-trie/include)
    target_link_options(poplar_trie PUBLIC -mcx16)

    add_executable(hat_trie ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/hat_trie.cpp)
    target_link_libraries(hat_trie PUBLIC gsl pthread atomic)
    target_include_directories(hat_trie PRIVATE include external
    external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include external/hat-trie/include/tsl)
    target_link_options(hat_trie PUBLIC -mcx16)

    add_executable(cedar_trie ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/cedar_trie.cpp) 
    target_link_libraries(cedar_trie PUBLIC gsl pthread atomic)
    target_include_directories(cedar_trie PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include external/hat-trie/include/tsl)
    target_link_options(cedar_trie PUBLIC -mcx16)


    add_executable(watermark_testing ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/watermark_testing.cpp)
    target_link_libraries(watermark_testing PUBLIC gsl pthread atomic)
    target_include_directories(watermark_testing PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    target_link_options(watermark_testing PUBLIC -mcx16)

    #add_executable(static_dynamic_comp ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/static_dynamic_comp.cpp)
    #target_link_libraries(static_dynamic_comp PUBLIC gsl cblas pthread atomic)
    #target_include_directories(static_dynamic_comp PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    #target_link_options(static_dynamic_comp PUBLIC -mcx16)

    add_executable(insert_tail_latency ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/insert_tail_latency.cpp)
    target_link_libraries(insert_tail_latency PUBLIC gsl pthread atomic)
    target_include_directories(insert_tail_latency PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include benchmarks/include external/psudb-common/cpp/include)
    target_link_options(insert_tail_latency PUBLIC -mcx16)
endif()