]> git.proxmox.com Git - ceph.git/blob - ceph/src/rocksdb/CMakeLists.txt
1b1719de5776a23a594e0865901948eb16999352
[ceph.git] / ceph / src / rocksdb / CMakeLists.txt
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.
17 # sample command: cmake -G "Visual Studio 14 Win64" -DGFLAGS=1 -DSNAPPY=1 -DJEMALLOC=1 -DJNI=1 ..
18 # 4. Then build the project in debug mode (you may want to add /m[:<N>] flag to run msbuild in <N> parallel threads
19 # or simply /m ot use all avail cores)
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
35 cmake_minimum_required(VERSION 2.6)
36 project(rocksdb)
37
38 if(POLICY CMP0042)
39 cmake_policy(SET CMP0042 NEW)
40 endif()
41
42 list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules/")
43
44 if(MSVC)
45 include(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty.inc)
46 else()
47 option(WITH_JEMALLOC "build with JeMalloc" OFF)
48 if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
49 # FreeBSD has jemaloc as default malloc
50 # but it does not have all the jemalloc files in include/...
51 set(WITH_JEMALLOC ON)
52 else()
53 if(WITH_JEMALLOC)
54 find_package(JeMalloc REQUIRED)
55 add_definitions(-DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE)
56 include_directories(${JEMALLOC_INCLUDE_DIR})
57 endif()
58 endif()
59 option(WITH_SNAPPY "build with SNAPPY" OFF)
60 if(WITH_SNAPPY)
61 find_package(snappy REQUIRED)
62 add_definitions(-DSNAPPY)
63 include_directories(${SNAPPY_INCLUDE_DIR})
64 list(APPEND THIRDPARTY_LIBS ${SNAPPY_LIBRARIES})
65 endif()
66 endif()
67
68 if(WIN32)
69 execute_process(COMMAND powershell -noprofile -Command "Get-Date -format MM_dd_yyyy" OUTPUT_VARIABLE DATE)
70 execute_process(COMMAND powershell -noprofile -Command "Get-Date -format HH:mm:ss" OUTPUT_VARIABLE TIME)
71 string(REGEX REPLACE "(..)_(..)_..(..).*" "\\1/\\2/\\3" DATE "${DATE}")
72 string(REGEX REPLACE "(..):(.....).*" " \\1:\\2" TIME "${TIME}")
73 set(GIT_DATE_TIME "${DATE} ${TIME}")
74 else()
75 execute_process(COMMAND date "+%Y/%m/%d %H:%M:%S" OUTPUT_VARIABLE DATETIME)
76 string(REGEX REPLACE "\n" "" DATETIME ${DATETIME})
77 set(GIT_DATE_TIME "${DATETIME}")
78 endif()
79
80 find_package(Git)
81
82 if(GIT_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git")
83 if(WIN32)
84 execute_process(COMMAND $ENV{COMSPEC} /C ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse HEAD OUTPUT_VARIABLE GIT_SHA)
85 else()
86 execute_process(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse HEAD OUTPUT_VARIABLE GIT_SHA)
87 endif()
88 else()
89 set(GIT_SHA 0)
90 endif()
91
92 string(REGEX REPLACE "[^0-9a-f]+" "" GIT_SHA "${GIT_SHA}")
93
94 if(NOT WIN32)
95 execute_process(COMMAND
96 "./build_tools/version.sh" "full"
97 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
98 OUTPUT_VARIABLE ROCKSDB_VERSION
99 )
100 string(STRIP "${ROCKSDB_VERSION}" ROCKSDB_VERSION)
101 execute_process(COMMAND
102 "./build_tools/version.sh" "major"
103 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
104 OUTPUT_VARIABLE ROCKSDB_VERSION_MAJOR
105 )
106 string(STRIP "${ROCKSDB_VERSION_MAJOR}" ROCKSDB_VERSION_MAJOR)
107 endif()
108
109 if(WIN32)
110 option(WITH_AVX2 "build with AVX2" ON)
111 if(WITH_AVX2)
112 if(MSVC)
113 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2")
114 else()
115 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx2")
116 endif()
117 endif()
118
119 option(WITH_MD_LIBRARY "build with MD" ON)
120 if(MSVC)
121 if(WITH_MD_LIBRARY)
122 set(RUNTIME_LIBRARY "MD")
123 else()
124 set(RUNTIME_LIBRARY "MT")
125 endif()
126 endif()
127 else()
128 option(WITH_SSE42 "build with SSE4.2" ON)
129 if(WITH_SSE42)
130 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
131 endif()
132 endif()
133
134 set(BUILD_VERSION_CC ${CMAKE_BINARY_DIR}/build_version.cc)
135 configure_file(util/build_version.cc.in ${BUILD_VERSION_CC} @ONLY)
136 add_library(build_version OBJECT ${BUILD_VERSION_CC})
137 target_include_directories(build_version PRIVATE
138 ${CMAKE_CURRENT_SOURCE_DIR}/util)
139 if(MSVC)
140 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi /nologo /EHsc /GS /Gd /GR /GF /fp:precise /Zc:wchar_t /Zc:forScope /errorReport:queue")
141 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /FC /d2Zi+ /W3 /wd4127 /wd4800 /wd4996 /wd4351")
142 else()
143 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wextra -Wall")
144 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")
145 if(MINGW)
146 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-format")
147 endif()
148 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
149 if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
150 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -fno-omit-frame-pointer")
151 include(CheckCXXCompilerFlag)
152 CHECK_CXX_COMPILER_FLAG("-momit-leaf-frame-pointer" HAVE_OMIT_LEAF_FRAME_POINTER)
153 if(HAVE_OMIT_LEAF_FRAME_POINTER)
154 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -momit-leaf-frame-pointer")
155 endif()
156 endif()
157 endif()
158
159 option(FAIL_ON_WARNINGS "Treat compile warnings as errors" ON)
160 if(FAIL_ON_WARNINGS)
161 if(MSVC)
162 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
163 else() # assume GCC
164 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
165 endif()
166 endif()
167
168 option(WITH_ASAN "build with ASAN" OFF)
169 if(WITH_ASAN)
170 add_definitions(-DROCKSDB_TSAN_RUN)
171 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
172 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
173 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
174 if(WITH_JEMALLOC)
175 message(FATAL "ASAN does not work well with JeMalloc")
176 endif()
177 endif()
178
179 option(WITH_TSAN "build with TSAN" OFF)
180 if(WITH_TSAN)
181 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread -pie")
182 add_definitions(-DROCKSDB_TSAN_RUN)
183 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -fPIC")
184 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread -fPIC")
185 if(WITH_JEMALLOC)
186 message(FATAL "TSAN does not work well with JeMalloc")
187 endif()
188 endif()
189
190 option(WITH_UBSAN "build with UBSAN" OFF)
191 if(WITH_UBSAN)
192 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined")
193 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
194 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined")
195 if(WITH_JEMALLOC)
196 message(FATAL "UBSAN does not work well with JeMalloc")
197 endif()
198 endif()
199
200 # Used to run CI build and tests so we can run faster
201 set(OPTIMIZE_DEBUG_DEFAULT 0) # Debug build is unoptimized by default use -DOPTDBG=1 to optimize
202
203 if(DEFINED OPTDBG)
204 set(OPTIMIZE_DEBUG ${OPTDBG})
205 else()
206 set(OPTIMIZE_DEBUG ${OPTIMIZE_DEBUG_DEFAULT})
207 endif()
208
209 if(MSVC)
210 if((${OPTIMIZE_DEBUG} EQUAL 1))
211 message(STATUS "Debug optimization is enabled")
212 set(CMAKE_CXX_FLAGS_DEBUG "/Oxt /${RUNTIME_LIBRARY}d")
213 else()
214 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /RTC1 /Gm /${RUNTIME_LIBRARY}d")
215 endif()
216 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oxt /Zp8 /Gm- /Gy /${RUNTIME_LIBRARY}")
217
218 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG")
219 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG")
220 endif()
221
222 if(CMAKE_COMPILER_IS_GNUCXX)
223 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-memcmp")
224 endif()
225
226 option(ROCKSDB_LITE "Build RocksDBLite version" OFF)
227 if(ROCKSDB_LITE)
228 add_definitions(-DROCKSDB_LITE)
229 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
230 endif()
231
232 if(CMAKE_SYSTEM_NAME MATCHES "Cygwin")
233 add_definitions(-fno-builtin-memcmp -DCYGWIN)
234 elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
235 add_definitions(-DOS_MACOSX)
236 if(CMAKE_SYSTEM_PROCESSOR MATCHES arm)
237 add_definitions(-DIOS_CROSS_COMPILE -DROCKSDB_LITE)
238 # no debug info for IOS, that will make our library big
239 add_definitions(-DNDEBUG)
240 endif()
241 elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
242 add_definitions(-DOS_LINUX)
243 elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS")
244 add_definitions(-DOS_SOLARIS)
245 elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
246 add_definitions(-DOS_FREEBSD)
247 elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD")
248 add_definitions(-DOS_NETBSD)
249 elseif(CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
250 add_definitions(-DOS_OPENBSD)
251 elseif(CMAKE_SYSTEM_NAME MATCHES "DragonFly")
252 add_definitions(-DOS_DRAGONFLYBSD)
253 elseif(CMAKE_SYSTEM_NAME MATCHES "Android")
254 add_definitions(-DOS_ANDROID)
255 elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
256 add_definitions(-DWIN32 -DOS_WIN -D_MBCS -DWIN64 -DNOMINMAX)
257 if(MINGW)
258 add_definitions(-D_WIN32_WINNT=_WIN32_WINNT_VISTA)
259 endif()
260 endif()
261
262 if(NOT WIN32)
263 add_definitions(-DROCKSDB_PLATFORM_POSIX -DROCKSDB_LIB_IO_POSIX)
264 endif()
265
266 option(WITH_FALLOCATE "build with fallocate" ON)
267
268 if(WITH_FALLOCATE)
269 include(CheckCSourceCompiles)
270 CHECK_C_SOURCE_COMPILES("
271 #include <fcntl.h>
272 #include <linux/falloc.h>
273 int main() {
274 int fd = open(\"/dev/null\", 0);
275 fallocate(fd, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, 0, 1024);
276 }
277 " HAVE_FALLOCATE)
278 if(HAVE_FALLOCATE)
279 add_definitions(-DROCKSDB_FALLOCATE_PRESENT)
280 endif()
281 endif()
282
283 include(CheckFunctionExists)
284 CHECK_FUNCTION_EXISTS(malloc_usable_size HAVE_MALLOC_USABLE_SIZE)
285 if(HAVE_MALLOC_USABLE_SIZE)
286 add_definitions(-DROCKSDB_MALLOC_USABLE_SIZE)
287 endif()
288
289 include_directories(${PROJECT_SOURCE_DIR})
290 include_directories(${PROJECT_SOURCE_DIR}/include)
291 include_directories(SYSTEM ${PROJECT_SOURCE_DIR}/third-party/gtest-1.7.0/fused-src)
292 find_package(Threads REQUIRED)
293
294 add_subdirectory(third-party/gtest-1.7.0/fused-src/gtest)
295
296 # Main library source code
297
298 set(SOURCES
299 cache/clock_cache.cc
300 cache/lru_cache.cc
301 cache/sharded_cache.cc
302 db/builder.cc
303 db/c.cc
304 db/column_family.cc
305 db/compacted_db_impl.cc
306 db/compaction.cc
307 db/compaction_iterator.cc
308 db/compaction_job.cc
309 db/compaction_picker.cc
310 db/compaction_picker_universal.cc
311 db/convenience.cc
312 db/db_filesnapshot.cc
313 db/db_impl.cc
314 db/db_impl_write.cc
315 db/db_impl_compaction_flush.cc
316 db/db_impl_files.cc
317 db/db_impl_open.cc
318 db/db_impl_debug.cc
319 db/db_impl_experimental.cc
320 db/db_impl_readonly.cc
321 db/db_info_dumper.cc
322 db/db_iter.cc
323 db/dbformat.cc
324 db/event_helpers.cc
325 db/experimental.cc
326 db/external_sst_file_ingestion_job.cc
327 db/file_indexer.cc
328 db/flush_job.cc
329 db/flush_scheduler.cc
330 db/forward_iterator.cc
331 db/internal_stats.cc
332 db/log_reader.cc
333 db/log_writer.cc
334 db/managed_iterator.cc
335 db/memtable.cc
336 db/memtable_list.cc
337 db/merge_helper.cc
338 db/merge_operator.cc
339 db/range_del_aggregator.cc
340 db/repair.cc
341 db/snapshot_impl.cc
342 db/table_cache.cc
343 db/table_properties_collector.cc
344 db/transaction_log_impl.cc
345 db/version_builder.cc
346 db/version_edit.cc
347 db/version_set.cc
348 db/wal_manager.cc
349 db/write_batch.cc
350 db/write_batch_base.cc
351 db/write_controller.cc
352 db/write_thread.cc
353 env/env.cc
354 env/env_chroot.cc
355 env/env_hdfs.cc
356 env/memenv.cc
357 memtable/hash_cuckoo_rep.cc
358 memtable/hash_linklist_rep.cc
359 memtable/hash_skiplist_rep.cc
360 memtable/memtable_allocator.cc
361 memtable/skiplistrep.cc
362 memtable/vectorrep.cc
363 monitoring/histogram.cc
364 monitoring/histogram_windowing.cc
365 monitoring/instrumented_mutex.cc
366 monitoring/iostats_context.cc
367 monitoring/perf_context.cc
368 monitoring/perf_level.cc
369 monitoring/statistics.cc
370 monitoring/thread_status_impl.cc
371 monitoring/thread_status_updater.cc
372 monitoring/thread_status_util.cc
373 monitoring/thread_status_util_debug.cc
374 options/cf_options.cc
375 options/db_options.cc
376 options/options.cc
377 options/options_helper.cc
378 options/options_parser.cc
379 options/options_sanity_check.cc
380 port/stack_trace.cc
381 table/adaptive_table_factory.cc
382 table/block.cc
383 table/block_based_filter_block.cc
384 table/block_based_table_builder.cc
385 table/block_based_table_factory.cc
386 table/block_based_table_reader.cc
387 table/block_builder.cc
388 table/block_prefix_index.cc
389 table/bloom_block.cc
390 table/cuckoo_table_builder.cc
391 table/cuckoo_table_factory.cc
392 table/cuckoo_table_reader.cc
393 table/flush_block_policy.cc
394 table/format.cc
395 table/full_filter_block.cc
396 table/get_context.cc
397 table/index_builder.cc
398 table/iterator.cc
399 table/merging_iterator.cc
400 table/meta_blocks.cc
401 table/partitioned_filter_block.cc
402 table/persistent_cache_helper.cc
403 table/plain_table_builder.cc
404 table/plain_table_factory.cc
405 table/plain_table_index.cc
406 table/plain_table_key_coding.cc
407 table/plain_table_reader.cc
408 table/sst_file_writer.cc
409 table/table_properties.cc
410 table/two_level_iterator.cc
411 tools/db_bench_tool.cc
412 tools/dump/db_dump_tool.cc
413 tools/ldb_cmd.cc
414 tools/ldb_tool.cc
415 tools/sst_dump_tool.cc
416 util/arena.cc
417 util/auto_roll_logger.cc
418 util/bloom.cc
419 util/coding.cc
420 util/compaction_job_stats_impl.cc
421 util/comparator.cc
422 util/concurrent_arena.cc
423 util/crc32c.cc
424 util/delete_scheduler.cc
425 util/dynamic_bloom.cc
426 util/event_logger.cc
427 util/file_reader_writer.cc
428 util/file_util.cc
429 util/filename.cc
430 util/filter_policy.cc
431 util/hash.cc
432 util/log_buffer.cc
433 util/murmurhash.cc
434 util/random.cc
435 util/rate_limiter.cc
436 util/slice.cc
437 util/sst_file_manager_impl.cc
438 util/status.cc
439 util/status_message.cc
440 util/string_util.cc
441 util/sync_point.cc
442 util/testutil.cc
443 util/thread_local.cc
444 util/threadpool_imp.cc
445 util/transaction_test_util.cc
446 util/xxhash.cc
447 utilities/backupable/backupable_db.cc
448 utilities/blob_db/blob_db.cc
449 utilities/checkpoint/checkpoint_impl.cc
450 utilities/col_buf_decoder.cc
451 utilities/col_buf_encoder.cc
452 utilities/column_aware_encoding_util.cc
453 utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc
454 utilities/date_tiered/date_tiered_db_impl.cc
455 utilities/document/document_db.cc
456 utilities/document/json_document.cc
457 utilities/document/json_document_builder.cc
458 utilities/env_mirror.cc
459 utilities/env_timed.cc
460 utilities/geodb/geodb_impl.cc
461 utilities/leveldb_options/leveldb_options.cc
462 utilities/lua/rocks_lua_compaction_filter.cc
463 utilities/memory/memory_util.cc
464 utilities/merge_operators/max.cc
465 utilities/merge_operators/put.cc
466 utilities/merge_operators/string_append/stringappend.cc
467 utilities/merge_operators/string_append/stringappend2.cc
468 utilities/merge_operators/uint64add.cc
469 utilities/option_change_migration/option_change_migration.cc
470 utilities/options/options_util.cc
471 utilities/persistent_cache/block_cache_tier.cc
472 utilities/persistent_cache/block_cache_tier_file.cc
473 utilities/persistent_cache/block_cache_tier_metadata.cc
474 utilities/persistent_cache/persistent_cache_tier.cc
475 utilities/persistent_cache/volatile_tier_impl.cc
476 utilities/redis/redis_lists.cc
477 utilities/simulator_cache/sim_cache.cc
478 utilities/spatialdb/spatial_db.cc
479 utilities/table_properties_collectors/compact_on_deletion_collector.cc
480 utilities/transactions/optimistic_transaction_db_impl.cc
481 utilities/transactions/optimistic_transaction_impl.cc
482 utilities/transactions/transaction_base.cc
483 utilities/transactions/transaction_db_impl.cc
484 utilities/transactions/transaction_db_mutex_impl.cc
485 utilities/transactions/transaction_impl.cc
486 utilities/transactions/transaction_lock_mgr.cc
487 utilities/transactions/transaction_util.cc
488 utilities/ttl/db_ttl_impl.cc
489 utilities/write_batch_with_index/write_batch_with_index.cc
490 utilities/write_batch_with_index/write_batch_with_index_internal.cc
491 $<TARGET_OBJECTS:build_version>)
492
493 if(WIN32)
494 list(APPEND SOURCES
495 port/win/io_win.cc
496 port/win/env_win.cc
497 port/win/env_default.cc
498 port/win/port_win.cc
499 port/win/win_logger.cc
500 port/win/win_thread.cc
501 port/win/xpress_win.cc)
502 else()
503 list(APPEND SOURCES
504 port/port_posix.cc
505 env/env_posix.cc
506 env/io_posix.cc)
507 endif()
508
509 if(WIN32)
510 set(SYSTEM_LIBS ${SYSTEM_LIBS} Shlwapi.lib Rpcrt4.lib)
511 set(ROCKSDB_STATIC_LIB rocksdblib${ARTIFACT_SUFFIX})
512 set(ROCKSDB_IMPORT_LIB rocksdb${ARTIFACT_SUFFIX})
513 set(LIBS ${ROCKSDB_STATIC_LIB} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
514 else()
515 set(SYSTEM_LIBS ${CMAKE_THREAD_LIBS_INIT} rt)
516 set(ROCKSDB_STATIC_LIB rocksdb${ARTIFACT_SUFFIX})
517 set(ROCKSDB_SHARED_LIB rocksdb-shared)
518 set(ROCKSDB_IMPORT_LIB ${ROCKSDB_SHARED_LIB})
519 set(LIBS ${ROCKSDB_SHARED_LIB} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
520
521 add_library(${ROCKSDB_SHARED_LIB} SHARED ${SOURCES})
522 target_link_libraries(${ROCKSDB_SHARED_LIB}
523 ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
524 set_target_properties(${ROCKSDB_SHARED_LIB} PROPERTIES
525 LINKER_LANGUAGE CXX
526 VERSION ${ROCKSDB_VERSION}
527 SOVERSION ${ROCKSDB_VERSION_MAJOR}
528 CXX_STANDARD 11
529 OUTPUT_NAME "rocksdb")
530 endif()
531
532 option(WITH_LIBRADOS "Build with librados" OFF)
533 if(WITH_LIBRADOS)
534 list(APPEND SOURCES
535 utilities/env_librados.cc)
536 list(APPEND THIRDPARTY_LIBS rados)
537 endif()
538
539 add_library(${ROCKSDB_STATIC_LIB} STATIC ${SOURCES})
540 target_link_libraries(${ROCKSDB_STATIC_LIB}
541 ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
542
543 if(WIN32)
544 add_library(${ROCKSDB_IMPORT_LIB} SHARED ${SOURCES})
545 target_link_libraries(${ROCKSDB_IMPORT_LIB}
546 ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
547 set_target_properties(${ROCKSDB_IMPORT_LIB} PROPERTIES
548 COMPILE_DEFINITIONS "ROCKSDB_DLL;ROCKSDB_LIBRARY_EXPORTS")
549 if(MSVC)
550 set_target_properties(${ROCKSDB_STATIC_LIB} PROPERTIES
551 COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_STATIC_LIB}.pdb")
552 set_target_properties(${ROCKSDB_IMPORT_LIB} PROPERTIES
553 COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_IMPORT_LIB}.pdb")
554 endif()
555 endif()
556
557 option(WITH_JNI "build with JNI" OFF)
558 if(WITH_JNI OR JNI)
559 message(STATUS "JNI library is enabled")
560 add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/java)
561 else()
562 message(STATUS "JNI library is disabled")
563 endif()
564
565 set(TESTS
566 cache/cache_test.cc
567 cache/lru_cache_test.cc
568 db/column_family_test.cc
569 db/compact_files_test.cc
570 db/compaction_iterator_test.cc
571 db/compaction_job_stats_test.cc
572 db/compaction_job_test.cc
573 db/compaction_picker_test.cc
574 db/comparator_db_test.cc
575 db/corruption_test.cc
576 db/cuckoo_table_db_test.cc
577 db/db_basic_test.cc
578 db/db_block_cache_test.cc
579 db/db_bloom_filter_test.cc
580 db/db_compaction_filter_test.cc
581 db/db_compaction_test.cc
582 db/db_dynamic_level_test.cc
583 db/db_flush_test.cc
584 db/db_inplace_update_test.cc
585 db/db_io_failure_test.cc
586 db/db_iter_test.cc
587 db/db_iterator_test.cc
588 db/db_log_iter_test.cc
589 db/db_memtable_test.cc
590 db/db_merge_operator_test.cc
591 db/db_options_test.cc
592 db/db_properties_test.cc
593 db/db_range_del_test.cc
594 db/db_sst_test.cc
595 db/db_statistics_test.cc
596 db/db_table_properties_test.cc
597 db/db_tailing_iter_test.cc
598 db/db_test.cc
599 db/db_test2.cc
600 db/db_universal_compaction_test.cc
601 db/db_wal_test.cc
602 db/dbformat_test.cc
603 db/deletefile_test.cc
604 db/external_sst_file_basic_test.cc
605 db/external_sst_file_test.cc
606 db/fault_injection_test.cc
607 db/file_indexer_test.cc
608 db/filename_test.cc
609 db/flush_job_test.cc
610 db/listener_test.cc
611 db/log_test.cc
612 db/manual_compaction_test.cc
613 db/memtable_list_test.cc
614 db/merge_helper_test.cc
615 db/merge_test.cc
616 db/options_file_test.cc
617 db/perf_context_test.cc
618 db/plain_table_db_test.cc
619 db/prefix_test.cc
620 db/repair_test.cc
621 db/table_properties_collector_test.cc
622 db/version_builder_test.cc
623 db/version_edit_test.cc
624 db/version_set_test.cc
625 db/wal_manager_test.cc
626 db/write_batch_test.cc
627 db/write_callback_test.cc
628 db/write_controller_test.cc
629 env/env_basic_test.cc
630 env/env_test.cc
631 env/mock_env_test.cc
632 memtable/inlineskiplist_test.cc
633 memtable/skiplist_test.cc
634 monitoring/histogram_test.cc
635 monitoring/iostats_context_test.cc
636 monitoring/statistics_test.cc
637 options/options_settable_test.cc
638 options/options_test.cc
639 table/block_based_filter_block_test.cc
640 table/block_test.cc
641 table/cuckoo_table_builder_test.cc
642 table/cuckoo_table_reader_test.cc
643 table/full_filter_block_test.cc
644 table/merger_test.cc
645 table/table_test.cc
646 tools/ldb_cmd_test.cc
647 tools/reduce_levels_test.cc
648 tools/sst_dump_test.cc
649 util/arena_test.cc
650 util/auto_roll_logger_test.cc
651 util/autovector_test.cc
652 util/bloom_test.cc
653 util/coding_test.cc
654 util/crc32c_test.cc
655 util/delete_scheduler_test.cc
656 util/dynamic_bloom_test.cc
657 util/event_logger_test.cc
658 util/file_reader_writer_test.cc
659 util/filelock_test.cc
660 util/heap_test.cc
661 util/rate_limiter_test.cc
662 util/slice_transform_test.cc
663 util/thread_list_test.cc
664 util/thread_local_test.cc
665 utilities/backupable/backupable_db_test.cc
666 utilities/blob_db/blob_db_test.cc
667 utilities/checkpoint/checkpoint_test.cc
668 utilities/column_aware_encoding_test.cc
669 utilities/date_tiered/date_tiered_test.cc
670 utilities/document/document_db_test.cc
671 utilities/document/json_document_test.cc
672 utilities/geodb/geodb_test.cc
673 utilities/lua/rocks_lua_test.cc
674 utilities/memory/memory_test.cc
675 utilities/merge_operators/string_append/stringappend_test.cc
676 utilities/object_registry_test.cc
677 utilities/option_change_migration/option_change_migration_test.cc
678 utilities/options/options_util_test.cc
679 utilities/persistent_cache/hash_table_test.cc
680 utilities/persistent_cache/persistent_cache_test.cc
681 utilities/redis/redis_lists_test.cc
682 utilities/spatialdb/spatial_db_test.cc
683 utilities/table_properties_collectors/compact_on_deletion_collector_test.cc
684 utilities/transactions/optimistic_transaction_test.cc
685 utilities/transactions/transaction_test.cc
686 utilities/ttl/ttl_test.cc
687 utilities/write_batch_with_index/write_batch_with_index_test.cc
688 )
689 if(WITH_LIBRADOS)
690 list(APPEND TESTS utilities/env_librados_test.cc)
691 endif()
692
693 set(BENCHMARKS
694 cache/cache_bench.cc
695 memtable/memtablerep_bench.cc
696 tools/db_bench.cc
697 table/table_reader_bench.cc
698 utilities/column_aware_encoding_exp.cc
699 utilities/persistent_cache/hash_table_bench.cc)
700 add_library(testharness OBJECT util/testharness.cc)
701 foreach(sourcefile ${BENCHMARKS})
702 get_filename_component(exename ${sourcefile} NAME_WE)
703 add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile}
704 $<TARGET_OBJECTS:testharness>)
705 target_link_libraries(${exename}${ARTIFACT_SUFFIX} gtest ${LIBS})
706 endforeach(sourcefile ${BENCHMARKS})
707
708 # For test util library that is build only in DEBUG mode
709 # and linked to tests. Add test only code that is not #ifdefed for Release here.
710 set(TESTUTIL_SOURCE
711 db/db_test_util.cc
712 env/mock_env.cc
713 monitoring/thread_status_updater_debug.cc
714 table/mock_table.cc
715 util/fault_injection_test_env.cc
716 )
717 # test utilities are only build in debug
718 enable_testing()
719 add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND})
720 set(TESTUTILLIB testutillib${ARTIFACT_SUFFIX})
721 add_library(${TESTUTILLIB} STATIC ${TESTUTIL_SOURCE})
722 if(MSVC)
723 set_target_properties(${TESTUTILLIB} PROPERTIES COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/testutillib${ARTIFACT_SUFFIX}.pdb")
724 endif()
725 set_target_properties(${TESTUTILLIB}
726 PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1
727 EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1
728 EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
729 )
730
731 # Tests are excluded from Release builds
732 set(TEST_EXES ${TESTS})
733
734 foreach(sourcefile ${TEST_EXES})
735 get_filename_component(exename ${sourcefile} NAME_WE)
736 add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile}
737 $<TARGET_OBJECTS:testharness>)
738 set_target_properties(${exename}${ARTIFACT_SUFFIX}
739 PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1
740 EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1
741 EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
742 )
743 target_link_libraries(${exename}${ARTIFACT_SUFFIX} testutillib${ARTIFACT_SUFFIX} gtest ${LIBS})
744 if(NOT "${exename}" MATCHES "db_sanity_test")
745 add_test(NAME ${exename} COMMAND ${exename}${ARTIFACT_SUFFIX})
746 add_dependencies(check ${exename}${ARTIFACT_SUFFIX})
747 endif()
748 endforeach(sourcefile ${TEST_EXES})
749
750 # C executables must link to a shared object
751 set(C_TESTS db/c_test.c)
752 set(C_TEST_EXES ${C_TESTS})
753
754 foreach(sourcefile ${C_TEST_EXES})
755 string(REPLACE ".c" "" exename ${sourcefile})
756 string(REGEX REPLACE "^((.+)/)+" "" exename ${exename})
757 add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile})
758 set_target_properties(${exename}${ARTIFACT_SUFFIX}
759 PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1
760 EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1
761 EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
762 )
763 target_link_libraries(${exename}${ARTIFACT_SUFFIX} ${ROCKSDB_IMPORT_LIB} testutillib${ARTIFACT_SUFFIX})
764 add_test(NAME ${exename} COMMAND ${exename}${ARTIFACT_SUFFIX})
765 add_dependencies(check ${exename}${ARTIFACT_SUFFIX})
766 endforeach(sourcefile ${C_TEST_EXES})
767 add_subdirectory(tools)
768
769 # Installation and packaging for Linux
770 if(NOT WIN32)
771 install(TARGETS ${ROCKSDB_STATIC_LIB} COMPONENT devel ARCHIVE DESTINATION lib64)
772 install(TARGETS ${ROCKSDB_SHARED_LIB} COMPONENT runtime DESTINATION lib64)
773 install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/rocksdb/"
774 COMPONENT devel
775 DESTINATION include/rocksdb)
776 set(CMAKE_INSTALL_PREFIX /usr)
777 endif()