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
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
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")

89
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /FC /d2Zi+ /W3 /wd4127 /wd4800 /wd4996 /wd4351")
90
else()
91
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wextra -Wall")
92 93
  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
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()

106 107 108 109 110 111 112 113 114 115
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 已提交
116

117 118 119 120 121 122 123 124 125 126
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()
127

128 129 130 131 132 133 134 135 136
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 已提交
137

138 139 140 141 142 143 144 145 146
# 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()

147 148 149 150 151 152 153 154 155 156 157
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")
158 159
endif()

160 161 162
if(CMAKE_COMPILER_IS_GNUCXX)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-memcmp")
endif()
D
Dmitri Smirnov 已提交
163

164 165 166 167 168
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 已提交
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 219 220 221 222
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 已提交
223 224 225

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

228 229 230 231 232 233
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 已提交
234

235
set(ROCKSDB_LIBS rocksdblib${ARTIFACT_SUFFIX})
D
Dmitri Smirnov 已提交
236 237 238
set(LIBS ${ROCKSDB_LIBS} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})

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

241
# Main library source code
242

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

449 450 451 452 453 454
option(WITH_LIBRADOS "Build with librados" OFF)
if(WITH_LIBRADOS)
  list(APPEND SOURCES
    utilities/env_librados.cc)
  list(APPEND THIRDPARTY_LIBS rados)
endif()
455

456 457 458 459 460 461 462 463
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 已提交
464

465
add_library(rocksdb${ARTIFACT_SUFFIX} SHARED ${SOURCES})
466 467 468 469 470 471 472 473 474 475 476 477
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)
478 479 480 481
else()
  message(STATUS "JNI library is disabled")
endif()

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

603 604 605 606 607 608 609 610 611 612 613 614 615 616
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})
617

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

660
# C executables must link to a shared object
661
set(C_TESTS db/c_test.c)
662
set(C_TEST_EXES ${C_TESTS})
663

664
foreach(sourcefile ${C_TEST_EXES})
665 666 667
    string(REPLACE ".c" "" exename ${sourcefile})
    string(REGEX REPLACE "^((.+)/)+" "" exename ${exename})
    add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile})
668 669 670 671 672 673
    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})
674 675
    add_test(NAME ${exename} COMMAND ${exename}${ARTIFACT_SUFFIX})
    add_dependencies(check ${exename}${ARTIFACT_SUFFIX})
676
endforeach(sourcefile ${C_TEST_EXES})