# cd build
# 3. Run cmake to generate project files for Windows, add more options to enable required third-party libraries.
# See thirdparty.inc for more information.
-# sample command: cmake -G "Visual Studio 15 Win64" -DWITH_GFLAGS=1 -DWITH_SNAPPY=1 -DWITH_JEMALLOC=1 -DWITH_JNI=1 ..
+# sample command: cmake -G "Visual Studio 15 Win64" -DCMAKE_BUILD_TYPE=Release -DWITH_GFLAGS=1 -DWITH_SNAPPY=1 -DWITH_JEMALLOC=1 -DWITH_JNI=1 ..
# 4. Then build the project in debug mode (you may want to add /m[:<N>] flag to run msbuild in <N> parallel threads
# or simply /m to use all avail cores)
# msbuild rocksdb.sln
# 3. cmake ..
# 4. make -j
-cmake_minimum_required(VERSION 2.8.12)
-project(rocksdb)
-enable_language(CXX)
-enable_language(C)
-enable_language(ASM)
+cmake_minimum_required(VERSION 3.5.1)
+
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/modules/")
+include(ReadVersion)
+get_rocksdb_version(rocksdb_VERSION)
+project(rocksdb
+ VERSION ${rocksdb_VERSION}
+ LANGUAGES CXX C ASM)
if(POLICY CMP0042)
cmake_policy(SET CMP0042 NEW)
endif()
-list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/modules/")
+if(NOT CMAKE_BUILD_TYPE)
+ if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
+ set(default_build_type "Debug")
+ else()
+ set(default_build_type "RelWithDebInfo")
+ endif()
+ set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING
+ "Default BUILD_TYPE is ${default_build_type}" FORCE)
+endif()
+
+find_program(CCACHE_FOUND ccache)
+if(CCACHE_FOUND)
+ set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
+ set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
+endif(CCACHE_FOUND)
option(WITH_JEMALLOC "build with JeMalloc" OFF)
option(WITH_SNAPPY "build with SNAPPY" OFF)
if (WITH_WINDOWS_UTF8_FILENAMES)
add_definitions(-DROCKSDB_WINDOWS_UTF8_FILENAMES)
endif()
+# third-party/folly is only validated to work on Linux and Windows for now.
+# So only turn it on there by default.
+if(CMAKE_SYSTEM_NAME MATCHES "Linux|Windows")
+ if(MSVC AND MSVC_VERSION LESS 1910)
+ # Folly does not compile with MSVC older than VS2017
+ option(WITH_FOLLY_DISTRIBUTED_MUTEX "build with folly::DistributedMutex" OFF)
+ else()
+ option(WITH_FOLLY_DISTRIBUTED_MUTEX "build with folly::DistributedMutex" ON)
+ endif()
+else()
+ option(WITH_FOLLY_DISTRIBUTED_MUTEX "build with folly::DistributedMutex" OFF)
+endif()
+
+include(CMakeDependentOption)
+CMAKE_DEPENDENT_OPTION(WITH_GFLAGS "build with GFlags" ON
+ "NOT MSVC;NOT MINGW" OFF)
+
if(MSVC)
- # Defaults currently different for GFLAGS.
- # We will address find_package work a little later
- option(WITH_GFLAGS "build with GFlags" OFF)
option(WITH_XPRESS "build with windows built in compression" OFF)
include(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty.inc)
else()
if(WITH_JEMALLOC)
find_package(JeMalloc REQUIRED)
add_definitions(-DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE)
- include_directories(${JEMALLOC_INCLUDE_DIR})
- list(APPEND THIRDPARTY_LIBS ${JEMALLOC_LIBRARIES})
+ list(APPEND THIRDPARTY_LIBS JeMalloc::JeMalloc)
endif()
endif()
# No config file for this
- option(WITH_GFLAGS "build with GFlags" ON)
if(WITH_GFLAGS)
- find_package(gflags)
- if(gflags_FOUND)
- add_definitions(-DGFLAGS=1)
- include_directories(${gflags_INCLUDE_DIR})
- list(APPEND THIRDPARTY_LIBS ${gflags_LIBRARIES})
- endif()
+ find_package(gflags REQUIRED)
+ add_definitions(-DGFLAGS=1)
+ include_directories(${gflags_INCLUDE_DIR})
+ list(APPEND THIRDPARTY_LIBS gflags::gflags)
endif()
if(WITH_SNAPPY)
find_package(snappy REQUIRED)
add_definitions(-DSNAPPY)
- include_directories(${SNAPPY_INCLUDE_DIR})
- list(APPEND THIRDPARTY_LIBS ${SNAPPY_LIBRARIES})
+ list(APPEND THIRDPARTY_LIBS snappy::snappy)
endif()
if(WITH_ZLIB)
find_package(ZLIB REQUIRED)
add_definitions(-DZLIB)
- if(ZLIB_INCLUDE_DIRS)
- # CMake 3
- include_directories(${ZLIB_INCLUDE_DIRS})
- else()
- # CMake 2
- include_directories(${ZLIB_INCLUDE_DIR})
- endif()
- list(APPEND THIRDPARTY_LIBS ${ZLIB_LIBRARIES})
+ list(APPEND THIRDPARTY_LIBS ZLIB::ZLIB)
endif()
option(WITH_BZ2 "build with bzip2" OFF)
if(WITH_BZ2)
- find_package(bzip2 REQUIRED)
+ find_package(BZip2 REQUIRED)
add_definitions(-DBZIP2)
- include_directories(${BZIP2_INCLUDE_DIR})
+ if(BZIP2_INCLUDE_DIRS)
+ include_directories(${BZIP2_INCLUDE_DIRS})
+ else()
+ include_directories(${BZIP2_INCLUDE_DIR})
+ endif()
list(APPEND THIRDPARTY_LIBS ${BZIP2_LIBRARIES})
endif()
if(WITH_LZ4)
find_package(lz4 REQUIRED)
add_definitions(-DLZ4)
- include_directories(${LZ4_INCLUDE_DIR})
- list(APPEND THIRDPARTY_LIBS ${LZ4_LIBRARIES})
+ list(APPEND THIRDPARTY_LIBS lz4::lz4)
endif()
if(WITH_ZSTD)
find_package(zstd REQUIRED)
add_definitions(-DZSTD)
include_directories(${ZSTD_INCLUDE_DIR})
- list(APPEND THIRDPARTY_LIBS ${ZSTD_LIBRARIES})
+ list(APPEND THIRDPARTY_LIBS zstd::zstd)
endif()
endif()
-string(TIMESTAMP GIT_DATE_TIME "%Y/%m/%d %H:%M:%S" UTC)
+string(TIMESTAMP TS "%Y/%m/%d %H:%M:%S" UTC)
+set(GIT_DATE_TIME "${TS}" CACHE STRING "the time we first built rocksdb")
find_package(Git)
string(REGEX REPLACE "[^0-9a-f]+" "" GIT_SHA "${GIT_SHA}")
-# Read rocksdb version from version.h header file.
-file(READ include/rocksdb/version.h version_header_file)
-string(REGEX MATCH "#define ROCKSDB_MAJOR ([0-9]+)" _ ${version_header_file})
-set(ROCKSDB_VERSION_MAJOR ${CMAKE_MATCH_1})
-string(REGEX MATCH "#define ROCKSDB_MINOR ([0-9]+)" _ ${version_header_file})
-set(ROCKSDB_VERSION_MINOR ${CMAKE_MATCH_1})
-string(REGEX MATCH "#define ROCKSDB_PATCH ([0-9]+)" _ ${version_header_file})
-set(ROCKSDB_VERSION_PATCH ${CMAKE_MATCH_1})
-set(ROCKSDB_VERSION ${ROCKSDB_VERSION_MAJOR}.${ROCKSDB_VERSION_MINOR}.${ROCKSDB_VERSION_PATCH})
-
-
option(WITH_MD_LIBRARY "build with MD" ON)
if(WIN32 AND MSVC)
if(WITH_MD_LIBRARY)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wextra -Wall")
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")
if(MINGW)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-format")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-format -fno-asynchronous-unwind-tables")
+ add_definitions(-D_POSIX_C_SOURCE=1)
endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
endif(HAS_ALTIVEC)
endif(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le")
+if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64")
+ CHECK_C_COMPILER_FLAG("-march=armv8-a+crc+crypto" HAS_ARMV8_CRC)
+ if(HAS_ARMV8_CRC)
+ message(STATUS " HAS_ARMV8_CRC yes")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv8-a+crc+crypto -Wno-unused-function")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8-a+crc+crypto -Wno-unused-function")
+ endif(HAS_ARMV8_CRC)
+endif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64")
+
option(PORTABLE "build a portable binary" OFF)
option(FORCE_SSE42 "force building with SSE4.2, even when PORTABLE=ON" OFF)
if(PORTABLE)
if(MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2")
else()
- if(NOT HAVE_POWER8)
+ if(NOT HAVE_POWER8 AND NOT HAS_ARMV8_CRC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
endif()
endif()
find_package(NUMA REQUIRED)
add_definitions(-DNUMA)
include_directories(${NUMA_INCLUDE_DIR})
- list(APPEND THIRDPARTY_LIBS ${NUMA_LIBRARIES})
+ list(APPEND THIRDPARTY_LIBS NUMA::NUMA)
endif()
option(WITH_TBB "build with Threading Building Blocks (TBB)" OFF)
if(WITH_TBB)
find_package(TBB REQUIRED)
add_definitions(-DTBB)
- include_directories(${TBB_INCLUDE_DIR})
- list(APPEND THIRDPARTY_LIBS ${TBB_LIBRARIES})
+ list(APPEND THIRDPARTY_LIBS TBB::TBB)
endif()
# Stall notifications eat some performance from inserts
add_definitions(-DROCKSDB_DISABLE_STALL_NOTIFICATION)
endif()
+option(WITH_DYNAMIC_EXTENSION "build with dynamic extension support" OFF)
+if(NOT WITH_DYNAMIC_EXTENSION)
+ add_definitions(-DROCKSDB_NO_DYNAMIC_EXTENSION)
+endif()
if(DEFINED USE_RTTI)
if(USE_RTTI)
include_directories(${PROJECT_SOURCE_DIR})
include_directories(${PROJECT_SOURCE_DIR}/include)
-include_directories(SYSTEM ${PROJECT_SOURCE_DIR}/third-party/gtest-1.7.0/fused-src)
+include_directories(SYSTEM ${PROJECT_SOURCE_DIR}/third-party/gtest-1.8.1/fused-src)
+if(WITH_FOLLY_DISTRIBUTED_MUTEX)
+ include_directories(${PROJECT_SOURCE_DIR}/third-party/folly)
+endif()
find_package(Threads REQUIRED)
-add_subdirectory(third-party/gtest-1.7.0/fused-src/gtest)
-
# Main library source code
set(SOURCES
cache/clock_cache.cc
cache/lru_cache.cc
cache/sharded_cache.cc
+ db/arena_wrapped_db_iter.cc
db/builder.cc
db/c.cc
db/column_family.cc
db/compacted_db_impl.cc
- db/compaction.cc
- db/compaction_iterator.cc
- db/compaction_job.cc
- db/compaction_picker.cc
- db/compaction_picker_fifo.cc
- db/compaction_picker_universal.cc
+ db/compaction/compaction.cc
+ db/compaction/compaction_iterator.cc
+ db/compaction/compaction_picker.cc
+ db/compaction/compaction_job.cc
+ db/compaction/compaction_picker_fifo.cc
+ db/compaction/compaction_picker_level.cc
+ db/compaction/compaction_picker_universal.cc
db/convenience.cc
db/db_filesnapshot.cc
- db/db_impl.cc
- db/db_impl_write.cc
- db/db_impl_compaction_flush.cc
- db/db_impl_files.cc
- db/db_impl_open.cc
- db/db_impl_debug.cc
- db/db_impl_experimental.cc
- db/db_impl_readonly.cc
- db/db_impl_secondary.cc
+ db/db_impl/db_impl.cc
+ db/db_impl/db_impl_write.cc
+ db/db_impl/db_impl_compaction_flush.cc
+ db/db_impl/db_impl_files.cc
+ db/db_impl/db_impl_open.cc
+ db/db_impl/db_impl_debug.cc
+ db/db_impl/db_impl_experimental.cc
+ db/db_impl/db_impl_readonly.cc
+ db/db_impl/db_impl_secondary.cc
db/db_info_dumper.cc
db/db_iter.cc
db/dbformat.cc
db/flush_job.cc
db/flush_scheduler.cc
db/forward_iterator.cc
+ db/import_column_family_job.cc
db/internal_stats.cc
- db/in_memory_stats_history.cc
db/logs_with_prep_tracker.cc
db/log_reader.cc
db/log_writer.cc
db/table_cache.cc
db/table_properties_collector.cc
db/transaction_log_impl.cc
+ db/trim_history_scheduler.cc
db/version_builder.cc
db/version_edit.cc
db/version_set.cc
env/env_chroot.cc
env/env_encryption.cc
env/env_hdfs.cc
+ env/file_system.cc
env/mock_env.cc
+ file/delete_scheduler.cc
+ file/file_prefetch_buffer.cc
+ file/file_util.cc
+ file/filename.cc
+ file/random_access_file_reader.cc
+ file/read_write_util.cc
+ file/readahead_raf.cc
+ file/sequence_file_reader.cc
+ file/sst_file_manager_impl.cc
+ file/writable_file_writer.cc
+ logging/auto_roll_logger.cc
+ logging/event_logger.cc
+ logging/log_buffer.cc
+ memory/arena.cc
+ memory/concurrent_arena.cc
+ memory/jemalloc_nodump_allocator.cc
memtable/alloc_tracker.cc
memtable/hash_linklist_rep.cc
memtable/hash_skiplist_rep.cc
memtable/write_buffer_manager.cc
monitoring/histogram.cc
monitoring/histogram_windowing.cc
+ monitoring/in_memory_stats_history.cc
monitoring/instrumented_mutex.cc
monitoring/iostats_context.cc
monitoring/perf_context.cc
monitoring/perf_level.cc
+ monitoring/persistent_stats_history.cc
monitoring/statistics.cc
monitoring/thread_status_impl.cc
monitoring/thread_status_updater.cc
options/options_parser.cc
options/options_sanity_check.cc
port/stack_trace.cc
- table/adaptive_table_factory.cc
- table/block.cc
- table/block_based_filter_block.cc
- table/block_based_table_builder.cc
- table/block_based_table_factory.cc
- table/block_based_table_reader.cc
- table/block_builder.cc
+ table/adaptive/adaptive_table_factory.cc
+ table/block_based/block.cc
+ table/block_based/block_based_filter_block.cc
+ table/block_based/block_based_table_builder.cc
+ table/block_based/block_based_table_factory.cc
+ table/block_based/block_based_table_reader.cc
+ table/block_based/block_builder.cc
+ table/block_based/block_prefix_index.cc
+ table/block_based/data_block_hash_index.cc
+ table/block_based/data_block_footer.cc
+ table/block_based/filter_block_reader_common.cc
+ table/block_based/filter_policy.cc
+ table/block_based/flush_block_policy.cc
+ table/block_based/full_filter_block.cc
+ table/block_based/index_builder.cc
+ table/block_based/parsed_full_filter_block.cc
+ table/block_based/partitioned_filter_block.cc
+ table/block_based/uncompression_dict_reader.cc
table/block_fetcher.cc
- table/block_prefix_index.cc
- table/bloom_block.cc
- table/cuckoo_table_builder.cc
- table/cuckoo_table_factory.cc
- table/cuckoo_table_reader.cc
- table/data_block_hash_index.cc
- table/data_block_footer.cc
- table/flush_block_policy.cc
+ table/cuckoo/cuckoo_table_builder.cc
+ table/cuckoo/cuckoo_table_factory.cc
+ table/cuckoo/cuckoo_table_reader.cc
table/format.cc
- table/full_filter_block.cc
table/get_context.cc
- table/index_builder.cc
table/iterator.cc
table/merging_iterator.cc
table/meta_blocks.cc
- table/partitioned_filter_block.cc
table/persistent_cache_helper.cc
- table/plain_table_builder.cc
- table/plain_table_factory.cc
- table/plain_table_index.cc
- table/plain_table_key_coding.cc
- table/plain_table_reader.cc
+ table/plain/plain_table_bloom.cc
+ table/plain/plain_table_builder.cc
+ table/plain/plain_table_factory.cc
+ table/plain/plain_table_index.cc
+ table/plain/plain_table_key_coding.cc
+ table/plain/plain_table_reader.cc
table/sst_file_reader.cc
table/sst_file_writer.cc
table/table_properties.cc
table/two_level_iterator.cc
- tools/db_bench_tool.cc
+ test_util/sync_point.cc
+ test_util/sync_point_impl.cc
+ test_util/testutil.cc
+ test_util/transaction_test_util.cc
+ tools/block_cache_analyzer/block_cache_trace_analyzer.cc
tools/dump/db_dump_tool.cc
tools/ldb_cmd.cc
tools/ldb_tool.cc
tools/sst_dump_tool.cc
tools/trace_analyzer_tool.cc
- util/arena.cc
- util/auto_roll_logger.cc
- util/bloom.cc
+ trace_replay/trace_replay.cc
+ trace_replay/block_cache_tracer.cc
util/coding.cc
util/compaction_job_stats_impl.cc
util/comparator.cc
util/compression_context_cache.cc
- util/concurrent_arena.cc
util/concurrent_task_limiter_impl.cc
util/crc32c.cc
- util/delete_scheduler.cc
util/dynamic_bloom.cc
- util/event_logger.cc
- util/file_reader_writer.cc
- util/file_util.cc
- util/filename.cc
- util/filter_policy.cc
util/hash.cc
- util/jemalloc_nodump_allocator.cc
- util/log_buffer.cc
util/murmurhash.cc
util/random.cc
util/rate_limiter.cc
util/slice.cc
- util/sst_file_manager_impl.cc
+ util/file_checksum_helper.cc
util/status.cc
util/string_util.cc
- util/sync_point.cc
- util/sync_point_impl.cc
- util/testutil.cc
util/thread_local.cc
util/threadpool_imp.cc
- util/trace_replay.cc
- util/transaction_test_util.cc
util/xxhash.cc
utilities/backupable/backupable_db.cc
utilities/blob_db/blob_compaction_filter.cc
utilities/merge_operators/bytesxor.cc
utilities/merge_operators/max.cc
utilities/merge_operators/put.cc
+ utilities/merge_operators/sortlist.cc
utilities/merge_operators/string_append/stringappend.cc
utilities/merge_operators/string_append/stringappend2.cc
utilities/merge_operators/uint64add.cc
+ utilities/object_registry.cc
utilities/option_change_migration/option_change_migration.cc
utilities/options/options_util.cc
utilities/persistent_cache/block_cache_tier.cc
utilities/persistent_cache/block_cache_tier_metadata.cc
utilities/persistent_cache/persistent_cache_tier.cc
utilities/persistent_cache/volatile_tier_impl.cc
+ utilities/simulator_cache/cache_simulator.cc
utilities/simulator_cache/sim_cache.cc
utilities/table_properties_collectors/compact_on_deletion_collector.cc
utilities/trace/file_trace_reader_writer.cc
util/crc32c_ppc_asm.S)
endif(HAVE_POWER8)
+if(HAS_ARMV8_CRC)
+ list(APPEND SOURCES
+ util/crc32c_arm64.cc)
+endif(HAS_ARMV8_CRC)
+
if(WIN32)
list(APPEND SOURCES
port/win/io_win.cc
list(APPEND SOURCES
port/port_posix.cc
env/env_posix.cc
+ env/fs_posix.cc
env/io_posix.cc)
endif()
+if(WITH_FOLLY_DISTRIBUTED_MUTEX)
+ list(APPEND SOURCES
+ third-party/folly/folly/detail/Futex.cpp
+ third-party/folly/folly/synchronization/AtomicNotification.cpp
+ third-party/folly/folly/synchronization/DistributedMutex.cpp
+ third-party/folly/folly/synchronization/ParkingLot.cpp
+ third-party/folly/folly/synchronization/WaitOptions.cpp)
+endif()
+
set(ROCKSDB_STATIC_LIB rocksdb${ARTIFACT_SUFFIX})
set(ROCKSDB_SHARED_LIB rocksdb-shared${ARTIFACT_SUFFIX})
-set(ROCKSDB_IMPORT_LIB ${ROCKSDB_SHARED_LIB})
+
+option(ROCKSDB_BUILD_SHARED "Build shared versions of the RocksDB libraries" ON)
option(WITH_LIBRADOS "Build with librados" OFF)
if(WITH_LIBRADOS)
endif()
if(WIN32)
- set(SYSTEM_LIBS ${SYSTEM_LIBS} Shlwapi.lib Rpcrt4.lib)
- set(LIBS ${ROCKSDB_STATIC_LIB} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
+ set(SYSTEM_LIBS ${SYSTEM_LIBS} shlwapi.lib rpcrt4.lib)
else()
set(SYSTEM_LIBS ${CMAKE_THREAD_LIBS_INIT})
- set(LIBS ${ROCKSDB_SHARED_LIB} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
-
- add_library(${ROCKSDB_SHARED_LIB} SHARED ${SOURCES})
- target_link_libraries(${ROCKSDB_SHARED_LIB}
- ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
- set_target_properties(${ROCKSDB_SHARED_LIB} PROPERTIES
- LINKER_LANGUAGE CXX
- VERSION ${ROCKSDB_VERSION}
- SOVERSION ${ROCKSDB_VERSION_MAJOR}
- CXX_STANDARD 11
- OUTPUT_NAME "rocksdb")
endif()
add_library(${ROCKSDB_STATIC_LIB} STATIC ${SOURCES})
target_link_libraries(${ROCKSDB_STATIC_LIB}
${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
-if(WIN32)
- add_library(${ROCKSDB_IMPORT_LIB} SHARED ${SOURCES})
- target_link_libraries(${ROCKSDB_IMPORT_LIB}
+if(ROCKSDB_BUILD_SHARED)
+ add_library(${ROCKSDB_SHARED_LIB} SHARED ${SOURCES})
+ target_link_libraries(${ROCKSDB_SHARED_LIB}
${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
- set_target_properties(${ROCKSDB_IMPORT_LIB} PROPERTIES
- COMPILE_DEFINITIONS "ROCKSDB_DLL;ROCKSDB_LIBRARY_EXPORTS")
- if(MSVC)
- set_target_properties(${ROCKSDB_STATIC_LIB} PROPERTIES
- COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_STATIC_LIB}.pdb")
- set_target_properties(${ROCKSDB_IMPORT_LIB} PROPERTIES
- COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_IMPORT_LIB}.pdb")
+
+ if(WIN32)
+ set_target_properties(${ROCKSDB_SHARED_LIB} PROPERTIES
+ COMPILE_DEFINITIONS "ROCKSDB_DLL;ROCKSDB_LIBRARY_EXPORTS")
+ if(MSVC)
+ set_target_properties(${ROCKSDB_STATIC_LIB} PROPERTIES
+ COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_STATIC_LIB}.pdb")
+ set_target_properties(${ROCKSDB_SHARED_LIB} PROPERTIES
+ COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_SHARED_LIB}.pdb")
+ endif()
+ else()
+ set_target_properties(${ROCKSDB_SHARED_LIB} PROPERTIES
+ LINKER_LANGUAGE CXX
+ VERSION ${rocksdb_VERSION}
+ SOVERSION ${rocksdb_VERSION_MAJOR}
+ CXX_STANDARD 11
+ OUTPUT_NAME "rocksdb")
endif()
endif()
+if(ROCKSDB_BUILD_SHARED AND NOT WIN32)
+ set(ROCKSDB_LIB ${ROCKSDB_SHARED_LIB})
+else()
+ set(ROCKSDB_LIB ${ROCKSDB_STATIC_LIB})
+endif()
+
option(WITH_JNI "build with JNI" OFF)
if(WITH_JNI OR JNI)
message(STATUS "JNI library is enabled")
write_basic_package_version_file(
RocksDBConfigVersion.cmake
- VERSION ${ROCKSDB_VERSION}
+ VERSION ${rocksdb_VERSION}
COMPATIBILITY SameMajorVersion
)
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
)
- install(
- TARGETS ${ROCKSDB_SHARED_LIB}
- EXPORT RocksDBTargets
- COMPONENT runtime
- ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
- RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
- LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
- INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
- )
+ if(ROCKSDB_BUILD_SHARED)
+ install(
+ TARGETS ${ROCKSDB_SHARED_LIB}
+ EXPORT RocksDBTargets
+ COMPONENT runtime
+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+ INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
+ )
+ endif()
install(
EXPORT RocksDBTargets
)
endif()
-option(WITH_TESTS "build with tests" ON)
+# Tests are excluded from Release builds
+CMAKE_DEPENDENT_OPTION(WITH_TESTS "build with tests" ON
+ "CMAKE_BUILD_TYPE STREQUAL Debug" OFF)
if(WITH_TESTS)
+ add_subdirectory(third-party/gtest-1.8.1/fused-src/gtest)
+ add_library(testharness STATIC
+ test_util/testharness.cc)
+ target_link_libraries(testharness gtest)
+
set(TESTS
cache/cache_test.cc
cache/lru_cache_test.cc
db/column_family_test.cc
db/compact_files_test.cc
- db/compaction_iterator_test.cc
- db/compaction_job_stats_test.cc
- db/compaction_job_test.cc
- db/compaction_picker_test.cc
+ db/compaction/compaction_job_stats_test.cc
+ db/compaction/compaction_job_test.cc
+ db/compaction/compaction_iterator_test.cc
+ db/compaction/compaction_picker_test.cc
db/comparator_db_test.cc
db/corruption_test.cc
db/cuckoo_table_db_test.cc
db/db_log_iter_test.cc
db/db_memtable_test.cc
db/db_merge_operator_test.cc
+ db/db_merge_operand_test.cc
db/db_options_test.cc
db/db_properties_test.cc
db/db_range_del_test.cc
- db/db_secondary_test.cc
+ db/db_impl/db_secondary_test.cc
db/db_sst_test.cc
db/db_statistics_test.cc
db/db_table_properties_test.cc
env/env_basic_test.cc
env/env_test.cc
env/mock_env_test.cc
+ file/delete_scheduler_test.cc
+ logging/auto_roll_logger_test.cc
+ logging/env_logger_test.cc
+ logging/event_logger_test.cc
+ memory/arena_test.cc
memtable/inlineskiplist_test.cc
memtable/skiplist_test.cc
memtable/write_buffer_manager_test.cc
monitoring/histogram_test.cc
monitoring/iostats_context_test.cc
monitoring/statistics_test.cc
+ monitoring/stats_history_test.cc
options/options_settable_test.cc
options/options_test.cc
- table/block_based_filter_block_test.cc
- table/block_test.cc
+ table/block_based/block_based_filter_block_test.cc
+ table/block_based/block_test.cc
+ table/block_based/data_block_hash_index_test.cc
+ table/block_based/full_filter_block_test.cc
+ table/block_based/partitioned_filter_block_test.cc
table/cleanable_test.cc
- table/cuckoo_table_builder_test.cc
- table/cuckoo_table_reader_test.cc
- table/data_block_hash_index_test.cc
- table/full_filter_block_test.cc
+ table/cuckoo/cuckoo_table_builder_test.cc
+ table/cuckoo/cuckoo_table_reader_test.cc
table/merger_test.cc
table/sst_file_reader_test.cc
table/table_test.cc
+ tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc
tools/ldb_cmd_test.cc
tools/reduce_levels_test.cc
tools/sst_dump_test.cc
tools/trace_analyzer_test.cc
- util/arena_test.cc
- util/auto_roll_logger_test.cc
util/autovector_test.cc
util/bloom_test.cc
util/coding_test.cc
util/crc32c_test.cc
- util/delete_scheduler_test.cc
+ util/defer_test.cc
util/dynamic_bloom_test.cc
- util/event_logger_test.cc
util/file_reader_writer_test.cc
util/filelock_test.cc
util/hash_test.cc
util/heap_test.cc
+ util/random_test.cc
util/rate_limiter_test.cc
util/repeatable_thread_test.cc
+ util/slice_test.cc
util/slice_transform_test.cc
util/timer_queue_test.cc
util/thread_list_test.cc
utilities/options/options_util_test.cc
utilities/persistent_cache/hash_table_test.cc
utilities/persistent_cache/persistent_cache_test.cc
+ utilities/simulator_cache/cache_simulator_test.cc
utilities/simulator_cache/sim_cache_test.cc
utilities/table_properties_collectors/compact_on_deletion_collector_test.cc
utilities/transactions/optimistic_transaction_test.cc
list(APPEND TESTS utilities/env_librados_test.cc)
endif()
- set(BENCHMARKS
- cache/cache_bench.cc
- memtable/memtablerep_bench.cc
- db/range_del_aggregator_bench.cc
- tools/db_bench.cc
- table/table_reader_bench.cc
- utilities/persistent_cache/hash_table_bench.cc)
- add_library(testharness OBJECT util/testharness.cc)
- foreach(sourcefile ${BENCHMARKS})
- get_filename_component(exename ${sourcefile} NAME_WE)
- add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile}
- $<TARGET_OBJECTS:testharness>)
- target_link_libraries(${exename}${ARTIFACT_SUFFIX} gtest ${LIBS})
- endforeach(sourcefile ${BENCHMARKS})
-
- # For test util library that is build only in DEBUG mode
- # and linked to tests. Add test only code that is not #ifdefed for Release here.
+ if(WITH_FOLLY_DISTRIBUTED_MUTEX)
+ list(APPEND TESTS third-party/folly/folly/synchronization/test/DistributedMutexTest.cpp)
+ endif()
+
set(TESTUTIL_SOURCE
db/db_test_util.cc
monitoring/thread_status_updater_debug.cc
table/mock_table.cc
- util/fault_injection_test_env.cc
+ test_util/fault_injection_test_env.cc
utilities/cassandra/test_utils.cc
)
- # test utilities are only build in debug
enable_testing()
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND})
set(TESTUTILLIB testutillib${ARTIFACT_SUFFIX})
add_library(${TESTUTILLIB} STATIC ${TESTUTIL_SOURCE})
+ target_link_libraries(${TESTUTILLIB} ${ROCKSDB_LIB})
if(MSVC)
set_target_properties(${TESTUTILLIB} PROPERTIES COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/testutillib${ARTIFACT_SUFFIX}.pdb")
endif()
EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
)
- # Tests are excluded from Release builds
- set(TEST_EXES ${TESTS})
-
- foreach(sourcefile ${TEST_EXES})
+ foreach(sourcefile ${TESTS})
get_filename_component(exename ${sourcefile} NAME_WE)
- add_executable(${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX} ${sourcefile}
- $<TARGET_OBJECTS:testharness>)
+ add_executable(${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX} ${sourcefile})
set_target_properties(${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX}
PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1
EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1
EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
OUTPUT_NAME ${exename}${ARTIFACT_SUFFIX}
)
- target_link_libraries(${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX} testutillib${ARTIFACT_SUFFIX} gtest ${LIBS})
+ target_link_libraries(${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX} testutillib${ARTIFACT_SUFFIX} testharness gtest ${ROCKSDB_LIB})
if(NOT "${exename}" MATCHES "db_sanity_test")
add_test(NAME ${exename} COMMAND ${exename}${ARTIFACT_SUFFIX})
add_dependencies(check ${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX})
endif()
- endforeach(sourcefile ${TEST_EXES})
+ endforeach(sourcefile ${TESTS})
- # C executables must link to a shared object
- set(C_TESTS db/c_test.c)
- set(C_TEST_EXES ${C_TESTS})
+ if(WIN32)
+ # C executables must link to a shared object
+ if(ROCKSDB_BUILD_SHARED)
+ set(ROCKSDB_LIB_FOR_C ${ROCKSDB_SHARED_LIB})
+ else()
+ set(ROCKSDB_LIB_FOR_C OFF)
+ endif()
+ else()
+ set(ROCKSDB_LIB_FOR_C ${ROCKSDB_LIB})
+ endif()
- foreach(sourcefile ${C_TEST_EXES})
- string(REPLACE ".c" "" exename ${sourcefile})
- string(REGEX REPLACE "^((.+)/)+" "" exename ${exename})
- add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile})
- set_target_properties(${exename}${ARTIFACT_SUFFIX}
- PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1
- EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1
- EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
- )
- target_link_libraries(${exename}${ARTIFACT_SUFFIX} ${ROCKSDB_IMPORT_LIB} testutillib${ARTIFACT_SUFFIX})
- add_test(NAME ${exename} COMMAND ${exename}${ARTIFACT_SUFFIX})
- add_dependencies(check ${exename}${ARTIFACT_SUFFIX})
- endforeach(sourcefile ${C_TEST_EXES})
+ if(ROCKSDB_LIB_FOR_C)
+ set(C_TESTS db/c_test.c)
+ # C executables must link to a shared object
+ add_executable(c_test db/c_test.c)
+ target_link_libraries(c_test ${ROCKSDB_SHARED_LIB} testharness)
+ add_test(NAME c_test COMMAND c_test${ARTIFACT_SUFFIX})
+ add_dependencies(check c_test)
+ endif()
+endif()
+
+option(WITH_BENCHMARK_TOOLS "build with benchmarks" ON)
+if(WITH_BENCHMARK_TOOLS)
+ add_executable(db_bench
+ tools/db_bench.cc
+ tools/db_bench_tool.cc)
+ target_link_libraries(db_bench
+ ${ROCKSDB_LIB})
+
+ add_executable(cache_bench
+ cache/cache_bench.cc)
+ target_link_libraries(cache_bench
+ ${ROCKSDB_LIB})
+
+ add_executable(memtablerep_bench
+ memtable/memtablerep_bench.cc)
+ target_link_libraries(memtablerep_bench
+ ${ROCKSDB_LIB})
+
+ add_executable(range_del_aggregator_bench
+ db/range_del_aggregator_bench.cc)
+ target_link_libraries(range_del_aggregator_bench
+ ${ROCKSDB_LIB})
+
+ add_executable(table_reader_bench
+ table/table_reader_bench.cc)
+ target_link_libraries(table_reader_bench
+ ${ROCKSDB_LIB} testharness)
+
+ add_executable(filter_bench
+ util/filter_bench.cc)
+ target_link_libraries(filter_bench
+ ${ROCKSDB_LIB})
+
+ add_executable(hash_table_bench
+ utilities/persistent_cache/hash_table_bench.cc)
+ target_link_libraries(hash_table_bench
+ ${ROCKSDB_LIB})
endif()
+option(WITH_CORE_TOOLS "build with ldb and sst_dump" ON)
option(WITH_TOOLS "build with tools" ON)
-if(WITH_TOOLS)
+if(WITH_CORE_TOOLS OR WITH_TOOLS)
add_subdirectory(tools)
+ add_custom_target(core_tools
+ DEPENDS ${core_tool_deps})
+endif()
+
+if(WITH_TOOLS)
+ add_subdirectory(db_stress_tool)
+ add_custom_target(tools
+ DEPENDS ${tool_deps})
endif()