CMakeLists.txt 23.4 KB
Newer Older
1
# This cmake build is for Windows 64-bit only.
D
Dmitri Smirnov 已提交
2 3
#
# Prerequisites:
4
#     You must have Visual Studio 2013 Update 4 installed. 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 17
#        sample command: cmake -G "Visual Studio 12 Win64" -DGFLAGS=1 -DSNAPPY=1 -DJEMALLOC=1 -DJNI=1 ..
#        OR for VS Studio 15 cmake -G "Visual Studio 14 Win64" -DGFLAGS=1 -DSNAPPY=1 -DJEMALLOC=1 -DJNI=1 ..
18 19 20 21 22 23 24
# 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.
#
25
# 5. And release mode (/m[:<N>] is also supported)
26
#        msbuild rocksdb.sln /p:Configuration=Release
D
Dmitri Smirnov 已提交
27 28 29 30 31
#

cmake_minimum_required(VERSION 2.6)
project(rocksdb)

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 60
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}")
61
  set(GIT_DATE_TIME "${DATE} ${TIME}")
62 63 64
else()
  execute_process(COMMAND date "+%Y/%m/%d %H:%M:%S" OUTPUT_VARIABLE DATETIME)
  string(REGEX REPLACE "\n" "" DATETIME ${DATETIME})
65
  set(GIT_DATE_TIME "${DATETIME}")
66
endif()
D
Dmitri Smirnov 已提交
67

68 69 70
find_package(Git)

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

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

82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
set(BUILD_VERSION_CC ${CMAKE_BINARY_DIR}/build_version.cc)
file(GENERATE OUTPUT ${BUILD_VERSION_CC} CONTENT
  "#include \"build_version.h\"
const char* rocksdb_build_git_sha = \"rocksdb_build_git_sha:${GIT_SHA}\";
const char* rocksdb_build_git_datetime = \"rocksdb_build_git_datetime:${GIT_DATE_TIME}\";
const char* rocksdb_build_compile_date = __DATE__;
")
add_library(build_version OBJECT ${BUILD_VERSION_CC})
target_include_directories(build_version PRIVATE
  ${CMAKE_CURRENT_SOURCE_DIR}/util)
if(WIN32)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi /nologo  /EHsc /GS /Gd /GR /GF /fp:precise /Zc:wchar_t /Zc:forScope /errorReport:queue")

  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /FC /d2Zi+ /W3 /WX /wd4127 /wd4800 /wd4996 /wd4351")
else()
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wextra -Wall -Werror")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -fno-omit-frame-pointer -momit-leaf-frame-pointer")
endif()
D
Dmitri Smirnov 已提交
102

103 104 105 106 107 108 109 110 111 112
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 已提交
113

114 115 116 117 118 119 120 121 122 123
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()
124

125 126 127 128 129 130 131 132 133
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 已提交
134

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

144 145 146 147 148 149 150 151 152 153 154
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")
155 156
endif()

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

161 162 163 164 165
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 已提交
166

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

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

225 226 227 228 229 230
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 已提交
231

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

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

238
# Main library source code
239

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

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

452 453 454 455 456 457 458 459
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 已提交
460

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

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

599 600 601 602 603 604 605 606 607 608 609 610 611 612
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})
613

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

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

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