CMakeLists.txt 23.3 KB
Newer Older
1
# This cmake build is for Windows 64-bit only.
D
Dmitri Smirnov 已提交
2 3
#
# Prerequisites:
4
#     You must have at least Visual Studio 2015 Update 3. Start the Developer Command Prompt window that is a part of Visual Studio installation.
D
Dmitri Smirnov 已提交
5
#     Run the build commands from within the Developer Command Prompt window to have paths to the compiler and runtime libraries set.
6
#     You must have git.exe in your %PATH% environment variable.
D
Dmitri Smirnov 已提交
7 8
#
# To build Rocksdb for Windows is as easy as 1-2-3-4-5:
A
agiardullo 已提交
9
#
10
# 1. Update paths to third-party libraries in thirdparty.inc file
D
Dmitri Smirnov 已提交
11 12 13
# 2. Create a new directory for build artifacts
#        mkdir build
#        cd build
14 15
# 3. Run cmake to generate project files for Windows, add more options to enable required third-party libraries.
#    See thirdparty.inc for more information.
16
#        sample command: cmake -G "Visual Studio 14 Win64" -DGFLAGS=1 -DSNAPPY=1 -DJEMALLOC=1 -DJNI=1 ..
17 18 19 20 21 22 23
# 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.
#
24
# 5. And release mode (/m[:<N>] is also supported)
25
#        msbuild rocksdb.sln /p:Configuration=Release
D
Dmitri Smirnov 已提交
26 27 28 29 30
#

cmake_minimum_required(VERSION 2.6)
project(rocksdb)

31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
if(POLICY CMP0042)
  cmake_policy(SET CMP0042 NEW)
endif()

list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules/")

if(WIN32)
  include(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty.inc)
else()
  option(WITH_JEMALLOC "build with JeMalloc" OFF)
  if(WITH_JEMALLOC)
    find_package(JeMalloc REQUIRED)
    add_definitions(-DROCKSDB_JEMALLOC)
    include_directories(${JEMALLOC_INCLUDE_DIR})
  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()
endif()

if(WIN32)
  execute_process(COMMAND powershell -Command "Get-Date -format MM_dd_yyyy" OUTPUT_VARIABLE DATE)
  execute_process(COMMAND powershell -Command "Get-Date -format HH:mm:ss" OUTPUT_VARIABLE TIME)
  string(REGEX REPLACE "(..)_(..)_..(..).*" "\\1/\\2/\\3" DATE "${DATE}")
  string(REGEX REPLACE "(..):(.....).*" " \\1:\\2" TIME "${TIME}")
60
  set(GIT_DATE_TIME "${DATE} ${TIME}")
61 62 63
else()
  execute_process(COMMAND date "+%Y/%m/%d %H:%M:%S" OUTPUT_VARIABLE DATETIME)
  string(REGEX REPLACE "\n" "" DATETIME ${DATETIME})
64
  set(GIT_DATE_TIME "${DATETIME}")
65
endif()
D
Dmitri Smirnov 已提交
66

67 68 69
find_package(Git)

if (GIT_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git")
70
  if(WIN32)
71
    execute_process(COMMAND $ENV{COMSPEC} /C ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse HEAD OUTPUT_VARIABLE GIT_SHA)
72 73 74
  else()
    execute_process(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse HEAD OUTPUT_VARIABLE GIT_SHA)
  endif()
75
else()
76
  set(GIT_SHA 0)
77 78
endif()

79
string(REGEX REPLACE "[^0-9a-f]+" "" GIT_SHA "${GIT_SHA}")
D
Dmitri Smirnov 已提交
80

81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
set(BUILD_VERSION_CC ${CMAKE_BINARY_DIR}/build_version.cc)
file(GENERATE OUTPUT ${BUILD_VERSION_CC} CONTENT
  "#include \"build_version.h\"
const char* rocksdb_build_git_sha = \"rocksdb_build_git_sha:${GIT_SHA}\";
const char* rocksdb_build_git_datetime = \"rocksdb_build_git_datetime:${GIT_DATE_TIME}\";
const char* rocksdb_build_compile_date = __DATE__;
")
add_library(build_version OBJECT ${BUILD_VERSION_CC})
target_include_directories(build_version PRIVATE
  ${CMAKE_CURRENT_SOURCE_DIR}/util)
if(WIN32)
  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+ /W3 /WX /wd4127 /wd4800 /wd4996 /wd4351")
else()
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wextra -Wall -Werror")
  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")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -fno-omit-frame-pointer -momit-leaf-frame-pointer")
endif()
D
Dmitri Smirnov 已提交
101

102 103 104 105 106 107 108 109 110 111
option(WITH_ASAN "build with ASAN" OFF)
if(WITH_ASAN)
  add_definitions(-DROCKSDB_TSAN_RUN)
  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()
D
Dmitri Smirnov 已提交
112

113 114 115 116 117 118 119 120 121 122
option(WITH_TSAN "build with TSAN" OFF)
if(WITH_TSAN)
  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread -pie")
  add_definitions(-DROCKSDB_TSAN_RUN)
  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()
123

124 125 126 127 128 129 130 131 132
option(WITH_UBSAN "build with UBSAN" OFF)
if(WITH_UBSAN)
  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()
D
Dmitri Smirnov 已提交
133

134 135 136 137 138 139 140 141 142
# 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()

143 144 145 146 147 148 149 150 151 152 153
if(WIN32)
  if((${OPTIMIZE_DEBUG} EQUAL 1))
    message(STATUS "Debug optimization is enabled")
    set(CMAKE_CXX_FLAGS_DEBUG "/Oxt /MDd")
  else()
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /RTC1 /Gm /MDd")
  endif()
  set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oxt /Zp8 /Gm- /Gy /MD")

  set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG")
  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG")
154 155
endif()

156 157 158
if(CMAKE_COMPILER_IS_GNUCXX)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-memcmp")
endif()
D
Dmitri Smirnov 已提交
159

160 161 162 163 164
option(ROCKSDB_LITE "Build RocksDBLite version" OFF)
if(ROCKSDB_LITE)
  add_definitions(-DROCKSDB_LITE)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
endif()
D
Dmitri Smirnov 已提交
165

166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218
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)
endif()

if(NOT WIN32)
  add_definitions(-DROCKSDB_PLATFORM_POSIX -DROCKSDB_LIB_IO_POSIX)
endif()

option(WITH_FALLOCATE "build with fallocate" ON)

if(WITH_FALLOCATE)
  include(CheckCSourceCompiles)
  CHECK_C_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()

include(CheckFunctionExists)
CHECK_FUNCTION_EXISTS(malloc_usable_size HAVE_MALLOC_USABLE_SIZE)
if(HAVE_MALLOC_USABLE_SIZE)
  add_definitions(-DROCKSDB_MALLOC_USABLE_SIZE)
endif()
D
Dmitri Smirnov 已提交
219 220 221

include_directories(${PROJECT_SOURCE_DIR})
include_directories(${PROJECT_SOURCE_DIR}/include)
222
include_directories(SYSTEM ${PROJECT_SOURCE_DIR}/third-party/gtest-1.7.0/fused-src)
D
Dmitri Smirnov 已提交
223

224 225 226 227 228 229
find_package(Threads REQUIRED)
if(WIN32)
  set(SYSTEM_LIBS ${SYSTEM_LIBS} Shlwapi.lib Rpcrt4.lib)
else()
  set(SYSTEM_LIBS ${CMAKE_THREAD_LIBS_INIT})
endif()
D
Dmitri Smirnov 已提交
230

231
set(ROCKSDB_LIBS rocksdblib${ARTIFACT_SUFFIX})
D
Dmitri Smirnov 已提交
232 233 234
set(LIBS ${ROCKSDB_LIBS} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})

add_subdirectory(third-party/gtest-1.7.0/fused-src/gtest)
235
add_subdirectory(tools)
D
Dmitri Smirnov 已提交
236

237
# Main library source code
238

D
Dmitri Smirnov 已提交
239
set(SOURCES
240
        db/auto_roll_logger.cc
D
Dmitri Smirnov 已提交
241 242 243
        db/builder.cc
        db/c.cc
        db/column_family.cc
244
        db/compacted_db_impl.cc
D
Dmitri Smirnov 已提交
245
        db/compaction.cc
246
        db/compaction_iterator.cc
D
Dmitri Smirnov 已提交
247 248
        db/compaction_job.cc
        db/compaction_picker.cc
A
agiardullo 已提交
249
        db/convenience.cc
D
Dmitri Smirnov 已提交
250 251 252 253 254
        db/dbformat.cc
        db/db_filesnapshot.cc
        db/db_impl.cc
        db/db_impl_debug.cc
        db/db_impl_experimental.cc
255
        db/db_impl_add_file.cc
D
Dmitri Smirnov 已提交
256
        db/db_impl_readonly.cc
257
        db/db_info_dumper.cc
D
Dmitri Smirnov 已提交
258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275
        db/db_iter.cc
        db/event_helpers.cc
        db/experimental.cc
        db/filename.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/managed_iterator.cc
        db/memtable.cc
        db/memtable_allocator.cc
        db/memtable_list.cc
        db/merge_helper.cc
        db/merge_operator.cc
        db/repair.cc
276
        db/snapshot_impl.cc
D
Dmitri Smirnov 已提交
277 278 279 280 281 282 283 284 285 286 287
        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
288
        db/xfunc_test_points.cc
289 290 291
        memtable/hash_cuckoo_rep.cc
        memtable/hash_linklist_rep.cc
        memtable/hash_skiplist_rep.cc
292 293
        memtable/skiplistrep.cc
        memtable/vectorrep.cc
D
Dmitri Smirnov 已提交
294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312
        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_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/iterator.cc
        table/merger.cc
313
        table/sst_file_writer.cc
D
Dmitri Smirnov 已提交
314 315 316 317 318 319
        table/meta_blocks.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
D
Dmitri Smirnov 已提交
320
        table/persistent_cache_helper.cc
D
Dmitri Smirnov 已提交
321 322
        table/table_properties.cc
        table/two_level_iterator.cc
323
        tools/sst_dump_tool.cc
324
        tools/db_bench_tool.cc
325
        tools/dump/db_dump_tool.cc
D
Dmitri Smirnov 已提交
326 327
        util/arena.cc
        util/bloom.cc
328
        util/cf_options.cc
Y
Yi Wu 已提交
329
        util/clock_cache.cc
D
Dmitri Smirnov 已提交
330 331 332
        util/coding.cc
        util/compaction_job_stats_impl.cc
        util/comparator.cc
333
        util/concurrent_arena.cc
D
Dmitri Smirnov 已提交
334
        util/crc32c.cc
335
        util/db_options.cc
336
        util/delete_scheduler.cc
D
Dmitri Smirnov 已提交
337 338
        util/dynamic_bloom.cc
        util/env.cc
A
Andrew Kryczka 已提交
339
        util/env_chroot.cc
D
Dmitri Smirnov 已提交
340 341 342
        util/env_hdfs.cc
        util/event_logger.cc
        util/file_util.cc
343
        util/file_reader_writer.cc
344
        util/sst_file_manager_impl.cc
D
Dmitri Smirnov 已提交
345 346 347
        util/filter_policy.cc
        util/hash.cc
        util/histogram.cc
348
        util/histogram_windowing.cc
D
Dmitri Smirnov 已提交
349 350
        util/instrumented_mutex.cc
        util/iostats_context.cc
Y
Yi Wu 已提交
351
        util/lru_cache.cc
352 353
        tools/ldb_cmd.cc
        tools/ldb_tool.cc
D
Dmitri Smirnov 已提交
354 355 356 357 358 359
        util/logging.cc
        util/log_buffer.cc
        util/memenv.cc
        util/murmurhash.cc
        util/options.cc
        util/options_helper.cc
360
        util/options_parser.cc
Y
Yueh-Hsuan Chiang 已提交
361
        util/options_sanity_check.cc
D
Dmitri Smirnov 已提交
362 363
        util/perf_context.cc
        util/perf_level.cc
364
        util/random.cc
D
Dmitri Smirnov 已提交
365
        util/rate_limiter.cc
Y
Yi Wu 已提交
366
        util/sharded_cache.cc
D
Dmitri Smirnov 已提交
367 368 369
        util/slice.cc
        util/statistics.cc
        util/status.cc
A
agiardullo 已提交
370
        util/status_message.cc
D
Dmitri Smirnov 已提交
371 372 373 374
        util/string_util.cc
        util/sync_point.cc
        util/testutil.cc
        util/thread_local.cc
375
        util/threadpool_imp.cc
D
Dmitri Smirnov 已提交
376 377 378 379
        util/thread_status_impl.cc
        util/thread_status_updater.cc
        util/thread_status_util.cc
        util/thread_status_util_debug.cc
S
SherlockNoMad 已提交
380
        util/transaction_test_util.cc
D
Dmitri Smirnov 已提交
381 382 383
        util/xfunc.cc
        util/xxhash.cc
        utilities/backupable/backupable_db.cc
384
        utilities/blob_db/blob_db.cc
D
Dmitri Smirnov 已提交
385
        utilities/checkpoint/checkpoint.cc
386
        utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc
O
omegaga 已提交
387
        utilities/date_tiered/date_tiered_db_impl.cc
D
Dmitri Smirnov 已提交
388 389 390
        utilities/document/document_db.cc
        utilities/document/json_document.cc
        utilities/document/json_document_builder.cc
D
Dmitri Smirnov 已提交
391
        utilities/env_mirror.cc
392
        utilities/env_registry.cc
D
Dmitri Smirnov 已提交
393 394 395
        utilities/flashcache/flashcache.cc
        utilities/geodb/geodb_impl.cc
        utilities/leveldb_options/leveldb_options.cc
396
        utilities/memory/memory_util.cc
D
Dmitri Smirnov 已提交
397 398 399
        utilities/merge_operators/string_append/stringappend.cc
        utilities/merge_operators/string_append/stringappend2.cc
        utilities/merge_operators/put.cc
400
        utilities/merge_operators/max.cc
D
Dmitri Smirnov 已提交
401
        utilities/merge_operators/uint64add.cc
402
        utilities/option_change_migration/option_change_migration.cc
403
        utilities/options/options_util.cc
404 405 406
        utilities/persistent_cache/block_cache_tier.cc
        utilities/persistent_cache/block_cache_tier_file.cc
        utilities/persistent_cache/block_cache_tier_metadata.cc
407
        utilities/persistent_cache/persistent_cache_tier.cc
408
        utilities/persistent_cache/volatile_tier_impl.cc
D
Dmitri Smirnov 已提交
409
        utilities/redis/redis_lists.cc
410
        utilities/simulator_cache/sim_cache.cc
D
Dmitri Smirnov 已提交
411
        utilities/spatialdb/spatial_db.cc
412
        utilities/table_properties_collectors/compact_on_deletion_collector.cc
413
        utilities/transactions/optimistic_transaction_impl.cc
D
Dmitri Smirnov 已提交
414
        utilities/transactions/optimistic_transaction_db_impl.cc
A
agiardullo 已提交
415
        utilities/transactions/transaction_base.cc
A
agiardullo 已提交
416 417
        utilities/transactions/transaction_impl.cc
        utilities/transactions/transaction_db_impl.cc
A
agiardullo 已提交
418
        utilities/transactions/transaction_db_mutex_impl.cc
A
agiardullo 已提交
419 420
        utilities/transactions/transaction_lock_mgr.cc
        utilities/transactions/transaction_util.cc
D
Dmitri Smirnov 已提交
421 422 423
        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
O
omegaga 已提交
424 425 426
        utilities/col_buf_encoder.cc
        utilities/col_buf_decoder.cc
        utilities/column_aware_encoding_util.cc
427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442
        $<TARGET_OBJECTS:build_version>)

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/xpress_win.cc)
else()
  list(APPEND SOURCES
    port/port_posix.cc
    util/env_posix.cc
    util/io_posix.cc)
endif()
D
Dmitri Smirnov 已提交
443

444 445 446 447 448 449
option(WITH_LIBRADOS "Build with librados" OFF)
if(WITH_LIBRADOS)
  list(APPEND SOURCES
    utilities/env_librados.cc)
  list(APPEND THIRDPARTY_LIBS rados)
endif()
450

451 452 453 454 455 456 457 458
add_library(rocksdblib${ARTIFACT_SUFFIX} STATIC ${SOURCES})
target_link_libraries(rocksdblib${ARTIFACT_SUFFIX}
  ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})

if(WIN32)
  set_target_properties(rocksdblib${ARTIFACT_SUFFIX} PROPERTIES
    COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/rocksdblib${ARTIFACT_SUFFIX}.pdb")
endif()
D
Dmitri Smirnov 已提交
459

460
add_library(rocksdb${ARTIFACT_SUFFIX} SHARED ${SOURCES})
461 462 463 464 465 466 467 468 469 470 471 472
target_link_libraries(rocksdb${ARTIFACT_SUFFIX}
  ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})

if(WIN32)
  set_target_properties(rocksdb${ARTIFACT_SUFFIX} PROPERTIES
    COMPILE_FLAGS "-DROCKSDB_DLL -DROCKSDB_LIBRARY_EXPORTS /Fd${CMAKE_CFG_INTDIR}/rocksdb${ARTIFACT_SUFFIX}.pdb")
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)
473 474 475 476
else()
  message(STATUS "JNI library is disabled")
endif()

D
Dmitri Smirnov 已提交
477
set(TESTS
478
        db/auto_roll_logger_test.cc
D
Dmitri Smirnov 已提交
479 480
        db/column_family_test.cc
        db/compact_files_test.cc
481
        db/compaction_iterator_test.cc
D
Dmitri Smirnov 已提交
482 483 484 485 486 487
        db/compaction_job_test.cc
        db/compaction_job_stats_test.cc
        db/compaction_picker_test.cc
        db/comparator_db_test.cc
        db/corruption_test.cc
        db/cuckoo_table_db_test.cc
488
        db/db_compaction_filter_test.cc
489
        db/db_compaction_test.cc
490
        db/db_dynamic_level_test.cc
491
        db/db_inplace_update_test.cc
492
        db/db_iter_test.cc
493
        db/db_log_iter_test.cc
494
        db/db_options_test.cc
495 496 497 498
        db/db_properties_test.cc
        db/db_table_properties_test.cc
        db/db_tailing_iter_test.cc
        db/db_test.cc
499
        db/db_test2.cc
500
        db/db_block_cache_test.cc
Y
Yi Wu 已提交
501
        db/db_bloom_filter_test.cc
502
        db/db_flush_test.cc
Y
Yi Wu 已提交
503 504
        db/db_iterator_test.cc
        db/db_sst_test.cc
505
        db/external_sst_file_test.cc
506
        db/db_universal_compaction_test.cc
S
sdong 已提交
507
        db/db_wal_test.cc
D
Dmitri Smirnov 已提交
508 509 510 511 512 513
        db/dbformat_test.cc
        db/deletefile_test.cc
        db/fault_injection_test.cc
        db/file_indexer_test.cc
        db/filename_test.cc
        db/flush_job_test.cc
N
Nathan Bronson 已提交
514
        db/inlineskiplist_test.cc
D
Dmitri Smirnov 已提交
515 516
        db/listener_test.cc
        db/log_test.cc
517
        db/manual_compaction_test.cc
D
Dmitri Smirnov 已提交
518 519
        db/memtable_list_test.cc
        db/merge_test.cc
520
        db/merge_helper_test.cc
521
        db/options_file_test.cc
D
Dmitri Smirnov 已提交
522 523 524
        db/perf_context_test.cc
        db/plain_table_db_test.cc
        db/prefix_test.cc
A
Andrew Kryczka 已提交
525
        db/repair_test.cc
D
Dmitri Smirnov 已提交
526 527 528 529 530 531 532 533 534
        db/skiplist_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
O
omegaga 已提交
535
        db/db_io_failure_test.cc
D
Dmitri Smirnov 已提交
536 537 538 539 540 541 542
        table/block_based_filter_block_test.cc
        table/block_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
543
        tools/ldb_cmd_test.cc
D
Dmitri Smirnov 已提交
544
        tools/reduce_levels_test.cc
545
        tools/sst_dump_test.cc
D
Dmitri Smirnov 已提交
546 547 548 549 550 551
        util/arena_test.cc
        util/autovector_test.cc
        util/bloom_test.cc
        util/cache_test.cc
        util/coding_test.cc
        util/crc32c_test.cc
552
        util/delete_scheduler_test.cc
D
Dmitri Smirnov 已提交
553
        util/dynamic_bloom_test.cc
554
        util/env_basic_test.cc
D
Dmitri Smirnov 已提交
555 556 557
        util/env_test.cc
        util/event_logger_test.cc
        util/filelock_test.cc
558
        util/file_reader_writer_test.cc
559
        util/heap_test.cc
D
Dmitri Smirnov 已提交
560
        util/histogram_test.cc
561
        util/iostats_context_test.cc
Y
Yi Wu 已提交
562
        util/lru_cache_test.cc
D
Dmitri Smirnov 已提交
563
        util/mock_env_test.cc
564
        util/options_settable_test.cc
D
Dmitri Smirnov 已提交
565 566 567
        util/options_test.cc
        util/rate_limiter_test.cc
        util/slice_transform_test.cc
568
        util/statistics_test.cc
D
Dmitri Smirnov 已提交
569 570 571
        util/thread_list_test.cc
        util/thread_local_test.cc
        utilities/backupable/backupable_db_test.cc
572
        utilities/blob_db/blob_db_test.cc
D
Dmitri Smirnov 已提交
573
        utilities/checkpoint/checkpoint_test.cc
O
omegaga 已提交
574
        utilities/date_tiered/date_tiered_test.cc
D
Dmitri Smirnov 已提交
575 576
        utilities/document/document_db_test.cc
        utilities/document/json_document_test.cc
577
        utilities/env_registry_test.cc
D
Dmitri Smirnov 已提交
578
        utilities/geodb/geodb_test.cc
579
        utilities/memory/memory_test.cc
D
Dmitri Smirnov 已提交
580
        utilities/merge_operators/string_append/stringappend_test.cc
581
        utilities/option_change_migration/option_change_migration_test.cc
Y
yuslepukhin 已提交
582
        utilities/options/options_util_test.cc
583
        utilities/persistent_cache/hash_table_test.cc
584
        utilities/persistent_cache/persistent_cache_test.cc
D
Dmitri Smirnov 已提交
585 586
        utilities/redis/redis_lists_test.cc
        utilities/spatialdb/spatial_db_test.cc
587
        utilities/table_properties_collectors/compact_on_deletion_collector_test.cc
D
Dmitri Smirnov 已提交
588
        utilities/transactions/optimistic_transaction_test.cc
A
agiardullo 已提交
589
        utilities/transactions/transaction_test.cc
D
Dmitri Smirnov 已提交
590 591
        utilities/ttl/ttl_test.cc
        utilities/write_batch_with_index/write_batch_with_index_test.cc
O
omegaga 已提交
592
        utilities/column_aware_encoding_test.cc
D
Dmitri Smirnov 已提交
593
)
594 595 596
if(WITH_LIBRADOS)
  list(APPEND TESTS utilities/env_librados_test.cc)
endif()
D
Dmitri Smirnov 已提交
597

598 599 600 601 602 603 604 605 606 607 608 609 610 611
set(BENCHMARKS
  tools/db_bench.cc
  table/table_reader_bench.cc
  util/cache_bench.cc
  db/memtablerep_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} ${LIBS} gtest)
endforeach(sourcefile ${BENCHMARKS})
612

613 614 615 616 617 618 619 620 621
# 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
    table/mock_table.cc
    util/mock_env.cc
    util/fault_injection_test_env.cc
    util/thread_status_updater_debug.cc
)
622
# test utilities are only build in debug
623 624
enable_testing()
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND})
625 626
set(TESTUTILLIB testutillib${ARTIFACT_SUFFIX})
add_library(${TESTUTILLIB} STATIC ${TESTUTIL_SOURCE})
627 628 629
if(WIN32)
  set_target_properties(${TESTUTILLIB} PROPERTIES COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/testutillib${ARTIFACT_SUFFIX}.pdb")
endif()
630 631 632 633 634 635 636 637 638 639
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})
640 641 642
    get_filename_component(exename ${sourcefile} NAME_WE)
    add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile}
      $<TARGET_OBJECTS:testharness>)
643 644 645 646 647
    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
      )
648 649 650 651 652
    target_link_libraries(${exename}${ARTIFACT_SUFFIX} testutillib${ARTIFACT_SUFFIX} ${LIBS} gtest)
    if(NOT "${exename}" MATCHES "db_sanity_test")
      add_test(NAME ${exename} COMMAND ${exename}${ARTIFACT_SUFFIX})
      add_dependencies(check ${exename}${ARTIFACT_SUFFIX})
    endif()
653 654
endforeach(sourcefile ${TEST_EXES})

655
# C executables must link to a shared object
656
set(C_TESTS db/c_test.c)
657
set(C_TEST_EXES ${C_TESTS})
658

659
foreach(sourcefile ${C_TEST_EXES})
660 661 662
    string(REPLACE ".c" "" exename ${sourcefile})
    string(REGEX REPLACE "^((.+)/)+" "" exename ${exename})
    add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile})
663 664 665 666 667 668
    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${ARTIFACT_SUFFIX} testutillib${ARTIFACT_SUFFIX})
669 670
    add_test(NAME ${exename} COMMAND ${exename}${ARTIFACT_SUFFIX})
    add_dependencies(check ${exename}${ARTIFACT_SUFFIX})
671
endforeach(sourcefile ${C_TEST_EXES})