CMakeLists.txt 23.5 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
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()
46 47 48 49 50
  if(CMAKE_SYSTEM_NAME STEQUAL "FreeBSD")
    # FreeBSD has jemaloc as default malloc
    add_definitions(-DROCKSDB_JEMALLOC)
    set(WITH_JEMALLOC, ON)
  endif()  
51 52 53 54 55 56 57 58 59 60 61 62 63 64
  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}")
65
  set(GIT_DATE_TIME "${DATE} ${TIME}")
66 67 68
else()
  execute_process(COMMAND date "+%Y/%m/%d %H:%M:%S" OUTPUT_VARIABLE DATETIME)
  string(REGEX REPLACE "\n" "" DATETIME ${DATETIME})
69
  set(GIT_DATE_TIME "${DATETIME}")
70
endif()
D
Dmitri Smirnov 已提交
71

72 73 74
find_package(Git)

if (GIT_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git")
75
  if(WIN32)
76
    execute_process(COMMAND $ENV{COMSPEC} /C ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse HEAD OUTPUT_VARIABLE GIT_SHA)
77 78 79
  else()
    execute_process(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse HEAD OUTPUT_VARIABLE GIT_SHA)
  endif()
80
else()
81
  set(GIT_SHA 0)
82 83
endif()

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

86
set(BUILD_VERSION_CC ${CMAKE_BINARY_DIR}/build_version.cc)
87
configure_file(util/build_version.cc.in ${BUILD_VERSION_CC} @ONLY)
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")

94
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /FC /d2Zi+ /W3 /wd4127 /wd4800 /wd4996 /wd4351")
95
else()
96
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wextra -Wall")
97 98
  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")
99
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -momit-leaf-frame-pointer")
100
endif()
D
Dmitri Smirnov 已提交
101

102 103 104 105 106 107 108 109 110
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()

111 112 113 114 115 116 117 118 119 120
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 已提交
121

122 123 124 125 126 127 128 129 130 131
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()
132

133 134 135 136 137 138 139 140 141
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 已提交
142

143 144 145 146 147 148 149 150 151
# 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()

152 153 154 155 156 157 158 159 160 161 162
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")
163 164
endif()

165 166 167
if(CMAKE_COMPILER_IS_GNUCXX)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-memcmp")
endif()
D
Dmitri Smirnov 已提交
168

169 170 171 172 173
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 已提交
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 223 224 225 226 227
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 已提交
228 229 230

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

233 234 235 236 237 238
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 已提交
239

240
set(ROCKSDB_LIBS rocksdblib${ARTIFACT_SUFFIX})
D
Dmitri Smirnov 已提交
241 242 243
set(LIBS ${ROCKSDB_LIBS} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})

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

246
# Main library source code
247

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

454 455 456 457 458 459
option(WITH_LIBRADOS "Build with librados" OFF)
if(WITH_LIBRADOS)
  list(APPEND SOURCES
    utilities/env_librados.cc)
  list(APPEND THIRDPARTY_LIBS rados)
endif()
460

461 462 463 464 465 466 467 468
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 已提交
469

470
add_library(rocksdb${ARTIFACT_SUFFIX} SHARED ${SOURCES})
471 472 473 474 475 476 477 478 479 480 481 482
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)
483 484 485 486
else()
  message(STATUS "JNI library is disabled")
endif()

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

609 610 611 612 613 614 615 616 617 618 619 620 621 622
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})
623

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

666
# C executables must link to a shared object
667
set(C_TESTS db/c_test.c)
668
set(C_TEST_EXES ${C_TESTS})
669

670
foreach(sourcefile ${C_TEST_EXES})
671 672 673
    string(REPLACE ".c" "" exename ${sourcefile})
    string(REGEX REPLACE "^((.+)/)+" "" exename ${exename})
    add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile})
674 675 676 677 678 679
    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})
680 681
    add_test(NAME ${exename} COMMAND ${exename}${ARTIFACT_SUFFIX})
    add_dependencies(check ${exename}${ARTIFACT_SUFFIX})
682
endforeach(sourcefile ${C_TEST_EXES})