]> git.proxmox.com Git - ceph.git/blame - ceph/src/rocksdb/CMakeLists.txt
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / rocksdb / CMakeLists.txt
CommitLineData
7c673cae
FG
1# Prerequisites for Windows:
2# This cmake build is for Windows 64-bit only.
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.
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.
8#
9# To build Rocksdb for Windows is as easy as 1-2-3-4-5:
10#
11# 1. Update paths to third-party libraries in thirdparty.inc file
12# 2. Create a new directory for build artifacts
13# mkdir build
14# cd build
15# 3. Run cmake to generate project files for Windows, add more options to enable required third-party libraries.
16# See thirdparty.inc for more information.
11fdf7f2 17# sample command: cmake -G "Visual Studio 15 Win64" -DWITH_GFLAGS=1 -DWITH_SNAPPY=1 -DWITH_JEMALLOC=1 -DWITH_JNI=1 ..
7c673cae 18# 4. Then build the project in debug mode (you may want to add /m[:<N>] flag to run msbuild in <N> parallel threads
11fdf7f2 19# or simply /m to use all avail cores)
7c673cae
FG
20# msbuild rocksdb.sln
21#
22# rocksdb.sln build features exclusions of test only code in Release. If you build ALL_BUILD then everything
23# will be attempted but test only code does not build in Release mode.
24#
25# 5. And release mode (/m[:<N>] is also supported)
26# msbuild rocksdb.sln /p:Configuration=Release
27#
28# Linux:
29#
30# 1. Install a recent toolchain such as devtoolset-3 if you're on a older distro. C++11 required.
31# 2. mkdir build; cd build
32# 3. cmake ..
33# 4. make -j
34
11fdf7f2 35cmake_minimum_required(VERSION 2.8.12)
7c673cae 36project(rocksdb)
11fdf7f2
TL
37enable_language(CXX)
38enable_language(C)
39enable_language(ASM)
7c673cae
FG
40
41if(POLICY CMP0042)
42 cmake_policy(SET CMP0042 NEW)
43endif()
44
11fdf7f2 45list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/modules/")
7c673cae 46
11fdf7f2
TL
47option(WITH_JEMALLOC "build with JeMalloc" OFF)
48option(WITH_SNAPPY "build with SNAPPY" OFF)
49option(WITH_LZ4 "build with lz4" OFF)
50option(WITH_ZLIB "build with zlib" OFF)
51option(WITH_ZSTD "build with zstd" OFF)
7c673cae 52if(MSVC)
11fdf7f2
TL
53 # Defaults currently different for GFLAGS.
54 # We will address find_package work a little later
55 option(WITH_GFLAGS "build with GFlags" OFF)
56 option(WITH_XPRESS "build with windows built in compression" OFF)
7c673cae
FG
57 include(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty.inc)
58else()
7c673cae 59 if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
11fdf7f2 60 # FreeBSD has jemalloc as default malloc
7c673cae
FG
61 # but it does not have all the jemalloc files in include/...
62 set(WITH_JEMALLOC ON)
63 else()
64 if(WITH_JEMALLOC)
65 find_package(JeMalloc REQUIRED)
66 add_definitions(-DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE)
67 include_directories(${JEMALLOC_INCLUDE_DIR})
11fdf7f2 68 list(APPEND THIRDPARTY_LIBS ${JEMALLOC_LIBRARIES})
7c673cae
FG
69 endif()
70 endif()
11fdf7f2
TL
71
72 # No config file for this
73 option(WITH_GFLAGS "build with GFlags" ON)
74 if(WITH_GFLAGS)
75 find_package(gflags)
76 if(gflags_FOUND)
77 add_definitions(-DGFLAGS=1)
78 include_directories(${gflags_INCLUDE_DIR})
79 list(APPEND THIRDPARTY_LIBS ${gflags_LIBRARIES})
80 endif()
81 endif()
82
7c673cae
FG
83 if(WITH_SNAPPY)
84 find_package(snappy REQUIRED)
85 add_definitions(-DSNAPPY)
86 include_directories(${SNAPPY_INCLUDE_DIR})
87 list(APPEND THIRDPARTY_LIBS ${SNAPPY_LIBRARIES})
88 endif()
7c673cae 89
11fdf7f2
TL
90 if(WITH_ZLIB)
91 find_package(zlib REQUIRED)
92 add_definitions(-DZLIB)
93 include_directories(${ZLIB_INCLUDE_DIR})
94 list(APPEND THIRDPARTY_LIBS ${ZLIB_LIBRARIES})
95 endif()
96
97 option(WITH_BZ2 "build with bzip2" OFF)
98 if(WITH_BZ2)
99 find_package(bzip2 REQUIRED)
100 add_definitions(-DBZIP2)
101 include_directories(${BZIP2_INCLUDE_DIR})
102 list(APPEND THIRDPARTY_LIBS ${BZIP2_LIBRARIES})
103 endif()
104
105 if(WITH_LZ4)
106 find_package(lz4 REQUIRED)
107 add_definitions(-DLZ4)
108 include_directories(${LZ4_INCLUDE_DIR})
109 list(APPEND THIRDPARTY_LIBS ${LZ4_LIBRARIES})
110 endif()
111
112 if(WITH_ZSTD)
113 find_package(zstd REQUIRED)
114 add_definitions(-DZSTD)
115 include_directories(${ZSTD_INCLUDE_DIR})
116 list(APPEND THIRDPARTY_LIBS ${ZSTD_LIBRARIES})
117 endif()
7c673cae
FG
118endif()
119
11fdf7f2
TL
120string(TIMESTAMP GIT_DATE_TIME "%Y/%m/%d %H:%M:%S" UTC)
121
7c673cae
FG
122find_package(Git)
123
124if(GIT_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git")
125 if(WIN32)
126 execute_process(COMMAND $ENV{COMSPEC} /C ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse HEAD OUTPUT_VARIABLE GIT_SHA)
127 else()
128 execute_process(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse HEAD OUTPUT_VARIABLE GIT_SHA)
129 endif()
130else()
131 set(GIT_SHA 0)
132endif()
133
134string(REGEX REPLACE "[^0-9a-f]+" "" GIT_SHA "${GIT_SHA}")
135
7c673cae 136
11fdf7f2
TL
137# Read rocksdb version from version.h header file.
138file(READ include/rocksdb/version.h version_header_file)
139string(REGEX MATCH "#define ROCKSDB_MAJOR ([0-9]+)" _ ${version_header_file})
140set(ROCKSDB_VERSION_MAJOR ${CMAKE_MATCH_1})
141string(REGEX MATCH "#define ROCKSDB_MINOR ([0-9]+)" _ ${version_header_file})
142set(ROCKSDB_VERSION_MINOR ${CMAKE_MATCH_1})
143string(REGEX MATCH "#define ROCKSDB_PATCH ([0-9]+)" _ ${version_header_file})
144set(ROCKSDB_VERSION_PATCH ${CMAKE_MATCH_1})
145set(ROCKSDB_VERSION ${ROCKSDB_VERSION_MAJOR}.${ROCKSDB_VERSION_MINOR}.${ROCKSDB_VERSION_PATCH})
7c673cae 146
11fdf7f2
TL
147
148option(WITH_MD_LIBRARY "build with MD" ON)
149if(WIN32 AND MSVC)
150 if(WITH_MD_LIBRARY)
151 set(RUNTIME_LIBRARY "MD")
152 else()
153 set(RUNTIME_LIBRARY "MT")
7c673cae
FG
154 endif()
155endif()
156
157set(BUILD_VERSION_CC ${CMAKE_BINARY_DIR}/build_version.cc)
158configure_file(util/build_version.cc.in ${BUILD_VERSION_CC} @ONLY)
159add_library(build_version OBJECT ${BUILD_VERSION_CC})
160target_include_directories(build_version PRIVATE
161 ${CMAKE_CURRENT_SOURCE_DIR}/util)
162if(MSVC)
163 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi /nologo /EHsc /GS /Gd /GR /GF /fp:precise /Zc:wchar_t /Zc:forScope /errorReport:queue")
11fdf7f2 164 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /FC /d2Zi+ /W4 /wd4127 /wd4800 /wd4996 /wd4351 /wd4100 /wd4204 /wd4324")
7c673cae
FG
165else()
166 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wextra -Wall")
11fdf7f2 167 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")
7c673cae
FG
168 if(MINGW)
169 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-format")
170 endif()
171 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
172 if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
11fdf7f2 173 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer")
7c673cae
FG
174 include(CheckCXXCompilerFlag)
175 CHECK_CXX_COMPILER_FLAG("-momit-leaf-frame-pointer" HAVE_OMIT_LEAF_FRAME_POINTER)
176 if(HAVE_OMIT_LEAF_FRAME_POINTER)
177 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -momit-leaf-frame-pointer")
178 endif()
179 endif()
180endif()
181
11fdf7f2
TL
182include(CheckCCompilerFlag)
183if(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le")
184 CHECK_C_COMPILER_FLAG("-maltivec" HAS_ALTIVEC)
185 if(HAS_ALTIVEC)
186 message(STATUS " HAS_ALTIVEC yes")
187 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maltivec")
188 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maltivec")
189 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mcpu=power8")
190 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=power8")
191 endif(HAS_ALTIVEC)
192endif(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le")
193
194option(PORTABLE "build a portable binary" OFF)
195option(FORCE_SSE42 "force building with SSE4.2, even when PORTABLE=ON" OFF)
196if(PORTABLE)
197 # MSVC does not need a separate compiler flag to enable SSE4.2; if nmmintrin.h
198 # is available, it is available by default.
199 if(FORCE_SSE42 AND NOT MSVC)
200 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2 -mpclmul")
201 endif()
202else()
203 if(MSVC)
204 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2")
205 else()
206 if(NOT HAVE_POWER8)
207 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
208 endif()
209 endif()
210endif()
211
94b18763
FG
212include(CheckCXXSourceCompiles)
213if(NOT MSVC)
11fdf7f2 214 set(CMAKE_REQUIRED_FLAGS "-msse4.2 -mpclmul")
94b18763
FG
215endif()
216CHECK_CXX_SOURCE_COMPILES("
217#include <cstdint>
218#include <nmmintrin.h>
11fdf7f2 219#include <wmmintrin.h>
94b18763
FG
220int main() {
221 volatile uint32_t x = _mm_crc32_u32(0, 0);
11fdf7f2
TL
222 const auto a = _mm_set_epi64x(0, 0);
223 const auto b = _mm_set_epi64x(0, 0);
224 const auto c = _mm_clmulepi64_si128(a, b, 0x00);
225 auto d = _mm_cvtsi128_si64(c);
94b18763
FG
226}
227" HAVE_SSE42)
228unset(CMAKE_REQUIRED_FLAGS)
11fdf7f2
TL
229if(HAVE_SSE42)
230 add_definitions(-DHAVE_SSE42)
231 add_definitions(-DHAVE_PCLMUL)
232elseif(FORCE_SSE42)
233 message(FATAL_ERROR "FORCE_SSE42=ON but unable to compile with SSE4.2 enabled")
234endif()
235
236CHECK_CXX_SOURCE_COMPILES("
237#if defined(_MSC_VER) && !defined(__thread)
238#define __thread __declspec(thread)
239#endif
240int main() {
241 static __thread int tls;
242}
243" HAVE_THREAD_LOCAL)
244if(HAVE_THREAD_LOCAL)
245 add_definitions(-DROCKSDB_SUPPORT_THREAD_LOCAL)
94b18763
FG
246endif()
247
7c673cae
FG
248option(FAIL_ON_WARNINGS "Treat compile warnings as errors" ON)
249if(FAIL_ON_WARNINGS)
250 if(MSVC)
251 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
252 else() # assume GCC
253 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
254 endif()
255endif()
256
257option(WITH_ASAN "build with ASAN" OFF)
258if(WITH_ASAN)
7c673cae
FG
259 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
260 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
261 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
262 if(WITH_JEMALLOC)
263 message(FATAL "ASAN does not work well with JeMalloc")
264 endif()
265endif()
266
267option(WITH_TSAN "build with TSAN" OFF)
268if(WITH_TSAN)
269 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread -pie")
7c673cae
FG
270 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -fPIC")
271 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread -fPIC")
272 if(WITH_JEMALLOC)
273 message(FATAL "TSAN does not work well with JeMalloc")
274 endif()
275endif()
276
277option(WITH_UBSAN "build with UBSAN" OFF)
278if(WITH_UBSAN)
11fdf7f2 279 add_definitions(-DROCKSDB_UBSAN_RUN)
7c673cae
FG
280 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined")
281 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
282 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined")
283 if(WITH_JEMALLOC)
284 message(FATAL "UBSAN does not work well with JeMalloc")
285 endif()
286endif()
287
11fdf7f2
TL
288option(WITH_NUMA "build with NUMA policy support" OFF)
289if(WITH_NUMA)
290 find_package(NUMA REQUIRED)
291 add_definitions(-DNUMA)
292 include_directories(${NUMA_INCLUDE_DIR})
293 list(APPEND THIRDPARTY_LIBS ${NUMA_LIBRARIES})
294endif()
7c673cae 295
11fdf7f2
TL
296option(WITH_TBB "build with Threading Building Blocks (TBB)" OFF)
297if(WITH_TBB)
298 find_package(TBB REQUIRED)
299 add_definitions(-DTBB)
300 include_directories(${TBB_INCLUDE_DIR})
301 list(APPEND THIRDPARTY_LIBS ${TBB_LIBRARIES})
302endif()
303
304# Stall notifications eat some performance from inserts
305option(DISABLE_STALL_NOTIF "Build with stall notifications" OFF)
306if(DISABLE_STALL_NOTIF)
307 add_definitions(-DROCKSDB_DISABLE_STALL_NOTIFICATION)
308endif()
309
310
311if(DEFINED USE_RTTI)
312 if(USE_RTTI)
313 message(STATUS "Enabling RTTI")
314 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DROCKSDB_USE_RTTI")
315 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DROCKSDB_USE_RTTI")
316 else()
317 if(MSVC)
318 message(STATUS "Disabling RTTI in Release builds. Always on in Debug.")
319 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DROCKSDB_USE_RTTI")
320 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GR-")
321 else()
322 message(STATUS "Disabling RTTI in Release builds")
323 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-rtti")
324 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-rtti")
325 endif()
326 endif()
7c673cae 327else()
11fdf7f2
TL
328 message(STATUS "Enabling RTTI in Debug builds only (default)")
329 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DROCKSDB_USE_RTTI")
330 if(MSVC)
331 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GR-")
332 else()
333 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-rtti")
334 endif()
7c673cae
FG
335endif()
336
11fdf7f2
TL
337# Used to run CI build and tests so we can run faster
338option(OPTDBG "Build optimized debug build with MSVC" OFF)
339option(WITH_RUNTIME_DEBUG "build with debug version of runtime library" ON)
7c673cae 340if(MSVC)
11fdf7f2 341 if(OPTDBG)
7c673cae 342 message(STATUS "Debug optimization is enabled")
11fdf7f2
TL
343 set(CMAKE_CXX_FLAGS_DEBUG "/Oxt")
344 else()
345 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /RTC1 /Gm")
346 endif()
347 if(WITH_RUNTIME_DEBUG)
348 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /${RUNTIME_LIBRARY}d")
7c673cae 349 else()
11fdf7f2 350 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /${RUNTIME_LIBRARY}")
7c673cae
FG
351 endif()
352 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oxt /Zp8 /Gm- /Gy /${RUNTIME_LIBRARY}")
353
354 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG")
355 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG")
356endif()
357
358if(CMAKE_COMPILER_IS_GNUCXX)
359 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-memcmp")
360endif()
361
362option(ROCKSDB_LITE "Build RocksDBLite version" OFF)
363if(ROCKSDB_LITE)
364 add_definitions(-DROCKSDB_LITE)
365 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
366endif()
367
368if(CMAKE_SYSTEM_NAME MATCHES "Cygwin")
369 add_definitions(-fno-builtin-memcmp -DCYGWIN)
370elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
371 add_definitions(-DOS_MACOSX)
372 if(CMAKE_SYSTEM_PROCESSOR MATCHES arm)
373 add_definitions(-DIOS_CROSS_COMPILE -DROCKSDB_LITE)
374 # no debug info for IOS, that will make our library big
375 add_definitions(-DNDEBUG)
376 endif()
377elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
378 add_definitions(-DOS_LINUX)
379elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS")
380 add_definitions(-DOS_SOLARIS)
381elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
382 add_definitions(-DOS_FREEBSD)
383elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD")
384 add_definitions(-DOS_NETBSD)
385elseif(CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
386 add_definitions(-DOS_OPENBSD)
387elseif(CMAKE_SYSTEM_NAME MATCHES "DragonFly")
388 add_definitions(-DOS_DRAGONFLYBSD)
389elseif(CMAKE_SYSTEM_NAME MATCHES "Android")
390 add_definitions(-DOS_ANDROID)
391elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
392 add_definitions(-DWIN32 -DOS_WIN -D_MBCS -DWIN64 -DNOMINMAX)
393 if(MINGW)
394 add_definitions(-D_WIN32_WINNT=_WIN32_WINNT_VISTA)
395 endif()
396endif()
397
398if(NOT WIN32)
399 add_definitions(-DROCKSDB_PLATFORM_POSIX -DROCKSDB_LIB_IO_POSIX)
400endif()
401
402option(WITH_FALLOCATE "build with fallocate" ON)
7c673cae 403if(WITH_FALLOCATE)
11fdf7f2 404 CHECK_CXX_SOURCE_COMPILES("
7c673cae
FG
405#include <fcntl.h>
406#include <linux/falloc.h>
407int main() {
408 int fd = open(\"/dev/null\", 0);
409 fallocate(fd, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, 0, 1024);
410}
411" HAVE_FALLOCATE)
412 if(HAVE_FALLOCATE)
413 add_definitions(-DROCKSDB_FALLOCATE_PRESENT)
414 endif()
415endif()
416
11fdf7f2
TL
417CHECK_CXX_SOURCE_COMPILES("
418#include <fcntl.h>
419int main() {
420 int fd = open(\"/dev/null\", 0);
421 sync_file_range(fd, 0, 1024, SYNC_FILE_RANGE_WRITE);
422}
423" HAVE_SYNC_FILE_RANGE_WRITE)
424if(HAVE_SYNC_FILE_RANGE_WRITE)
425 add_definitions(-DROCKSDB_RANGESYNC_PRESENT)
426endif()
427
428CHECK_CXX_SOURCE_COMPILES("
429#include <pthread.h>
430int main() {
431 (void) PTHREAD_MUTEX_ADAPTIVE_NP;
432}
433" HAVE_PTHREAD_MUTEX_ADAPTIVE_NP)
434if(HAVE_PTHREAD_MUTEX_ADAPTIVE_NP)
435 add_definitions(-DROCKSDB_PTHREAD_ADAPTIVE_MUTEX)
436endif()
437
438include(CheckCXXSymbolExists)
439check_cxx_symbol_exists(malloc_usable_size malloc.h HAVE_MALLOC_USABLE_SIZE)
7c673cae
FG
440if(HAVE_MALLOC_USABLE_SIZE)
441 add_definitions(-DROCKSDB_MALLOC_USABLE_SIZE)
442endif()
443
11fdf7f2
TL
444check_cxx_symbol_exists(sched_getcpu sched.h HAVE_SCHED_GETCPU)
445if(HAVE_SCHED_GETCPU)
446 add_definitions(-DROCKSDB_SCHED_GETCPU_PRESENT)
447endif()
448
7c673cae
FG
449include_directories(${PROJECT_SOURCE_DIR})
450include_directories(${PROJECT_SOURCE_DIR}/include)
451include_directories(SYSTEM ${PROJECT_SOURCE_DIR}/third-party/gtest-1.7.0/fused-src)
452find_package(Threads REQUIRED)
453
454add_subdirectory(third-party/gtest-1.7.0/fused-src/gtest)
455
456# Main library source code
457
458set(SOURCES
459 cache/clock_cache.cc
460 cache/lru_cache.cc
461 cache/sharded_cache.cc
462 db/builder.cc
463 db/c.cc
464 db/column_family.cc
465 db/compacted_db_impl.cc
466 db/compaction.cc
467 db/compaction_iterator.cc
468 db/compaction_job.cc
469 db/compaction_picker.cc
470 db/compaction_picker_universal.cc
471 db/convenience.cc
472 db/db_filesnapshot.cc
473 db/db_impl.cc
474 db/db_impl_write.cc
475 db/db_impl_compaction_flush.cc
476 db/db_impl_files.cc
477 db/db_impl_open.cc
478 db/db_impl_debug.cc
479 db/db_impl_experimental.cc
480 db/db_impl_readonly.cc
481 db/db_info_dumper.cc
482 db/db_iter.cc
483 db/dbformat.cc
11fdf7f2 484 db/error_handler.cc
7c673cae
FG
485 db/event_helpers.cc
486 db/experimental.cc
487 db/external_sst_file_ingestion_job.cc
488 db/file_indexer.cc
489 db/flush_job.cc
490 db/flush_scheduler.cc
491 db/forward_iterator.cc
492 db/internal_stats.cc
11fdf7f2 493 db/logs_with_prep_tracker.cc
7c673cae
FG
494 db/log_reader.cc
495 db/log_writer.cc
11fdf7f2 496 db/malloc_stats.cc
7c673cae
FG
497 db/memtable.cc
498 db/memtable_list.cc
499 db/merge_helper.cc
500 db/merge_operator.cc
501 db/range_del_aggregator.cc
502 db/repair.cc
503 db/snapshot_impl.cc
504 db/table_cache.cc
505 db/table_properties_collector.cc
506 db/transaction_log_impl.cc
507 db/version_builder.cc
508 db/version_edit.cc
509 db/version_set.cc
510 db/wal_manager.cc
511 db/write_batch.cc
512 db/write_batch_base.cc
513 db/write_controller.cc
514 db/write_thread.cc
515 env/env.cc
516 env/env_chroot.cc
11fdf7f2 517 env/env_encryption.cc
7c673cae 518 env/env_hdfs.cc
11fdf7f2
TL
519 env/mock_env.cc
520 memtable/alloc_tracker.cc
7c673cae
FG
521 memtable/hash_cuckoo_rep.cc
522 memtable/hash_linklist_rep.cc
523 memtable/hash_skiplist_rep.cc
7c673cae
FG
524 memtable/skiplistrep.cc
525 memtable/vectorrep.cc
11fdf7f2 526 memtable/write_buffer_manager.cc
7c673cae
FG
527 monitoring/histogram.cc
528 monitoring/histogram_windowing.cc
529 monitoring/instrumented_mutex.cc
530 monitoring/iostats_context.cc
531 monitoring/perf_context.cc
532 monitoring/perf_level.cc
533 monitoring/statistics.cc
534 monitoring/thread_status_impl.cc
535 monitoring/thread_status_updater.cc
536 monitoring/thread_status_util.cc
537 monitoring/thread_status_util_debug.cc
538 options/cf_options.cc
539 options/db_options.cc
540 options/options.cc
541 options/options_helper.cc
542 options/options_parser.cc
543 options/options_sanity_check.cc
544 port/stack_trace.cc
545 table/adaptive_table_factory.cc
546 table/block.cc
547 table/block_based_filter_block.cc
548 table/block_based_table_builder.cc
549 table/block_based_table_factory.cc
550 table/block_based_table_reader.cc
551 table/block_builder.cc
11fdf7f2 552 table/block_fetcher.cc
7c673cae
FG
553 table/block_prefix_index.cc
554 table/bloom_block.cc
555 table/cuckoo_table_builder.cc
556 table/cuckoo_table_factory.cc
557 table/cuckoo_table_reader.cc
11fdf7f2
TL
558 table/data_block_hash_index.cc
559 table/data_block_footer.cc
7c673cae
FG
560 table/flush_block_policy.cc
561 table/format.cc
562 table/full_filter_block.cc
563 table/get_context.cc
564 table/index_builder.cc
565 table/iterator.cc
566 table/merging_iterator.cc
567 table/meta_blocks.cc
568 table/partitioned_filter_block.cc
569 table/persistent_cache_helper.cc
570 table/plain_table_builder.cc
571 table/plain_table_factory.cc
572 table/plain_table_index.cc
573 table/plain_table_key_coding.cc
574 table/plain_table_reader.cc
575 table/sst_file_writer.cc
576 table/table_properties.cc
577 table/two_level_iterator.cc
578 tools/db_bench_tool.cc
579 tools/dump/db_dump_tool.cc
580 tools/ldb_cmd.cc
581 tools/ldb_tool.cc
582 tools/sst_dump_tool.cc
11fdf7f2 583 tools/trace_analyzer_tool.cc
7c673cae
FG
584 util/arena.cc
585 util/auto_roll_logger.cc
586 util/bloom.cc
587 util/coding.cc
588 util/compaction_job_stats_impl.cc
589 util/comparator.cc
11fdf7f2 590 util/compression_context_cache.cc
7c673cae
FG
591 util/concurrent_arena.cc
592 util/crc32c.cc
593 util/delete_scheduler.cc
594 util/dynamic_bloom.cc
595 util/event_logger.cc
596 util/file_reader_writer.cc
597 util/file_util.cc
598 util/filename.cc
599 util/filter_policy.cc
600 util/hash.cc
601 util/log_buffer.cc
602 util/murmurhash.cc
603 util/random.cc
604 util/rate_limiter.cc
605 util/slice.cc
606 util/sst_file_manager_impl.cc
607 util/status.cc
7c673cae
FG
608 util/string_util.cc
609 util/sync_point.cc
11fdf7f2 610 util/sync_point_impl.cc
7c673cae
FG
611 util/testutil.cc
612 util/thread_local.cc
613 util/threadpool_imp.cc
11fdf7f2 614 util/trace_replay.cc
7c673cae
FG
615 util/transaction_test_util.cc
616 util/xxhash.cc
617 utilities/backupable/backupable_db.cc
11fdf7f2 618 utilities/blob_db/blob_compaction_filter.cc
7c673cae 619 utilities/blob_db/blob_db.cc
11fdf7f2
TL
620 utilities/blob_db/blob_db_impl.cc
621 utilities/blob_db/blob_db_impl_filesnapshot.cc
622 utilities/blob_db/blob_dump_tool.cc
623 utilities/blob_db/blob_file.cc
624 utilities/blob_db/blob_log_reader.cc
625 utilities/blob_db/blob_log_writer.cc
626 utilities/blob_db/blob_log_format.cc
627 utilities/cassandra/cassandra_compaction_filter.cc
628 utilities/cassandra/format.cc
629 utilities/cassandra/merge_operator.cc
7c673cae
FG
630 utilities/checkpoint/checkpoint_impl.cc
631 utilities/col_buf_decoder.cc
632 utilities/col_buf_encoder.cc
633 utilities/column_aware_encoding_util.cc
634 utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc
635 utilities/date_tiered/date_tiered_db_impl.cc
11fdf7f2 636 utilities/debug.cc
7c673cae
FG
637 utilities/document/document_db.cc
638 utilities/document/json_document.cc
639 utilities/document/json_document_builder.cc
640 utilities/env_mirror.cc
641 utilities/env_timed.cc
642 utilities/geodb/geodb_impl.cc
643 utilities/leveldb_options/leveldb_options.cc
644 utilities/lua/rocks_lua_compaction_filter.cc
645 utilities/memory/memory_util.cc
11fdf7f2 646 utilities/merge_operators/bytesxor.cc
7c673cae
FG
647 utilities/merge_operators/max.cc
648 utilities/merge_operators/put.cc
649 utilities/merge_operators/string_append/stringappend.cc
650 utilities/merge_operators/string_append/stringappend2.cc
651 utilities/merge_operators/uint64add.cc
652 utilities/option_change_migration/option_change_migration.cc
653 utilities/options/options_util.cc
654 utilities/persistent_cache/block_cache_tier.cc
655 utilities/persistent_cache/block_cache_tier_file.cc
656 utilities/persistent_cache/block_cache_tier_metadata.cc
657 utilities/persistent_cache/persistent_cache_tier.cc
658 utilities/persistent_cache/volatile_tier_impl.cc
659 utilities/redis/redis_lists.cc
660 utilities/simulator_cache/sim_cache.cc
661 utilities/spatialdb/spatial_db.cc
662 utilities/table_properties_collectors/compact_on_deletion_collector.cc
11fdf7f2 663 utilities/trace/file_trace_reader_writer.cc
7c673cae 664 utilities/transactions/optimistic_transaction_db_impl.cc
11fdf7f2
TL
665 utilities/transactions/optimistic_transaction.cc
666 utilities/transactions/pessimistic_transaction.cc
667 utilities/transactions/pessimistic_transaction_db.cc
668 utilities/transactions/snapshot_checker.cc
7c673cae 669 utilities/transactions/transaction_base.cc
7c673cae 670 utilities/transactions/transaction_db_mutex_impl.cc
7c673cae
FG
671 utilities/transactions/transaction_lock_mgr.cc
672 utilities/transactions/transaction_util.cc
11fdf7f2
TL
673 utilities/transactions/write_prepared_txn.cc
674 utilities/transactions/write_prepared_txn_db.cc
675 utilities/transactions/write_unprepared_txn.cc
676 utilities/transactions/write_unprepared_txn_db.cc
7c673cae
FG
677 utilities/ttl/db_ttl_impl.cc
678 utilities/write_batch_with_index/write_batch_with_index.cc
679 utilities/write_batch_with_index/write_batch_with_index_internal.cc
680 $<TARGET_OBJECTS:build_version>)
681
11fdf7f2
TL
682if(HAVE_SSE42 AND NOT FORCE_SSE42)
683 if(NOT MSVC)
684set_source_files_properties(
685 util/crc32c.cc
686 PROPERTIES COMPILE_FLAGS "-msse4.2 -mpclmul")
687 endif()
688endif()
689
690if(HAVE_POWER8)
691 list(APPEND SOURCES
692 util/crc32c_ppc.c
693 util/crc32c_ppc_asm.S)
694endif(HAVE_POWER8)
695
7c673cae
FG
696if(WIN32)
697 list(APPEND SOURCES
698 port/win/io_win.cc
699 port/win/env_win.cc
700 port/win/env_default.cc
701 port/win/port_win.cc
702 port/win/win_logger.cc
11fdf7f2
TL
703 port/win/win_thread.cc)
704
705if(WITH_XPRESS)
706 list(APPEND SOURCES
7c673cae 707 port/win/xpress_win.cc)
11fdf7f2
TL
708endif()
709
710if(WITH_JEMALLOC)
711 list(APPEND SOURCES
712 port/win/win_jemalloc.cc)
713endif()
714
7c673cae
FG
715else()
716 list(APPEND SOURCES
717 port/port_posix.cc
718 env/env_posix.cc
719 env/io_posix.cc)
720endif()
721
11fdf7f2
TL
722set(ROCKSDB_STATIC_LIB rocksdb${ARTIFACT_SUFFIX})
723set(ROCKSDB_SHARED_LIB rocksdb-shared${ARTIFACT_SUFFIX})
724set(ROCKSDB_IMPORT_LIB ${ROCKSDB_SHARED_LIB})
725
726option(WITH_LIBRADOS "Build with librados" OFF)
727if(WITH_LIBRADOS)
728 list(APPEND SOURCES
729 utilities/env_librados.cc)
730 list(APPEND THIRDPARTY_LIBS rados)
731endif()
732
7c673cae
FG
733if(WIN32)
734 set(SYSTEM_LIBS ${SYSTEM_LIBS} Shlwapi.lib Rpcrt4.lib)
7c673cae
FG
735 set(LIBS ${ROCKSDB_STATIC_LIB} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
736else()
11fdf7f2 737 set(SYSTEM_LIBS ${CMAKE_THREAD_LIBS_INIT})
7c673cae
FG
738 set(LIBS ${ROCKSDB_SHARED_LIB} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
739
740 add_library(${ROCKSDB_SHARED_LIB} SHARED ${SOURCES})
741 target_link_libraries(${ROCKSDB_SHARED_LIB}
742 ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
743 set_target_properties(${ROCKSDB_SHARED_LIB} PROPERTIES
744 LINKER_LANGUAGE CXX
745 VERSION ${ROCKSDB_VERSION}
746 SOVERSION ${ROCKSDB_VERSION_MAJOR}
747 CXX_STANDARD 11
748 OUTPUT_NAME "rocksdb")
749endif()
750
7c673cae
FG
751add_library(${ROCKSDB_STATIC_LIB} STATIC ${SOURCES})
752target_link_libraries(${ROCKSDB_STATIC_LIB}
753 ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
754
755if(WIN32)
756 add_library(${ROCKSDB_IMPORT_LIB} SHARED ${SOURCES})
757 target_link_libraries(${ROCKSDB_IMPORT_LIB}
758 ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
759 set_target_properties(${ROCKSDB_IMPORT_LIB} PROPERTIES
760 COMPILE_DEFINITIONS "ROCKSDB_DLL;ROCKSDB_LIBRARY_EXPORTS")
761 if(MSVC)
762 set_target_properties(${ROCKSDB_STATIC_LIB} PROPERTIES
763 COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_STATIC_LIB}.pdb")
764 set_target_properties(${ROCKSDB_IMPORT_LIB} PROPERTIES
765 COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_IMPORT_LIB}.pdb")
766 endif()
767endif()
768
769option(WITH_JNI "build with JNI" OFF)
770if(WITH_JNI OR JNI)
771 message(STATUS "JNI library is enabled")
772 add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/java)
773else()
774 message(STATUS "JNI library is disabled")
775endif()
776
11fdf7f2
TL
777# Installation and packaging
778if(WIN32)
779 option(ROCKSDB_INSTALL_ON_WINDOWS "Enable install target on Windows" OFF)
780endif()
781if(NOT WIN32 OR ROCKSDB_INSTALL_ON_WINDOWS)
782 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
783 if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
784 # Change default installation prefix on Linux to /usr
785 set(CMAKE_INSTALL_PREFIX /usr CACHE PATH "Install path prefix, prepended onto install directories." FORCE)
786 endif()
787 endif()
788
789 include(GNUInstallDirs)
790 include(CMakePackageConfigHelpers)
791
792 set(package_config_destination ${CMAKE_INSTALL_LIBDIR}/cmake/rocksdb)
793
794 configure_package_config_file(
795 ${CMAKE_CURRENT_LIST_DIR}/cmake/RocksDBConfig.cmake.in RocksDBConfig.cmake
796 INSTALL_DESTINATION ${package_config_destination}
797 )
798
799 write_basic_package_version_file(
800 RocksDBConfigVersion.cmake
801 VERSION ${ROCKSDB_VERSION}
802 COMPATIBILITY SameMajorVersion
803 )
804
805 install(DIRECTORY include/rocksdb COMPONENT devel DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
806
807 install(
808 TARGETS ${ROCKSDB_STATIC_LIB}
809 EXPORT RocksDBTargets
810 COMPONENT devel
811 ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
812 INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
813 )
814
815 install(
816 TARGETS ${ROCKSDB_SHARED_LIB}
817 EXPORT RocksDBTargets
818 COMPONENT runtime
819 RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
820 LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
821 INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
822 )
823
824 install(
825 EXPORT RocksDBTargets
826 COMPONENT devel
827 DESTINATION ${package_config_destination}
828 NAMESPACE RocksDB::
829 )
830
831 install(
832 FILES
833 ${CMAKE_CURRENT_BINARY_DIR}/RocksDBConfig.cmake
834 ${CMAKE_CURRENT_BINARY_DIR}/RocksDBConfigVersion.cmake
835 COMPONENT devel
836 DESTINATION ${package_config_destination}
837 )
838endif()
839
840option(WITH_TESTS "build with tests" ON)
841if(WITH_TESTS)
842 set(TESTS
7c673cae
FG
843 cache/cache_test.cc
844 cache/lru_cache_test.cc
845 db/column_family_test.cc
846 db/compact_files_test.cc
847 db/compaction_iterator_test.cc
848 db/compaction_job_stats_test.cc
849 db/compaction_job_test.cc
850 db/compaction_picker_test.cc
851 db/comparator_db_test.cc
852 db/corruption_test.cc
853 db/cuckoo_table_db_test.cc
854 db/db_basic_test.cc
11fdf7f2 855 db/db_blob_index_test.cc
7c673cae
FG
856 db/db_block_cache_test.cc
857 db/db_bloom_filter_test.cc
858 db/db_compaction_filter_test.cc
859 db/db_compaction_test.cc
860 db/db_dynamic_level_test.cc
861 db/db_flush_test.cc
862 db/db_inplace_update_test.cc
863 db/db_io_failure_test.cc
864 db/db_iter_test.cc
11fdf7f2 865 db/db_iter_stress_test.cc
7c673cae
FG
866 db/db_iterator_test.cc
867 db/db_log_iter_test.cc
868 db/db_memtable_test.cc
869 db/db_merge_operator_test.cc
870 db/db_options_test.cc
871 db/db_properties_test.cc
872 db/db_range_del_test.cc
873 db/db_sst_test.cc
874 db/db_statistics_test.cc
875 db/db_table_properties_test.cc
876 db/db_tailing_iter_test.cc
877 db/db_test.cc
878 db/db_test2.cc
879 db/db_universal_compaction_test.cc
880 db/db_wal_test.cc
11fdf7f2 881 db/db_write_test.cc
7c673cae
FG
882 db/dbformat_test.cc
883 db/deletefile_test.cc
11fdf7f2
TL
884 db/error_handler_test.cc
885 db/obsolete_files_test.cc
7c673cae
FG
886 db/external_sst_file_basic_test.cc
887 db/external_sst_file_test.cc
888 db/fault_injection_test.cc
889 db/file_indexer_test.cc
890 db/filename_test.cc
891 db/flush_job_test.cc
892 db/listener_test.cc
893 db/log_test.cc
894 db/manual_compaction_test.cc
895 db/memtable_list_test.cc
896 db/merge_helper_test.cc
897 db/merge_test.cc
898 db/options_file_test.cc
899 db/perf_context_test.cc
900 db/plain_table_db_test.cc
901 db/prefix_test.cc
902 db/repair_test.cc
903 db/table_properties_collector_test.cc
904 db/version_builder_test.cc
905 db/version_edit_test.cc
906 db/version_set_test.cc
907 db/wal_manager_test.cc
908 db/write_batch_test.cc
909 db/write_callback_test.cc
910 db/write_controller_test.cc
911 env/env_basic_test.cc
912 env/env_test.cc
913 env/mock_env_test.cc
914 memtable/inlineskiplist_test.cc
915 memtable/skiplist_test.cc
11fdf7f2 916 memtable/write_buffer_manager_test.cc
7c673cae
FG
917 monitoring/histogram_test.cc
918 monitoring/iostats_context_test.cc
919 monitoring/statistics_test.cc
920 options/options_settable_test.cc
921 options/options_test.cc
922 table/block_based_filter_block_test.cc
923 table/block_test.cc
11fdf7f2 924 table/cleanable_test.cc
7c673cae
FG
925 table/cuckoo_table_builder_test.cc
926 table/cuckoo_table_reader_test.cc
11fdf7f2 927 table/data_block_hash_index_test.cc
7c673cae
FG
928 table/full_filter_block_test.cc
929 table/merger_test.cc
930 table/table_test.cc
931 tools/ldb_cmd_test.cc
932 tools/reduce_levels_test.cc
933 tools/sst_dump_test.cc
11fdf7f2 934 tools/trace_analyzer_test.cc
7c673cae
FG
935 util/arena_test.cc
936 util/auto_roll_logger_test.cc
937 util/autovector_test.cc
938 util/bloom_test.cc
939 util/coding_test.cc
940 util/crc32c_test.cc
941 util/delete_scheduler_test.cc
942 util/dynamic_bloom_test.cc
943 util/event_logger_test.cc
944 util/file_reader_writer_test.cc
945 util/filelock_test.cc
11fdf7f2 946 util/hash_test.cc
7c673cae
FG
947 util/heap_test.cc
948 util/rate_limiter_test.cc
11fdf7f2 949 util/repeatable_thread_test.cc
7c673cae 950 util/slice_transform_test.cc
11fdf7f2 951 util/timer_queue_test.cc
7c673cae
FG
952 util/thread_list_test.cc
953 util/thread_local_test.cc
954 utilities/backupable/backupable_db_test.cc
955 utilities/blob_db/blob_db_test.cc
11fdf7f2
TL
956 utilities/cassandra/cassandra_functional_test.cc
957 utilities/cassandra/cassandra_format_test.cc
958 utilities/cassandra/cassandra_row_merge_test.cc
959 utilities/cassandra/cassandra_serialize_test.cc
7c673cae
FG
960 utilities/checkpoint/checkpoint_test.cc
961 utilities/column_aware_encoding_test.cc
962 utilities/date_tiered/date_tiered_test.cc
963 utilities/document/document_db_test.cc
964 utilities/document/json_document_test.cc
965 utilities/geodb/geodb_test.cc
966 utilities/lua/rocks_lua_test.cc
967 utilities/memory/memory_test.cc
968 utilities/merge_operators/string_append/stringappend_test.cc
969 utilities/object_registry_test.cc
970 utilities/option_change_migration/option_change_migration_test.cc
971 utilities/options/options_util_test.cc
972 utilities/persistent_cache/hash_table_test.cc
973 utilities/persistent_cache/persistent_cache_test.cc
974 utilities/redis/redis_lists_test.cc
975 utilities/spatialdb/spatial_db_test.cc
11fdf7f2 976 utilities/simulator_cache/sim_cache_test.cc
7c673cae
FG
977 utilities/table_properties_collectors/compact_on_deletion_collector_test.cc
978 utilities/transactions/optimistic_transaction_test.cc
979 utilities/transactions/transaction_test.cc
11fdf7f2
TL
980 utilities/transactions/write_prepared_transaction_test.cc
981 utilities/transactions/write_unprepared_transaction_test.cc
7c673cae
FG
982 utilities/ttl/ttl_test.cc
983 utilities/write_batch_with_index/write_batch_with_index_test.cc
11fdf7f2
TL
984 )
985 if(WITH_LIBRADOS)
986 list(APPEND TESTS utilities/env_librados_test.cc)
987 endif()
7c673cae 988
11fdf7f2
TL
989 set(BENCHMARKS
990 cache/cache_bench.cc
991 memtable/memtablerep_bench.cc
992 db/range_del_aggregator_bench.cc
993 tools/db_bench.cc
994 table/table_reader_bench.cc
995 utilities/column_aware_encoding_exp.cc
996 utilities/persistent_cache/hash_table_bench.cc)
997 add_library(testharness OBJECT util/testharness.cc)
998 foreach(sourcefile ${BENCHMARKS})
7c673cae
FG
999 get_filename_component(exename ${sourcefile} NAME_WE)
1000 add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile}
1001 $<TARGET_OBJECTS:testharness>)
11fdf7f2
TL
1002 target_link_libraries(${exename}${ARTIFACT_SUFFIX} gtest ${LIBS})
1003 endforeach(sourcefile ${BENCHMARKS})
1004
1005 # For test util library that is build only in DEBUG mode
1006 # and linked to tests. Add test only code that is not #ifdefed for Release here.
1007 set(TESTUTIL_SOURCE
1008 db/db_test_util.cc
1009 monitoring/thread_status_updater_debug.cc
1010 table/mock_table.cc
1011 util/fault_injection_test_env.cc
1012 utilities/cassandra/test_utils.cc
1013 )
1014 # test utilities are only build in debug
1015 enable_testing()
1016 add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND})
1017 set(TESTUTILLIB testutillib${ARTIFACT_SUFFIX})
1018 add_library(${TESTUTILLIB} STATIC ${TESTUTIL_SOURCE})
1019 if(MSVC)
1020 set_target_properties(${TESTUTILLIB} PROPERTIES COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/testutillib${ARTIFACT_SUFFIX}.pdb")
1021 endif()
1022 set_target_properties(${TESTUTILLIB}
1023 PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1
1024 EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1
1025 EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
1026 )
1027
1028 # Tests are excluded from Release builds
1029 set(TEST_EXES ${TESTS})
1030
1031 foreach(sourcefile ${TEST_EXES})
1032 get_filename_component(exename ${sourcefile} NAME_WE)
1033 add_executable(${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX} ${sourcefile}
1034 $<TARGET_OBJECTS:testharness>)
1035 set_target_properties(${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX}
1036 PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1
1037 EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1
1038 EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
1039 OUTPUT_NAME ${exename}${ARTIFACT_SUFFIX}
1040 )
1041 target_link_libraries(${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX} testutillib${ARTIFACT_SUFFIX} gtest ${LIBS})
1042 if(NOT "${exename}" MATCHES "db_sanity_test")
1043 add_test(NAME ${exename} COMMAND ${exename}${ARTIFACT_SUFFIX})
1044 add_dependencies(check ${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX})
1045 endif()
1046 endforeach(sourcefile ${TEST_EXES})
1047
1048 # C executables must link to a shared object
1049 set(C_TESTS db/c_test.c)
1050 set(C_TEST_EXES ${C_TESTS})
1051
1052 foreach(sourcefile ${C_TEST_EXES})
1053 string(REPLACE ".c" "" exename ${sourcefile})
1054 string(REGEX REPLACE "^((.+)/)+" "" exename ${exename})
1055 add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile})
1056 set_target_properties(${exename}${ARTIFACT_SUFFIX}
1057 PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1
1058 EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1
1059 EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
1060 )
1061 target_link_libraries(${exename}${ARTIFACT_SUFFIX} ${ROCKSDB_IMPORT_LIB} testutillib${ARTIFACT_SUFFIX})
7c673cae
FG
1062 add_test(NAME ${exename} COMMAND ${exename}${ARTIFACT_SUFFIX})
1063 add_dependencies(check ${exename}${ARTIFACT_SUFFIX})
11fdf7f2
TL
1064 endforeach(sourcefile ${C_TEST_EXES})
1065endif()
1066
1067option(WITH_TOOLS "build with tools" ON)
1068if(WITH_TOOLS)
1069 add_subdirectory(tools)
7c673cae 1070endif()