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