CMakeLists.txt 30.8 KB
Newer Older
1 2
# Prerequisites for Windows:
#     This cmake build is for Windows 64-bit only.
D
Dmitri Smirnov 已提交
3 4
#
# Prerequisites:
5
#     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 已提交
6
#     Run the build commands from within the Developer Command Prompt window to have paths to the compiler and runtime libraries set.
7
#     You must have git.exe in your %PATH% environment variable.
D
Dmitri Smirnov 已提交
8 9
#
# To build Rocksdb for Windows is as easy as 1-2-3-4-5:
A
agiardullo 已提交
10
#
11
# 1. Update paths to third-party libraries in thirdparty.inc file
D
Dmitri Smirnov 已提交
12 13 14
# 2. Create a new directory for build artifacts
#        mkdir build
#        cd build
15 16
# 3. Run cmake to generate project files for Windows, add more options to enable required third-party libraries.
#    See thirdparty.inc for more information.
17
#        sample command: 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 32 33
# Linux:
#
# 1. Install a recent toolchain such as devtoolset-3 if you're on a older distro. C++11 required.
# 2. mkdir build; cd build
# 3. cmake ..
# 4. make -j
D
Dmitri Smirnov 已提交
34

35
cmake_minimum_required(VERSION 2.8.12)
D
Dmitri Smirnov 已提交
36 37
project(rocksdb)

38 39 40 41 42 43
if(POLICY CMP0042)
  cmake_policy(SET CMP0042 NEW)
endif()

list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules/")

T
Tamir Duberstein 已提交
44
if(MSVC)
45 46 47
  include(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty.inc)
else()
  option(WITH_JEMALLOC "build with JeMalloc" OFF)
T
Tamir Duberstein 已提交
48 49
  if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
    # FreeBSD has jemaloc as default malloc
50
    # but it does not have all the jemalloc files in include/...
T
Tamir Duberstein 已提交
51
    set(WITH_JEMALLOC ON)
52 53 54 55 56 57
  else()
    if(WITH_JEMALLOC)
      find_package(JeMalloc REQUIRED)
      add_definitions(-DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE)
      include_directories(${JEMALLOC_INCLUDE_DIR})
    endif()
T
Tamir Duberstein 已提交
58
  endif()
J
Jay 已提交
59

60 61 62 63 64 65 66
  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()
J
Jay 已提交
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98

  option(WITH_ZLIB "build with zlib" OFF)
  if(WITH_ZLIB)
    find_package(zlib REQUIRED)
    add_definitions(-DZLIB)
    include_directories(${ZLIB_INCLUDE_DIR})
    list(APPEND THIRDPARTY_LIBS ${ZLIB_LIBRARIES})
  endif()

  option(WITH_BZ2 "build with bzip2" OFF)
  if(WITH_BZ2)
    find_package(bzip2 REQUIRED)
    add_definitions(-DBZIP2)
    include_directories(${BZIP2_INCLUDE_DIR})
    list(APPEND THIRDPARTY_LIBS ${BZIP2_LIBRARIES})
  endif()

  option(WITH_LZ4 "build with lz4" OFF)
  if(WITH_LZ4)
    find_package(lz4 REQUIRED)
    add_definitions(-DLZ4)
    include_directories(${LZ4_INCLUDE_DIR})
    list(APPEND THIRDPARTY_LIBS ${LZ4_LIBRARIES})
  endif()

  option(WITH_ZSTD "build with zstd" OFF)
  if(WITH_ZSTD)
    find_package(zstd REQUIRED)
    add_definitions(-DZSTD)
    include_directories(${ZSTD_INCLUDE_DIR})
    list(APPEND THIRDPARTY_LIBS ${ZSTD_LIBRARIES})
  endif()
99 100
endif()

101
string(TIMESTAMP GIT_DATE_TIME "%Y/%m/%d %H:%M:%S" UTC)
D
Dmitri Smirnov 已提交
102

103 104
find_package(Git)

T
Tamir Duberstein 已提交
105
if(GIT_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git")
106
  if(WIN32)
107
    execute_process(COMMAND $ENV{COMSPEC} /C ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse HEAD OUTPUT_VARIABLE GIT_SHA)
108 109 110
  else()
    execute_process(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse HEAD OUTPUT_VARIABLE GIT_SHA)
  endif()
111
else()
112
  set(GIT_SHA 0)
113 114
endif()

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

T
Tamir Duberstein 已提交
117
if(NOT WIN32)
A
Arun Sharma 已提交
118 119 120 121 122 123 124 125 126 127 128 129 130 131
  execute_process(COMMAND
      "./build_tools/version.sh" "full"
      WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
      OUTPUT_VARIABLE ROCKSDB_VERSION
  )
  string(STRIP "${ROCKSDB_VERSION}" ROCKSDB_VERSION)
  execute_process(COMMAND
      "./build_tools/version.sh" "major"
      WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
      OUTPUT_VARIABLE ROCKSDB_VERSION_MAJOR
  )
  string(STRIP "${ROCKSDB_VERSION_MAJOR}" ROCKSDB_VERSION_MAJOR)
endif()

132 133 134 135 136 137
option(WITH_MD_LIBRARY "build with MD" ON)
if(WIN32 AND MSVC)
  if(WITH_MD_LIBRARY)
    set(RUNTIME_LIBRARY "MD")
  else()
    set(RUNTIME_LIBRARY "MT")
T
Tamir Duberstein 已提交
138
  endif()
139
endif()
T
Tomas Kolda 已提交
140

141 142 143 144 145 146 147 148 149 150
set(BUILD_VERSION_CC ${CMAKE_BINARY_DIR}/build_version.cc)
configure_file(util/build_version.cc.in ${BUILD_VERSION_CC} @ONLY)
add_library(build_version OBJECT ${BUILD_VERSION_CC})
target_include_directories(build_version PRIVATE
  ${CMAKE_CURRENT_SOURCE_DIR}/util)
if(MSVC)
  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 /wd4127 /wd4800 /wd4996 /wd4351")
else()
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wextra -Wall")
O
Orgad Shaneh 已提交
151
  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 -Wno-strict-aliasing")
152 153 154 155 156 157 158 159 160 161 162 163 164 165
  if(MINGW)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-format")
  endif()
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
  if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -fno-omit-frame-pointer")
    include(CheckCXXCompilerFlag)
    CHECK_CXX_COMPILER_FLAG("-momit-leaf-frame-pointer" HAVE_OMIT_LEAF_FRAME_POINTER)
    if(HAVE_OMIT_LEAF_FRAME_POINTER)
      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -momit-leaf-frame-pointer")
    endif()
  endif()
endif()

166 167 168 169 170 171 172
option(PORTABLE "build a portable binary" OFF)
option(FORCE_SSE42 "force building with SSE4.2, even when PORTABLE=ON" OFF)
if(PORTABLE)
  # MSVC does not need a separate compiler flag to enable SSE4.2; if nmmintrin.h
  # is available, it is available by default.
  if(FORCE_SSE42 AND NOT MSVC)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
T
Tomas Kolda 已提交
173
  endif()
T
Tamir Duberstein 已提交
174
else()
175 176 177 178
  if(MSVC)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2")
  else()
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
T
Tamir Duberstein 已提交
179
  endif()
T
Tamir Duberstein 已提交
180 181
endif()

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
set(CMAKE_REQUIRED_FLAGS ${CMAKE_CXX_FLAGS})
include(CheckCXXSourceCompiles)
CHECK_CXX_SOURCE_COMPILES("
#include <cstdint>
#include <nmmintrin.h>
int main() {
  volatile uint32_t x = _mm_crc32_u32(0, 0);
}
" HAVE_SSE42)
if(HAVE_SSE42)
  add_definitions(-DHAVE_SSE42)
elseif(FORCE_SSE42)
  message(FATAL_ERROR "FORCE_SSE42=ON but unable to compile with SSE4.2 enabled")
endif()

CHECK_CXX_SOURCE_COMPILES("
#if defined(_MSC_VER) && !defined(__thread)
#define __thread __declspec(thread)
#endif
int main() {
  static __thread int tls;
}
" HAVE_THREAD_LOCAL)
if(HAVE_THREAD_LOCAL)
  add_definitions(-DROCKSDB_SUPPORT_THREAD_LOCAL)
endif()

209 210 211 212 213 214 215 216 217
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()

218 219 220 221 222 223 224 225 226
option(WITH_ASAN "build with ASAN" OFF)
if(WITH_ASAN)
  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 已提交
227

228 229 230 231 232 233 234 235 236
option(WITH_TSAN "build with TSAN" OFF)
if(WITH_TSAN)
  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread -pie")
  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()
237

238 239
option(WITH_UBSAN "build with UBSAN" OFF)
if(WITH_UBSAN)
240
  add_definitions(-DROCKSDB_UBSAN_RUN)
241 242 243 244 245 246 247
  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 已提交
248

249 250 251 252 253 254 255 256 257
# 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()

O
Orgad Shaneh 已提交
258
if(MSVC)
259 260
  if((${OPTIMIZE_DEBUG} EQUAL 1))
    message(STATUS "Debug optimization is enabled")
T
Tomas Kolda 已提交
261
    set(CMAKE_CXX_FLAGS_DEBUG "/Oxt /${RUNTIME_LIBRARY}d")
262
  else()
T
Tomas Kolda 已提交
263
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /RTC1 /Gm /${RUNTIME_LIBRARY}d")
264
  endif()
T
Tomas Kolda 已提交
265
  set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oxt /Zp8 /Gm- /Gy /${RUNTIME_LIBRARY}")
266 267 268

  set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG")
  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG")
269 270
endif()

271 272 273
if(CMAKE_COMPILER_IS_GNUCXX)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-memcmp")
endif()
D
Dmitri Smirnov 已提交
274

275 276 277 278 279
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 已提交
280

281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305
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)
O
Orgad Shaneh 已提交
306 307 308
  if(MINGW)
    add_definitions(-D_WIN32_WINNT=_WIN32_WINNT_VISTA)
  endif()
309 310 311 312 313 314 315 316 317
endif()

if(NOT WIN32)
  add_definitions(-DROCKSDB_PLATFORM_POSIX -DROCKSDB_LIB_IO_POSIX)
endif()

option(WITH_FALLOCATE "build with fallocate" ON)

if(WITH_FALLOCATE)
318
  set(CMAKE_REQUIRED_FLAGS ${CMAKE_C_FLAGS})
319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337
  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 已提交
338 339 340

include_directories(${PROJECT_SOURCE_DIR})
include_directories(${PROJECT_SOURCE_DIR}/include)
341 342
include_directories(SYSTEM ${PROJECT_SOURCE_DIR}/third-party/gtest-1.7.0/fused-src)
find_package(Threads REQUIRED)
D
Dmitri Smirnov 已提交
343 344 345

add_subdirectory(third-party/gtest-1.7.0/fused-src/gtest)

346
# Main library source code
347

D
Dmitri Smirnov 已提交
348
set(SOURCES
349 350 351
        cache/clock_cache.cc
        cache/lru_cache.cc
        cache/sharded_cache.cc
D
Dmitri Smirnov 已提交
352 353 354
        db/builder.cc
        db/c.cc
        db/column_family.cc
355
        db/compacted_db_impl.cc
D
Dmitri Smirnov 已提交
356
        db/compaction.cc
357
        db/compaction_iterator.cc
D
Dmitri Smirnov 已提交
358 359
        db/compaction_job.cc
        db/compaction_picker.cc
S
Siying Dong 已提交
360
        db/compaction_picker_universal.cc
A
agiardullo 已提交
361
        db/convenience.cc
D
Dmitri Smirnov 已提交
362 363
        db/db_filesnapshot.cc
        db/db_impl.cc
S
Siying Dong 已提交
364 365 366 367
        db/db_impl_write.cc
        db/db_impl_compaction_flush.cc
        db/db_impl_files.cc
        db/db_impl_open.cc
D
Dmitri Smirnov 已提交
368 369 370
        db/db_impl_debug.cc
        db/db_impl_experimental.cc
        db/db_impl_readonly.cc
371
        db/db_info_dumper.cc
D
Dmitri Smirnov 已提交
372
        db/db_iter.cc
373
        db/dbformat.cc
D
Dmitri Smirnov 已提交
374 375
        db/event_helpers.cc
        db/experimental.cc
376
        db/external_sst_file_ingestion_job.cc
D
Dmitri Smirnov 已提交
377 378 379 380 381 382 383
        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
384
        db/malloc_stats.cc
D
Dmitri Smirnov 已提交
385 386 387 388 389
        db/managed_iterator.cc
        db/memtable.cc
        db/memtable_list.cc
        db/merge_helper.cc
        db/merge_operator.cc
390
        db/range_del_aggregator.cc
D
Dmitri Smirnov 已提交
391
        db/repair.cc
392
        db/snapshot_impl.cc
D
Dmitri Smirnov 已提交
393 394 395 396 397 398 399 400 401 402 403
        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
404 405
        env/env.cc
        env/env_chroot.cc
E
Ewout Prangsma 已提交
406
        env/env_encryption.cc
407
        env/env_hdfs.cc
408
        env/mock_env.cc
409
        memtable/alloc_tracker.cc
410 411 412
        memtable/hash_cuckoo_rep.cc
        memtable/hash_linklist_rep.cc
        memtable/hash_skiplist_rep.cc
413 414
        memtable/skiplistrep.cc
        memtable/vectorrep.cc
415
        memtable/write_buffer_manager.cc
416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432
        monitoring/histogram.cc
        monitoring/histogram_windowing.cc
        monitoring/instrumented_mutex.cc
        monitoring/iostats_context.cc
        monitoring/perf_context.cc
        monitoring/perf_level.cc
        monitoring/statistics.cc
        monitoring/thread_status_impl.cc
        monitoring/thread_status_updater.cc
        monitoring/thread_status_util.cc
        monitoring/thread_status_util_debug.cc
        options/cf_options.cc
        options/db_options.cc
        options/options.cc
        options/options_helper.cc
        options/options_parser.cc
        options/options_sanity_check.cc
D
Dmitri Smirnov 已提交
433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449
        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
M
Maysam Yabandeh 已提交
450
        table/index_builder.cc
D
Dmitri Smirnov 已提交
451
        table/iterator.cc
452
        table/merging_iterator.cc
D
Dmitri Smirnov 已提交
453
        table/meta_blocks.cc
M
Maysam Yabandeh 已提交
454
        table/partitioned_filter_block.cc
455
        table/persistent_cache_helper.cc
D
Dmitri Smirnov 已提交
456 457 458 459 460
        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
461
        table/sst_file_writer.cc
D
Dmitri Smirnov 已提交
462 463
        table/table_properties.cc
        table/two_level_iterator.cc
464
        tools/db_bench_tool.cc
465
        tools/dump/db_dump_tool.cc
466 467 468
        tools/ldb_cmd.cc
        tools/ldb_tool.cc
        tools/sst_dump_tool.cc
D
Dmitri Smirnov 已提交
469
        util/arena.cc
470
        util/auto_roll_logger.cc
D
Dmitri Smirnov 已提交
471 472 473 474
        util/bloom.cc
        util/coding.cc
        util/compaction_job_stats_impl.cc
        util/comparator.cc
475
        util/concurrent_arena.cc
D
Dmitri Smirnov 已提交
476
        util/crc32c.cc
477
        util/delete_scheduler.cc
D
Dmitri Smirnov 已提交
478 479
        util/dynamic_bloom.cc
        util/event_logger.cc
480
        util/file_reader_writer.cc
481
        util/file_util.cc
482
        util/filename.cc
D
Dmitri Smirnov 已提交
483 484 485 486
        util/filter_policy.cc
        util/hash.cc
        util/log_buffer.cc
        util/murmurhash.cc
487
        util/random.cc
D
Dmitri Smirnov 已提交
488 489
        util/rate_limiter.cc
        util/slice.cc
490
        util/sst_file_manager_impl.cc
D
Dmitri Smirnov 已提交
491
        util/status.cc
A
agiardullo 已提交
492
        util/status_message.cc
D
Dmitri Smirnov 已提交
493 494 495 496
        util/string_util.cc
        util/sync_point.cc
        util/testutil.cc
        util/thread_local.cc
497
        util/threadpool_imp.cc
S
SherlockNoMad 已提交
498
        util/transaction_test_util.cc
D
Dmitri Smirnov 已提交
499 500
        util/xxhash.cc
        utilities/backupable/backupable_db.cc
501
        utilities/blob_db/blob_db.cc
A
Anirban Rahut 已提交
502
        utilities/blob_db/blob_db_impl.cc
Y
Yi Wu 已提交
503
        utilities/blob_db/blob_dump_tool.cc
504
        utilities/blob_db/blob_file.cc
A
Anirban Rahut 已提交
505 506 507
        utilities/blob_db/blob_log_reader.cc
        utilities/blob_db/blob_log_writer.cc
        utilities/blob_db/blob_log_format.cc
Y
Yi Wu 已提交
508
        utilities/blob_db/ttl_extractor.cc
509 510 511
        utilities/cassandra/cassandra_compaction_filter.cc
        utilities/cassandra/format.cc
        utilities/cassandra/merge_operator.cc
512
        utilities/checkpoint/checkpoint_impl.cc
513 514 515
        utilities/col_buf_decoder.cc
        utilities/col_buf_encoder.cc
        utilities/column_aware_encoding_util.cc
516
        utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc
O
omegaga 已提交
517
        utilities/date_tiered/date_tiered_db_impl.cc
A
Andrew Kryczka 已提交
518
        utilities/debug.cc
D
Dmitri Smirnov 已提交
519 520 521
        utilities/document/document_db.cc
        utilities/document/json_document.cc
        utilities/document/json_document_builder.cc
D
Dmitri Smirnov 已提交
522
        utilities/env_mirror.cc
A
Andrew Kryczka 已提交
523
        utilities/env_timed.cc
D
Dmitri Smirnov 已提交
524 525
        utilities/geodb/geodb_impl.cc
        utilities/leveldb_options/leveldb_options.cc
526
        utilities/lua/rocks_lua_compaction_filter.cc
527
        utilities/memory/memory_util.cc
528 529
        utilities/merge_operators/max.cc
        utilities/merge_operators/put.cc
D
Dmitri Smirnov 已提交
530 531 532
        utilities/merge_operators/string_append/stringappend.cc
        utilities/merge_operators/string_append/stringappend2.cc
        utilities/merge_operators/uint64add.cc
533
        utilities/option_change_migration/option_change_migration.cc
534
        utilities/options/options_util.cc
535 536 537
        utilities/persistent_cache/block_cache_tier.cc
        utilities/persistent_cache/block_cache_tier_file.cc
        utilities/persistent_cache/block_cache_tier_metadata.cc
538
        utilities/persistent_cache/persistent_cache_tier.cc
539
        utilities/persistent_cache/volatile_tier_impl.cc
D
Dmitri Smirnov 已提交
540
        utilities/redis/redis_lists.cc
541
        utilities/simulator_cache/sim_cache.cc
D
Dmitri Smirnov 已提交
542
        utilities/spatialdb/spatial_db.cc
543
        utilities/table_properties_collectors/compact_on_deletion_collector.cc
D
Dmitri Smirnov 已提交
544
        utilities/transactions/optimistic_transaction_db_impl.cc
545
        utilities/transactions/optimistic_transaction.cc
Y
Yi Wu 已提交
546
        utilities/transactions/pessimistic_transaction.cc
M
Maysam Yabandeh 已提交
547
        utilities/transactions/pessimistic_transaction_db.cc
Y
Yi Wu 已提交
548 549
        utilities/transactions/snapshot_checker.cc
        utilities/transactions/transaction_base.cc
A
agiardullo 已提交
550
        utilities/transactions/transaction_db_mutex_impl.cc
A
agiardullo 已提交
551 552
        utilities/transactions/transaction_lock_mgr.cc
        utilities/transactions/transaction_util.cc
553
        utilities/transactions/write_prepared_txn.cc
D
Dmitri Smirnov 已提交
554 555 556
        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
557 558 559 560 561 562 563 564 565
        $<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
D
Dmitri Smirnov 已提交
566
    port/win/win_thread.cc
567 568 569 570
    port/win/xpress_win.cc)
else()
  list(APPEND SOURCES
    port/port_posix.cc
571 572
    env/env_posix.cc
    env/io_posix.cc)
573
endif()
D
Dmitri Smirnov 已提交
574

575 576 577
set(ROCKSDB_STATIC_LIB rocksdb${ARTIFACT_SUFFIX})
set(ROCKSDB_SHARED_LIB rocksdb-shared${ARTIFACT_SUFFIX})
set(ROCKSDB_IMPORT_LIB ${ROCKSDB_SHARED_LIB})
578 579 580 581
if(WIN32)
  set(SYSTEM_LIBS ${SYSTEM_LIBS} Shlwapi.lib Rpcrt4.lib)
  set(LIBS ${ROCKSDB_STATIC_LIB} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
else()
582
  set(SYSTEM_LIBS ${CMAKE_THREAD_LIBS_INIT})
583 584 585 586 587 588 589
  set(LIBS ${ROCKSDB_SHARED_LIB} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})

  add_library(${ROCKSDB_SHARED_LIB} SHARED ${SOURCES})
  target_link_libraries(${ROCKSDB_SHARED_LIB}
    ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
  set_target_properties(${ROCKSDB_SHARED_LIB} PROPERTIES
                        LINKER_LANGUAGE CXX
A
Arun Sharma 已提交
590 591
                        VERSION ${ROCKSDB_VERSION}
                        SOVERSION ${ROCKSDB_VERSION_MAJOR}
592 593 594 595
                        CXX_STANDARD 11
                        OUTPUT_NAME "rocksdb")
endif()

596 597 598 599 600 601
option(WITH_LIBRADOS "Build with librados" OFF)
if(WITH_LIBRADOS)
  list(APPEND SOURCES
    utilities/env_librados.cc)
  list(APPEND THIRDPARTY_LIBS rados)
endif()
602

603 604
add_library(${ROCKSDB_STATIC_LIB} STATIC ${SOURCES})
target_link_libraries(${ROCKSDB_STATIC_LIB}
605 606 607
  ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})

if(WIN32)
608 609 610 611
  add_library(${ROCKSDB_IMPORT_LIB} SHARED ${SOURCES})
  target_link_libraries(${ROCKSDB_IMPORT_LIB}
    ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
  set_target_properties(${ROCKSDB_IMPORT_LIB} PROPERTIES
O
Orgad Shaneh 已提交
612 613 614 615 616 617 618
    COMPILE_DEFINITIONS "ROCKSDB_DLL;ROCKSDB_LIBRARY_EXPORTS")
  if(MSVC)
    set_target_properties(${ROCKSDB_STATIC_LIB} PROPERTIES
      COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_STATIC_LIB}.pdb")
    set_target_properties(${ROCKSDB_IMPORT_LIB} PROPERTIES
      COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_IMPORT_LIB}.pdb")
  endif()
619 620 621 622 623 624
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)
625 626 627 628
else()
  message(STATUS "JNI library is disabled")
endif()

P
Paweł Bylica 已提交
629 630 631 632 633 634 635 636 637 638 639 640 641
# Installation and packaging
if(WIN32)
  option(ROCKSDB_INSTALL_ON_WINDOWS "Enable install target on Windows" OFF)
endif()
if(NOT WIN32 OR ROCKSDB_INSTALL_ON_WINDOWS)
  if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
    if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
      # Change default installation prefix on Linux to /usr
      set(CMAKE_INSTALL_PREFIX /usr CACHE PATH "Install path prefix, prepended onto install directories." FORCE)
    endif()
  endif()

  include(GNUInstallDirs)
642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689
  include(CMakePackageConfigHelpers)

  set(package_config_destination ${CMAKE_INSTALL_LIBDIR}/cmake/rocksdb)

  configure_package_config_file(
    ${CMAKE_SOURCE_DIR}/cmake/RocksDBConfig.cmake.in RocksDBConfig.cmake
    INSTALL_DESTINATION ${package_config_destination}
  )

  write_basic_package_version_file(
    RocksDBConfigVersion.cmake
    VERSION ${ROCKSDB_VERSION}
    COMPATIBILITY SameMajorVersion
  )

  install(DIRECTORY include/rocksdb COMPONENT devel DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")

  install(
    TARGETS ${ROCKSDB_STATIC_LIB}
    EXPORT RocksDBTargets
    COMPONENT devel
    ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
    INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
  )

  install(
    TARGETS ${ROCKSDB_SHARED_LIB}
    EXPORT RocksDBTargets
    COMPONENT runtime
    RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
    INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
  )

  install(
    EXPORT RocksDBTargets
    COMPONENT devel
    DESTINATION ${package_config_destination}
    NAMESPACE RocksDB::
  )

  install(
    FILES
    ${CMAKE_CURRENT_BINARY_DIR}/RocksDBConfig.cmake
    ${CMAKE_CURRENT_BINARY_DIR}/RocksDBConfigVersion.cmake
    COMPONENT devel
    DESTINATION ${package_config_destination}
  )
P
Paweł Bylica 已提交
690 691 692 693
endif()

option(WITH_TESTS "build with tests" ON)
if(WITH_TESTS)
P
Paweł Bylica 已提交
694
  set(TESTS
695 696
        cache/cache_test.cc
        cache/lru_cache_test.cc
D
Dmitri Smirnov 已提交
697 698
        db/column_family_test.cc
        db/compact_files_test.cc
699
        db/compaction_iterator_test.cc
D
Dmitri Smirnov 已提交
700
        db/compaction_job_stats_test.cc
701
        db/compaction_job_test.cc
D
Dmitri Smirnov 已提交
702 703 704 705
        db/compaction_picker_test.cc
        db/comparator_db_test.cc
        db/corruption_test.cc
        db/cuckoo_table_db_test.cc
706
        db/db_basic_test.cc
Y
Yi Wu 已提交
707
        db/db_blob_index_test.cc
708 709
        db/db_block_cache_test.cc
        db/db_bloom_filter_test.cc
710
        db/db_compaction_filter_test.cc
711
        db/db_compaction_test.cc
712
        db/db_dynamic_level_test.cc
713
        db/db_flush_test.cc
714
        db/db_inplace_update_test.cc
715
        db/db_io_failure_test.cc
716
        db/db_iter_test.cc
717
        db/db_iterator_test.cc
718
        db/db_log_iter_test.cc
719
        db/db_memtable_test.cc
720
        db/db_merge_operator_test.cc
721
        db/db_options_test.cc
722
        db/db_properties_test.cc
723 724
        db/db_range_del_test.cc
        db/db_sst_test.cc
725
        db/db_statistics_test.cc
726 727 728
        db/db_table_properties_test.cc
        db/db_tailing_iter_test.cc
        db/db_test.cc
729
        db/db_test2.cc
730
        db/db_universal_compaction_test.cc
S
sdong 已提交
731
        db/db_wal_test.cc
Y
Yi Wu 已提交
732
        db/db_write_test.cc
D
Dmitri Smirnov 已提交
733 734
        db/dbformat_test.cc
        db/deletefile_test.cc
735 736
        db/external_sst_file_basic_test.cc
        db/external_sst_file_test.cc
D
Dmitri Smirnov 已提交
737 738 739 740 741 742
        db/fault_injection_test.cc
        db/file_indexer_test.cc
        db/filename_test.cc
        db/flush_job_test.cc
        db/listener_test.cc
        db/log_test.cc
743
        db/manual_compaction_test.cc
D
Dmitri Smirnov 已提交
744
        db/memtable_list_test.cc
745
        db/merge_helper_test.cc
746
        db/merge_test.cc
747
        db/options_file_test.cc
D
Dmitri Smirnov 已提交
748 749 750
        db/perf_context_test.cc
        db/plain_table_db_test.cc
        db/prefix_test.cc
A
Andrew Kryczka 已提交
751
        db/repair_test.cc
D
Dmitri Smirnov 已提交
752 753 754 755 756 757 758 759
        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
760 761 762
        env/env_basic_test.cc
        env/env_test.cc
        env/mock_env_test.cc
763 764
        memtable/inlineskiplist_test.cc
        memtable/skiplist_test.cc
765
        memtable/write_buffer_manager_test.cc
766 767 768 769 770
        monitoring/histogram_test.cc
        monitoring/iostats_context_test.cc
        monitoring/statistics_test.cc
        options/options_settable_test.cc
        options/options_test.cc
D
Dmitri Smirnov 已提交
771 772 773 774 775 776 777
        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
778
        tools/ldb_cmd_test.cc
D
Dmitri Smirnov 已提交
779
        tools/reduce_levels_test.cc
780
        tools/sst_dump_test.cc
D
Dmitri Smirnov 已提交
781
        util/arena_test.cc
782
        util/auto_roll_logger_test.cc
D
Dmitri Smirnov 已提交
783 784 785 786
        util/autovector_test.cc
        util/bloom_test.cc
        util/coding_test.cc
        util/crc32c_test.cc
787
        util/delete_scheduler_test.cc
D
Dmitri Smirnov 已提交
788 789
        util/dynamic_bloom_test.cc
        util/event_logger_test.cc
790
        util/file_reader_writer_test.cc
791
        util/filelock_test.cc
792
        util/hash_test.cc
793
        util/heap_test.cc
D
Dmitri Smirnov 已提交
794 795
        util/rate_limiter_test.cc
        util/slice_transform_test.cc
A
Anirban Rahut 已提交
796
        util/timer_queue_test.cc
D
Dmitri Smirnov 已提交
797 798 799
        util/thread_list_test.cc
        util/thread_local_test.cc
        utilities/backupable/backupable_db_test.cc
Y
Yi Wu 已提交
800
        utilities/blob_db/blob_db_test.cc
801 802 803 804
        utilities/cassandra/cassandra_functional_test.cc
        utilities/cassandra/cassandra_format_test.cc
        utilities/cassandra/cassandra_row_merge_test.cc
        utilities/cassandra/cassandra_serialize_test.cc
D
Dmitri Smirnov 已提交
805
        utilities/checkpoint/checkpoint_test.cc
806
        utilities/column_aware_encoding_test.cc
O
omegaga 已提交
807
        utilities/date_tiered/date_tiered_test.cc
D
Dmitri Smirnov 已提交
808 809 810
        utilities/document/document_db_test.cc
        utilities/document/json_document_test.cc
        utilities/geodb/geodb_test.cc
811
        utilities/lua/rocks_lua_test.cc
812
        utilities/memory/memory_test.cc
D
Dmitri Smirnov 已提交
813
        utilities/merge_operators/string_append/stringappend_test.cc
814
        utilities/object_registry_test.cc
815
        utilities/option_change_migration/option_change_migration_test.cc
Y
yuslepukhin 已提交
816
        utilities/options/options_util_test.cc
817
        utilities/persistent_cache/hash_table_test.cc
818
        utilities/persistent_cache/persistent_cache_test.cc
D
Dmitri Smirnov 已提交
819 820
        utilities/redis/redis_lists_test.cc
        utilities/spatialdb/spatial_db_test.cc
821
        utilities/simulator_cache/sim_cache_test.cc
822
        utilities/table_properties_collectors/compact_on_deletion_collector_test.cc
D
Dmitri Smirnov 已提交
823
        utilities/transactions/optimistic_transaction_test.cc
A
agiardullo 已提交
824
        utilities/transactions/transaction_test.cc
825
        utilities/transactions/write_prepared_transaction_test.cc
D
Dmitri Smirnov 已提交
826 827
        utilities/ttl/ttl_test.cc
        utilities/write_batch_with_index/write_batch_with_index_test.cc
P
Paweł Bylica 已提交
828 829 830 831
  )
  if(WITH_LIBRADOS)
    list(APPEND TESTS utilities/env_librados_test.cc)
  endif()
832

P
Paweł Bylica 已提交
833 834 835 836 837 838 839 840 841
  set(BENCHMARKS
    cache/cache_bench.cc
    memtable/memtablerep_bench.cc
    tools/db_bench.cc
    table/table_reader_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})
842 843 844
    get_filename_component(exename ${sourcefile} NAME_WE)
    add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile}
      $<TARGET_OBJECTS:testharness>)
P
Paweł Bylica 已提交
845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903
    target_link_libraries(${exename}${ARTIFACT_SUFFIX} gtest ${LIBS})
  endforeach(sourcefile ${BENCHMARKS})

  # 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
      monitoring/thread_status_updater_debug.cc
      table/mock_table.cc
      util/fault_injection_test_env.cc
      utilities/cassandra/test_utils.cc
  )
  # test utilities are only build in debug
  enable_testing()
  add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND})
  set(TESTUTILLIB testutillib${ARTIFACT_SUFFIX})
  add_library(${TESTUTILLIB} STATIC ${TESTUTIL_SOURCE})
  if(MSVC)
    set_target_properties(${TESTUTILLIB} PROPERTIES COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/testutillib${ARTIFACT_SUFFIX}.pdb")
  endif()
  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})
      get_filename_component(exename ${sourcefile} NAME_WE)
      add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile}
        $<TARGET_OBJECTS:testharness>)
      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} testutillib${ARTIFACT_SUFFIX} gtest ${LIBS})
      if(NOT "${exename}" MATCHES "db_sanity_test")
        add_test(NAME ${exename} COMMAND ${exename}${ARTIFACT_SUFFIX})
        add_dependencies(check ${exename}${ARTIFACT_SUFFIX})
      endif()
  endforeach(sourcefile ${TEST_EXES})

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

  foreach(sourcefile ${C_TEST_EXES})
      string(REPLACE ".c" "" exename ${sourcefile})
      string(REGEX REPLACE "^((.+)/)+" "" exename ${exename})
      add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile})
      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_IMPORT_LIB} testutillib${ARTIFACT_SUFFIX})
904 905
      add_test(NAME ${exename} COMMAND ${exename}${ARTIFACT_SUFFIX})
      add_dependencies(check ${exename}${ARTIFACT_SUFFIX})
P
Paweł Bylica 已提交
906
  endforeach(sourcefile ${C_TEST_EXES})
P
Paweł Bylica 已提交
907
endif()
A
Arun Sharma 已提交
908

P
Paweł Bylica 已提交
909 910 911
option(WITH_TOOLS "build with tools" ON)
if(WITH_TOOLS)
  add_subdirectory(tools)
A
Arun Sharma 已提交
912
endif()