CMakeLists.txt 23.7 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()
K
Kefu Chai 已提交
46
  if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
47 48
    # FreeBSD has jemaloc as default malloc
    add_definitions(-DROCKSDB_JEMALLOC)
K
Kefu Chai 已提交
49
    set(WITH_JEMALLOC ON)
I
Igor Canadi 已提交
50
  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
        utilities/geodb/geodb_impl.cc
        utilities/leveldb_options/leveldb_options.cc
405
        utilities/lua/rocks_lua_compaction_filter.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_merge_operator_test.cc
506
        db/db_options_test.cc
507 508 509 510
        db/db_properties_test.cc
        db/db_table_properties_test.cc
        db/db_tailing_iter_test.cc
        db/db_test.cc
511
        db/db_test2.cc
512
        db/db_block_cache_test.cc
Y
Yi Wu 已提交
513
        db/db_bloom_filter_test.cc
514
        db/db_flush_test.cc
Y
Yi Wu 已提交
515
        db/db_iterator_test.cc
516
        db/db_range_del_test.cc
Y
Yi Wu 已提交
517
        db/db_sst_test.cc
518
        db/external_sst_file_test.cc
519
        db/db_universal_compaction_test.cc
S
sdong 已提交
520
        db/db_wal_test.cc
D
Dmitri Smirnov 已提交
521 522 523 524 525 526
        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 已提交
527
        db/inlineskiplist_test.cc
D
Dmitri Smirnov 已提交
528 529
        db/listener_test.cc
        db/log_test.cc
530
        db/manual_compaction_test.cc
D
Dmitri Smirnov 已提交
531 532
        db/memtable_list_test.cc
        db/merge_test.cc
533
        db/merge_helper_test.cc
534
        db/options_file_test.cc
D
Dmitri Smirnov 已提交
535 536 537
        db/perf_context_test.cc
        db/plain_table_db_test.cc
        db/prefix_test.cc
A
Andrew Kryczka 已提交
538
        db/repair_test.cc
D
Dmitri Smirnov 已提交
539 540 541 542 543 544 545 546 547
        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 已提交
548
        db/db_io_failure_test.cc
D
Dmitri Smirnov 已提交
549 550 551 552 553 554 555
        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
556
        tools/ldb_cmd_test.cc
D
Dmitri Smirnov 已提交
557
        tools/reduce_levels_test.cc
558
        tools/sst_dump_test.cc
D
Dmitri Smirnov 已提交
559 560 561 562 563 564
        util/arena_test.cc
        util/autovector_test.cc
        util/bloom_test.cc
        util/cache_test.cc
        util/coding_test.cc
        util/crc32c_test.cc
565
        util/delete_scheduler_test.cc
D
Dmitri Smirnov 已提交
566
        util/dynamic_bloom_test.cc
567
        util/env_basic_test.cc
D
Dmitri Smirnov 已提交
568 569 570
        util/env_test.cc
        util/event_logger_test.cc
        util/filelock_test.cc
571
        util/file_reader_writer_test.cc
572
        util/heap_test.cc
D
Dmitri Smirnov 已提交
573
        util/histogram_test.cc
574
        util/iostats_context_test.cc
Y
Yi Wu 已提交
575
        util/lru_cache_test.cc
D
Dmitri Smirnov 已提交
576
        util/mock_env_test.cc
577
        util/options_settable_test.cc
D
Dmitri Smirnov 已提交
578 579 580
        util/options_test.cc
        util/rate_limiter_test.cc
        util/slice_transform_test.cc
581
        util/statistics_test.cc
D
Dmitri Smirnov 已提交
582 583 584
        util/thread_list_test.cc
        util/thread_local_test.cc
        utilities/backupable/backupable_db_test.cc
585
        utilities/blob_db/blob_db_test.cc
D
Dmitri Smirnov 已提交
586
        utilities/checkpoint/checkpoint_test.cc
O
omegaga 已提交
587
        utilities/date_tiered/date_tiered_test.cc
D
Dmitri Smirnov 已提交
588 589
        utilities/document/document_db_test.cc
        utilities/document/json_document_test.cc
590
        utilities/env_registry_test.cc
D
Dmitri Smirnov 已提交
591
        utilities/geodb/geodb_test.cc
592
        utilities/memory/memory_test.cc
D
Dmitri Smirnov 已提交
593
        utilities/merge_operators/string_append/stringappend_test.cc
594
        utilities/option_change_migration/option_change_migration_test.cc
Y
yuslepukhin 已提交
595
        utilities/options/options_util_test.cc
596
        utilities/persistent_cache/hash_table_test.cc
597
        utilities/persistent_cache/persistent_cache_test.cc
D
Dmitri Smirnov 已提交
598 599
        utilities/redis/redis_lists_test.cc
        utilities/spatialdb/spatial_db_test.cc
600
        utilities/table_properties_collectors/compact_on_deletion_collector_test.cc
D
Dmitri Smirnov 已提交
601
        utilities/transactions/optimistic_transaction_test.cc
A
agiardullo 已提交
602
        utilities/transactions/transaction_test.cc
D
Dmitri Smirnov 已提交
603 604
        utilities/ttl/ttl_test.cc
        utilities/write_batch_with_index/write_batch_with_index_test.cc
O
omegaga 已提交
605
        utilities/column_aware_encoding_test.cc
606
        utilities/lua/rocks_lua_test.cc
D
Dmitri Smirnov 已提交
607
)
608 609 610
if(WITH_LIBRADOS)
  list(APPEND TESTS utilities/env_librados_test.cc)
endif()
D
Dmitri Smirnov 已提交
611

612 613 614 615 616 617 618 619 620 621 622 623 624 625
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})
626

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

669
# C executables must link to a shared object
670
set(C_TESTS db/c_test.c)
671
set(C_TEST_EXES ${C_TESTS})
672

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