]>
Commit | Line | Data |
---|---|---|
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 | ||
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() | |
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() | |
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 | ||
94b18763 FG |
159 | include(CheckCXXSourceCompiles) |
160 | if(NOT MSVC) | |
161 | set(CMAKE_REQUIRED_FLAGS "-msse4.2") | |
162 | endif() | |
163 | CHECK_CXX_SOURCE_COMPILES(" | |
164 | #include <cstdint> | |
165 | #include <nmmintrin.h> | |
166 | int main() { | |
167 | volatile uint32_t x = _mm_crc32_u32(0, 0); | |
168 | } | |
169 | " HAVE_SSE42) | |
170 | unset(CMAKE_REQUIRED_FLAGS) | |
171 | if(HAVE_SSE42 AND NOT WITH_SSE42) | |
172 | set_source_files_properties( | |
173 | util/crc32c.cc | |
174 | PROPERTIES COMPILE_FLAGS "-msse4.2") | |
175 | endif() | |
176 | ||
7c673cae FG |
177 | option(FAIL_ON_WARNINGS "Treat compile warnings as errors" ON) |
178 | if(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() | |
184 | endif() | |
185 | ||
186 | option(WITH_ASAN "build with ASAN" OFF) | |
187 | if(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() | |
195 | endif() | |
196 | ||
197 | option(WITH_TSAN "build with TSAN" OFF) | |
198 | if(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() | |
206 | endif() | |
207 | ||
208 | option(WITH_UBSAN "build with UBSAN" OFF) | |
209 | if(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() | |
216 | endif() | |
217 | ||
218 | # Used to run CI build and tests so we can run faster | |
219 | set(OPTIMIZE_DEBUG_DEFAULT 0) # Debug build is unoptimized by default use -DOPTDBG=1 to optimize | |
220 | ||
221 | if(DEFINED OPTDBG) | |
222 | set(OPTIMIZE_DEBUG ${OPTDBG}) | |
223 | else() | |
224 | set(OPTIMIZE_DEBUG ${OPTIMIZE_DEBUG_DEFAULT}) | |
225 | endif() | |
226 | ||
227 | if(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") | |
238 | endif() | |
239 | ||
240 | if(CMAKE_COMPILER_IS_GNUCXX) | |
241 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-memcmp") | |
242 | endif() | |
243 | ||
244 | option(ROCKSDB_LITE "Build RocksDBLite version" OFF) | |
245 | if(ROCKSDB_LITE) | |
246 | add_definitions(-DROCKSDB_LITE) | |
247 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions") | |
248 | endif() | |
249 | ||
250 | if(CMAKE_SYSTEM_NAME MATCHES "Cygwin") | |
251 | add_definitions(-fno-builtin-memcmp -DCYGWIN) | |
252 | elseif(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() | |
259 | elseif(CMAKE_SYSTEM_NAME MATCHES "Linux") | |
260 | add_definitions(-DOS_LINUX) | |
261 | elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS") | |
262 | add_definitions(-DOS_SOLARIS) | |
263 | elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") | |
264 | add_definitions(-DOS_FREEBSD) | |
265 | elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD") | |
266 | add_definitions(-DOS_NETBSD) | |
267 | elseif(CMAKE_SYSTEM_NAME MATCHES "OpenBSD") | |
268 | add_definitions(-DOS_OPENBSD) | |
269 | elseif(CMAKE_SYSTEM_NAME MATCHES "DragonFly") | |
270 | add_definitions(-DOS_DRAGONFLYBSD) | |
271 | elseif(CMAKE_SYSTEM_NAME MATCHES "Android") | |
272 | add_definitions(-DOS_ANDROID) | |
273 | elseif(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() | |
278 | endif() | |
279 | ||
280 | if(NOT WIN32) | |
281 | add_definitions(-DROCKSDB_PLATFORM_POSIX -DROCKSDB_LIB_IO_POSIX) | |
282 | endif() | |
283 | ||
284 | option(WITH_FALLOCATE "build with fallocate" ON) | |
285 | ||
286 | if(WITH_FALLOCATE) | |
287 | include(CheckCSourceCompiles) | |
288 | CHECK_C_SOURCE_COMPILES(" | |
289 | #include <fcntl.h> | |
290 | #include <linux/falloc.h> | |
291 | int 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() | |
299 | endif() | |
300 | ||
301 | include(CheckFunctionExists) | |
302 | CHECK_FUNCTION_EXISTS(malloc_usable_size HAVE_MALLOC_USABLE_SIZE) | |
303 | if(HAVE_MALLOC_USABLE_SIZE) | |
304 | add_definitions(-DROCKSDB_MALLOC_USABLE_SIZE) | |
305 | endif() | |
306 | ||
307 | include_directories(${PROJECT_SOURCE_DIR}) | |
308 | include_directories(${PROJECT_SOURCE_DIR}/include) | |
309 | include_directories(SYSTEM ${PROJECT_SOURCE_DIR}/third-party/gtest-1.7.0/fused-src) | |
310 | find_package(Threads REQUIRED) | |
311 | ||
312 | add_subdirectory(third-party/gtest-1.7.0/fused-src/gtest) | |
313 | ||
314 | # Main library source code | |
315 | ||
316 | set(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 | ||
511 | if(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) | |
520 | else() | |
521 | list(APPEND SOURCES | |
522 | port/port_posix.cc | |
523 | env/env_posix.cc | |
524 | env/io_posix.cc) | |
525 | endif() | |
526 | ||
527 | if(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}) | |
532 | else() | |
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") | |
548 | endif() | |
549 | ||
550 | option(WITH_LIBRADOS "Build with librados" OFF) | |
551 | if(WITH_LIBRADOS) | |
552 | list(APPEND SOURCES | |
553 | utilities/env_librados.cc) | |
554 | list(APPEND THIRDPARTY_LIBS rados) | |
555 | endif() | |
556 | ||
557 | add_library(${ROCKSDB_STATIC_LIB} STATIC ${SOURCES}) | |
558 | target_link_libraries(${ROCKSDB_STATIC_LIB} | |
559 | ${THIRDPARTY_LIBS} ${SYSTEM_LIBS}) | |
560 | ||
561 | if(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() | |
573 | endif() | |
574 | ||
575 | option(WITH_JNI "build with JNI" OFF) | |
576 | if(WITH_JNI OR JNI) | |
577 | message(STATUS "JNI library is enabled") | |
578 | add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/java) | |
579 | else() | |
580 | message(STATUS "JNI library is disabled") | |
581 | endif() | |
582 | ||
583 | set(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 | ) | |
707 | if(WITH_LIBRADOS) | |
708 | list(APPEND TESTS utilities/env_librados_test.cc) | |
709 | endif() | |
710 | ||
711 | set(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) | |
718 | add_library(testharness OBJECT util/testharness.cc) | |
719 | foreach(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}) | |
724 | endforeach(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. | |
728 | set(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 | |
736 | enable_testing() | |
737 | add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) | |
738 | set(TESTUTILLIB testutillib${ARTIFACT_SUFFIX}) | |
739 | add_library(${TESTUTILLIB} STATIC ${TESTUTIL_SOURCE}) | |
740 | if(MSVC) | |
741 | set_target_properties(${TESTUTILLIB} PROPERTIES COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/testutillib${ARTIFACT_SUFFIX}.pdb") | |
742 | endif() | |
743 | set_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 | |
750 | set(TEST_EXES ${TESTS}) | |
751 | ||
752 | foreach(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() | |
766 | endforeach(sourcefile ${TEST_EXES}) | |
767 | ||
768 | # C executables must link to a shared object | |
769 | set(C_TESTS db/c_test.c) | |
770 | set(C_TEST_EXES ${C_TESTS}) | |
771 | ||
772 | foreach(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}) | |
784 | endforeach(sourcefile ${C_TEST_EXES}) | |
785 | add_subdirectory(tools) | |
786 | ||
787 | # Installation and packaging for Linux | |
788 | if(NOT WIN32) | |
789 | install(TARGETS ${ROCKSDB_STATIC_LIB} COMPONENT devel ARCHIVE DESTINATION lib64) | |
790 | install(TARGETS ${ROCKSDB_SHARED_LIB} COMPONENT runtime DESTINATION lib64) | |
791 | install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/rocksdb/" | |
792 | COMPONENT devel | |
793 | DESTINATION include/rocksdb) | |
794 | set(CMAKE_INSTALL_PREFIX /usr) | |
795 | endif() |