-
Notifications
You must be signed in to change notification settings - Fork 711
/
CMakeLists.txt
206 lines (172 loc) · 5.75 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
# TODO: Copyrights
CHECK_FUNCTION_EXISTS(sched_getcpu HAVE_SCHED_GETCPU)
IF(HAVE_SCHED_GETCPU)
ADD_DEFINITIONS(-DHAVE_SCHED_GETCPU=1 -DROCKSDB_SCHED_GETCPU_PRESENT)
ENDIF()
# This is a strong requirement coming from RocksDB. No conditional checks here.
ADD_DEFINITIONS(-DROCKSDB_PLATFORM_POSIX -DROCKSDB_LIB_IO_POSIX)
IF(ROCKSDB_CUSTOM_NAMESPACE)
ADD_DEFINITIONS(-DROCKSDB_NAMESPACE=${ROCKSDB_CUSTOM_NAMESPACE})
ADD_DEFINITIONS(-DROCKSDB_CUSTOM_NAMESPACE=${ROCKSDB_CUSTOM_NAMESPACE})
ENDIF()
IF(HAVE_EXTERNAL_ROCKSDB)
MESSAGE(STATUS "MyRocks: Using external RocksDB")
SET(ROCKSDB_ROOT ${ROCKSDB_SRC_PATH})
ELSE()
MESSAGE(STATUS "MyRocks: Using local RocksDB")
IF (NOT EXISTS "${CMAKE_SOURCE_DIR}/rocksdb/Makefile")
MESSAGE(SEND_ERROR "Missing Makefile in rocksdb directory. Try \"git submodule update\".")
ENDIF()
SET(ROCKSDB_ROOT ${CMAKE_SOURCE_DIR}/rocksdb)
# get a list of rocksdb library source files
# run with env -i to avoid passing variables
EXECUTE_PROCESS(
COMMAND env -i PATH="/sbin:/usr/sbin:/bin:/usr/bin" ${CMAKE_SOURCE_DIR}/storage/rocksdb/get_rocksdb_files.sh
OUTPUT_VARIABLE SCRIPT_OUTPUT
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
# split the list into lines
STRING(REGEX MATCHALL "[^\n]+" ROCKSDB_LIB_SOURCES ${SCRIPT_OUTPUT})
SET(ROCKSDB_ROOT ${CMAKE_SOURCE_DIR}/rocksdb)
# Statically include all RocksDB source
SET(ROCKSDB_SOURCES
${ROCKSDB_LIB_SOURCES}
)
ENDIF()
INCLUDE_DIRECTORIES(
${ROCKSDB_ROOT}
${ROCKSDB_ROOT}/include
${ROCKSDB_ROOT}/third-party/gtest-1.8.1/fused-src
)
IF(UNIX)
IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
ADD_DEFINITIONS(-DOS_LINUX)
CHECK_INCLUDE_FILES(linux/falloc.h HAVE_LINUX_FALLOC_H)
CHECK_FUNCTION_EXISTS(fallocate HAVE_FALLOCATE)
IF(HAVE_FALLOCATE AND HAVE_LINUX_FALLOC_H)
ADD_DEFINITIONS(-DROCKSDB_FALLOCATE_PRESENT)
ENDIF()
ENDIF()
ENDIF()
CHECK_CXX_SOURCE_COMPILES("
#if defined(_MSC_VER) && !defined(__thread)
#define __thread __declspec(thread)
#endif
int main() {
static __thread int tls;
}
" HAVE_THREAD_LOCAL)
if(HAVE_THREAD_LOCAL)
ADD_DEFINITIONS(-DROCKSDB_SUPPORT_THREAD_LOCAL)
endif()
SET(ROCKSDB_SOURCES
${ROCKSDB_SOURCES}
ha_rocksdb.cc ha_rocksdb.h ha_rocksdb_proto.h
logger.h
rdb_comparator.h
rdb_datadic.cc rdb_datadic.h
rdb_cf_options.cc rdb_cf_options.h
rdb_cf_manager.cc rdb_cf_manager.h
rdb_converter.cc rdb_converter.h
properties_collector.cc properties_collector.h
event_listener.cc event_listener.h
rdb_i_s.cc rdb_i_s.h
rdb_index_merge.cc rdb_index_merge.h
rdb_io_watchdog.cc rdb_io_watchdog.h
rdb_perf_context.cc rdb_perf_context.h
rdb_mutex_wrapper.cc rdb_mutex_wrapper.h
rdb_psi.h rdb_psi.cc
rdb_sst_info.cc rdb_sst_info.h
rdb_utils.cc rdb_utils.h rdb_buff.h
rdb_threads.cc rdb_threads.h
nosql_access.cc nosql_access.h
)
IF(WITH_FB_TSAN)
SET(PIC_EXT "_pic")
ELSE()
SET(PIC_EXT "")
ENDIF()
IF(HAVE_EXTERNAL_ROCKSDB)
SET(rocksdb_static_libs "${ROCKSDB_LIB_PATH}/${ROCKSDB_LIB_NAME}")
ELSE()
SET(rocksdb_static_libs )
ENDIF()
IF (WITH_JEMALLOC)
FIND_LIBRARY(JEMALLOC_LIBRARY
NAMES libjemalloc${PIC_EXT}.a jemalloc
HINTS ${WITH_JEMALLOC}/lib)
SET(rocksdb_static_libs ${rocksdb_static_libs}
${JEMALLOC_LIBRARY})
ADD_DEFINITIONS(-DROCKSDB_JEMALLOC)
ADD_DEFINITIONS(-DROCKSDB_MALLOC_USABLE_SIZE)
ENDIF()
IF (WITH_UNWIND)
FIND_LIBRARY(UNWIND_LIBRARY
NAMES libunwind${PIC_EXT}.a unwind
HINTS ${WITH_UNWIND}/lib)
SET(rocksdb_static_libs ${rocksdb_static_libs}
${UNWIND_LIBRARY})
ENDIF()
IF (WITH_SNAPPY)
FIND_LIBRARY(SNAPPY_LIBRARY
NAMES libsnappy${PIC_EXT}.a snappy
HINTS ${WITH_SNAPPY}/lib)
SET(rocksdb_static_libs ${rocksdb_static_libs}
${SNAPPY_LIBRARY})
ADD_DEFINITIONS(-DSNAPPY)
ENDIF()
IF (WITH_BZ2)
FIND_LIBRARY(BZ2_LIBRARY
NAMES libbz2${PIC_EXT}.a bz2
HINTS ${WITH_BZ2}/lib)
SET(rocksdb_static_libs ${rocksdb_static_libs}
${BZ2_LIBRARY})
ADD_DEFINITIONS(-DBZIP2)
ENDIF()
IF (WITH_ZSTD)
SET(rocksdb_static_libs ${rocksdb_static_libs} ${ZSTD_LIBRARY})
ADD_DEFINITIONS(-DZSTD)
ADD_DEFINITIONS(-DZSTD_STATIC_LINKING_ONLY)
ENDIF()
IF (WITH_LZ4)
SET(rocksdb_static_libs ${rocksdb_static_libs} ${LZ4_LIBRARY})
ADD_DEFINITIONS(-DLZ4)
ENDIF()
IF (WITH_TBB)
FIND_LIBRARY(TBB_LIBRARY
NAMES libtbb${PIC_EXT}.a tbb
HINTS ${WITH_TBB}/lib)
SET(rocksdb_static_libs ${rocksdb_static_libs}
${TBB_LIBRARY})
ADD_DEFINITIONS(-DTBB)
ENDIF()
CHECK_INCLUDE_FILES(zlib.h HAVE_ZLIB_H)
IF (HAVE_ZLIB_H)
ADD_DEFINITIONS(-DZLIB)
SET(rocksdb_static_libs ${rocksdb_static_libs} ${ZLIB_LIBRARY})
ENDIF()
SET(rocksdb_static_libs ${rocksdb_static_libs} "-lrt" "-ldl" "-lpthread")
MYSQL_ADD_PLUGIN(rocksdb_se ${ROCKSDB_SOURCES} STORAGE_ENGINE DEFAULT STATIC_ONLY
LINK_LIBRARIES ${rocksdb_static_libs}
)
IF(WITH_EMBEDDED_SERVER)
ADD_SUBDIRECTORY(unittest)
ENDIF()
IF (WITH_ROCKSDB_SE_STORAGE_ENGINE AND (NOT HAVE_EXTERNAL_ROCKSDB))
# TODO: read this file list from src.mk:TOOL_SOURCES
SET(ROCKSDB_TOOL_SOURCES
${CMAKE_SOURCE_DIR}/rocksdb/tools/ldb_tool.cc
${CMAKE_SOURCE_DIR}/rocksdb/tools/ldb_cmd.cc
${CMAKE_SOURCE_DIR}/rocksdb/tools/sst_dump_tool.cc
${CMAKE_SOURCE_DIR}/rocksdb/utilities/blob_db/blob_dump_tool.cc
)
MYSQL_ADD_EXECUTABLE(sst_dump ${CMAKE_SOURCE_DIR}/rocksdb/tools/sst_dump.cc ${ROCKSDB_TOOL_SOURCES})
TARGET_LINK_LIBRARIES(sst_dump rocksdb_se)
MYSQL_ADD_EXECUTABLE(mysql_sst_dump ${CMAKE_SOURCE_DIR}/storage/rocksdb/tools/mysql_sst_dump.cc
${ROCKSDB_TOOL_SOURCES})
TARGET_LINK_LIBRARIES(mysql_sst_dump rocksdb_se)
MYSQL_ADD_EXECUTABLE(ldb ${CMAKE_SOURCE_DIR}/rocksdb/tools/ldb.cc ${ROCKSDB_TOOL_SOURCES})
TARGET_LINK_LIBRARIES(ldb rocksdb_se)
MYSQL_ADD_EXECUTABLE(mysql_ldb ${CMAKE_SOURCE_DIR}/storage/rocksdb/tools/mysql_ldb.cc ${ROCKSDB_TOOL_SOURCES})
TARGET_LINK_LIBRARIES(mysql_ldb rocksdb_se)
ENDIF()