CMakeLists.txt 23.1 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
set(BUILD_VERSION_CC ${CMAKE_BINARY_DIR}/build_version.cc)
82
configure_file(util/build_version.cc.in ${BUILD_VERSION_CC} @ONLY)
83 84 85 86 87 88 89 90 91 92 93
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")
94
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -momit-leaf-frame-pointer")
95
endif()
D
Dmitri Smirnov 已提交
96

97 98 99 100 101 102 103 104 105 106
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 已提交
107

108 109 110 111 112 113 114 115 116 117
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()
118

119 120 121 122 123 124 125 126 127
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 已提交
128

129 130 131 132 133 134 135 136 137
# 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()

138 139 140 141 142 143 144 145 146 147 148
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")
149 150
endif()

151 152 153
if(CMAKE_COMPILER_IS_GNUCXX)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-memcmp")
endif()
D
Dmitri Smirnov 已提交
154

155 156 157 158 159
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 已提交
160

161 162 163 164 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
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 已提交
214 215 216

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

219 220 221 222 223 224
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 已提交
225

226
set(ROCKSDB_LIBS rocksdblib${ARTIFACT_SUFFIX})
D
Dmitri Smirnov 已提交
227 228 229
set(LIBS ${ROCKSDB_LIBS} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})

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

232
# Main library source code
233

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

440 441 442 443 444 445
option(WITH_LIBRADOS "Build with librados" OFF)
if(WITH_LIBRADOS)
  list(APPEND SOURCES
    utilities/env_librados.cc)
  list(APPEND THIRDPARTY_LIBS rados)
endif()
446

447 448 449 450 451 452 453 454
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 已提交
455

456
add_library(rocksdb${ARTIFACT_SUFFIX} SHARED ${SOURCES})
457 458 459 460 461 462 463 464 465 466 467 468
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)
469 470 471 472
else()
  message(STATUS "JNI library is disabled")
endif()

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

594 595 596 597 598 599 600 601 602 603 604 605 606 607
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})
608

609 610 611 612 613 614 615 616 617
# 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
)
618
# test utilities are only build in debug
619 620
enable_testing()
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND})
621 622
set(TESTUTILLIB testutillib${ARTIFACT_SUFFIX})
add_library(${TESTUTILLIB} STATIC ${TESTUTIL_SOURCE})
623 624 625
if(WIN32)
  set_target_properties(${TESTUTILLIB} PROPERTIES COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/testutillib${ARTIFACT_SUFFIX}.pdb")
endif()
626 627 628 629 630 631 632 633 634 635
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})
636 637 638
    get_filename_component(exename ${sourcefile} NAME_WE)
    add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile}
      $<TARGET_OBJECTS:testharness>)
639 640 641 642 643
    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
      )
644 645 646 647 648
    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()
649 650
endforeach(sourcefile ${TEST_EXES})

651
# C executables must link to a shared object
652
set(C_TESTS db/c_test.c)
653
set(C_TEST_EXES ${C_TESTS})
654

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