]> git.proxmox.com Git - ceph.git/blame - ceph/src/rocksdb/CMakeLists.txt
update sources to v12.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.
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
35cmake_minimum_required(VERSION 2.6)
36project(rocksdb)
37
38if(POLICY CMP0042)
39 cmake_policy(SET CMP0042 NEW)
40endif()
41
42list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules/")
43
44if(MSVC)
45 include(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty.inc)
46else()
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()
66endif()
67
68if(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}")
74else()
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}")
78endif()
79
80find_package(Git)
81
82if(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()
88else()
89 set(GIT_SHA 0)
90endif()
91
92string(REGEX REPLACE "[^0-9a-f]+" "" GIT_SHA "${GIT_SHA}")
93
94if(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)
107endif()
108
109if(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()
127else()
181888fb 128 option(WITH_SSE42 "build with SSE4.2" OFF)
7c673cae
FG
129 if(WITH_SSE42)
130 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
131 endif()
132endif()
133
134set(BUILD_VERSION_CC ${CMAKE_BINARY_DIR}/build_version.cc)
135configure_file(util/build_version.cc.in ${BUILD_VERSION_CC} @ONLY)
136add_library(build_version OBJECT ${BUILD_VERSION_CC})
137target_include_directories(build_version PRIVATE
138 ${CMAKE_CURRENT_SOURCE_DIR}/util)
139if(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")
142else()
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()
157endif()
158
159option(FAIL_ON_WARNINGS "Treat compile warnings as errors" ON)
160if(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()
166endif()
167
168option(WITH_ASAN "build with ASAN" OFF)
169if(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()
177endif()
178
179option(WITH_TSAN "build with TSAN" OFF)
180if(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()
188endif()
189
190option(WITH_UBSAN "build with UBSAN" OFF)
191if(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()
198endif()
199
200# Used to run CI build and tests so we can run faster
201set(OPTIMIZE_DEBUG_DEFAULT 0) # Debug build is unoptimized by default use -DOPTDBG=1 to optimize
202
203if(DEFINED OPTDBG)
204 set(OPTIMIZE_DEBUG ${OPTDBG})
205else()
206 set(OPTIMIZE_DEBUG ${OPTIMIZE_DEBUG_DEFAULT})
207endif()
208
209if(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")
220endif()
221
222if(CMAKE_COMPILER_IS_GNUCXX)
223 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-memcmp")
224endif()
225
226option(ROCKSDB_LITE "Build RocksDBLite version" OFF)
227if(ROCKSDB_LITE)
228 add_definitions(-DROCKSDB_LITE)
229 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
230endif()
231
232if(CMAKE_SYSTEM_NAME MATCHES "Cygwin")
233 add_definitions(-fno-builtin-memcmp -DCYGWIN)
234elseif(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()
241elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
242 add_definitions(-DOS_LINUX)
243elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS")
244 add_definitions(-DOS_SOLARIS)
245elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
246 add_definitions(-DOS_FREEBSD)
247elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD")
248 add_definitions(-DOS_NETBSD)
249elseif(CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
250 add_definitions(-DOS_OPENBSD)
251elseif(CMAKE_SYSTEM_NAME MATCHES "DragonFly")
252 add_definitions(-DOS_DRAGONFLYBSD)
253elseif(CMAKE_SYSTEM_NAME MATCHES "Android")
254 add_definitions(-DOS_ANDROID)
255elseif(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()
260endif()
261
262if(NOT WIN32)
263 add_definitions(-DROCKSDB_PLATFORM_POSIX -DROCKSDB_LIB_IO_POSIX)
264endif()
265
266option(WITH_FALLOCATE "build with fallocate" ON)
267
268if(WITH_FALLOCATE)
269 include(CheckCSourceCompiles)
270 CHECK_C_SOURCE_COMPILES("
271#include <fcntl.h>
272#include <linux/falloc.h>
273int 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()
281endif()
282
283include(CheckFunctionExists)
284CHECK_FUNCTION_EXISTS(malloc_usable_size HAVE_MALLOC_USABLE_SIZE)
285if(HAVE_MALLOC_USABLE_SIZE)
286 add_definitions(-DROCKSDB_MALLOC_USABLE_SIZE)
287endif()
288
289include_directories(${PROJECT_SOURCE_DIR})
290include_directories(${PROJECT_SOURCE_DIR}/include)
291include_directories(SYSTEM ${PROJECT_SOURCE_DIR}/third-party/gtest-1.7.0/fused-src)
292find_package(Threads REQUIRED)
293
294add_subdirectory(third-party/gtest-1.7.0/fused-src/gtest)
295
296# Main library source code
297
298set(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
493if(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)
502else()
503 list(APPEND SOURCES
504 port/port_posix.cc
505 env/env_posix.cc
506 env/io_posix.cc)
507endif()
508
509if(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})
514else()
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")
530endif()
531
532option(WITH_LIBRADOS "Build with librados" OFF)
533if(WITH_LIBRADOS)
534 list(APPEND SOURCES
535 utilities/env_librados.cc)
536 list(APPEND THIRDPARTY_LIBS rados)
537endif()
538
539add_library(${ROCKSDB_STATIC_LIB} STATIC ${SOURCES})
540target_link_libraries(${ROCKSDB_STATIC_LIB}
541 ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
542
543if(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()
555endif()
556
557option(WITH_JNI "build with JNI" OFF)
558if(WITH_JNI OR JNI)
559 message(STATUS "JNI library is enabled")
560 add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/java)
561else()
562 message(STATUS "JNI library is disabled")
563endif()
564
565set(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)
689if(WITH_LIBRADOS)
690 list(APPEND TESTS utilities/env_librados_test.cc)
691endif()
692
693set(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)
700add_library(testharness OBJECT util/testharness.cc)
701foreach(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})
706endforeach(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.
710set(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
718enable_testing()
719add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND})
720set(TESTUTILLIB testutillib${ARTIFACT_SUFFIX})
721add_library(${TESTUTILLIB} STATIC ${TESTUTIL_SOURCE})
722if(MSVC)
723 set_target_properties(${TESTUTILLIB} PROPERTIES COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/testutillib${ARTIFACT_SUFFIX}.pdb")
724endif()
725set_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
732set(TEST_EXES ${TESTS})
733
734foreach(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()
748endforeach(sourcefile ${TEST_EXES})
749
750# C executables must link to a shared object
751set(C_TESTS db/c_test.c)
752set(C_TEST_EXES ${C_TESTS})
753
754foreach(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})
766endforeach(sourcefile ${C_TEST_EXES})
767add_subdirectory(tools)
768
769# Installation and packaging for Linux
770if(NOT WIN32)
771install(TARGETS ${ROCKSDB_STATIC_LIB} COMPONENT devel ARCHIVE DESTINATION lib64)
772install(TARGETS ${ROCKSDB_SHARED_LIB} COMPONENT runtime DESTINATION lib64)
773install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/rocksdb/"
774 COMPONENT devel
775 DESTINATION include/rocksdb)
776set(CMAKE_INSTALL_PREFIX /usr)
777endif()