f54d7f5fea
Summary: **# Summary** RocksDB uses SSE crc32 intrinsics to calculate the crc32 values but it does it in single way fashion (not pipelined on single CPU core). Intel's whitepaper () published an algorithm that uses 3-way pipelining for the crc32 intrinsics, then use pclmulqdq intrinsic to combine the values. Because pclmulqdq has overhead on its own, this algorithm will show perf gains on buffers larger than 216 bytes, which makes RocksDB a perfect user, since most of the buffers RocksDB call crc32c on is over 4KB. Initial db_bench show tremendous CPU gain. This change uses the 3-way SSE algorithm by default. The old SSE algorithm is now behind a compiler tag NO_THREEWAY_CRC32C. If user compiles the code with NO_THREEWAY_CRC32C=1 then the old SSE Crc32c algorithm would be used. If the server does not have SSE4.2 at the run time the slow way (Non SSE) will be used. **# Performance Test Results** We ran the FillRandom and ReadRandom benchmarks in db_bench. ReadRandom is the point of interest here since it calculates the CRC32 for the in-mem buffers. We did 3 runs for each algorithm. Before this change the CRC32 value computation takes about 11.5% of total CPU cost, and with the new 3-way algorithm it reduced to around 4.5%. The overall throughput also improved from 25.53MB/s to 27.63MB/s. 1) ReadRandom in db_bench overall metrics PER RUN Algorithm | run | micros/op | ops/sec |Throughput (MB/s) 3-way | 1 | 4.143 | 241387 | 26.7 3-way | 2 | 3.775 | 264872 | 29.3 3-way | 3 | 4.116 | 242929 | 26.9 FastCrc32c|1 | 4.037 | 247727 | 27.4 FastCrc32c|2 | 4.648 | 215166 | 23.8 FastCrc32c|3 | 4.352 | 229799 | 25.4 AVG Algorithm | Average of micros/op | Average of ops/sec | Average of Throughput (MB/s) 3-way | 4.01 | 249,729 | 27.63 FastCrc32c | 4.35 | 230,897 | 25.53 2) Crc32c computation CPU cost (inclusive samples percentage) PER RUN Implementation | run | TotalSamples | Crc32c percentage 3-way | 1 | 4,572,250,000 | 4.37% 3-way | 2 | 3,779,250,000 | 4.62% 3-way | 3 | 4,129,500,000 | 4.48% FastCrc32c | 1 | 4,663,500,000 | 11.24% FastCrc32c | 2 | 4,047,500,000 | 12.34% FastCrc32c | 3 | 4,366,750,000 | 11.68% **# Test Plan** make -j64 corruption_test && ./corruption_test By default it uses 3-way SSE algorithm NO_THREEWAY_CRC32C=1 make -j64 corruption_test && ./corruption_test make clean && DEBUG_LEVEL=0 make -j64 db_bench make clean && DEBUG_LEVEL=0 NO_THREEWAY_CRC32C=1 make -j64 db_bench Closes https://github.com/facebook/rocksdb/pull/3173 Differential Revision: D6330882 Pulled By: yingsu00 fbshipit-source-id: 8ec3d89719533b63b536a736663ca6f0dd4482e9
982 lines
32 KiB
CMake
982 lines
32 KiB
CMake
# Prerequisites for Windows:
|
|
# This cmake build is for Windows 64-bit only.
|
|
#
|
|
# Prerequisites:
|
|
# You must have at least Visual Studio 2015 Update 3. Start the Developer Command Prompt window that is a part of Visual Studio installation.
|
|
# Run the build commands from within the Developer Command Prompt window to have paths to the compiler and runtime libraries set.
|
|
# You must have git.exe in your %PATH% environment variable.
|
|
#
|
|
# To build Rocksdb for Windows is as easy as 1-2-3-4-5:
|
|
#
|
|
# 1. Update paths to third-party libraries in thirdparty.inc file
|
|
# 2. Create a new directory for build artifacts
|
|
# mkdir build
|
|
# 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 14 Win64" -DGFLAGS=1 -DSNAPPY=1 -DJEMALLOC=1 -DJNI=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 ot use all avail cores)
|
|
# msbuild rocksdb.sln
|
|
#
|
|
# rocksdb.sln build features exclusions of test only code in Release. If you build ALL_BUILD then everything
|
|
# will be attempted but test only code does not build in Release mode.
|
|
#
|
|
# 5. And release mode (/m[:<N>] is also supported)
|
|
# msbuild rocksdb.sln /p:Configuration=Release
|
|
#
|
|
# Linux:
|
|
#
|
|
# 1. Install a recent toolchain such as devtoolset-3 if you're on a older distro. C++11 required.
|
|
# 2. mkdir build; cd build
|
|
# 3. cmake ..
|
|
# 4. make -j
|
|
|
|
cmake_minimum_required(VERSION 2.8.12)
|
|
project(rocksdb)
|
|
|
|
if(POLICY CMP0042)
|
|
cmake_policy(SET CMP0042 NEW)
|
|
endif()
|
|
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules/")
|
|
|
|
option(WITH_JEMALLOC "build with JeMalloc" OFF)
|
|
if(MSVC)
|
|
include(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty.inc)
|
|
else()
|
|
if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
|
|
# FreeBSD has jemaloc as default malloc
|
|
# but it does not have all the jemalloc files in include/...
|
|
set(WITH_JEMALLOC ON)
|
|
else()
|
|
if(WITH_JEMALLOC)
|
|
find_package(JeMalloc REQUIRED)
|
|
add_definitions(-DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE)
|
|
include_directories(${JEMALLOC_INCLUDE_DIR})
|
|
endif()
|
|
endif()
|
|
|
|
option(WITH_SNAPPY "build with SNAPPY" OFF)
|
|
if(WITH_SNAPPY)
|
|
find_package(snappy REQUIRED)
|
|
add_definitions(-DSNAPPY)
|
|
include_directories(${SNAPPY_INCLUDE_DIR})
|
|
list(APPEND THIRDPARTY_LIBS ${SNAPPY_LIBRARIES})
|
|
endif()
|
|
|
|
option(WITH_ZLIB "build with zlib" OFF)
|
|
if(WITH_ZLIB)
|
|
find_package(zlib REQUIRED)
|
|
add_definitions(-DZLIB)
|
|
include_directories(${ZLIB_INCLUDE_DIR})
|
|
list(APPEND THIRDPARTY_LIBS ${ZLIB_LIBRARIES})
|
|
endif()
|
|
|
|
option(WITH_BZ2 "build with bzip2" OFF)
|
|
if(WITH_BZ2)
|
|
find_package(bzip2 REQUIRED)
|
|
add_definitions(-DBZIP2)
|
|
include_directories(${BZIP2_INCLUDE_DIR})
|
|
list(APPEND THIRDPARTY_LIBS ${BZIP2_LIBRARIES})
|
|
endif()
|
|
|
|
option(WITH_LZ4 "build with lz4" OFF)
|
|
if(WITH_LZ4)
|
|
find_package(lz4 REQUIRED)
|
|
add_definitions(-DLZ4)
|
|
include_directories(${LZ4_INCLUDE_DIR})
|
|
list(APPEND THIRDPARTY_LIBS ${LZ4_LIBRARIES})
|
|
endif()
|
|
|
|
option(WITH_ZSTD "build with zstd" OFF)
|
|
if(WITH_ZSTD)
|
|
find_package(zstd REQUIRED)
|
|
add_definitions(-DZSTD)
|
|
include_directories(${ZSTD_INCLUDE_DIR})
|
|
list(APPEND THIRDPARTY_LIBS ${ZSTD_LIBRARIES})
|
|
endif()
|
|
endif()
|
|
|
|
string(TIMESTAMP GIT_DATE_TIME "%Y/%m/%d %H:%M:%S" UTC)
|
|
|
|
find_package(Git)
|
|
|
|
if(GIT_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git")
|
|
if(WIN32)
|
|
execute_process(COMMAND $ENV{COMSPEC} /C ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse HEAD OUTPUT_VARIABLE GIT_SHA)
|
|
else()
|
|
execute_process(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse HEAD OUTPUT_VARIABLE GIT_SHA)
|
|
endif()
|
|
else()
|
|
set(GIT_SHA 0)
|
|
endif()
|
|
|
|
string(REGEX REPLACE "[^0-9a-f]+" "" GIT_SHA "${GIT_SHA}")
|
|
|
|
if(NOT WIN32)
|
|
execute_process(COMMAND
|
|
"./build_tools/version.sh" "full"
|
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
|
OUTPUT_VARIABLE ROCKSDB_VERSION
|
|
)
|
|
string(STRIP "${ROCKSDB_VERSION}" ROCKSDB_VERSION)
|
|
execute_process(COMMAND
|
|
"./build_tools/version.sh" "major"
|
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
|
OUTPUT_VARIABLE ROCKSDB_VERSION_MAJOR
|
|
)
|
|
string(STRIP "${ROCKSDB_VERSION_MAJOR}" ROCKSDB_VERSION_MAJOR)
|
|
endif()
|
|
|
|
option(WITH_MD_LIBRARY "build with MD" ON)
|
|
if(WIN32 AND MSVC)
|
|
if(WITH_MD_LIBRARY)
|
|
set(RUNTIME_LIBRARY "MD")
|
|
else()
|
|
set(RUNTIME_LIBRARY "MT")
|
|
endif()
|
|
endif()
|
|
|
|
set(BUILD_VERSION_CC ${CMAKE_BINARY_DIR}/build_version.cc)
|
|
configure_file(util/build_version.cc.in ${BUILD_VERSION_CC} @ONLY)
|
|
add_library(build_version OBJECT ${BUILD_VERSION_CC})
|
|
target_include_directories(build_version PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/util)
|
|
if(MSVC)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi /nologo /EHsc /GS /Gd /GR /GF /fp:precise /Zc:wchar_t /Zc:forScope /errorReport:queue")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /FC /d2Zi+ /W4 /wd4127 /wd4800 /wd4996 /wd4351 /wd4100 /wd4204 /wd4324")
|
|
else()
|
|
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")
|
|
endif()
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
|
if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -fno-omit-frame-pointer")
|
|
include(CheckCXXCompilerFlag)
|
|
CHECK_CXX_COMPILER_FLAG("-momit-leaf-frame-pointer" HAVE_OMIT_LEAF_FRAME_POINTER)
|
|
if(HAVE_OMIT_LEAF_FRAME_POINTER)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -momit-leaf-frame-pointer")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
option(PORTABLE "build a portable binary" OFF)
|
|
option(FORCE_SSE42 "force building with SSE4.2, even when PORTABLE=ON" OFF)
|
|
if(PORTABLE)
|
|
# MSVC does not need a separate compiler flag to enable SSE4.2; if nmmintrin.h
|
|
# is available, it is available by default.
|
|
if(FORCE_SSE42 AND NOT MSVC)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2 -mpclmul")
|
|
endif()
|
|
else()
|
|
if(MSVC)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2")
|
|
else()
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
|
|
endif()
|
|
endif()
|
|
|
|
include(CheckCXXSourceCompiles)
|
|
if(NOT MSVC)
|
|
set(CMAKE_REQUIRED_FLAGS "-msse4.2 -mpclmul")
|
|
endif()
|
|
CHECK_CXX_SOURCE_COMPILES("
|
|
#include <cstdint>
|
|
#include <nmmintrin.h>
|
|
#include <wmmintrin.h>
|
|
int main() {
|
|
volatile uint32_t x = _mm_crc32_u32(0, 0);
|
|
const auto a = _mm_set_epi64x(0, 0);
|
|
const auto b = _mm_set_epi64x(0, 0);
|
|
const auto c = _mm_clmulepi64_si128(a, b, 0x00);
|
|
auto d = _mm_cvtsi128_si64(c);
|
|
}
|
|
" HAVE_SSE42)
|
|
unset(CMAKE_REQUIRED_FLAGS)
|
|
if(HAVE_SSE42)
|
|
add_definitions(-DHAVE_SSE42)
|
|
elseif(FORCE_SSE42)
|
|
message(FATAL_ERROR "FORCE_SSE42=ON but unable to compile with SSE4.2 enabled")
|
|
endif()
|
|
|
|
CHECK_CXX_SOURCE_COMPILES("
|
|
#if defined(_MSC_VER) && !defined(__thread)
|
|
#define __thread __declspec(thread)
|
|
#endif
|
|
int main() {
|
|
static __thread int tls;
|
|
}
|
|
" HAVE_THREAD_LOCAL)
|
|
if(HAVE_THREAD_LOCAL)
|
|
add_definitions(-DROCKSDB_SUPPORT_THREAD_LOCAL)
|
|
endif()
|
|
|
|
option(FAIL_ON_WARNINGS "Treat compile warnings as errors" ON)
|
|
if(FAIL_ON_WARNINGS)
|
|
if(MSVC)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
|
|
else() # assume GCC
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
|
|
endif()
|
|
endif()
|
|
|
|
option(WITH_ASAN "build with ASAN" OFF)
|
|
if(WITH_ASAN)
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
|
|
if(WITH_JEMALLOC)
|
|
message(FATAL "ASAN does not work well with JeMalloc")
|
|
endif()
|
|
endif()
|
|
|
|
option(WITH_TSAN "build with TSAN" OFF)
|
|
if(WITH_TSAN)
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread -pie")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -fPIC")
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread -fPIC")
|
|
if(WITH_JEMALLOC)
|
|
message(FATAL "TSAN does not work well with JeMalloc")
|
|
endif()
|
|
endif()
|
|
|
|
option(WITH_UBSAN "build with UBSAN" OFF)
|
|
if(WITH_UBSAN)
|
|
add_definitions(-DROCKSDB_UBSAN_RUN)
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined")
|
|
if(WITH_JEMALLOC)
|
|
message(FATAL "UBSAN does not work well with JeMalloc")
|
|
endif()
|
|
endif()
|
|
|
|
find_package(gflags)
|
|
if(gflags_FOUND)
|
|
add_definitions(-DGFLAGS=1)
|
|
include_directories(${gflags_INCLUDE_DIR})
|
|
list(APPEND THIRDPARTY_LIBS ${gflags_LIBRARIES})
|
|
endif()
|
|
|
|
find_package(NUMA)
|
|
if(NUMA_FOUND)
|
|
add_definitions(-DNUMA)
|
|
include_directories(${NUMA_INCLUDE_DIR})
|
|
list(APPEND THIRDPARTY_LIBS ${NUMA_LIBRARIES})
|
|
endif()
|
|
|
|
find_package(TBB)
|
|
if(TBB_FOUND)
|
|
add_definitions(-DTBB)
|
|
include_directories(${TBB_INCLUDE_DIR})
|
|
list(APPEND THIRDPARTY_LIBS ${TBB_LIBRARIES})
|
|
endif()
|
|
|
|
# Used to run CI build and tests so we can run faster
|
|
set(OPTIMIZE_DEBUG_DEFAULT 0) # Debug build is unoptimized by default use -DOPTDBG=1 to optimize
|
|
|
|
if(DEFINED OPTDBG)
|
|
set(OPTIMIZE_DEBUG ${OPTDBG})
|
|
else()
|
|
set(OPTIMIZE_DEBUG ${OPTIMIZE_DEBUG_DEFAULT})
|
|
endif()
|
|
|
|
if(MSVC)
|
|
if((${OPTIMIZE_DEBUG} EQUAL 1))
|
|
message(STATUS "Debug optimization is enabled")
|
|
set(CMAKE_CXX_FLAGS_DEBUG "/Oxt /${RUNTIME_LIBRARY}d")
|
|
else()
|
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /RTC1 /Gm /${RUNTIME_LIBRARY}d")
|
|
endif()
|
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oxt /Zp8 /Gm- /Gy /${RUNTIME_LIBRARY}")
|
|
|
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG")
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG")
|
|
endif()
|
|
|
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-memcmp")
|
|
endif()
|
|
|
|
option(ROCKSDB_LITE "Build RocksDBLite version" OFF)
|
|
if(ROCKSDB_LITE)
|
|
add_definitions(-DROCKSDB_LITE)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
|
|
endif()
|
|
|
|
if(CMAKE_SYSTEM_NAME MATCHES "Cygwin")
|
|
add_definitions(-fno-builtin-memcmp -DCYGWIN)
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
|
|
add_definitions(-DOS_MACOSX)
|
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES arm)
|
|
add_definitions(-DIOS_CROSS_COMPILE -DROCKSDB_LITE)
|
|
# no debug info for IOS, that will make our library big
|
|
add_definitions(-DNDEBUG)
|
|
endif()
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
|
add_definitions(-DOS_LINUX)
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS")
|
|
add_definitions(-DOS_SOLARIS)
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
|
|
add_definitions(-DOS_FREEBSD)
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD")
|
|
add_definitions(-DOS_NETBSD)
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
|
|
add_definitions(-DOS_OPENBSD)
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES "DragonFly")
|
|
add_definitions(-DOS_DRAGONFLYBSD)
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES "Android")
|
|
add_definitions(-DOS_ANDROID)
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
|
|
add_definitions(-DWIN32 -DOS_WIN -D_MBCS -DWIN64 -DNOMINMAX)
|
|
if(MINGW)
|
|
add_definitions(-D_WIN32_WINNT=_WIN32_WINNT_VISTA)
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT WIN32)
|
|
add_definitions(-DROCKSDB_PLATFORM_POSIX -DROCKSDB_LIB_IO_POSIX)
|
|
endif()
|
|
|
|
option(WITH_FALLOCATE "build with fallocate" ON)
|
|
if(WITH_FALLOCATE)
|
|
CHECK_CXX_SOURCE_COMPILES("
|
|
#include <fcntl.h>
|
|
#include <linux/falloc.h>
|
|
int main() {
|
|
int fd = open(\"/dev/null\", 0);
|
|
fallocate(fd, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, 0, 1024);
|
|
}
|
|
" HAVE_FALLOCATE)
|
|
if(HAVE_FALLOCATE)
|
|
add_definitions(-DROCKSDB_FALLOCATE_PRESENT)
|
|
endif()
|
|
endif()
|
|
|
|
CHECK_CXX_SOURCE_COMPILES("
|
|
#include <fcntl.h>
|
|
int main() {
|
|
int fd = open(\"/dev/null\", 0);
|
|
sync_file_range(fd, 0, 1024, SYNC_FILE_RANGE_WRITE);
|
|
}
|
|
" HAVE_SYNC_FILE_RANGE_WRITE)
|
|
if(HAVE_SYNC_FILE_RANGE_WRITE)
|
|
add_definitions(-DROCKSDB_RANGESYNC_PRESENT)
|
|
endif()
|
|
|
|
CHECK_CXX_SOURCE_COMPILES("
|
|
#include <pthread.h>
|
|
int main() {
|
|
(void) PTHREAD_MUTEX_ADAPTIVE_NP;
|
|
}
|
|
" HAVE_PTHREAD_MUTEX_ADAPTIVE_NP)
|
|
if(HAVE_PTHREAD_MUTEX_ADAPTIVE_NP)
|
|
add_definitions(-DROCKSDB_PTHREAD_ADAPTIVE_MUTEX)
|
|
endif()
|
|
|
|
include(CheckCXXSymbolExists)
|
|
check_cxx_symbol_exists(malloc_usable_size malloc.h HAVE_MALLOC_USABLE_SIZE)
|
|
if(HAVE_MALLOC_USABLE_SIZE)
|
|
add_definitions(-DROCKSDB_MALLOC_USABLE_SIZE)
|
|
endif()
|
|
|
|
check_cxx_symbol_exists(sched_getcpu sched.h HAVE_SCHED_GETCPU)
|
|
if(HAVE_SCHED_GETCPU)
|
|
add_definitions(-DROCKSDB_SCHED_GETCPU_PRESENT)
|
|
endif()
|
|
|
|
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)
|
|
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/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_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_info_dumper.cc
|
|
db/db_iter.cc
|
|
db/dbformat.cc
|
|
db/event_helpers.cc
|
|
db/experimental.cc
|
|
db/external_sst_file_ingestion_job.cc
|
|
db/file_indexer.cc
|
|
db/flush_job.cc
|
|
db/flush_scheduler.cc
|
|
db/forward_iterator.cc
|
|
db/internal_stats.cc
|
|
db/log_reader.cc
|
|
db/log_writer.cc
|
|
db/malloc_stats.cc
|
|
db/managed_iterator.cc
|
|
db/memtable.cc
|
|
db/memtable_list.cc
|
|
db/merge_helper.cc
|
|
db/merge_operator.cc
|
|
db/range_del_aggregator.cc
|
|
db/repair.cc
|
|
db/snapshot_impl.cc
|
|
db/table_cache.cc
|
|
db/table_properties_collector.cc
|
|
db/transaction_log_impl.cc
|
|
db/version_builder.cc
|
|
db/version_edit.cc
|
|
db/version_set.cc
|
|
db/wal_manager.cc
|
|
db/write_batch.cc
|
|
db/write_batch_base.cc
|
|
db/write_controller.cc
|
|
db/write_thread.cc
|
|
env/env.cc
|
|
env/env_chroot.cc
|
|
env/env_encryption.cc
|
|
env/env_hdfs.cc
|
|
env/mock_env.cc
|
|
memtable/alloc_tracker.cc
|
|
memtable/hash_cuckoo_rep.cc
|
|
memtable/hash_linklist_rep.cc
|
|
memtable/hash_skiplist_rep.cc
|
|
memtable/skiplistrep.cc
|
|
memtable/vectorrep.cc
|
|
memtable/write_buffer_manager.cc
|
|
monitoring/histogram.cc
|
|
monitoring/histogram_windowing.cc
|
|
monitoring/instrumented_mutex.cc
|
|
monitoring/iostats_context.cc
|
|
monitoring/perf_context.cc
|
|
monitoring/perf_level.cc
|
|
monitoring/statistics.cc
|
|
monitoring/thread_status_impl.cc
|
|
monitoring/thread_status_updater.cc
|
|
monitoring/thread_status_util.cc
|
|
monitoring/thread_status_util_debug.cc
|
|
options/cf_options.cc
|
|
options/db_options.cc
|
|
options/options.cc
|
|
options/options_helper.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/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/flush_block_policy.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/sst_file_writer.cc
|
|
table/table_properties.cc
|
|
table/two_level_iterator.cc
|
|
tools/db_bench_tool.cc
|
|
tools/dump/db_dump_tool.cc
|
|
tools/ldb_cmd.cc
|
|
tools/ldb_tool.cc
|
|
tools/sst_dump_tool.cc
|
|
util/arena.cc
|
|
util/auto_roll_logger.cc
|
|
util/bloom.cc
|
|
util/coding.cc
|
|
util/compaction_job_stats_impl.cc
|
|
util/comparator.cc
|
|
util/concurrent_arena.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/log_buffer.cc
|
|
util/murmurhash.cc
|
|
util/random.cc
|
|
util/rate_limiter.cc
|
|
util/slice.cc
|
|
util/sst_file_manager_impl.cc
|
|
util/status.cc
|
|
util/status_message.cc
|
|
util/string_util.cc
|
|
util/sync_point.cc
|
|
util/testutil.cc
|
|
util/thread_local.cc
|
|
util/threadpool_imp.cc
|
|
util/transaction_test_util.cc
|
|
util/xxhash.cc
|
|
utilities/backupable/backupable_db.cc
|
|
utilities/blob_db/blob_db.cc
|
|
utilities/blob_db/blob_db_impl.cc
|
|
utilities/blob_db/blob_dump_tool.cc
|
|
utilities/blob_db/blob_file.cc
|
|
utilities/blob_db/blob_log_reader.cc
|
|
utilities/blob_db/blob_log_writer.cc
|
|
utilities/blob_db/blob_log_format.cc
|
|
utilities/blob_db/ttl_extractor.cc
|
|
utilities/cassandra/cassandra_compaction_filter.cc
|
|
utilities/cassandra/format.cc
|
|
utilities/cassandra/merge_operator.cc
|
|
utilities/checkpoint/checkpoint_impl.cc
|
|
utilities/col_buf_decoder.cc
|
|
utilities/col_buf_encoder.cc
|
|
utilities/column_aware_encoding_util.cc
|
|
utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc
|
|
utilities/date_tiered/date_tiered_db_impl.cc
|
|
utilities/debug.cc
|
|
utilities/document/document_db.cc
|
|
utilities/document/json_document.cc
|
|
utilities/document/json_document_builder.cc
|
|
utilities/env_mirror.cc
|
|
utilities/env_timed.cc
|
|
utilities/geodb/geodb_impl.cc
|
|
utilities/leveldb_options/leveldb_options.cc
|
|
utilities/lua/rocks_lua_compaction_filter.cc
|
|
utilities/memory/memory_util.cc
|
|
utilities/merge_operators/max.cc
|
|
utilities/merge_operators/put.cc
|
|
utilities/merge_operators/string_append/stringappend.cc
|
|
utilities/merge_operators/string_append/stringappend2.cc
|
|
utilities/merge_operators/uint64add.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_file.cc
|
|
utilities/persistent_cache/block_cache_tier_metadata.cc
|
|
utilities/persistent_cache/persistent_cache_tier.cc
|
|
utilities/persistent_cache/volatile_tier_impl.cc
|
|
utilities/redis/redis_lists.cc
|
|
utilities/simulator_cache/sim_cache.cc
|
|
utilities/spatialdb/spatial_db.cc
|
|
utilities/table_properties_collectors/compact_on_deletion_collector.cc
|
|
utilities/transactions/optimistic_transaction_db_impl.cc
|
|
utilities/transactions/optimistic_transaction.cc
|
|
utilities/transactions/pessimistic_transaction.cc
|
|
utilities/transactions/pessimistic_transaction_db.cc
|
|
utilities/transactions/snapshot_checker.cc
|
|
utilities/transactions/transaction_base.cc
|
|
utilities/transactions/transaction_db_mutex_impl.cc
|
|
utilities/transactions/transaction_lock_mgr.cc
|
|
utilities/transactions/transaction_util.cc
|
|
utilities/transactions/write_prepared_txn.cc
|
|
utilities/transactions/write_prepared_txn_db.cc
|
|
utilities/ttl/db_ttl_impl.cc
|
|
utilities/write_batch_with_index/write_batch_with_index.cc
|
|
utilities/write_batch_with_index/write_batch_with_index_internal.cc
|
|
$<TARGET_OBJECTS:build_version>)
|
|
|
|
if(HAVE_SSE42 AND NOT FORCE_SSE42)
|
|
if(NOT MSVC)
|
|
set_source_files_properties(
|
|
util/crc32c.cc
|
|
PROPERTIES COMPILE_FLAGS "-msse4.2 -mpclmul")
|
|
endif()
|
|
endif()
|
|
|
|
if(WIN32)
|
|
list(APPEND SOURCES
|
|
port/win/io_win.cc
|
|
port/win/env_win.cc
|
|
port/win/env_default.cc
|
|
port/win/port_win.cc
|
|
port/win/win_logger.cc
|
|
port/win/win_thread.cc
|
|
port/win/xpress_win.cc)
|
|
|
|
if(WITH_JEMALLOC)
|
|
list(APPEND SOURCES
|
|
port/win/win_jemalloc.cc)
|
|
endif()
|
|
|
|
else()
|
|
list(APPEND SOURCES
|
|
port/port_posix.cc
|
|
env/env_posix.cc
|
|
env/io_posix.cc)
|
|
endif()
|
|
|
|
set(ROCKSDB_STATIC_LIB rocksdb${ARTIFACT_SUFFIX})
|
|
set(ROCKSDB_SHARED_LIB rocksdb-shared${ARTIFACT_SUFFIX})
|
|
set(ROCKSDB_IMPORT_LIB ${ROCKSDB_SHARED_LIB})
|
|
if(WIN32)
|
|
set(SYSTEM_LIBS ${SYSTEM_LIBS} Shlwapi.lib Rpcrt4.lib)
|
|
set(LIBS ${ROCKSDB_STATIC_LIB} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
|
|
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()
|
|
|
|
option(WITH_LIBRADOS "Build with librados" OFF)
|
|
if(WITH_LIBRADOS)
|
|
list(APPEND SOURCES
|
|
utilities/env_librados.cc)
|
|
list(APPEND THIRDPARTY_LIBS rados)
|
|
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}
|
|
${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")
|
|
endif()
|
|
endif()
|
|
|
|
option(WITH_JNI "build with JNI" OFF)
|
|
if(WITH_JNI OR JNI)
|
|
message(STATUS "JNI library is enabled")
|
|
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/java)
|
|
else()
|
|
message(STATUS "JNI library is disabled")
|
|
endif()
|
|
|
|
# Installation and packaging
|
|
if(WIN32)
|
|
option(ROCKSDB_INSTALL_ON_WINDOWS "Enable install target on Windows" OFF)
|
|
endif()
|
|
if(NOT WIN32 OR ROCKSDB_INSTALL_ON_WINDOWS)
|
|
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
|
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
|
# Change default installation prefix on Linux to /usr
|
|
set(CMAKE_INSTALL_PREFIX /usr CACHE PATH "Install path prefix, prepended onto install directories." FORCE)
|
|
endif()
|
|
endif()
|
|
|
|
include(GNUInstallDirs)
|
|
include(CMakePackageConfigHelpers)
|
|
|
|
set(package_config_destination ${CMAKE_INSTALL_LIBDIR}/cmake/rocksdb)
|
|
|
|
configure_package_config_file(
|
|
${CMAKE_SOURCE_DIR}/cmake/RocksDBConfig.cmake.in RocksDBConfig.cmake
|
|
INSTALL_DESTINATION ${package_config_destination}
|
|
)
|
|
|
|
write_basic_package_version_file(
|
|
RocksDBConfigVersion.cmake
|
|
VERSION ${ROCKSDB_VERSION}
|
|
COMPATIBILITY SameMajorVersion
|
|
)
|
|
|
|
install(DIRECTORY include/rocksdb COMPONENT devel DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
|
|
|
|
install(
|
|
TARGETS ${ROCKSDB_STATIC_LIB}
|
|
EXPORT RocksDBTargets
|
|
COMPONENT devel
|
|
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
|
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
|
)
|
|
|
|
install(
|
|
TARGETS ${ROCKSDB_SHARED_LIB}
|
|
EXPORT RocksDBTargets
|
|
COMPONENT runtime
|
|
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
|
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
|
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
|
)
|
|
|
|
install(
|
|
EXPORT RocksDBTargets
|
|
COMPONENT devel
|
|
DESTINATION ${package_config_destination}
|
|
NAMESPACE RocksDB::
|
|
)
|
|
|
|
install(
|
|
FILES
|
|
${CMAKE_CURRENT_BINARY_DIR}/RocksDBConfig.cmake
|
|
${CMAKE_CURRENT_BINARY_DIR}/RocksDBConfigVersion.cmake
|
|
COMPONENT devel
|
|
DESTINATION ${package_config_destination}
|
|
)
|
|
endif()
|
|
|
|
option(WITH_TESTS "build with tests" ON)
|
|
if(WITH_TESTS)
|
|
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/comparator_db_test.cc
|
|
db/corruption_test.cc
|
|
db/cuckoo_table_db_test.cc
|
|
db/db_basic_test.cc
|
|
db/db_blob_index_test.cc
|
|
db/db_block_cache_test.cc
|
|
db/db_bloom_filter_test.cc
|
|
db/db_compaction_filter_test.cc
|
|
db/db_compaction_test.cc
|
|
db/db_dynamic_level_test.cc
|
|
db/db_flush_test.cc
|
|
db/db_inplace_update_test.cc
|
|
db/db_io_failure_test.cc
|
|
db/db_iter_test.cc
|
|
db/db_iterator_test.cc
|
|
db/db_log_iter_test.cc
|
|
db/db_memtable_test.cc
|
|
db/db_merge_operator_test.cc
|
|
db/db_options_test.cc
|
|
db/db_properties_test.cc
|
|
db/db_range_del_test.cc
|
|
db/db_sst_test.cc
|
|
db/db_statistics_test.cc
|
|
db/db_table_properties_test.cc
|
|
db/db_tailing_iter_test.cc
|
|
db/db_test.cc
|
|
db/db_test2.cc
|
|
db/db_universal_compaction_test.cc
|
|
db/db_wal_test.cc
|
|
db/db_write_test.cc
|
|
db/dbformat_test.cc
|
|
db/deletefile_test.cc
|
|
db/external_sst_file_basic_test.cc
|
|
db/external_sst_file_test.cc
|
|
db/fault_injection_test.cc
|
|
db/file_indexer_test.cc
|
|
db/filename_test.cc
|
|
db/flush_job_test.cc
|
|
db/listener_test.cc
|
|
db/log_test.cc
|
|
db/manual_compaction_test.cc
|
|
db/memtable_list_test.cc
|
|
db/merge_helper_test.cc
|
|
db/merge_test.cc
|
|
db/options_file_test.cc
|
|
db/perf_context_test.cc
|
|
db/plain_table_db_test.cc
|
|
db/prefix_test.cc
|
|
db/repair_test.cc
|
|
db/table_properties_collector_test.cc
|
|
db/version_builder_test.cc
|
|
db/version_edit_test.cc
|
|
db/version_set_test.cc
|
|
db/wal_manager_test.cc
|
|
db/write_batch_test.cc
|
|
db/write_callback_test.cc
|
|
db/write_controller_test.cc
|
|
env/env_basic_test.cc
|
|
env/env_test.cc
|
|
env/mock_env_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
|
|
options/options_settable_test.cc
|
|
options/options_test.cc
|
|
table/block_based_filter_block_test.cc
|
|
table/block_test.cc
|
|
table/cleanable_test.cc
|
|
table/cuckoo_table_builder_test.cc
|
|
table/cuckoo_table_reader_test.cc
|
|
table/full_filter_block_test.cc
|
|
table/merger_test.cc
|
|
table/table_test.cc
|
|
tools/ldb_cmd_test.cc
|
|
tools/reduce_levels_test.cc
|
|
tools/sst_dump_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/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/rate_limiter_test.cc
|
|
util/slice_transform_test.cc
|
|
util/timer_queue_test.cc
|
|
util/thread_list_test.cc
|
|
util/thread_local_test.cc
|
|
utilities/backupable/backupable_db_test.cc
|
|
utilities/blob_db/blob_db_test.cc
|
|
utilities/cassandra/cassandra_functional_test.cc
|
|
utilities/cassandra/cassandra_format_test.cc
|
|
utilities/cassandra/cassandra_row_merge_test.cc
|
|
utilities/cassandra/cassandra_serialize_test.cc
|
|
utilities/checkpoint/checkpoint_test.cc
|
|
utilities/column_aware_encoding_test.cc
|
|
utilities/date_tiered/date_tiered_test.cc
|
|
utilities/document/document_db_test.cc
|
|
utilities/document/json_document_test.cc
|
|
utilities/geodb/geodb_test.cc
|
|
utilities/lua/rocks_lua_test.cc
|
|
utilities/memory/memory_test.cc
|
|
utilities/merge_operators/string_append/stringappend_test.cc
|
|
utilities/object_registry_test.cc
|
|
utilities/option_change_migration/option_change_migration_test.cc
|
|
utilities/options/options_util_test.cc
|
|
utilities/persistent_cache/hash_table_test.cc
|
|
utilities/persistent_cache/persistent_cache_test.cc
|
|
utilities/redis/redis_lists_test.cc
|
|
utilities/spatialdb/spatial_db_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
|
|
utilities/transactions/transaction_test.cc
|
|
utilities/transactions/write_prepared_transaction_test.cc
|
|
utilities/ttl/ttl_test.cc
|
|
utilities/write_batch_with_index/write_batch_with_index_test.cc
|
|
)
|
|
if(WITH_LIBRADOS)
|
|
list(APPEND TESTS utilities/env_librados_test.cc)
|
|
endif()
|
|
|
|
set(BENCHMARKS
|
|
cache/cache_bench.cc
|
|
memtable/memtablerep_bench.cc
|
|
tools/db_bench.cc
|
|
table/table_reader_bench.cc
|
|
utilities/column_aware_encoding_exp.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.
|
|
set(TESTUTIL_SOURCE
|
|
db/db_test_util.cc
|
|
monitoring/thread_status_updater_debug.cc
|
|
table/mock_table.cc
|
|
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})
|
|
if(MSVC)
|
|
set_target_properties(${TESTUTILLIB} PROPERTIES COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/testutillib${ARTIFACT_SUFFIX}.pdb")
|
|
endif()
|
|
set_target_properties(${TESTUTILLIB}
|
|
PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1
|
|
EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1
|
|
EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
|
|
)
|
|
|
|
# Tests are excluded from Release builds
|
|
set(TEST_EXES ${TESTS})
|
|
|
|
foreach(sourcefile ${TEST_EXES})
|
|
get_filename_component(exename ${sourcefile} NAME_WE)
|
|
add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile}
|
|
$<TARGET_OBJECTS:testharness>)
|
|
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} testutillib${ARTIFACT_SUFFIX} gtest ${LIBS})
|
|
if(NOT "${exename}" MATCHES "db_sanity_test")
|
|
add_test(NAME ${exename} COMMAND ${exename}${ARTIFACT_SUFFIX})
|
|
add_dependencies(check ${exename}${ARTIFACT_SUFFIX})
|
|
endif()
|
|
endforeach(sourcefile ${TEST_EXES})
|
|
|
|
# C executables must link to a shared object
|
|
set(C_TESTS db/c_test.c)
|
|
set(C_TEST_EXES ${C_TESTS})
|
|
|
|
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})
|
|
endif()
|
|
|
|
option(WITH_TOOLS "build with tools" ON)
|
|
if(WITH_TOOLS)
|
|
add_subdirectory(tools)
|
|
endif()
|