1 # Prerequisites for Windows:
2 # This cmake build is for Windows 64-bit only.
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.
9 # To build Rocksdb for Windows is as easy as 1-2-3-4-5:
11 # 1. Update paths to third-party libraries in thirdparty.inc file
12 # 2. Create a new directory for build artifacts
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" -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)
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.
25 # 5. And release mode (/m[:<N>] is also supported)
26 # msbuild rocksdb.sln /p:Configuration=Release
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
35 cmake_minimum_required(VERSION 2.8.12)
42 cmake_policy(SET CMP0042 NEW)
45 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/modules/")
47 option(WITH_JEMALLOC "build with JeMalloc" OFF)
48 option(WITH_SNAPPY "build with SNAPPY" OFF)
49 option(WITH_LZ4 "build with lz4" OFF)
50 option(WITH_ZLIB "build with zlib" OFF)
52 # Defaults currently different for GFLAGS.
53 # We will address find_package work a little later
54 option(WITH_GFLAGS "build with GFlags" OFF)
55 option(WITH_XPRESS "build with windows built in compression" OFF)
56 include(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty.inc)
58 if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
59 # FreeBSD has jemalloc as default malloc
60 # but it does not have all the jemalloc files in include/...
64 find_package(JeMalloc REQUIRED)
65 add_definitions(-DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE)
66 include_directories(${JEMALLOC_INCLUDE_DIR})
67 list(APPEND THIRDPARTY_LIBS ${JEMALLOC_LIBRARIES})
71 # No config file for this
72 option(WITH_GFLAGS "build with GFlags" ON)
76 add_definitions(-DGFLAGS=1)
77 include_directories(${gflags_INCLUDE_DIR})
78 list(APPEND THIRDPARTY_LIBS ${gflags_LIBRARIES})
83 find_package(snappy REQUIRED)
84 add_definitions(-DSNAPPY)
85 include_directories(${SNAPPY_INCLUDE_DIR})
86 list(APPEND THIRDPARTY_LIBS ${SNAPPY_LIBRARIES})
90 find_package(zlib REQUIRED)
91 add_definitions(-DZLIB)
92 include_directories(${ZLIB_INCLUDE_DIR})
93 list(APPEND THIRDPARTY_LIBS ${ZLIB_LIBRARIES})
96 option(WITH_BZ2 "build with bzip2" OFF)
98 find_package(bzip2 REQUIRED)
99 add_definitions(-DBZIP2)
100 include_directories(${BZIP2_INCLUDE_DIR})
101 list(APPEND THIRDPARTY_LIBS ${BZIP2_LIBRARIES})
105 find_package(lz4 REQUIRED)
106 add_definitions(-DLZ4)
107 include_directories(${LZ4_INCLUDE_DIR})
108 list(APPEND THIRDPARTY_LIBS ${LZ4_LIBRARIES})
111 option(WITH_ZSTD "build with zstd" OFF)
113 find_package(zstd REQUIRED)
114 add_definitions(-DZSTD)
115 include_directories(${ZSTD_INCLUDE_DIR})
116 list(APPEND THIRDPARTY_LIBS ${ZSTD_LIBRARIES})
120 string(TIMESTAMP GIT_DATE_TIME "%Y/%m/%d %H:%M:%S" UTC)
124 if(GIT_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git")
126 execute_process(COMMAND $ENV{COMSPEC} /C ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse HEAD OUTPUT_VARIABLE GIT_SHA)
128 execute_process(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse HEAD OUTPUT_VARIABLE GIT_SHA)
134 string(REGEX REPLACE "[^0-9a-f]+" "" GIT_SHA "${GIT_SHA}")
137 # Read rocksdb version from version.h header file.
138 file(READ include/rocksdb/version.h version_header_file)
139 string(REGEX MATCH "#define ROCKSDB_MAJOR ([0-9]+)" _ ${version_header_file})
140 set(ROCKSDB_VERSION_MAJOR ${CMAKE_MATCH_1})
141 string(REGEX MATCH "#define ROCKSDB_MINOR ([0-9]+)" _ ${version_header_file})
142 set(ROCKSDB_VERSION_MINOR ${CMAKE_MATCH_1})
143 string(REGEX MATCH "#define ROCKSDB_PATCH ([0-9]+)" _ ${version_header_file})
144 set(ROCKSDB_VERSION_PATCH ${CMAKE_MATCH_1})
145 set(ROCKSDB_VERSION ${ROCKSDB_VERSION_MAJOR}.${ROCKSDB_VERSION_MINOR}.${ROCKSDB_VERSION_PATCH})
148 option(WITH_MD_LIBRARY "build with MD" ON)
151 set(RUNTIME_LIBRARY "MD")
153 set(RUNTIME_LIBRARY "MT")
157 set(BUILD_VERSION_CC ${CMAKE_BINARY_DIR}/build_version.cc)
158 configure_file(util/build_version.cc.in ${BUILD_VERSION_CC} @ONLY)
159 add_library(build_version OBJECT ${BUILD_VERSION_CC})
160 target_include_directories(build_version PRIVATE
161 ${CMAKE_CURRENT_SOURCE_DIR}/util)
163 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi /nologo /EHsc /GS /Gd /GR /GF /fp:precise /Zc:wchar_t /Zc:forScope /errorReport:queue")
164 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /FC /d2Zi+ /W4 /wd4127 /wd4800 /wd4996 /wd4351 /wd4100 /wd4204 /wd4324")
166 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wextra -Wall")
167 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")
169 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-format")
171 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
172 if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
173 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -fno-omit-frame-pointer")
174 include(CheckCXXCompilerFlag)
175 CHECK_CXX_COMPILER_FLAG("-momit-leaf-frame-pointer" HAVE_OMIT_LEAF_FRAME_POINTER)
176 if(HAVE_OMIT_LEAF_FRAME_POINTER)
177 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -momit-leaf-frame-pointer")
182 include(CheckCCompilerFlag)
183 if(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le")
184 CHECK_C_COMPILER_FLAG("-maltivec" HAS_ALTIVEC)
186 message(STATUS " HAS_ALTIVEC yes")
187 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maltivec")
188 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maltivec")
189 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mcpu=power8")
190 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=power8")
192 endif(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le")
194 option(PORTABLE "build a portable binary" OFF)
195 option(FORCE_SSE42 "force building with SSE4.2, even when PORTABLE=ON" OFF)
197 # MSVC does not need a separate compiler flag to enable SSE4.2; if nmmintrin.h
198 # is available, it is available by default.
199 if(FORCE_SSE42 AND NOT MSVC)
200 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2 -mpclmul")
204 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2")
207 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
212 include(CheckCXXSourceCompiles)
214 set(CMAKE_REQUIRED_FLAGS "-msse4.2 -mpclmul")
216 CHECK_CXX_SOURCE_COMPILES("
218 #include <nmmintrin.h>
219 #include <wmmintrin.h>
221 volatile uint32_t x = _mm_crc32_u32(0, 0);
222 const auto a = _mm_set_epi64x(0, 0);
223 const auto b = _mm_set_epi64x(0, 0);
224 const auto c = _mm_clmulepi64_si128(a, b, 0x00);
225 auto d = _mm_cvtsi128_si64(c);
228 unset(CMAKE_REQUIRED_FLAGS)
230 add_definitions(-DHAVE_SSE42)
231 add_definitions(-DHAVE_PCLMUL)
233 message(FATAL_ERROR "FORCE_SSE42=ON but unable to compile with SSE4.2 enabled")
236 CHECK_CXX_SOURCE_COMPILES("
237 #if defined(_MSC_VER) && !defined(__thread)
238 #define __thread __declspec(thread)
241 static __thread int tls;
244 if(HAVE_THREAD_LOCAL)
245 add_definitions(-DROCKSDB_SUPPORT_THREAD_LOCAL)
248 option(FAIL_ON_WARNINGS "Treat compile warnings as errors" ON)
251 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
253 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
257 option(WITH_ASAN "build with ASAN" OFF)
259 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
260 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
261 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
263 message(FATAL "ASAN does not work well with JeMalloc")
267 option(WITH_TSAN "build with TSAN" OFF)
269 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread -pie")
270 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -fPIC")
271 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread -fPIC")
273 message(FATAL "TSAN does not work well with JeMalloc")
277 option(WITH_UBSAN "build with UBSAN" OFF)
279 add_definitions(-DROCKSDB_UBSAN_RUN)
280 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined")
281 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
282 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined")
284 message(FATAL "UBSAN does not work well with JeMalloc")
288 option(WITH_NUMA "build with NUMA policy support" OFF)
290 find_package(NUMA REQUIRED)
291 add_definitions(-DNUMA)
292 include_directories(${NUMA_INCLUDE_DIR})
293 list(APPEND THIRDPARTY_LIBS ${NUMA_LIBRARIES})
296 option(WITH_TBB "build with Threading Building Blocks (TBB)" OFF)
298 find_package(TBB REQUIRED)
299 add_definitions(-DTBB)
300 include_directories(${TBB_INCLUDE_DIR})
301 list(APPEND THIRDPARTY_LIBS ${TBB_LIBRARIES})
304 # Stall notifications eat some performance from inserts
305 option(DISABLE_STALL_NOTIF "Build with stall notifications" OFF)
306 if(DISABLE_STALL_NOTIF)
307 add_definitions(-DROCKSDB_DISABLE_STALL_NOTIFICATION)
310 # Used to run CI build and tests so we can run faster
311 set(OPTIMIZE_DEBUG_DEFAULT 0) # Debug build is unoptimized by default use -DOPTDBG=1 to optimize
314 set(OPTIMIZE_DEBUG ${OPTDBG})
316 set(OPTIMIZE_DEBUG ${OPTIMIZE_DEBUG_DEFAULT})
321 message(STATUS "Enabling RTTI")
322 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DROCKSDB_USE_RTTI")
323 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DROCKSDB_USE_RTTI")
325 message(STATUS "Disabling RTTI")
326 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-rtti")
327 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-rtti")
330 message(STATUS "Enabling RTTI in Debug builds only (default)")
331 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DROCKSDB_USE_RTTI")
332 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-rtti")
336 if((${OPTIMIZE_DEBUG} EQUAL 1))
337 message(STATUS "Debug optimization is enabled")
338 set(CMAKE_CXX_FLAGS_DEBUG "/Oxt /${RUNTIME_LIBRARY}d")
340 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /RTC1 /Gm /${RUNTIME_LIBRARY}d")
342 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oxt /Zp8 /Gm- /Gy /${RUNTIME_LIBRARY}")
344 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG")
345 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG")
348 if(CMAKE_COMPILER_IS_GNUCXX)
349 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-memcmp")
352 option(ROCKSDB_LITE "Build RocksDBLite version" OFF)
354 add_definitions(-DROCKSDB_LITE)
355 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
358 if(CMAKE_SYSTEM_NAME MATCHES "Cygwin")
359 add_definitions(-fno-builtin-memcmp -DCYGWIN)
360 elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
361 add_definitions(-DOS_MACOSX)
362 if(CMAKE_SYSTEM_PROCESSOR MATCHES arm)
363 add_definitions(-DIOS_CROSS_COMPILE -DROCKSDB_LITE)
364 # no debug info for IOS, that will make our library big
365 add_definitions(-DNDEBUG)
367 elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
368 add_definitions(-DOS_LINUX)
369 elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS")
370 add_definitions(-DOS_SOLARIS)
371 elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
372 add_definitions(-DOS_FREEBSD)
373 elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD")
374 add_definitions(-DOS_NETBSD)
375 elseif(CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
376 add_definitions(-DOS_OPENBSD)
377 elseif(CMAKE_SYSTEM_NAME MATCHES "DragonFly")
378 add_definitions(-DOS_DRAGONFLYBSD)
379 elseif(CMAKE_SYSTEM_NAME MATCHES "Android")
380 add_definitions(-DOS_ANDROID)
381 elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
382 add_definitions(-DWIN32 -DOS_WIN -D_MBCS -DWIN64 -DNOMINMAX)
384 add_definitions(-D_WIN32_WINNT=_WIN32_WINNT_VISTA)
389 add_definitions(-DROCKSDB_PLATFORM_POSIX -DROCKSDB_LIB_IO_POSIX)
392 option(WITH_FALLOCATE "build with fallocate" ON)
394 CHECK_CXX_SOURCE_COMPILES("
396 #include <linux/falloc.h>
398 int fd = open(\"/dev/null\", 0);
399 fallocate(fd, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, 0, 1024);
403 add_definitions(-DROCKSDB_FALLOCATE_PRESENT)
407 CHECK_CXX_SOURCE_COMPILES("
410 int fd = open(\"/dev/null\", 0);
411 sync_file_range(fd, 0, 1024, SYNC_FILE_RANGE_WRITE);
413 " HAVE_SYNC_FILE_RANGE_WRITE)
414 if(HAVE_SYNC_FILE_RANGE_WRITE)
415 add_definitions(-DROCKSDB_RANGESYNC_PRESENT)
418 CHECK_CXX_SOURCE_COMPILES("
421 (void) PTHREAD_MUTEX_ADAPTIVE_NP;
423 " HAVE_PTHREAD_MUTEX_ADAPTIVE_NP)
424 if(HAVE_PTHREAD_MUTEX_ADAPTIVE_NP)
425 add_definitions(-DROCKSDB_PTHREAD_ADAPTIVE_MUTEX)
428 include(CheckCXXSymbolExists)
429 check_cxx_symbol_exists(malloc_usable_size malloc.h HAVE_MALLOC_USABLE_SIZE)
430 if(HAVE_MALLOC_USABLE_SIZE)
431 add_definitions(-DROCKSDB_MALLOC_USABLE_SIZE)
434 check_cxx_symbol_exists(sched_getcpu sched.h HAVE_SCHED_GETCPU)
435 if(HAVE_SCHED_GETCPU)
436 add_definitions(-DROCKSDB_SCHED_GETCPU_PRESENT)
439 include_directories(${PROJECT_SOURCE_DIR})
440 include_directories(${PROJECT_SOURCE_DIR}/include)
441 include_directories(SYSTEM ${PROJECT_SOURCE_DIR}/third-party/gtest-1.7.0/fused-src)
442 find_package(Threads REQUIRED)
444 add_subdirectory(third-party/gtest-1.7.0/fused-src/gtest)
446 # Main library source code
451 cache/sharded_cache.cc
455 db/compacted_db_impl.cc
457 db/compaction_iterator.cc
459 db/compaction_picker.cc
460 db/compaction_picker_universal.cc
462 db/db_filesnapshot.cc
465 db/db_impl_compaction_flush.cc
469 db/db_impl_experimental.cc
470 db/db_impl_readonly.cc
476 db/external_sst_file_ingestion_job.cc
479 db/flush_scheduler.cc
480 db/forward_iterator.cc
482 db/logs_with_prep_tracker.cc
486 db/managed_iterator.cc
491 db/range_del_aggregator.cc
495 db/table_properties_collector.cc
496 db/transaction_log_impl.cc
497 db/version_builder.cc
502 db/write_batch_base.cc
503 db/write_controller.cc
507 env/env_encryption.cc
510 memtable/alloc_tracker.cc
511 memtable/hash_cuckoo_rep.cc
512 memtable/hash_linklist_rep.cc
513 memtable/hash_skiplist_rep.cc
514 memtable/skiplistrep.cc
515 memtable/vectorrep.cc
516 memtable/write_buffer_manager.cc
517 monitoring/histogram.cc
518 monitoring/histogram_windowing.cc
519 monitoring/instrumented_mutex.cc
520 monitoring/iostats_context.cc
521 monitoring/perf_context.cc
522 monitoring/perf_level.cc
523 monitoring/statistics.cc
524 monitoring/thread_status_impl.cc
525 monitoring/thread_status_updater.cc
526 monitoring/thread_status_util.cc
527 monitoring/thread_status_util_debug.cc
528 options/cf_options.cc
529 options/db_options.cc
531 options/options_helper.cc
532 options/options_parser.cc
533 options/options_sanity_check.cc
535 table/adaptive_table_factory.cc
537 table/block_based_filter_block.cc
538 table/block_based_table_builder.cc
539 table/block_based_table_factory.cc
540 table/block_based_table_reader.cc
541 table/block_builder.cc
542 table/block_fetcher.cc
543 table/block_prefix_index.cc
545 table/cuckoo_table_builder.cc
546 table/cuckoo_table_factory.cc
547 table/cuckoo_table_reader.cc
548 table/flush_block_policy.cc
550 table/full_filter_block.cc
552 table/index_builder.cc
554 table/merging_iterator.cc
556 table/partitioned_filter_block.cc
557 table/persistent_cache_helper.cc
558 table/plain_table_builder.cc
559 table/plain_table_factory.cc
560 table/plain_table_index.cc
561 table/plain_table_key_coding.cc
562 table/plain_table_reader.cc
563 table/sst_file_writer.cc
564 table/table_properties.cc
565 table/two_level_iterator.cc
566 tools/db_bench_tool.cc
567 tools/dump/db_dump_tool.cc
570 tools/sst_dump_tool.cc
572 util/auto_roll_logger.cc
575 util/compaction_job_stats_impl.cc
577 util/concurrent_arena.cc
579 util/delete_scheduler.cc
580 util/dynamic_bloom.cc
582 util/file_reader_writer.cc
585 util/filter_policy.cc
592 util/sst_file_manager_impl.cc
594 util/status_message.cc
597 util/sync_point_impl.cc
600 util/threadpool_imp.cc
601 util/transaction_test_util.cc
603 utilities/backupable/backupable_db.cc
604 utilities/blob_db/blob_compaction_filter.cc
605 utilities/blob_db/blob_db.cc
606 utilities/blob_db/blob_db_impl.cc
607 utilities/blob_db/blob_dump_tool.cc
608 utilities/blob_db/blob_file.cc
609 utilities/blob_db/blob_log_reader.cc
610 utilities/blob_db/blob_log_writer.cc
611 utilities/blob_db/blob_log_format.cc
612 utilities/blob_db/ttl_extractor.cc
613 utilities/cassandra/cassandra_compaction_filter.cc
614 utilities/cassandra/format.cc
615 utilities/cassandra/merge_operator.cc
616 utilities/checkpoint/checkpoint_impl.cc
617 utilities/col_buf_decoder.cc
618 utilities/col_buf_encoder.cc
619 utilities/column_aware_encoding_util.cc
620 utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc
621 utilities/date_tiered/date_tiered_db_impl.cc
623 utilities/document/document_db.cc
624 utilities/document/json_document.cc
625 utilities/document/json_document_builder.cc
626 utilities/env_mirror.cc
627 utilities/env_timed.cc
628 utilities/geodb/geodb_impl.cc
629 utilities/leveldb_options/leveldb_options.cc
630 utilities/lua/rocks_lua_compaction_filter.cc
631 utilities/memory/memory_util.cc
632 utilities/merge_operators/bytesxor.cc
633 utilities/merge_operators/max.cc
634 utilities/merge_operators/put.cc
635 utilities/merge_operators/string_append/stringappend.cc
636 utilities/merge_operators/string_append/stringappend2.cc
637 utilities/merge_operators/uint64add.cc
638 utilities/option_change_migration/option_change_migration.cc
639 utilities/options/options_util.cc
640 utilities/persistent_cache/block_cache_tier.cc
641 utilities/persistent_cache/block_cache_tier_file.cc
642 utilities/persistent_cache/block_cache_tier_metadata.cc
643 utilities/persistent_cache/persistent_cache_tier.cc
644 utilities/persistent_cache/volatile_tier_impl.cc
645 utilities/redis/redis_lists.cc
646 utilities/simulator_cache/sim_cache.cc
647 utilities/spatialdb/spatial_db.cc
648 utilities/table_properties_collectors/compact_on_deletion_collector.cc
649 utilities/transactions/optimistic_transaction_db_impl.cc
650 utilities/transactions/optimistic_transaction.cc
651 utilities/transactions/pessimistic_transaction.cc
652 utilities/transactions/pessimistic_transaction_db.cc
653 utilities/transactions/snapshot_checker.cc
654 utilities/transactions/transaction_base.cc
655 utilities/transactions/transaction_db_mutex_impl.cc
656 utilities/transactions/transaction_lock_mgr.cc
657 utilities/transactions/transaction_util.cc
658 utilities/transactions/write_prepared_txn.cc
659 utilities/transactions/write_prepared_txn_db.cc
660 utilities/ttl/db_ttl_impl.cc
661 utilities/write_batch_with_index/write_batch_with_index.cc
662 utilities/write_batch_with_index/write_batch_with_index_internal.cc
663 $<TARGET_OBJECTS:build_version>)
665 if(HAVE_SSE42 AND NOT FORCE_SSE42)
667 set_source_files_properties(
669 PROPERTIES COMPILE_FLAGS "-msse4.2 -mpclmul")
676 util/crc32c_ppc_asm.S)
683 port/win/env_default.cc
685 port/win/win_logger.cc
686 port/win/win_thread.cc)
690 port/win/xpress_win.cc)
695 port/win/win_jemalloc.cc)
705 set(ROCKSDB_STATIC_LIB rocksdb${ARTIFACT_SUFFIX})
706 set(ROCKSDB_SHARED_LIB rocksdb-shared${ARTIFACT_SUFFIX})
707 set(ROCKSDB_IMPORT_LIB ${ROCKSDB_SHARED_LIB})
709 option(WITH_LIBRADOS "Build with librados" OFF)
712 utilities/env_librados.cc)
713 list(APPEND THIRDPARTY_LIBS rados)
717 set(SYSTEM_LIBS ${SYSTEM_LIBS} Shlwapi.lib Rpcrt4.lib)
718 set(LIBS ${ROCKSDB_STATIC_LIB} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
720 set(SYSTEM_LIBS ${CMAKE_THREAD_LIBS_INIT})
721 set(LIBS ${ROCKSDB_SHARED_LIB} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
723 add_library(${ROCKSDB_SHARED_LIB} SHARED ${SOURCES})
724 target_link_libraries(${ROCKSDB_SHARED_LIB}
725 ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
726 set_target_properties(${ROCKSDB_SHARED_LIB} PROPERTIES
728 VERSION ${ROCKSDB_VERSION}
729 SOVERSION ${ROCKSDB_VERSION_MAJOR}
731 OUTPUT_NAME "rocksdb")
734 add_library(${ROCKSDB_STATIC_LIB} STATIC ${SOURCES})
735 target_link_libraries(${ROCKSDB_STATIC_LIB}
736 ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
739 add_library(${ROCKSDB_IMPORT_LIB} SHARED ${SOURCES})
740 target_link_libraries(${ROCKSDB_IMPORT_LIB}
741 ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
742 set_target_properties(${ROCKSDB_IMPORT_LIB} PROPERTIES
743 COMPILE_DEFINITIONS "ROCKSDB_DLL;ROCKSDB_LIBRARY_EXPORTS")
745 set_target_properties(${ROCKSDB_STATIC_LIB} PROPERTIES
746 COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_STATIC_LIB}.pdb")
747 set_target_properties(${ROCKSDB_IMPORT_LIB} PROPERTIES
748 COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_IMPORT_LIB}.pdb")
752 option(WITH_JNI "build with JNI" OFF)
754 message(STATUS "JNI library is enabled")
755 add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/java)
757 message(STATUS "JNI library is disabled")
760 # Installation and packaging
762 option(ROCKSDB_INSTALL_ON_WINDOWS "Enable install target on Windows" OFF)
764 if(NOT WIN32 OR ROCKSDB_INSTALL_ON_WINDOWS)
765 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
766 if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
767 # Change default installation prefix on Linux to /usr
768 set(CMAKE_INSTALL_PREFIX /usr CACHE PATH "Install path prefix, prepended onto install directories." FORCE)
772 include(GNUInstallDirs)
773 include(CMakePackageConfigHelpers)
775 set(package_config_destination ${CMAKE_INSTALL_LIBDIR}/cmake/rocksdb)
777 configure_package_config_file(
778 ${CMAKE_CURRENT_LIST_DIR}/cmake/RocksDBConfig.cmake.in RocksDBConfig.cmake
779 INSTALL_DESTINATION ${package_config_destination}
782 write_basic_package_version_file(
783 RocksDBConfigVersion.cmake
784 VERSION ${ROCKSDB_VERSION}
785 COMPATIBILITY SameMajorVersion
788 install(DIRECTORY include/rocksdb COMPONENT devel DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
791 TARGETS ${ROCKSDB_STATIC_LIB}
792 EXPORT RocksDBTargets
794 ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
795 INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
799 TARGETS ${ROCKSDB_SHARED_LIB}
800 EXPORT RocksDBTargets
802 RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
803 LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
804 INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
808 EXPORT RocksDBTargets
810 DESTINATION ${package_config_destination}
816 ${CMAKE_CURRENT_BINARY_DIR}/RocksDBConfig.cmake
817 ${CMAKE_CURRENT_BINARY_DIR}/RocksDBConfigVersion.cmake
819 DESTINATION ${package_config_destination}
823 option(WITH_TESTS "build with tests" ON)
827 cache/lru_cache_test.cc
828 db/column_family_test.cc
829 db/compact_files_test.cc
830 db/compaction_iterator_test.cc
831 db/compaction_job_stats_test.cc
832 db/compaction_job_test.cc
833 db/compaction_picker_test.cc
834 db/comparator_db_test.cc
835 db/corruption_test.cc
836 db/cuckoo_table_db_test.cc
838 db/db_blob_index_test.cc
839 db/db_block_cache_test.cc
840 db/db_bloom_filter_test.cc
841 db/db_compaction_filter_test.cc
842 db/db_compaction_test.cc
843 db/db_dynamic_level_test.cc
845 db/db_inplace_update_test.cc
846 db/db_io_failure_test.cc
848 db/db_iter_stress_test.cc
849 db/db_iterator_test.cc
850 db/db_log_iter_test.cc
851 db/db_memtable_test.cc
852 db/db_merge_operator_test.cc
853 db/db_options_test.cc
854 db/db_properties_test.cc
855 db/db_range_del_test.cc
857 db/db_statistics_test.cc
858 db/db_table_properties_test.cc
859 db/db_tailing_iter_test.cc
862 db/db_universal_compaction_test.cc
866 db/deletefile_test.cc
867 db/obsolete_files_test.cc
868 db/external_sst_file_basic_test.cc
869 db/external_sst_file_test.cc
870 db/fault_injection_test.cc
871 db/file_indexer_test.cc
876 db/manual_compaction_test.cc
877 db/memtable_list_test.cc
878 db/merge_helper_test.cc
880 db/options_file_test.cc
881 db/perf_context_test.cc
882 db/plain_table_db_test.cc
885 db/table_properties_collector_test.cc
886 db/version_builder_test.cc
887 db/version_edit_test.cc
888 db/version_set_test.cc
889 db/wal_manager_test.cc
890 db/write_batch_test.cc
891 db/write_callback_test.cc
892 db/write_controller_test.cc
893 env/env_basic_test.cc
896 memtable/inlineskiplist_test.cc
897 memtable/skiplist_test.cc
898 memtable/write_buffer_manager_test.cc
899 monitoring/histogram_test.cc
900 monitoring/iostats_context_test.cc
901 monitoring/statistics_test.cc
902 options/options_settable_test.cc
903 options/options_test.cc
904 table/block_based_filter_block_test.cc
906 table/cleanable_test.cc
907 table/cuckoo_table_builder_test.cc
908 table/cuckoo_table_reader_test.cc
909 table/full_filter_block_test.cc
912 tools/ldb_cmd_test.cc
913 tools/reduce_levels_test.cc
914 tools/sst_dump_test.cc
916 util/auto_roll_logger_test.cc
917 util/autovector_test.cc
921 util/delete_scheduler_test.cc
922 util/dynamic_bloom_test.cc
923 util/event_logger_test.cc
924 util/file_reader_writer_test.cc
925 util/filelock_test.cc
928 util/rate_limiter_test.cc
929 util/slice_transform_test.cc
930 util/timer_queue_test.cc
931 util/thread_list_test.cc
932 util/thread_local_test.cc
933 utilities/backupable/backupable_db_test.cc
934 utilities/blob_db/blob_db_test.cc
935 utilities/cassandra/cassandra_functional_test.cc
936 utilities/cassandra/cassandra_format_test.cc
937 utilities/cassandra/cassandra_row_merge_test.cc
938 utilities/cassandra/cassandra_serialize_test.cc
939 utilities/checkpoint/checkpoint_test.cc
940 utilities/column_aware_encoding_test.cc
941 utilities/date_tiered/date_tiered_test.cc
942 utilities/document/document_db_test.cc
943 utilities/document/json_document_test.cc
944 utilities/geodb/geodb_test.cc
945 utilities/lua/rocks_lua_test.cc
946 utilities/memory/memory_test.cc
947 utilities/merge_operators/string_append/stringappend_test.cc
948 utilities/object_registry_test.cc
949 utilities/option_change_migration/option_change_migration_test.cc
950 utilities/options/options_util_test.cc
951 utilities/persistent_cache/hash_table_test.cc
952 utilities/persistent_cache/persistent_cache_test.cc
953 utilities/redis/redis_lists_test.cc
954 utilities/spatialdb/spatial_db_test.cc
955 utilities/simulator_cache/sim_cache_test.cc
956 utilities/table_properties_collectors/compact_on_deletion_collector_test.cc
957 utilities/transactions/optimistic_transaction_test.cc
958 utilities/transactions/transaction_test.cc
959 utilities/transactions/write_prepared_transaction_test.cc
960 utilities/ttl/ttl_test.cc
961 utilities/write_batch_with_index/write_batch_with_index_test.cc
964 list(APPEND TESTS utilities/env_librados_test.cc)
969 memtable/memtablerep_bench.cc
971 table/table_reader_bench.cc
972 utilities/column_aware_encoding_exp.cc
973 utilities/persistent_cache/hash_table_bench.cc)
974 add_library(testharness OBJECT util/testharness.cc)
975 foreach(sourcefile ${BENCHMARKS})
976 get_filename_component(exename ${sourcefile} NAME_WE)
977 add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile}
978 $<TARGET_OBJECTS:testharness>)
979 target_link_libraries(${exename}${ARTIFACT_SUFFIX} gtest ${LIBS})
980 endforeach(sourcefile ${BENCHMARKS})
982 # For test util library that is build only in DEBUG mode
983 # and linked to tests. Add test only code that is not #ifdefed for Release here.
986 monitoring/thread_status_updater_debug.cc
988 util/fault_injection_test_env.cc
989 utilities/cassandra/test_utils.cc
991 # test utilities are only build in debug
993 add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND})
994 set(TESTUTILLIB testutillib${ARTIFACT_SUFFIX})
995 add_library(${TESTUTILLIB} STATIC ${TESTUTIL_SOURCE})
997 set_target_properties(${TESTUTILLIB} PROPERTIES COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/testutillib${ARTIFACT_SUFFIX}.pdb")
999 set_target_properties(${TESTUTILLIB}
1000 PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1
1001 EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1
1002 EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
1005 # Tests are excluded from Release builds
1006 set(TEST_EXES ${TESTS})
1008 foreach(sourcefile ${TEST_EXES})
1009 get_filename_component(exename ${sourcefile} NAME_WE)
1010 add_executable(${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX} ${sourcefile}
1011 $<TARGET_OBJECTS:testharness>)
1012 set_target_properties(${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX}
1013 PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1
1014 EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1
1015 EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
1016 OUTPUT_NAME ${exename}${ARTIFACT_SUFFIX}
1018 target_link_libraries(${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX} testutillib${ARTIFACT_SUFFIX} gtest ${LIBS})
1019 if(NOT "${exename}" MATCHES "db_sanity_test")
1020 add_test(NAME ${exename} COMMAND ${exename}${ARTIFACT_SUFFIX})
1021 add_dependencies(check ${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX})
1023 endforeach(sourcefile ${TEST_EXES})
1025 # C executables must link to a shared object
1026 set(C_TESTS db/c_test.c)
1027 set(C_TEST_EXES ${C_TESTS})
1029 foreach(sourcefile ${C_TEST_EXES})
1030 string(REPLACE ".c" "" exename ${sourcefile})
1031 string(REGEX REPLACE "^((.+)/)+" "" exename ${exename})
1032 add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile})
1033 set_target_properties(${exename}${ARTIFACT_SUFFIX}
1034 PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1
1035 EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1
1036 EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
1038 target_link_libraries(${exename}${ARTIFACT_SUFFIX} ${ROCKSDB_IMPORT_LIB} testutillib${ARTIFACT_SUFFIX})
1039 add_test(NAME ${exename} COMMAND ${exename}${ARTIFACT_SUFFIX})
1040 add_dependencies(check ${exename}${ARTIFACT_SUFFIX})
1041 endforeach(sourcefile ${C_TEST_EXES})
1044 option(WITH_TOOLS "build with tools" ON)
1046 add_subdirectory(tools)