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 14 Win64" -DGFLAGS=1 -DSNAPPY=1 -DJEMALLOC=1 -DJNI=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 ot 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.6)
39 cmake_policy(SET CMP0042 NEW)
42 list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules/")
45 include(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty.inc)
47 option(WITH_JEMALLOC "build with JeMalloc" OFF)
48 if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
49 # FreeBSD has jemaloc as default malloc
50 # but it does not have all the jemalloc files in include/...
54 find_package(JeMalloc REQUIRED)
55 add_definitions(-DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE)
56 include_directories(${JEMALLOC_INCLUDE_DIR})
59 option(WITH_SNAPPY "build with SNAPPY" OFF)
61 find_package(snappy REQUIRED)
62 add_definitions(-DSNAPPY)
63 include_directories(${SNAPPY_INCLUDE_DIR})
64 list(APPEND THIRDPARTY_LIBS ${SNAPPY_LIBRARIES})
69 execute_process(COMMAND powershell -noprofile -Command "Get-Date -format MM_dd_yyyy" OUTPUT_VARIABLE DATE)
70 execute_process(COMMAND powershell -noprofile -Command "Get-Date -format HH:mm:ss" OUTPUT_VARIABLE TIME)
71 string(REGEX REPLACE "(..)_(..)_..(..).*" "\\1/\\2/\\3" DATE "${DATE}")
72 string(REGEX REPLACE "(..):(.....).*" " \\1:\\2" TIME "${TIME}")
73 set(GIT_DATE_TIME "${DATE} ${TIME}")
75 execute_process(COMMAND date "+%Y/%m/%d %H:%M:%S" OUTPUT_VARIABLE DATETIME)
76 string(REGEX REPLACE "\n" "" DATETIME ${DATETIME})
77 set(GIT_DATE_TIME "${DATETIME}")
82 if(GIT_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git")
84 execute_process(COMMAND $ENV{COMSPEC} /C ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse HEAD OUTPUT_VARIABLE GIT_SHA)
86 execute_process(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse HEAD OUTPUT_VARIABLE GIT_SHA)
92 string(REGEX REPLACE "[^0-9a-f]+" "" GIT_SHA "${GIT_SHA}")
95 execute_process(COMMAND
96 "./build_tools/version.sh" "full"
97 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
98 OUTPUT_VARIABLE ROCKSDB_VERSION
100 string(STRIP "${ROCKSDB_VERSION}" ROCKSDB_VERSION)
101 execute_process(COMMAND
102 "./build_tools/version.sh" "major"
103 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
104 OUTPUT_VARIABLE ROCKSDB_VERSION_MAJOR
106 string(STRIP "${ROCKSDB_VERSION_MAJOR}" ROCKSDB_VERSION_MAJOR)
110 option(WITH_AVX2 "build with AVX2" ON)
113 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2")
115 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx2")
119 option(WITH_MD_LIBRARY "build with MD" ON)
122 set(RUNTIME_LIBRARY "MD")
124 set(RUNTIME_LIBRARY "MT")
128 option(WITH_SSE42 "build with SSE4.2" OFF)
130 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
134 set(BUILD_VERSION_CC ${CMAKE_BINARY_DIR}/build_version.cc)
135 configure_file(util/build_version.cc.in ${BUILD_VERSION_CC} @ONLY)
136 add_library(build_version OBJECT ${BUILD_VERSION_CC})
137 target_include_directories(build_version PRIVATE
138 ${CMAKE_CURRENT_SOURCE_DIR}/util)
140 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi /nologo /EHsc /GS /Gd /GR /GF /fp:precise /Zc:wchar_t /Zc:forScope /errorReport:queue")
141 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /FC /d2Zi+ /W3 /wd4127 /wd4800 /wd4996 /wd4351")
143 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wextra -Wall")
144 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")
146 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-format")
148 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
149 if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
150 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -fno-omit-frame-pointer")
151 include(CheckCXXCompilerFlag)
152 CHECK_CXX_COMPILER_FLAG("-momit-leaf-frame-pointer" HAVE_OMIT_LEAF_FRAME_POINTER)
153 if(HAVE_OMIT_LEAF_FRAME_POINTER)
154 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -momit-leaf-frame-pointer")
159 include(CheckCXXSourceCompiles)
161 set(CMAKE_REQUIRED_FLAGS "-msse4.2")
163 CHECK_CXX_SOURCE_COMPILES("
165 #include <nmmintrin.h>
167 volatile uint32_t x = _mm_crc32_u32(0, 0);
170 unset(CMAKE_REQUIRED_FLAGS)
171 if(HAVE_SSE42 AND NOT WITH_SSE42)
172 set_source_files_properties(
174 PROPERTIES COMPILE_FLAGS "-msse4.2")
177 option(FAIL_ON_WARNINGS "Treat compile warnings as errors" ON)
180 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
182 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
186 option(WITH_ASAN "build with ASAN" OFF)
188 add_definitions(-DROCKSDB_TSAN_RUN)
189 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
190 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
191 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
193 message(FATAL "ASAN does not work well with JeMalloc")
197 option(WITH_TSAN "build with TSAN" OFF)
199 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread -pie")
200 add_definitions(-DROCKSDB_TSAN_RUN)
201 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -fPIC")
202 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread -fPIC")
204 message(FATAL "TSAN does not work well with JeMalloc")
208 option(WITH_UBSAN "build with UBSAN" OFF)
210 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined")
211 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
212 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined")
214 message(FATAL "UBSAN does not work well with JeMalloc")
218 # Used to run CI build and tests so we can run faster
219 set(OPTIMIZE_DEBUG_DEFAULT 0) # Debug build is unoptimized by default use -DOPTDBG=1 to optimize
222 set(OPTIMIZE_DEBUG ${OPTDBG})
224 set(OPTIMIZE_DEBUG ${OPTIMIZE_DEBUG_DEFAULT})
228 if((${OPTIMIZE_DEBUG} EQUAL 1))
229 message(STATUS "Debug optimization is enabled")
230 set(CMAKE_CXX_FLAGS_DEBUG "/Oxt /${RUNTIME_LIBRARY}d")
232 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /RTC1 /Gm /${RUNTIME_LIBRARY}d")
234 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oxt /Zp8 /Gm- /Gy /${RUNTIME_LIBRARY}")
236 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG")
237 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG")
240 if(CMAKE_COMPILER_IS_GNUCXX)
241 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-memcmp")
244 option(ROCKSDB_LITE "Build RocksDBLite version" OFF)
246 add_definitions(-DROCKSDB_LITE)
247 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
250 if(CMAKE_SYSTEM_NAME MATCHES "Cygwin")
251 add_definitions(-fno-builtin-memcmp -DCYGWIN)
252 elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
253 add_definitions(-DOS_MACOSX)
254 if(CMAKE_SYSTEM_PROCESSOR MATCHES arm)
255 add_definitions(-DIOS_CROSS_COMPILE -DROCKSDB_LITE)
256 # no debug info for IOS, that will make our library big
257 add_definitions(-DNDEBUG)
259 elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
260 add_definitions(-DOS_LINUX)
261 elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS")
262 add_definitions(-DOS_SOLARIS)
263 elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
264 add_definitions(-DOS_FREEBSD)
265 elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD")
266 add_definitions(-DOS_NETBSD)
267 elseif(CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
268 add_definitions(-DOS_OPENBSD)
269 elseif(CMAKE_SYSTEM_NAME MATCHES "DragonFly")
270 add_definitions(-DOS_DRAGONFLYBSD)
271 elseif(CMAKE_SYSTEM_NAME MATCHES "Android")
272 add_definitions(-DOS_ANDROID)
273 elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
274 add_definitions(-DWIN32 -DOS_WIN -D_MBCS -DWIN64 -DNOMINMAX)
276 add_definitions(-D_WIN32_WINNT=_WIN32_WINNT_VISTA)
281 add_definitions(-DROCKSDB_PLATFORM_POSIX -DROCKSDB_LIB_IO_POSIX)
284 option(WITH_FALLOCATE "build with fallocate" ON)
287 include(CheckCSourceCompiles)
288 CHECK_C_SOURCE_COMPILES("
290 #include <linux/falloc.h>
292 int fd = open(\"/dev/null\", 0);
293 fallocate(fd, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, 0, 1024);
297 add_definitions(-DROCKSDB_FALLOCATE_PRESENT)
301 include(CheckFunctionExists)
302 CHECK_FUNCTION_EXISTS(malloc_usable_size HAVE_MALLOC_USABLE_SIZE)
303 if(HAVE_MALLOC_USABLE_SIZE)
304 add_definitions(-DROCKSDB_MALLOC_USABLE_SIZE)
307 include_directories(${PROJECT_SOURCE_DIR})
308 include_directories(${PROJECT_SOURCE_DIR}/include)
309 include_directories(SYSTEM ${PROJECT_SOURCE_DIR}/third-party/gtest-1.7.0/fused-src)
310 find_package(Threads REQUIRED)
312 add_subdirectory(third-party/gtest-1.7.0/fused-src/gtest)
314 # Main library source code
319 cache/sharded_cache.cc
323 db/compacted_db_impl.cc
325 db/compaction_iterator.cc
327 db/compaction_picker.cc
328 db/compaction_picker_universal.cc
330 db/db_filesnapshot.cc
333 db/db_impl_compaction_flush.cc
337 db/db_impl_experimental.cc
338 db/db_impl_readonly.cc
344 db/external_sst_file_ingestion_job.cc
347 db/flush_scheduler.cc
348 db/forward_iterator.cc
352 db/managed_iterator.cc
357 db/range_del_aggregator.cc
361 db/table_properties_collector.cc
362 db/transaction_log_impl.cc
363 db/version_builder.cc
368 db/write_batch_base.cc
369 db/write_controller.cc
375 memtable/hash_cuckoo_rep.cc
376 memtable/hash_linklist_rep.cc
377 memtable/hash_skiplist_rep.cc
378 memtable/memtable_allocator.cc
379 memtable/skiplistrep.cc
380 memtable/vectorrep.cc
381 monitoring/histogram.cc
382 monitoring/histogram_windowing.cc
383 monitoring/instrumented_mutex.cc
384 monitoring/iostats_context.cc
385 monitoring/perf_context.cc
386 monitoring/perf_level.cc
387 monitoring/statistics.cc
388 monitoring/thread_status_impl.cc
389 monitoring/thread_status_updater.cc
390 monitoring/thread_status_util.cc
391 monitoring/thread_status_util_debug.cc
392 options/cf_options.cc
393 options/db_options.cc
395 options/options_helper.cc
396 options/options_parser.cc
397 options/options_sanity_check.cc
399 table/adaptive_table_factory.cc
401 table/block_based_filter_block.cc
402 table/block_based_table_builder.cc
403 table/block_based_table_factory.cc
404 table/block_based_table_reader.cc
405 table/block_builder.cc
406 table/block_prefix_index.cc
408 table/cuckoo_table_builder.cc
409 table/cuckoo_table_factory.cc
410 table/cuckoo_table_reader.cc
411 table/flush_block_policy.cc
413 table/full_filter_block.cc
415 table/index_builder.cc
417 table/merging_iterator.cc
419 table/partitioned_filter_block.cc
420 table/persistent_cache_helper.cc
421 table/plain_table_builder.cc
422 table/plain_table_factory.cc
423 table/plain_table_index.cc
424 table/plain_table_key_coding.cc
425 table/plain_table_reader.cc
426 table/sst_file_writer.cc
427 table/table_properties.cc
428 table/two_level_iterator.cc
429 tools/db_bench_tool.cc
430 tools/dump/db_dump_tool.cc
433 tools/sst_dump_tool.cc
435 util/auto_roll_logger.cc
438 util/compaction_job_stats_impl.cc
440 util/concurrent_arena.cc
442 util/delete_scheduler.cc
443 util/dynamic_bloom.cc
445 util/file_reader_writer.cc
448 util/filter_policy.cc
455 util/sst_file_manager_impl.cc
457 util/status_message.cc
462 util/threadpool_imp.cc
463 util/transaction_test_util.cc
465 utilities/backupable/backupable_db.cc
466 utilities/blob_db/blob_db.cc
467 utilities/checkpoint/checkpoint_impl.cc
468 utilities/col_buf_decoder.cc
469 utilities/col_buf_encoder.cc
470 utilities/column_aware_encoding_util.cc
471 utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc
472 utilities/date_tiered/date_tiered_db_impl.cc
473 utilities/document/document_db.cc
474 utilities/document/json_document.cc
475 utilities/document/json_document_builder.cc
476 utilities/env_mirror.cc
477 utilities/env_timed.cc
478 utilities/geodb/geodb_impl.cc
479 utilities/leveldb_options/leveldb_options.cc
480 utilities/lua/rocks_lua_compaction_filter.cc
481 utilities/memory/memory_util.cc
482 utilities/merge_operators/max.cc
483 utilities/merge_operators/put.cc
484 utilities/merge_operators/string_append/stringappend.cc
485 utilities/merge_operators/string_append/stringappend2.cc
486 utilities/merge_operators/uint64add.cc
487 utilities/option_change_migration/option_change_migration.cc
488 utilities/options/options_util.cc
489 utilities/persistent_cache/block_cache_tier.cc
490 utilities/persistent_cache/block_cache_tier_file.cc
491 utilities/persistent_cache/block_cache_tier_metadata.cc
492 utilities/persistent_cache/persistent_cache_tier.cc
493 utilities/persistent_cache/volatile_tier_impl.cc
494 utilities/redis/redis_lists.cc
495 utilities/simulator_cache/sim_cache.cc
496 utilities/spatialdb/spatial_db.cc
497 utilities/table_properties_collectors/compact_on_deletion_collector.cc
498 utilities/transactions/optimistic_transaction_db_impl.cc
499 utilities/transactions/optimistic_transaction_impl.cc
500 utilities/transactions/transaction_base.cc
501 utilities/transactions/transaction_db_impl.cc
502 utilities/transactions/transaction_db_mutex_impl.cc
503 utilities/transactions/transaction_impl.cc
504 utilities/transactions/transaction_lock_mgr.cc
505 utilities/transactions/transaction_util.cc
506 utilities/ttl/db_ttl_impl.cc
507 utilities/write_batch_with_index/write_batch_with_index.cc
508 utilities/write_batch_with_index/write_batch_with_index_internal.cc
509 $<TARGET_OBJECTS:build_version>)
515 port/win/env_default.cc
517 port/win/win_logger.cc
518 port/win/win_thread.cc
519 port/win/xpress_win.cc)
528 set(SYSTEM_LIBS ${SYSTEM_LIBS} Shlwapi.lib Rpcrt4.lib)
529 set(ROCKSDB_STATIC_LIB rocksdblib${ARTIFACT_SUFFIX})
530 set(ROCKSDB_IMPORT_LIB rocksdb${ARTIFACT_SUFFIX})
531 set(LIBS ${ROCKSDB_STATIC_LIB} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
533 set(SYSTEM_LIBS ${CMAKE_THREAD_LIBS_INIT} rt)
534 set(ROCKSDB_STATIC_LIB rocksdb${ARTIFACT_SUFFIX})
535 set(ROCKSDB_SHARED_LIB rocksdb-shared)
536 set(ROCKSDB_IMPORT_LIB ${ROCKSDB_SHARED_LIB})
537 set(LIBS ${ROCKSDB_SHARED_LIB} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
539 add_library(${ROCKSDB_SHARED_LIB} SHARED ${SOURCES})
540 target_link_libraries(${ROCKSDB_SHARED_LIB}
541 ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
542 set_target_properties(${ROCKSDB_SHARED_LIB} PROPERTIES
544 VERSION ${ROCKSDB_VERSION}
545 SOVERSION ${ROCKSDB_VERSION_MAJOR}
547 OUTPUT_NAME "rocksdb")
550 option(WITH_LIBRADOS "Build with librados" OFF)
553 utilities/env_librados.cc)
554 list(APPEND THIRDPARTY_LIBS rados)
557 add_library(${ROCKSDB_STATIC_LIB} STATIC ${SOURCES})
558 target_link_libraries(${ROCKSDB_STATIC_LIB}
559 ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
562 add_library(${ROCKSDB_IMPORT_LIB} SHARED ${SOURCES})
563 target_link_libraries(${ROCKSDB_IMPORT_LIB}
564 ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
565 set_target_properties(${ROCKSDB_IMPORT_LIB} PROPERTIES
566 COMPILE_DEFINITIONS "ROCKSDB_DLL;ROCKSDB_LIBRARY_EXPORTS")
568 set_target_properties(${ROCKSDB_STATIC_LIB} PROPERTIES
569 COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_STATIC_LIB}.pdb")
570 set_target_properties(${ROCKSDB_IMPORT_LIB} PROPERTIES
571 COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_IMPORT_LIB}.pdb")
575 option(WITH_JNI "build with JNI" OFF)
577 message(STATUS "JNI library is enabled")
578 add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/java)
580 message(STATUS "JNI library is disabled")
585 cache/lru_cache_test.cc
586 db/column_family_test.cc
587 db/compact_files_test.cc
588 db/compaction_iterator_test.cc
589 db/compaction_job_stats_test.cc
590 db/compaction_job_test.cc
591 db/compaction_picker_test.cc
592 db/comparator_db_test.cc
593 db/corruption_test.cc
594 db/cuckoo_table_db_test.cc
596 db/db_block_cache_test.cc
597 db/db_bloom_filter_test.cc
598 db/db_compaction_filter_test.cc
599 db/db_compaction_test.cc
600 db/db_dynamic_level_test.cc
602 db/db_inplace_update_test.cc
603 db/db_io_failure_test.cc
605 db/db_iterator_test.cc
606 db/db_log_iter_test.cc
607 db/db_memtable_test.cc
608 db/db_merge_operator_test.cc
609 db/db_options_test.cc
610 db/db_properties_test.cc
611 db/db_range_del_test.cc
613 db/db_statistics_test.cc
614 db/db_table_properties_test.cc
615 db/db_tailing_iter_test.cc
618 db/db_universal_compaction_test.cc
621 db/deletefile_test.cc
622 db/external_sst_file_basic_test.cc
623 db/external_sst_file_test.cc
624 db/fault_injection_test.cc
625 db/file_indexer_test.cc
630 db/manual_compaction_test.cc
631 db/memtable_list_test.cc
632 db/merge_helper_test.cc
634 db/options_file_test.cc
635 db/perf_context_test.cc
636 db/plain_table_db_test.cc
639 db/table_properties_collector_test.cc
640 db/version_builder_test.cc
641 db/version_edit_test.cc
642 db/version_set_test.cc
643 db/wal_manager_test.cc
644 db/write_batch_test.cc
645 db/write_callback_test.cc
646 db/write_controller_test.cc
647 env/env_basic_test.cc
650 memtable/inlineskiplist_test.cc
651 memtable/skiplist_test.cc
652 monitoring/histogram_test.cc
653 monitoring/iostats_context_test.cc
654 monitoring/statistics_test.cc
655 options/options_settable_test.cc
656 options/options_test.cc
657 table/block_based_filter_block_test.cc
659 table/cuckoo_table_builder_test.cc
660 table/cuckoo_table_reader_test.cc
661 table/full_filter_block_test.cc
664 tools/ldb_cmd_test.cc
665 tools/reduce_levels_test.cc
666 tools/sst_dump_test.cc
668 util/auto_roll_logger_test.cc
669 util/autovector_test.cc
673 util/delete_scheduler_test.cc
674 util/dynamic_bloom_test.cc
675 util/event_logger_test.cc
676 util/file_reader_writer_test.cc
677 util/filelock_test.cc
679 util/rate_limiter_test.cc
680 util/slice_transform_test.cc
681 util/thread_list_test.cc
682 util/thread_local_test.cc
683 utilities/backupable/backupable_db_test.cc
684 utilities/blob_db/blob_db_test.cc
685 utilities/checkpoint/checkpoint_test.cc
686 utilities/column_aware_encoding_test.cc
687 utilities/date_tiered/date_tiered_test.cc
688 utilities/document/document_db_test.cc
689 utilities/document/json_document_test.cc
690 utilities/geodb/geodb_test.cc
691 utilities/lua/rocks_lua_test.cc
692 utilities/memory/memory_test.cc
693 utilities/merge_operators/string_append/stringappend_test.cc
694 utilities/object_registry_test.cc
695 utilities/option_change_migration/option_change_migration_test.cc
696 utilities/options/options_util_test.cc
697 utilities/persistent_cache/hash_table_test.cc
698 utilities/persistent_cache/persistent_cache_test.cc
699 utilities/redis/redis_lists_test.cc
700 utilities/spatialdb/spatial_db_test.cc
701 utilities/table_properties_collectors/compact_on_deletion_collector_test.cc
702 utilities/transactions/optimistic_transaction_test.cc
703 utilities/transactions/transaction_test.cc
704 utilities/ttl/ttl_test.cc
705 utilities/write_batch_with_index/write_batch_with_index_test.cc
708 list(APPEND TESTS utilities/env_librados_test.cc)
713 memtable/memtablerep_bench.cc
715 table/table_reader_bench.cc
716 utilities/column_aware_encoding_exp.cc
717 utilities/persistent_cache/hash_table_bench.cc)
718 add_library(testharness OBJECT util/testharness.cc)
719 foreach(sourcefile ${BENCHMARKS})
720 get_filename_component(exename ${sourcefile} NAME_WE)
721 add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile}
722 $<TARGET_OBJECTS:testharness>)
723 target_link_libraries(${exename}${ARTIFACT_SUFFIX} gtest ${LIBS})
724 endforeach(sourcefile ${BENCHMARKS})
726 # For test util library that is build only in DEBUG mode
727 # and linked to tests. Add test only code that is not #ifdefed for Release here.
731 monitoring/thread_status_updater_debug.cc
733 util/fault_injection_test_env.cc
735 # test utilities are only build in debug
737 add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND})
738 set(TESTUTILLIB testutillib${ARTIFACT_SUFFIX})
739 add_library(${TESTUTILLIB} STATIC ${TESTUTIL_SOURCE})
741 set_target_properties(${TESTUTILLIB} PROPERTIES COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/testutillib${ARTIFACT_SUFFIX}.pdb")
743 set_target_properties(${TESTUTILLIB}
744 PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1
745 EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1
746 EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
749 # Tests are excluded from Release builds
750 set(TEST_EXES ${TESTS})
752 foreach(sourcefile ${TEST_EXES})
753 get_filename_component(exename ${sourcefile} NAME_WE)
754 add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile}
755 $<TARGET_OBJECTS:testharness>)
756 set_target_properties(${exename}${ARTIFACT_SUFFIX}
757 PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1
758 EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1
759 EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
761 target_link_libraries(${exename}${ARTIFACT_SUFFIX} testutillib${ARTIFACT_SUFFIX} gtest ${LIBS})
762 if(NOT "${exename}" MATCHES "db_sanity_test")
763 add_test(NAME ${exename} COMMAND ${exename}${ARTIFACT_SUFFIX})
764 add_dependencies(check ${exename}${ARTIFACT_SUFFIX})
766 endforeach(sourcefile ${TEST_EXES})
768 # C executables must link to a shared object
769 set(C_TESTS db/c_test.c)
770 set(C_TEST_EXES ${C_TESTS})
772 foreach(sourcefile ${C_TEST_EXES})
773 string(REPLACE ".c" "" exename ${sourcefile})
774 string(REGEX REPLACE "^((.+)/)+" "" exename ${exename})
775 add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile})
776 set_target_properties(${exename}${ARTIFACT_SUFFIX}
777 PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1
778 EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1
779 EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
781 target_link_libraries(${exename}${ARTIFACT_SUFFIX} ${ROCKSDB_IMPORT_LIB} testutillib${ARTIFACT_SUFFIX})
782 add_test(NAME ${exename} COMMAND ${exename}${ARTIFACT_SUFFIX})
783 add_dependencies(check ${exename}${ARTIFACT_SUFFIX})
784 endforeach(sourcefile ${C_TEST_EXES})
785 add_subdirectory(tools)
787 # Installation and packaging for Linux
789 install(TARGETS ${ROCKSDB_STATIC_LIB} COMPONENT devel ARCHIVE DESTINATION lib64)
790 install(TARGETS ${ROCKSDB_SHARED_LIB} COMPONENT runtime DESTINATION lib64)
791 install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/rocksdb/"
793 DESTINATION include/rocksdb)
794 set(CMAKE_INSTALL_PREFIX /usr)