summaryrefslogtreecommitdiffstats
path: root/CMakeLists.txt
blob: 6f7cf903a448cb189ef51da0ae4f2356f611d1b4 (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
cmake_minimum_required(VERSION 3.13)

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 true)
set(old_bench 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)

if (debug) 
    add_compile_options(-g -O0)
    add_compile_options(-fsanitize=address)
    add_link_options(-fsanitize=address)
    add_compile_options(-fsanitize=undefined)
    add_link_options(-fsanitize=undefined)
else()
    add_compile_options(-g -O3)
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(augbtree_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/augbtree_tests.cpp)
    #target_link_libraries(augbtree_tests PUBLIC gsl check subunit pthread)
    #target_include_directories(augbtree_tests PRIVATE include external/psudb-common/cpp/include external/ctpl)

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

    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(vptree_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/vptree_tests.cpp)
    #target_link_libraries(vptree_tests PUBLIC gsl check subunit pthread)
    #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_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(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)
    #target_include_directories(alias_tests PRIVATE include external/psudb-common/cpp/include)

    #add_executable(triespline_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/triespline_tests.cpp)
    #target_link_libraries(triespline_tests PUBLIC gsl check subunit pthread)
    #target_include_directories(triespline_tests PRIVATE include external/PLEX/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)
    #target_include_directories(pgm_tests PRIVATE include external/PGM-index/include external/psudb-common/cpp/include)
    #target_compile_options(pgm_tests PUBLIC -fopenmp)
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 gomp 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 bench/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 gomp atomic)
    target_include_directories(insertion_tput PRIVATE include external external/m-tree/cpp external/PGM-index/include external/PLEX/include bench/include external/psudb-common/cpp/include)
    target_link_options(insertion_tput PUBLIC -mcx16)

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

endif()

if (old_bench)
    add_executable(alias_wss_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/alias_wss_bench.cpp)
    target_link_libraries(alias_wss_bench PUBLIC gsl pthread gomp)
    target_include_directories(alias_wss_bench PRIVATE include external/m-tree/cpp external/PGM-index/include external/PLEX/include bench/include)
    target_compile_options(alias_wss_bench PUBLIC -fopenmp)

    add_executable(triespline_rq_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/triespline_rq_bench.cpp)
    target_link_libraries(triespline_rq_bench PUBLIC gsl pthread gomp)
    target_include_directories(triespline_rq_bench PRIVATE include external/m-tree/cpp external/PGM-index/include external/PLEX/include bench/include)
    target_compile_options(triespline_rq_bench PUBLIC -fopenmp)

    add_executable(pgm_rq_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/pgm_rq_bench.cpp)
    target_link_libraries(pgm_rq_bench PUBLIC gsl pthread gomp)
    target_include_directories(pgm_rq_bench PRIVATE include external/m-tree/cpp external/PGM-index/include external/PLEX/include bench/include)
    target_compile_options(pgm_rq_bench PUBLIC -fopenmp)

    add_executable(pgm_pl_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/pgm_pl_bench.cpp)
    target_link_libraries(pgm_pl_bench PUBLIC gsl pthread gomp)
    target_include_directories(pgm_pl_bench PRIVATE include external/m-tree/cpp external/PGM-index/include external/PLEX/include bench/include)
    target_compile_options(pgm_pl_bench PUBLIC -fopenmp)

    add_executable(upgm_rq_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/upgm_rq_bench.cpp)
    target_link_libraries(upgm_rq_bench PUBLIC gsl pthread gomp)
    target_include_directories(upgm_rq_bench PRIVATE include external/m-tree/cpp external/PGM-index/include external/PLEX/include bench/include)
    target_compile_options(upgm_rq_bench PUBLIC -fopenmp)
    set_property(TARGET upgm_rq_bench PROPERTY CXX_STANDARD 17)

    add_executable(upgm_pl_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/upgm_pl_bench.cpp)
    target_link_libraries(upgm_pl_bench PUBLIC gsl pthread gomp)
    target_include_directories(upgm_pl_bench PRIVATE include external/m-tree/cpp external/PGM-index/include external/PLEX/include bench/include)
    target_compile_options(upgm_pl_bench PUBLIC -fopenmp)
    set_property(TARGET upgm_pl_bench PROPERTY CXX_STANDARD 17)

    add_executable(isam_irs_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/isam_irs_bench.cpp)
    target_link_libraries(isam_irs_bench PUBLIC gsl pthread gomp)
    target_include_directories(isam_irs_bench PRIVATE include external/m-tree/cpp external/PGM-index/include external/PLEX/include bench/include)
    target_compile_options(isam_irs_bench PUBLIC -fopenmp)

    add_executable(isam_rq_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/isam_rq_bench.cpp)
    target_link_libraries(isam_rq_bench PUBLIC gsl pthread gomp)
    target_include_directories(isam_rq_bench PRIVATE include external/m-tree/cpp external/PGM-index/include external/PLEX/include bench/include)
    target_compile_options(isam_rq_bench PUBLIC -fopenmp)

    add_executable(btree_irs_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/btree_irs_bench.cpp)
    target_link_libraries(btree_irs_bench PUBLIC gsl pthread gomp)
    target_include_directories(btree_irs_bench PRIVATE include external/m-tree/cpp external/PGM-index/include external/PLEX/include bench/include)
    target_compile_options(btree_irs_bench PUBLIC -fopenmp)

    add_executable(btree_rq_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/btree_rq_bench.cpp)
    target_link_libraries(btree_rq_bench PUBLIC gsl pthread gomp)
    target_include_directories(btree_rq_bench PRIVATE include external/m-tree/cpp external/PGM-index/include external/PLEX/include bench/include)
    target_compile_options(btree_rq_bench PUBLIC -fopenmp)

    add_executable(alex_rq_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/alex_rq_bench.cpp)
    target_link_libraries(alex_rq_bench PUBLIC gsl pthread gomp)
    target_include_directories(alex_rq_bench PRIVATE include external/alex/src/core external/m-tree/cpp external/PGM-index/include external/PLEX/include bench/include)
    target_compile_options(alex_rq_bench PUBLIC -fopenmp -march=native)
    set_property(TARGET alex_rq_bench PROPERTY CXX_STANDARD 14)

    add_executable(vptree_knn_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/vptree_knn_bench.cpp)
    target_link_libraries(vptree_knn_bench PUBLIC gsl pthread gomp)
    target_include_directories(vptree_knn_bench PRIVATE include external/m-tree/cpp external/vptree external/PGM-index/include external/PLEX/include bench/include)
    target_compile_options(vptree_knn_bench PUBLIC -fopenmp)

    add_executable(mtree_knn_bench ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/mtree_knn_bench.cpp)
    target_link_libraries(mtree_knn_bench PUBLIC gsl pthread gomp)
    target_include_directories(mtree_knn_bench PRIVATE include external/m-tree/cpp external/vptree external/PGM-index/include external/PLEX/include bench/include)
    target_compile_options(mtree_knn_bench PUBLIC -fopenmp -fpermissive)

endif()