1
+ project (WOLI)
2
+ cmake_minimum_required (VERSION 3.0)
3
+
4
+ # cmake -D CMAKE_C_COMPILER=/usr/local/bin/gcc CMAKE_CXX_COMPILER=/usr/local/bin/g++ ../
5
+ # SET(CMAKE_C_COMPILER /usr/local/bin/gcc)
6
+ # SET(CMAKE_CXX_COMPILER /usr/local/bin/g++)
7
+ set (MKL_LINK_DIRECTORY "/opt/intel/mkl/lib/intel64" )
8
+ set (MKL_INCLUDE_DIRECTORY "/opt/intel/mkl/include" )
9
+ include (FetchContent)
10
+ include (ExternalProject)
11
+
12
+ # use `cmake -DSERVER:BOOL=ON ..` when running in server
13
+ option (SERVER "Run in server" ON )
14
+ option (USE_LIBPMEM "libpmem or libvmmalloc" ON )
15
+ option (BUF_SORT "Sort buffer in KVBufer" OFF )
16
+ option (STREAMING_LOAD "Use Non-temporal Load" OFF )
17
+ option (STREAMING_STORE "Use Non-temporal Store" OFF )
18
+ option (NO_LOCK "Don't use lock" OFF )
19
+ option (BRANGE "Multi-thread expanding" ON )
20
+ option (NO_ENTRY_BUF "BEntry without KVBuffer" ON )
21
+
22
+ # ComboTree Configuration
23
+ # use `make clean && make CXX_DEFINES="-DNAME=VALUE"` to override during compile
24
+ if (SERVER)
25
+ set (PMEM_DIR \"/mnt/pmem0/\")
26
+ set (CLEVEL_PMEM_FILE_SIZE "(1024*1024*1024*32UL)" )
27
+ set (CLEVEL_PMEM_FILE \"/mnt/pmem0/combotree-clevel-\")
28
+ set (BLEVEL_PMEM_FILE \"/mnt/pmem0/combotree-blevel-\")
29
+ set (ALEVEL_PMEM_FILE \"/mnt/pmem0/combotree-alevel-\")
30
+ set (PGM_INDEX_PMEM_FILE \"/mnt/pmem0/combotree-pgmindex-\")
31
+ set (COMMON_PMEM_FILE \"/mnt/pmem0/common-alloctor\")
32
+ else ()
33
+ set (PMEM_DIR \"/mnt/pmem0/\")
34
+ set (CLEVEL_PMEM_FILE_SIZE "(1024*1024*512UL)" )
35
+ set (CLEVEL_PMEM_FILE \"/mnt/pmem0/combotree-clevel-\")
36
+ set (BLEVEL_PMEM_FILE \"/mnt/pmem0/combotree-blevel-\")
37
+ set (ALEVEL_PMEM_FILE \"/mnt/pmem0/combotree-alevel-\")
38
+ set (PGM_INDEX_PMEM_FILE \"/mnt/pmem0/combotree-pgmindex-\")
39
+ set (COMMON_PMEM_FILE \"/mnt/pmem0/common-alloctor\")
40
+ endif (SERVER)
41
+
42
+ if (BRANGE)
43
+ set (EXPAND_THREADS 4)
44
+ endif (BRANGE)
45
+
46
+ if (NO_ENTRY_BUF)
47
+ set (BLEVEL_EXPAND_BUF_KEY 4)
48
+ else ()
49
+ set (BLEVEL_EXPAND_BUF_KEY 6)
50
+ endif (NO_ENTRY_BUF)
51
+
52
+ set (EXPANSION_FACTOR 2)
53
+ set (DEFAULT_SPAN 2)
54
+ set (PMEMKV_THRESHOLD 10000)
55
+ set (ENTRY_SIZE_FACTOR 1.2)
56
+
57
+ configure_file (
58
+ "${PROJECT_SOURCE_DIR} /src/combotree_config.h.in"
59
+ "${PROJECT_SOURCE_DIR} /src/combotree_config.h"
60
+ )
61
+
62
+ # -march=native used to detect CPU flags and use corrosponding clflush instruction
63
+ set (CMAKE_CXX_FLAGS "-march=native -Wall -Wno-reorder -O3" )
64
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mrtm -msse4.1 -mavx2" )
65
+
66
+ # Require C++17
67
+ set (CMAKE_CXX_STANDARD_REQUIRED on )
68
+ set (CMAKE_CXX_STANDARD 17)
69
+
70
+ FIND_PACKAGE (OpenMP REQUIRED)
71
+
72
+ if (OPENMP_FOUND)
73
+ message ("OPENMP FOUND" )
74
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS} " )
75
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS} " )
76
+ set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS} " )
77
+ endif ()
78
+
79
+ add_definitions (-DNDEBUG -DNDEBUGGING)
80
+
81
+ # MK for RMI
82
+ link_directories (${MKL_LINK_DIRECTORY} )
83
+ include_directories (${MKL_INCLUDE_DIRECTORY} )
84
+
85
+ # combotree shared library
86
+ include_directories (include )
87
+
88
+ list (APPEND libs_to_link pmemobj pmem tbb papi tcmalloc_minimal mkl_rt pthread)
89
+
90
+ set (COMBO_TREE_SRC
91
+ src/alevel.cc
92
+ src/enviroment.cc
93
+ src/pgm_index.cc
94
+ src/rmi_index.cc
95
+ src/learn_index.cc
96
+ src/blevel.cc
97
+ src/bentry.cc
98
+ src/clevel.cc
99
+ src/combotree.cc
100
+ src/pmemkv.cc
101
+
102
+ src/lbtree.cc
103
+ src/mempool.cc
104
+ src/nvm-common.cc
105
+ src/tree .cc
106
+
107
+ # src/lbtree_wrapper.cc
108
+
109
+ # src/lbtree_wrapper.hpp
110
+ )
111
+
112
+ add_library (combotree SHARED ${COMBO_TREE_SRC} )
113
+ target_link_libraries (combotree pmem pmemobj mkl_rt pthread)
114
+
115
+ # # benchmark
116
+ # add_executable(benchmark tests/benchmark.cc)
117
+ # target_link_libraries(benchmark combotree)
118
+
119
+ # # multi_benchmark
120
+ # add_executable(multi_benchmark tests/multi_benchmark.cc)
121
+ # target_link_libraries(multi_benchmark combotree)
122
+
123
+ # # multi_benchmark
124
+ # add_executable(multi_bench tests/multi_bench.cc)
125
+ # target_link_libraries(multi_bench combotree)
126
+
127
+ # # scalability_test
128
+ # add_executable(scalability_test tests/scalability_test.cc)
129
+ # target_link_libraries(scalability_test combotree)
130
+
131
+ # Unit Test
132
+ enable_testing ()
133
+
134
+ include_directories (src)
135
+
136
+ # # # generate_data
137
+ # add_executable(generate_data tests/generate_data.cc)
138
+
139
+ # # # sortbuffer_test
140
+ # add_executable(sortbuffer_test tests/sortbuffer_test.cc)
141
+
142
+ # # # clevel_test
143
+ # add_executable(clevel_test tests/clevel_test.cc src/clevel.cc)
144
+ # target_link_libraries(clevel_test pmem)
145
+ # add_test(clevel_test clevel_test)
146
+
147
+ # # # combotree_test
148
+ # add_executable(combotree_test tests/combotree_test.cc)
149
+ # target_link_libraries(combotree_test combotree)
150
+ # add_test(combotree_test combotree_test)
151
+
152
+ # # # multi_combotree_test
153
+ # add_executable(multi_combotree_test tests/multi_combotree_test.cc)
154
+ # target_link_libraries(multi_combotree_test combotree)
155
+ # add_test(multi_combotree_test multi_combotree_test)
156
+
157
+ # # # pgm_index_test
158
+ # add_executable(pgm_index_test tests/pgm_index_test.cc)
159
+ # target_link_libraries(pgm_index_test combotree)
160
+ # add_test(pgm_index_test pgm_index_test)
161
+
162
+ # # # pgm_index_test
163
+ # add_executable(xindex_test tests/xindex_test.cc)
164
+ # target_link_libraries(xindex_test combotree)
165
+ # add_test(xindex_test xindex_test)
166
+
167
+ # # # learn_index_test
168
+ # add_executable(learn_index_test tests/learn_index_test.cc)
169
+ # target_link_libraries(learn_index_test combotree)
170
+ # add_test(learn_index_test learn_index_test)
171
+
172
+ # # # alex_test
173
+ # add_executable(alex_test tests/alex_test.cc)
174
+ # target_link_libraries(alex_test combotree)
175
+ # add_test(alex_test alex_test)
176
+
177
+ # # bucket_test
178
+ # add_executable(bucket_test tests/bucket_test.cc)
179
+ # target_link_libraries(bucket_test combotree)
180
+ # add_test(bucket_test bucket_test)
181
+
182
+ # # # nvm_test
183
+ # add_executable(nvm_test tests/nvm_test.cc)
184
+ # target_link_libraries(nvm_test pmem)
185
+ # add_test(nvm_test nvm_test)
186
+
187
+ # # # microbench
188
+ # add_executable(microbench tests/micro_bench.cc)
189
+ # target_link_libraries(microbench combotree)
190
+ # add_test(microbench microbench)
191
+
192
+ # # microbench_swp
193
+ add_executable (microbench_swp tests/micro_bench_swp.cc)
194
+
195
+ # add_dependencies(microbench_swp PMDK)
196
+ # target_link_libraries(microbench_swp PRIVATE ${libs_to_link})
197
+ target_link_libraries (microbench_swp combotree)
198
+ add_test (microbench_swp microbench_swp)
199
+
200
+ # # # ycsb
201
+ # add_executable(ycsb tests/ycsb.cc)
202
+ # target_link_libraries(ycsb combotree)
203
+ # add_test(ycsb ycsb)
204
+
205
+ # add_executable(ycsb-mem tests/ycsb-mem.cc)
206
+ # target_link_libraries(ycsb-mem combotree)
207
+ # add_test(ycsb-mem ycsb-mem)
208
+ add_definitions (-DPMEM)
209
+ add_definitions (-DPMDK)
210
+ message (STATUS "Persistence support: PMDK" )
211
+
212
+ # # #################### PMDK ####################
213
+ # set(PMDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/pmdk")
214
+ # ExternalProject_Add(PMDK
215
+ # GIT_REPOSITORY git@github.com:XiangpengHao/pmdk.git
216
+ # GIT_TAG addr-patch
217
+ # BUILD_IN_SOURCE 1
218
+ # BUILD_COMMAND $(MAKE) EXTRA_CFLAGS=-Wno-error
219
+ # PREFIX ${PMDK_PREFIX}
220
+ # CONFIGURE_COMMAND ""
221
+ # INSTALL_COMMAND ""
222
+ # LOG_DOWNLOAD ON
223
+ # LOG_CONFIGURE ON
224
+ # LOG_BUILD ON
225
+ # )
226
+
227
+ # include_directories(${PMDK_PREFIX}/src/PMDK/src/include)
228
+
229
+ # # if(${CMAKE_BUILD_TYPE} STREQUAL "Debug")
230
+ # # link_directories(${PMDK_PREFIX}/src/PMDK/src/debug)
231
+ # # else()
232
+ # link_directories(${PMDK_PREFIX}/src/PMDK/src/nondebug)
233
+
234
+ # # endif()
235
+
236
+ # #################### Epoch Reclaim ####################
237
+ FetchContent_Declare(
238
+ epoch_reclaimer
239
+ GIT_REPOSITORY git@github.com:XiangpengHao/VeryPM.git
240
+ GIT_TAG master
241
+ )
242
+
243
+ # GIT_REPOSITORY https://github.com/XiangpengHao/epoch-reclaimer.git
244
+ if (NOT epoch_reclaimer_POPULATED)
245
+ FetchContent_Populate(epoch_reclaimer)
246
+ include_directories (${epoch_reclaimer_SOURCE_DIR} )
247
+ endif ()
0 commit comments