]> git.proxmox.com Git - ceph.git/blob - ceph/src/rocksdb/CMakeLists.txt
import ceph pacific 16.2.5
[ceph.git] / ceph / src / rocksdb / CMakeLists.txt
1 # Prerequisites for Windows:
2 # This cmake build is for Windows 64-bit only.
3 #
4 # Prerequisites:
5 # You must have at least Visual Studio 2015 Update 3. Start the Developer Command Prompt window that is a part of Visual Studio installation.
6 # Run the build commands from within the Developer Command Prompt window to have paths to the compiler and runtime libraries set.
7 # You must have git.exe in your %PATH% environment variable.
8 #
9 # To build Rocksdb for Windows is as easy as 1-2-3-4-5:
10 #
11 # 1. Update paths to third-party libraries in thirdparty.inc file
12 # 2. Create a new directory for build artifacts
13 # mkdir build
14 # cd build
15 # 3. Run cmake to generate project files for Windows, add more options to enable required third-party libraries.
16 # See thirdparty.inc for more information.
17 # sample command: cmake -G "Visual Studio 15 Win64" -DCMAKE_BUILD_TYPE=Release -DWITH_GFLAGS=1 -DWITH_SNAPPY=1 -DWITH_JEMALLOC=1 -DWITH_JNI=1 ..
18 # 4. Then build the project in debug mode (you may want to add /m[:<N>] flag to run msbuild in <N> parallel threads
19 # or simply /m to use all avail cores)
20 # msbuild rocksdb.sln
21 #
22 # rocksdb.sln build features exclusions of test only code in Release. If you build ALL_BUILD then everything
23 # will be attempted but test only code does not build in Release mode.
24 #
25 # 5. And release mode (/m[:<N>] is also supported)
26 # msbuild rocksdb.sln /p:Configuration=Release
27 #
28 # Linux:
29 #
30 # 1. Install a recent toolchain such as devtoolset-3 if you're on a older distro. C++11 required.
31 # 2. mkdir build; cd build
32 # 3. cmake ..
33 # 4. make -j
34
35 cmake_minimum_required(VERSION 3.5.1)
36
37 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/modules/")
38 include(ReadVersion)
39 get_rocksdb_version(rocksdb_VERSION)
40 project(rocksdb
41 VERSION ${rocksdb_VERSION}
42 LANGUAGES CXX C ASM)
43
44 if(POLICY CMP0042)
45 cmake_policy(SET CMP0042 NEW)
46 endif()
47
48 if(NOT CMAKE_BUILD_TYPE)
49 if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
50 set(default_build_type "Debug")
51 else()
52 set(default_build_type "RelWithDebInfo")
53 endif()
54 set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING
55 "Default BUILD_TYPE is ${default_build_type}" FORCE)
56 endif()
57
58 find_program(CCACHE_FOUND ccache)
59 if(CCACHE_FOUND)
60 set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
61 set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
62 endif(CCACHE_FOUND)
63
64 option(WITH_JEMALLOC "build with JeMalloc" OFF)
65 option(WITH_SNAPPY "build with SNAPPY" OFF)
66 option(WITH_LZ4 "build with lz4" OFF)
67 option(WITH_ZLIB "build with zlib" OFF)
68 option(WITH_ZSTD "build with zstd" OFF)
69 option(WITH_WINDOWS_UTF8_FILENAMES "use UTF8 as characterset for opening files, regardles of the system code page" OFF)
70 if (WITH_WINDOWS_UTF8_FILENAMES)
71 add_definitions(-DROCKSDB_WINDOWS_UTF8_FILENAMES)
72 endif()
73 # third-party/folly is only validated to work on Linux and Windows for now.
74 # So only turn it on there by default.
75 if(CMAKE_SYSTEM_NAME MATCHES "Linux|Windows")
76 if(MSVC AND MSVC_VERSION LESS 1910)
77 # Folly does not compile with MSVC older than VS2017
78 option(WITH_FOLLY_DISTRIBUTED_MUTEX "build with folly::DistributedMutex" OFF)
79 else()
80 option(WITH_FOLLY_DISTRIBUTED_MUTEX "build with folly::DistributedMutex" ON)
81 endif()
82 else()
83 option(WITH_FOLLY_DISTRIBUTED_MUTEX "build with folly::DistributedMutex" OFF)
84 endif()
85
86 include(CMakeDependentOption)
87 CMAKE_DEPENDENT_OPTION(WITH_GFLAGS "build with GFlags" ON
88 "NOT MSVC;NOT MINGW" OFF)
89
90 if(MSVC)
91 option(WITH_XPRESS "build with windows built in compression" OFF)
92 include(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty.inc)
93 else()
94 if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
95 # FreeBSD has jemalloc as default malloc
96 # but it does not have all the jemalloc files in include/...
97 set(WITH_JEMALLOC ON)
98 else()
99 if(WITH_JEMALLOC)
100 find_package(JeMalloc REQUIRED)
101 add_definitions(-DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE)
102 list(APPEND THIRDPARTY_LIBS JeMalloc::JeMalloc)
103 endif()
104 endif()
105
106 # No config file for this
107 if(WITH_GFLAGS)
108 find_package(gflags REQUIRED)
109 add_definitions(-DGFLAGS=1)
110 include_directories(${gflags_INCLUDE_DIR})
111 list(APPEND THIRDPARTY_LIBS gflags::gflags)
112 endif()
113
114 if(WITH_SNAPPY)
115 find_package(snappy REQUIRED)
116 add_definitions(-DSNAPPY)
117 list(APPEND THIRDPARTY_LIBS snappy::snappy)
118 endif()
119
120 if(WITH_ZLIB)
121 find_package(ZLIB REQUIRED)
122 add_definitions(-DZLIB)
123 list(APPEND THIRDPARTY_LIBS ZLIB::ZLIB)
124 endif()
125
126 option(WITH_BZ2 "build with bzip2" OFF)
127 if(WITH_BZ2)
128 find_package(BZip2 REQUIRED)
129 add_definitions(-DBZIP2)
130 if(BZIP2_INCLUDE_DIRS)
131 include_directories(${BZIP2_INCLUDE_DIRS})
132 else()
133 include_directories(${BZIP2_INCLUDE_DIR})
134 endif()
135 list(APPEND THIRDPARTY_LIBS ${BZIP2_LIBRARIES})
136 endif()
137
138 if(WITH_LZ4)
139 find_package(lz4 REQUIRED)
140 add_definitions(-DLZ4)
141 list(APPEND THIRDPARTY_LIBS lz4::lz4)
142 endif()
143
144 if(WITH_ZSTD)
145 find_package(zstd REQUIRED)
146 add_definitions(-DZSTD)
147 include_directories(${ZSTD_INCLUDE_DIR})
148 list(APPEND THIRDPARTY_LIBS zstd::zstd)
149 endif()
150 endif()
151
152 string(TIMESTAMP TS "%Y/%m/%d %H:%M:%S" UTC)
153 set(GIT_DATE_TIME "${TS}" CACHE STRING "the time we first built rocksdb")
154
155 find_package(Git)
156
157 if(GIT_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git")
158 if(WIN32)
159 execute_process(COMMAND $ENV{COMSPEC} /C ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse HEAD OUTPUT_VARIABLE GIT_SHA)
160 else()
161 execute_process(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse HEAD OUTPUT_VARIABLE GIT_SHA)
162 endif()
163 else()
164 set(GIT_SHA 0)
165 endif()
166
167 string(REGEX REPLACE "[^0-9a-f]+" "" GIT_SHA "${GIT_SHA}")
168
169
170 option(WITH_MD_LIBRARY "build with MD" ON)
171 if(WIN32 AND MSVC)
172 if(WITH_MD_LIBRARY)
173 set(RUNTIME_LIBRARY "MD")
174 else()
175 set(RUNTIME_LIBRARY "MT")
176 endif()
177 endif()
178
179 set(BUILD_VERSION_CC ${CMAKE_BINARY_DIR}/build_version.cc)
180 configure_file(util/build_version.cc.in ${BUILD_VERSION_CC} @ONLY)
181 add_library(build_version OBJECT ${BUILD_VERSION_CC})
182 target_include_directories(build_version PRIVATE
183 ${CMAKE_CURRENT_SOURCE_DIR}/util)
184 if(MSVC)
185 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi /nologo /EHsc /GS /Gd /GR /GF /fp:precise /Zc:wchar_t /Zc:forScope /errorReport:queue")
186 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /FC /d2Zi+ /W4 /wd4127 /wd4800 /wd4996 /wd4351 /wd4100 /wd4204 /wd4324")
187 else()
188 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wextra -Wall")
189 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing")
190 if(MINGW)
191 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-format -fno-asynchronous-unwind-tables")
192 add_definitions(-D_POSIX_C_SOURCE=1)
193 endif()
194 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
195 if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
196 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer")
197 include(CheckCXXCompilerFlag)
198 CHECK_CXX_COMPILER_FLAG("-momit-leaf-frame-pointer" HAVE_OMIT_LEAF_FRAME_POINTER)
199 if(HAVE_OMIT_LEAF_FRAME_POINTER)
200 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -momit-leaf-frame-pointer")
201 endif()
202 endif()
203 endif()
204
205 include(CheckCCompilerFlag)
206 if(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le")
207 CHECK_C_COMPILER_FLAG("-maltivec" HAS_ALTIVEC)
208 if(HAS_ALTIVEC)
209 message(STATUS " HAS_ALTIVEC yes")
210 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maltivec")
211 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maltivec")
212 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mcpu=power8")
213 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=power8")
214 endif(HAS_ALTIVEC)
215 endif(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le")
216
217 if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64")
218 CHECK_C_COMPILER_FLAG("-march=armv8-a+crc+crypto" HAS_ARMV8_CRC)
219 if(HAS_ARMV8_CRC)
220 message(STATUS " HAS_ARMV8_CRC yes")
221 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv8-a+crc+crypto -Wno-unused-function")
222 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8-a+crc+crypto -Wno-unused-function")
223 endif(HAS_ARMV8_CRC)
224 endif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64")
225
226 option(PORTABLE "build a portable binary" OFF)
227 option(FORCE_SSE42 "force building with SSE4.2, even when PORTABLE=ON" OFF)
228 if(PORTABLE)
229 # MSVC does not need a separate compiler flag to enable SSE4.2; if nmmintrin.h
230 # is available, it is available by default.
231 if(FORCE_SSE42 AND NOT MSVC)
232 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2 -mpclmul")
233 endif()
234 else()
235 if(MSVC)
236 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2")
237 else()
238 if(NOT HAVE_POWER8 AND NOT HAS_ARMV8_CRC)
239 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
240 endif()
241 endif()
242 endif()
243
244 include(CheckCXXSourceCompiles)
245 if(NOT MSVC)
246 set(CMAKE_REQUIRED_FLAGS "-msse4.2 -mpclmul")
247 endif()
248 CHECK_CXX_SOURCE_COMPILES("
249 #include <cstdint>
250 #include <nmmintrin.h>
251 #include <wmmintrin.h>
252 int main() {
253 volatile uint32_t x = _mm_crc32_u32(0, 0);
254 const auto a = _mm_set_epi64x(0, 0);
255 const auto b = _mm_set_epi64x(0, 0);
256 const auto c = _mm_clmulepi64_si128(a, b, 0x00);
257 auto d = _mm_cvtsi128_si64(c);
258 }
259 " HAVE_SSE42)
260 unset(CMAKE_REQUIRED_FLAGS)
261 if(HAVE_SSE42)
262 add_definitions(-DHAVE_SSE42)
263 add_definitions(-DHAVE_PCLMUL)
264 elseif(FORCE_SSE42)
265 message(FATAL_ERROR "FORCE_SSE42=ON but unable to compile with SSE4.2 enabled")
266 endif()
267
268 CHECK_CXX_SOURCE_COMPILES("
269 #if defined(_MSC_VER) && !defined(__thread)
270 #define __thread __declspec(thread)
271 #endif
272 int main() {
273 static __thread int tls;
274 }
275 " HAVE_THREAD_LOCAL)
276 if(HAVE_THREAD_LOCAL)
277 add_definitions(-DROCKSDB_SUPPORT_THREAD_LOCAL)
278 endif()
279
280 option(FAIL_ON_WARNINGS "Treat compile warnings as errors" ON)
281 if(FAIL_ON_WARNINGS)
282 if(MSVC)
283 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
284 else() # assume GCC
285 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
286 endif()
287 endif()
288
289 option(WITH_ASAN "build with ASAN" OFF)
290 if(WITH_ASAN)
291 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
292 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
293 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
294 if(WITH_JEMALLOC)
295 message(FATAL "ASAN does not work well with JeMalloc")
296 endif()
297 endif()
298
299 option(WITH_TSAN "build with TSAN" OFF)
300 if(WITH_TSAN)
301 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread -pie")
302 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -fPIC")
303 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread -fPIC")
304 if(WITH_JEMALLOC)
305 message(FATAL "TSAN does not work well with JeMalloc")
306 endif()
307 endif()
308
309 option(WITH_UBSAN "build with UBSAN" OFF)
310 if(WITH_UBSAN)
311 add_definitions(-DROCKSDB_UBSAN_RUN)
312 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined")
313 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
314 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined")
315 if(WITH_JEMALLOC)
316 message(FATAL "UBSAN does not work well with JeMalloc")
317 endif()
318 endif()
319
320 option(WITH_NUMA "build with NUMA policy support" OFF)
321 if(WITH_NUMA)
322 find_package(NUMA REQUIRED)
323 add_definitions(-DNUMA)
324 include_directories(${NUMA_INCLUDE_DIR})
325 list(APPEND THIRDPARTY_LIBS NUMA::NUMA)
326 endif()
327
328 option(WITH_TBB "build with Threading Building Blocks (TBB)" OFF)
329 if(WITH_TBB)
330 find_package(TBB REQUIRED)
331 add_definitions(-DTBB)
332 list(APPEND THIRDPARTY_LIBS TBB::TBB)
333 endif()
334
335 # Stall notifications eat some performance from inserts
336 option(DISABLE_STALL_NOTIF "Build with stall notifications" OFF)
337 if(DISABLE_STALL_NOTIF)
338 add_definitions(-DROCKSDB_DISABLE_STALL_NOTIFICATION)
339 endif()
340
341 option(WITH_DYNAMIC_EXTENSION "build with dynamic extension support" OFF)
342 if(NOT WITH_DYNAMIC_EXTENSION)
343 add_definitions(-DROCKSDB_NO_DYNAMIC_EXTENSION)
344 endif()
345
346 if(DEFINED USE_RTTI)
347 if(USE_RTTI)
348 message(STATUS "Enabling RTTI")
349 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DROCKSDB_USE_RTTI")
350 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DROCKSDB_USE_RTTI")
351 else()
352 if(MSVC)
353 message(STATUS "Disabling RTTI in Release builds. Always on in Debug.")
354 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DROCKSDB_USE_RTTI")
355 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GR-")
356 else()
357 message(STATUS "Disabling RTTI in Release builds")
358 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-rtti")
359 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-rtti")
360 endif()
361 endif()
362 else()
363 message(STATUS "Enabling RTTI in Debug builds only (default)")
364 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DROCKSDB_USE_RTTI")
365 if(MSVC)
366 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GR-")
367 else()
368 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-rtti")
369 endif()
370 endif()
371
372 # Used to run CI build and tests so we can run faster
373 option(OPTDBG "Build optimized debug build with MSVC" OFF)
374 option(WITH_RUNTIME_DEBUG "build with debug version of runtime library" ON)
375 if(MSVC)
376 if(OPTDBG)
377 message(STATUS "Debug optimization is enabled")
378 set(CMAKE_CXX_FLAGS_DEBUG "/Oxt")
379 else()
380 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /RTC1 /Gm")
381 endif()
382 if(WITH_RUNTIME_DEBUG)
383 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /${RUNTIME_LIBRARY}d")
384 else()
385 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /${RUNTIME_LIBRARY}")
386 endif()
387 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oxt /Zp8 /Gm- /Gy /${RUNTIME_LIBRARY}")
388
389 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG")
390 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG")
391 endif()
392
393 if(CMAKE_COMPILER_IS_GNUCXX)
394 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-memcmp")
395 endif()
396
397 option(ROCKSDB_LITE "Build RocksDBLite version" OFF)
398 if(ROCKSDB_LITE)
399 add_definitions(-DROCKSDB_LITE)
400 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -Os")
401 endif()
402
403 if(CMAKE_SYSTEM_NAME MATCHES "Cygwin")
404 add_definitions(-fno-builtin-memcmp -DCYGWIN)
405 elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
406 add_definitions(-DOS_MACOSX)
407 if(CMAKE_SYSTEM_PROCESSOR MATCHES arm)
408 add_definitions(-DIOS_CROSS_COMPILE -DROCKSDB_LITE)
409 # no debug info for IOS, that will make our library big
410 add_definitions(-DNDEBUG)
411 endif()
412 elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
413 add_definitions(-DOS_LINUX)
414 elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS")
415 add_definitions(-DOS_SOLARIS)
416 elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
417 add_definitions(-DOS_FREEBSD)
418 elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD")
419 add_definitions(-DOS_NETBSD)
420 elseif(CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
421 add_definitions(-DOS_OPENBSD)
422 elseif(CMAKE_SYSTEM_NAME MATCHES "DragonFly")
423 add_definitions(-DOS_DRAGONFLYBSD)
424 elseif(CMAKE_SYSTEM_NAME MATCHES "Android")
425 add_definitions(-DOS_ANDROID)
426 elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
427 add_definitions(-DWIN32 -DOS_WIN -D_MBCS -DWIN64 -DNOMINMAX)
428 if(MINGW)
429 add_definitions(-D_WIN32_WINNT=_WIN32_WINNT_VISTA)
430 endif()
431 endif()
432
433 if(NOT WIN32)
434 add_definitions(-DROCKSDB_PLATFORM_POSIX -DROCKSDB_LIB_IO_POSIX)
435 endif()
436
437 option(WITH_FALLOCATE "build with fallocate" ON)
438 if(WITH_FALLOCATE)
439 CHECK_CXX_SOURCE_COMPILES("
440 #include <fcntl.h>
441 #include <linux/falloc.h>
442 int main() {
443 int fd = open(\"/dev/null\", 0);
444 fallocate(fd, FALLOC_FL_KEEP_SIZE, 0, 1024);
445 }
446 " HAVE_FALLOCATE)
447 if(HAVE_FALLOCATE)
448 add_definitions(-DROCKSDB_FALLOCATE_PRESENT)
449 endif()
450 endif()
451
452 CHECK_CXX_SOURCE_COMPILES("
453 #include <fcntl.h>
454 int main() {
455 int fd = open(\"/dev/null\", 0);
456 sync_file_range(fd, 0, 1024, SYNC_FILE_RANGE_WRITE);
457 }
458 " HAVE_SYNC_FILE_RANGE_WRITE)
459 if(HAVE_SYNC_FILE_RANGE_WRITE)
460 add_definitions(-DROCKSDB_RANGESYNC_PRESENT)
461 endif()
462
463 CHECK_CXX_SOURCE_COMPILES("
464 #include <pthread.h>
465 int main() {
466 (void) PTHREAD_MUTEX_ADAPTIVE_NP;
467 }
468 " HAVE_PTHREAD_MUTEX_ADAPTIVE_NP)
469 if(HAVE_PTHREAD_MUTEX_ADAPTIVE_NP)
470 add_definitions(-DROCKSDB_PTHREAD_ADAPTIVE_MUTEX)
471 endif()
472
473 include(CheckCXXSymbolExists)
474 check_cxx_symbol_exists(malloc_usable_size malloc.h HAVE_MALLOC_USABLE_SIZE)
475 if(HAVE_MALLOC_USABLE_SIZE)
476 add_definitions(-DROCKSDB_MALLOC_USABLE_SIZE)
477 endif()
478
479 check_cxx_symbol_exists(sched_getcpu sched.h HAVE_SCHED_GETCPU)
480 if(HAVE_SCHED_GETCPU)
481 add_definitions(-DROCKSDB_SCHED_GETCPU_PRESENT)
482 endif()
483
484 check_cxx_symbol_exists(getauxval auvx.h HAVE_AUXV_GETAUXVAL)
485 if(HAVE_AUXV_GETAUXVAL)
486 add_definitions(-DROCKSDB_AUXV_GETAUXVAL_PRESENT)
487 endif()
488
489 include_directories(${PROJECT_SOURCE_DIR})
490 include_directories(${PROJECT_SOURCE_DIR}/include)
491 include_directories(SYSTEM ${PROJECT_SOURCE_DIR}/third-party/gtest-1.8.1/fused-src)
492 if(WITH_FOLLY_DISTRIBUTED_MUTEX)
493 include_directories(${PROJECT_SOURCE_DIR}/third-party/folly)
494 endif()
495 find_package(Threads REQUIRED)
496
497 # Main library source code
498
499 set(SOURCES
500 cache/clock_cache.cc
501 cache/lru_cache.cc
502 cache/sharded_cache.cc
503 db/arena_wrapped_db_iter.cc
504 db/builder.cc
505 db/c.cc
506 db/column_family.cc
507 db/compacted_db_impl.cc
508 db/compaction/compaction.cc
509 db/compaction/compaction_iterator.cc
510 db/compaction/compaction_picker.cc
511 db/compaction/compaction_job.cc
512 db/compaction/compaction_picker_fifo.cc
513 db/compaction/compaction_picker_level.cc
514 db/compaction/compaction_picker_universal.cc
515 db/convenience.cc
516 db/db_filesnapshot.cc
517 db/db_impl/db_impl.cc
518 db/db_impl/db_impl_write.cc
519 db/db_impl/db_impl_compaction_flush.cc
520 db/db_impl/db_impl_files.cc
521 db/db_impl/db_impl_open.cc
522 db/db_impl/db_impl_debug.cc
523 db/db_impl/db_impl_experimental.cc
524 db/db_impl/db_impl_readonly.cc
525 db/db_impl/db_impl_secondary.cc
526 db/db_info_dumper.cc
527 db/db_iter.cc
528 db/dbformat.cc
529 db/error_handler.cc
530 db/event_helpers.cc
531 db/experimental.cc
532 db/external_sst_file_ingestion_job.cc
533 db/file_indexer.cc
534 db/flush_job.cc
535 db/flush_scheduler.cc
536 db/forward_iterator.cc
537 db/import_column_family_job.cc
538 db/internal_stats.cc
539 db/logs_with_prep_tracker.cc
540 db/log_reader.cc
541 db/log_writer.cc
542 db/malloc_stats.cc
543 db/memtable.cc
544 db/memtable_list.cc
545 db/merge_helper.cc
546 db/merge_operator.cc
547 db/range_del_aggregator.cc
548 db/range_tombstone_fragmenter.cc
549 db/repair.cc
550 db/snapshot_impl.cc
551 db/table_cache.cc
552 db/table_properties_collector.cc
553 db/transaction_log_impl.cc
554 db/trim_history_scheduler.cc
555 db/version_builder.cc
556 db/version_edit.cc
557 db/version_set.cc
558 db/wal_manager.cc
559 db/write_batch.cc
560 db/write_batch_base.cc
561 db/write_controller.cc
562 db/write_thread.cc
563 env/env.cc
564 env/env_chroot.cc
565 env/env_encryption.cc
566 env/env_hdfs.cc
567 env/file_system.cc
568 env/mock_env.cc
569 file/delete_scheduler.cc
570 file/file_prefetch_buffer.cc
571 file/file_util.cc
572 file/filename.cc
573 file/random_access_file_reader.cc
574 file/read_write_util.cc
575 file/readahead_raf.cc
576 file/sequence_file_reader.cc
577 file/sst_file_manager_impl.cc
578 file/writable_file_writer.cc
579 logging/auto_roll_logger.cc
580 logging/event_logger.cc
581 logging/log_buffer.cc
582 memory/arena.cc
583 memory/concurrent_arena.cc
584 memory/jemalloc_nodump_allocator.cc
585 memtable/alloc_tracker.cc
586 memtable/hash_linklist_rep.cc
587 memtable/hash_skiplist_rep.cc
588 memtable/skiplistrep.cc
589 memtable/vectorrep.cc
590 memtable/write_buffer_manager.cc
591 monitoring/histogram.cc
592 monitoring/histogram_windowing.cc
593 monitoring/in_memory_stats_history.cc
594 monitoring/instrumented_mutex.cc
595 monitoring/iostats_context.cc
596 monitoring/perf_context.cc
597 monitoring/perf_level.cc
598 monitoring/persistent_stats_history.cc
599 monitoring/statistics.cc
600 monitoring/thread_status_impl.cc
601 monitoring/thread_status_updater.cc
602 monitoring/thread_status_util.cc
603 monitoring/thread_status_util_debug.cc
604 options/cf_options.cc
605 options/db_options.cc
606 options/options.cc
607 options/options_helper.cc
608 options/options_parser.cc
609 options/options_sanity_check.cc
610 port/stack_trace.cc
611 table/adaptive/adaptive_table_factory.cc
612 table/block_based/block.cc
613 table/block_based/block_based_filter_block.cc
614 table/block_based/block_based_table_builder.cc
615 table/block_based/block_based_table_factory.cc
616 table/block_based/block_based_table_reader.cc
617 table/block_based/block_builder.cc
618 table/block_based/block_prefix_index.cc
619 table/block_based/data_block_hash_index.cc
620 table/block_based/data_block_footer.cc
621 table/block_based/filter_block_reader_common.cc
622 table/block_based/filter_policy.cc
623 table/block_based/flush_block_policy.cc
624 table/block_based/full_filter_block.cc
625 table/block_based/index_builder.cc
626 table/block_based/parsed_full_filter_block.cc
627 table/block_based/partitioned_filter_block.cc
628 table/block_based/uncompression_dict_reader.cc
629 table/block_fetcher.cc
630 table/cuckoo/cuckoo_table_builder.cc
631 table/cuckoo/cuckoo_table_factory.cc
632 table/cuckoo/cuckoo_table_reader.cc
633 table/format.cc
634 table/get_context.cc
635 table/iterator.cc
636 table/merging_iterator.cc
637 table/meta_blocks.cc
638 table/persistent_cache_helper.cc
639 table/plain/plain_table_bloom.cc
640 table/plain/plain_table_builder.cc
641 table/plain/plain_table_factory.cc
642 table/plain/plain_table_index.cc
643 table/plain/plain_table_key_coding.cc
644 table/plain/plain_table_reader.cc
645 table/sst_file_reader.cc
646 table/sst_file_writer.cc
647 table/table_properties.cc
648 table/two_level_iterator.cc
649 test_util/sync_point.cc
650 test_util/sync_point_impl.cc
651 test_util/testutil.cc
652 test_util/transaction_test_util.cc
653 tools/block_cache_analyzer/block_cache_trace_analyzer.cc
654 tools/dump/db_dump_tool.cc
655 tools/ldb_cmd.cc
656 tools/ldb_tool.cc
657 tools/sst_dump_tool.cc
658 tools/trace_analyzer_tool.cc
659 trace_replay/trace_replay.cc
660 trace_replay/block_cache_tracer.cc
661 util/coding.cc
662 util/compaction_job_stats_impl.cc
663 util/comparator.cc
664 util/compression_context_cache.cc
665 util/concurrent_task_limiter_impl.cc
666 util/crc32c.cc
667 util/dynamic_bloom.cc
668 util/hash.cc
669 util/murmurhash.cc
670 util/random.cc
671 util/rate_limiter.cc
672 util/slice.cc
673 util/file_checksum_helper.cc
674 util/status.cc
675 util/string_util.cc
676 util/thread_local.cc
677 util/threadpool_imp.cc
678 util/xxhash.cc
679 utilities/backupable/backupable_db.cc
680 utilities/blob_db/blob_compaction_filter.cc
681 utilities/blob_db/blob_db.cc
682 utilities/blob_db/blob_db_impl.cc
683 utilities/blob_db/blob_db_impl_filesnapshot.cc
684 utilities/blob_db/blob_dump_tool.cc
685 utilities/blob_db/blob_file.cc
686 utilities/blob_db/blob_log_reader.cc
687 utilities/blob_db/blob_log_writer.cc
688 utilities/blob_db/blob_log_format.cc
689 utilities/cassandra/cassandra_compaction_filter.cc
690 utilities/cassandra/format.cc
691 utilities/cassandra/merge_operator.cc
692 utilities/checkpoint/checkpoint_impl.cc
693 utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc
694 utilities/debug.cc
695 utilities/env_mirror.cc
696 utilities/env_timed.cc
697 utilities/leveldb_options/leveldb_options.cc
698 utilities/memory/memory_util.cc
699 utilities/merge_operators/bytesxor.cc
700 utilities/merge_operators/max.cc
701 utilities/merge_operators/put.cc
702 utilities/merge_operators/sortlist.cc
703 utilities/merge_operators/string_append/stringappend.cc
704 utilities/merge_operators/string_append/stringappend2.cc
705 utilities/merge_operators/uint64add.cc
706 utilities/object_registry.cc
707 utilities/option_change_migration/option_change_migration.cc
708 utilities/options/options_util.cc
709 utilities/persistent_cache/block_cache_tier.cc
710 utilities/persistent_cache/block_cache_tier_file.cc
711 utilities/persistent_cache/block_cache_tier_metadata.cc
712 utilities/persistent_cache/persistent_cache_tier.cc
713 utilities/persistent_cache/volatile_tier_impl.cc
714 utilities/simulator_cache/cache_simulator.cc
715 utilities/simulator_cache/sim_cache.cc
716 utilities/table_properties_collectors/compact_on_deletion_collector.cc
717 utilities/trace/file_trace_reader_writer.cc
718 utilities/transactions/optimistic_transaction_db_impl.cc
719 utilities/transactions/optimistic_transaction.cc
720 utilities/transactions/pessimistic_transaction.cc
721 utilities/transactions/pessimistic_transaction_db.cc
722 utilities/transactions/snapshot_checker.cc
723 utilities/transactions/transaction_base.cc
724 utilities/transactions/transaction_db_mutex_impl.cc
725 utilities/transactions/transaction_lock_mgr.cc
726 utilities/transactions/transaction_util.cc
727 utilities/transactions/write_prepared_txn.cc
728 utilities/transactions/write_prepared_txn_db.cc
729 utilities/transactions/write_unprepared_txn.cc
730 utilities/transactions/write_unprepared_txn_db.cc
731 utilities/ttl/db_ttl_impl.cc
732 utilities/write_batch_with_index/write_batch_with_index.cc
733 utilities/write_batch_with_index/write_batch_with_index_internal.cc
734 $<TARGET_OBJECTS:build_version>)
735
736 if(HAVE_SSE42 AND NOT MSVC)
737 set_source_files_properties(
738 util/crc32c.cc
739 PROPERTIES COMPILE_FLAGS "-msse4.2 -mpclmul")
740 endif()
741
742 if(HAVE_POWER8)
743 list(APPEND SOURCES
744 util/crc32c_ppc.c
745 util/crc32c_ppc_asm.S)
746 endif(HAVE_POWER8)
747
748 if(HAS_ARMV8_CRC)
749 list(APPEND SOURCES
750 util/crc32c_arm64.cc)
751 endif(HAS_ARMV8_CRC)
752
753 if(WIN32)
754 list(APPEND SOURCES
755 port/win/io_win.cc
756 port/win/env_win.cc
757 port/win/env_default.cc
758 port/win/port_win.cc
759 port/win/win_logger.cc
760 port/win/win_thread.cc)
761
762 if(WITH_XPRESS)
763 list(APPEND SOURCES
764 port/win/xpress_win.cc)
765 endif()
766
767 if(WITH_JEMALLOC)
768 list(APPEND SOURCES
769 port/win/win_jemalloc.cc)
770 endif()
771
772 else()
773 list(APPEND SOURCES
774 port/port_posix.cc
775 env/env_posix.cc
776 env/fs_posix.cc
777 env/io_posix.cc)
778 endif()
779
780 if(WITH_FOLLY_DISTRIBUTED_MUTEX)
781 list(APPEND SOURCES
782 third-party/folly/folly/detail/Futex.cpp
783 third-party/folly/folly/synchronization/AtomicNotification.cpp
784 third-party/folly/folly/synchronization/DistributedMutex.cpp
785 third-party/folly/folly/synchronization/ParkingLot.cpp
786 third-party/folly/folly/synchronization/WaitOptions.cpp)
787 endif()
788
789 set(ROCKSDB_STATIC_LIB rocksdb${ARTIFACT_SUFFIX})
790 set(ROCKSDB_SHARED_LIB rocksdb-shared${ARTIFACT_SUFFIX})
791
792 option(ROCKSDB_BUILD_SHARED "Build shared versions of the RocksDB libraries" ON)
793
794 option(WITH_LIBRADOS "Build with librados" OFF)
795 if(WITH_LIBRADOS)
796 list(APPEND SOURCES
797 utilities/env_librados.cc)
798 list(APPEND THIRDPARTY_LIBS rados)
799 endif()
800
801 if(WIN32)
802 set(SYSTEM_LIBS ${SYSTEM_LIBS} shlwapi.lib rpcrt4.lib)
803 else()
804 set(SYSTEM_LIBS ${CMAKE_THREAD_LIBS_INIT})
805 endif()
806
807 add_library(${ROCKSDB_STATIC_LIB} STATIC ${SOURCES})
808 target_link_libraries(${ROCKSDB_STATIC_LIB}
809 ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
810
811 if(ROCKSDB_BUILD_SHARED)
812 add_library(${ROCKSDB_SHARED_LIB} SHARED ${SOURCES})
813 target_link_libraries(${ROCKSDB_SHARED_LIB}
814 ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
815
816 if(WIN32)
817 set_target_properties(${ROCKSDB_SHARED_LIB} PROPERTIES
818 COMPILE_DEFINITIONS "ROCKSDB_DLL;ROCKSDB_LIBRARY_EXPORTS")
819 if(MSVC)
820 set_target_properties(${ROCKSDB_STATIC_LIB} PROPERTIES
821 COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_STATIC_LIB}.pdb")
822 set_target_properties(${ROCKSDB_SHARED_LIB} PROPERTIES
823 COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_SHARED_LIB}.pdb")
824 endif()
825 else()
826 set_target_properties(${ROCKSDB_SHARED_LIB} PROPERTIES
827 LINKER_LANGUAGE CXX
828 VERSION ${rocksdb_VERSION}
829 SOVERSION ${rocksdb_VERSION_MAJOR}
830 CXX_STANDARD 11
831 OUTPUT_NAME "rocksdb")
832 endif()
833 endif()
834
835 if(ROCKSDB_BUILD_SHARED AND NOT WIN32)
836 set(ROCKSDB_LIB ${ROCKSDB_SHARED_LIB})
837 else()
838 set(ROCKSDB_LIB ${ROCKSDB_STATIC_LIB})
839 endif()
840
841 option(WITH_JNI "build with JNI" OFF)
842 if(WITH_JNI OR JNI)
843 message(STATUS "JNI library is enabled")
844 add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/java)
845 else()
846 message(STATUS "JNI library is disabled")
847 endif()
848
849 # Installation and packaging
850 if(WIN32)
851 option(ROCKSDB_INSTALL_ON_WINDOWS "Enable install target on Windows" OFF)
852 endif()
853 if(NOT WIN32 OR ROCKSDB_INSTALL_ON_WINDOWS)
854 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
855 if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
856 # Change default installation prefix on Linux to /usr
857 set(CMAKE_INSTALL_PREFIX /usr CACHE PATH "Install path prefix, prepended onto install directories." FORCE)
858 endif()
859 endif()
860
861 include(GNUInstallDirs)
862 include(CMakePackageConfigHelpers)
863
864 set(package_config_destination ${CMAKE_INSTALL_LIBDIR}/cmake/rocksdb)
865
866 configure_package_config_file(
867 ${CMAKE_CURRENT_LIST_DIR}/cmake/RocksDBConfig.cmake.in RocksDBConfig.cmake
868 INSTALL_DESTINATION ${package_config_destination}
869 )
870
871 write_basic_package_version_file(
872 RocksDBConfigVersion.cmake
873 VERSION ${rocksdb_VERSION}
874 COMPATIBILITY SameMajorVersion
875 )
876
877 install(DIRECTORY include/rocksdb COMPONENT devel DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
878
879 install(
880 TARGETS ${ROCKSDB_STATIC_LIB}
881 EXPORT RocksDBTargets
882 COMPONENT devel
883 ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
884 INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
885 )
886
887 if(ROCKSDB_BUILD_SHARED)
888 install(
889 TARGETS ${ROCKSDB_SHARED_LIB}
890 EXPORT RocksDBTargets
891 COMPONENT runtime
892 ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
893 RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
894 LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
895 INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
896 )
897 endif()
898
899 install(
900 EXPORT RocksDBTargets
901 COMPONENT devel
902 DESTINATION ${package_config_destination}
903 NAMESPACE RocksDB::
904 )
905
906 install(
907 FILES
908 ${CMAKE_CURRENT_BINARY_DIR}/RocksDBConfig.cmake
909 ${CMAKE_CURRENT_BINARY_DIR}/RocksDBConfigVersion.cmake
910 COMPONENT devel
911 DESTINATION ${package_config_destination}
912 )
913 endif()
914
915 # Tests are excluded from Release builds
916 CMAKE_DEPENDENT_OPTION(WITH_TESTS "build with tests" ON
917 "CMAKE_BUILD_TYPE STREQUAL Debug" OFF)
918 if(WITH_TESTS)
919 add_subdirectory(third-party/gtest-1.8.1/fused-src/gtest)
920 add_library(testharness STATIC
921 test_util/testharness.cc)
922 target_link_libraries(testharness gtest)
923
924 set(TESTS
925 cache/cache_test.cc
926 cache/lru_cache_test.cc
927 db/column_family_test.cc
928 db/compact_files_test.cc
929 db/compaction/compaction_job_stats_test.cc
930 db/compaction/compaction_job_test.cc
931 db/compaction/compaction_iterator_test.cc
932 db/compaction/compaction_picker_test.cc
933 db/comparator_db_test.cc
934 db/corruption_test.cc
935 db/cuckoo_table_db_test.cc
936 db/db_basic_test.cc
937 db/db_blob_index_test.cc
938 db/db_block_cache_test.cc
939 db/db_bloom_filter_test.cc
940 db/db_compaction_filter_test.cc
941 db/db_compaction_test.cc
942 db/db_dynamic_level_test.cc
943 db/db_flush_test.cc
944 db/db_inplace_update_test.cc
945 db/db_io_failure_test.cc
946 db/db_iter_test.cc
947 db/db_iter_stress_test.cc
948 db/db_iterator_test.cc
949 db/db_log_iter_test.cc
950 db/db_memtable_test.cc
951 db/db_merge_operator_test.cc
952 db/db_merge_operand_test.cc
953 db/db_options_test.cc
954 db/db_properties_test.cc
955 db/db_range_del_test.cc
956 db/db_impl/db_secondary_test.cc
957 db/db_sst_test.cc
958 db/db_statistics_test.cc
959 db/db_table_properties_test.cc
960 db/db_tailing_iter_test.cc
961 db/db_test.cc
962 db/db_test2.cc
963 db/db_universal_compaction_test.cc
964 db/db_wal_test.cc
965 db/db_write_test.cc
966 db/dbformat_test.cc
967 db/deletefile_test.cc
968 db/error_handler_test.cc
969 db/obsolete_files_test.cc
970 db/external_sst_file_basic_test.cc
971 db/external_sst_file_test.cc
972 db/fault_injection_test.cc
973 db/file_indexer_test.cc
974 db/filename_test.cc
975 db/flush_job_test.cc
976 db/listener_test.cc
977 db/log_test.cc
978 db/manual_compaction_test.cc
979 db/memtable_list_test.cc
980 db/merge_helper_test.cc
981 db/merge_test.cc
982 db/options_file_test.cc
983 db/perf_context_test.cc
984 db/plain_table_db_test.cc
985 db/prefix_test.cc
986 db/range_del_aggregator_test.cc
987 db/range_tombstone_fragmenter_test.cc
988 db/repair_test.cc
989 db/table_properties_collector_test.cc
990 db/version_builder_test.cc
991 db/version_edit_test.cc
992 db/version_set_test.cc
993 db/wal_manager_test.cc
994 db/write_batch_test.cc
995 db/write_callback_test.cc
996 db/write_controller_test.cc
997 env/env_basic_test.cc
998 env/env_test.cc
999 env/mock_env_test.cc
1000 file/delete_scheduler_test.cc
1001 logging/auto_roll_logger_test.cc
1002 logging/env_logger_test.cc
1003 logging/event_logger_test.cc
1004 memory/arena_test.cc
1005 memtable/inlineskiplist_test.cc
1006 memtable/skiplist_test.cc
1007 memtable/write_buffer_manager_test.cc
1008 monitoring/histogram_test.cc
1009 monitoring/iostats_context_test.cc
1010 monitoring/statistics_test.cc
1011 monitoring/stats_history_test.cc
1012 options/options_settable_test.cc
1013 options/options_test.cc
1014 table/block_based/block_based_filter_block_test.cc
1015 table/block_based/block_test.cc
1016 table/block_based/data_block_hash_index_test.cc
1017 table/block_based/full_filter_block_test.cc
1018 table/block_based/partitioned_filter_block_test.cc
1019 table/cleanable_test.cc
1020 table/cuckoo/cuckoo_table_builder_test.cc
1021 table/cuckoo/cuckoo_table_reader_test.cc
1022 table/merger_test.cc
1023 table/sst_file_reader_test.cc
1024 table/table_test.cc
1025 tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc
1026 tools/ldb_cmd_test.cc
1027 tools/reduce_levels_test.cc
1028 tools/sst_dump_test.cc
1029 tools/trace_analyzer_test.cc
1030 util/autovector_test.cc
1031 util/bloom_test.cc
1032 util/coding_test.cc
1033 util/crc32c_test.cc
1034 util/defer_test.cc
1035 util/dynamic_bloom_test.cc
1036 util/file_reader_writer_test.cc
1037 util/filelock_test.cc
1038 util/hash_test.cc
1039 util/heap_test.cc
1040 util/random_test.cc
1041 util/rate_limiter_test.cc
1042 util/repeatable_thread_test.cc
1043 util/slice_test.cc
1044 util/slice_transform_test.cc
1045 util/timer_queue_test.cc
1046 util/thread_list_test.cc
1047 util/thread_local_test.cc
1048 utilities/backupable/backupable_db_test.cc
1049 utilities/blob_db/blob_db_test.cc
1050 utilities/cassandra/cassandra_functional_test.cc
1051 utilities/cassandra/cassandra_format_test.cc
1052 utilities/cassandra/cassandra_row_merge_test.cc
1053 utilities/cassandra/cassandra_serialize_test.cc
1054 utilities/checkpoint/checkpoint_test.cc
1055 utilities/memory/memory_test.cc
1056 utilities/merge_operators/string_append/stringappend_test.cc
1057 utilities/object_registry_test.cc
1058 utilities/option_change_migration/option_change_migration_test.cc
1059 utilities/options/options_util_test.cc
1060 utilities/persistent_cache/hash_table_test.cc
1061 utilities/persistent_cache/persistent_cache_test.cc
1062 utilities/simulator_cache/cache_simulator_test.cc
1063 utilities/simulator_cache/sim_cache_test.cc
1064 utilities/table_properties_collectors/compact_on_deletion_collector_test.cc
1065 utilities/transactions/optimistic_transaction_test.cc
1066 utilities/transactions/transaction_test.cc
1067 utilities/transactions/write_prepared_transaction_test.cc
1068 utilities/transactions/write_unprepared_transaction_test.cc
1069 utilities/ttl/ttl_test.cc
1070 utilities/write_batch_with_index/write_batch_with_index_test.cc
1071 )
1072 if(WITH_LIBRADOS)
1073 list(APPEND TESTS utilities/env_librados_test.cc)
1074 endif()
1075
1076 if(WITH_FOLLY_DISTRIBUTED_MUTEX)
1077 list(APPEND TESTS third-party/folly/folly/synchronization/test/DistributedMutexTest.cpp)
1078 endif()
1079
1080 set(TESTUTIL_SOURCE
1081 db/db_test_util.cc
1082 monitoring/thread_status_updater_debug.cc
1083 table/mock_table.cc
1084 test_util/fault_injection_test_env.cc
1085 utilities/cassandra/test_utils.cc
1086 )
1087 enable_testing()
1088 add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND})
1089 set(TESTUTILLIB testutillib${ARTIFACT_SUFFIX})
1090 add_library(${TESTUTILLIB} STATIC ${TESTUTIL_SOURCE})
1091 target_link_libraries(${TESTUTILLIB} ${ROCKSDB_LIB})
1092 if(MSVC)
1093 set_target_properties(${TESTUTILLIB} PROPERTIES COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/testutillib${ARTIFACT_SUFFIX}.pdb")
1094 endif()
1095 set_target_properties(${TESTUTILLIB}
1096 PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1
1097 EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1
1098 EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
1099 )
1100
1101 foreach(sourcefile ${TESTS})
1102 get_filename_component(exename ${sourcefile} NAME_WE)
1103 add_executable(${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX} ${sourcefile})
1104 set_target_properties(${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX}
1105 PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1
1106 EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1
1107 EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
1108 OUTPUT_NAME ${exename}${ARTIFACT_SUFFIX}
1109 )
1110 target_link_libraries(${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX} testutillib${ARTIFACT_SUFFIX} testharness gtest ${ROCKSDB_LIB})
1111 if(NOT "${exename}" MATCHES "db_sanity_test")
1112 add_test(NAME ${exename} COMMAND ${exename}${ARTIFACT_SUFFIX})
1113 add_dependencies(check ${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX})
1114 endif()
1115 endforeach(sourcefile ${TESTS})
1116
1117 if(WIN32)
1118 # C executables must link to a shared object
1119 if(ROCKSDB_BUILD_SHARED)
1120 set(ROCKSDB_LIB_FOR_C ${ROCKSDB_SHARED_LIB})
1121 else()
1122 set(ROCKSDB_LIB_FOR_C OFF)
1123 endif()
1124 else()
1125 set(ROCKSDB_LIB_FOR_C ${ROCKSDB_LIB})
1126 endif()
1127
1128 if(ROCKSDB_LIB_FOR_C)
1129 set(C_TESTS db/c_test.c)
1130 # C executables must link to a shared object
1131 add_executable(c_test db/c_test.c)
1132 target_link_libraries(c_test ${ROCKSDB_SHARED_LIB} testharness)
1133 add_test(NAME c_test COMMAND c_test${ARTIFACT_SUFFIX})
1134 add_dependencies(check c_test)
1135 endif()
1136 endif()
1137
1138 option(WITH_BENCHMARK_TOOLS "build with benchmarks" ON)
1139 if(WITH_BENCHMARK_TOOLS)
1140 add_executable(db_bench
1141 tools/db_bench.cc
1142 tools/db_bench_tool.cc)
1143 target_link_libraries(db_bench
1144 ${ROCKSDB_LIB})
1145
1146 add_executable(cache_bench
1147 cache/cache_bench.cc)
1148 target_link_libraries(cache_bench
1149 ${ROCKSDB_LIB})
1150
1151 add_executable(memtablerep_bench
1152 memtable/memtablerep_bench.cc)
1153 target_link_libraries(memtablerep_bench
1154 ${ROCKSDB_LIB})
1155
1156 add_executable(range_del_aggregator_bench
1157 db/range_del_aggregator_bench.cc)
1158 target_link_libraries(range_del_aggregator_bench
1159 ${ROCKSDB_LIB})
1160
1161 add_executable(table_reader_bench
1162 table/table_reader_bench.cc)
1163 target_link_libraries(table_reader_bench
1164 ${ROCKSDB_LIB} testharness)
1165
1166 add_executable(filter_bench
1167 util/filter_bench.cc)
1168 target_link_libraries(filter_bench
1169 ${ROCKSDB_LIB})
1170
1171 add_executable(hash_table_bench
1172 utilities/persistent_cache/hash_table_bench.cc)
1173 target_link_libraries(hash_table_bench
1174 ${ROCKSDB_LIB})
1175 endif()
1176
1177 option(WITH_CORE_TOOLS "build with ldb and sst_dump" ON)
1178 option(WITH_TOOLS "build with tools" ON)
1179 if(WITH_CORE_TOOLS OR WITH_TOOLS)
1180 add_subdirectory(tools)
1181 add_custom_target(core_tools
1182 DEPENDS ${core_tool_deps})
1183 endif()
1184
1185 if(WITH_TOOLS)
1186 add_subdirectory(db_stress_tool)
1187 add_custom_target(tools
1188 DEPENDS ${tool_deps})
1189 endif()