]>
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 | ||
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() |