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