CMakeLists.txt 16.3 KB
Newer Older
1
# This cmake build is for Windows 64-bit only.
D
Dmitri Smirnov 已提交
2 3
#
# Prerequisites:
4
#     You must have Visual Studio 2013 Update 4 installed. Start the Developer Command Prompt window that is a part of Visual Studio installation.
D
Dmitri Smirnov 已提交
5
#     Run the build commands from within the Developer Command Prompt window to have paths to the compiler and runtime libraries set.
6
#     You must have git.exe in your %PATH% environment variable.
D
Dmitri Smirnov 已提交
7 8
#
# To build Rocksdb for Windows is as easy as 1-2-3-4-5:
A
agiardullo 已提交
9
#
10
# 1. Update paths to third-party libraries in thirdparty.inc file
D
Dmitri Smirnov 已提交
11 12 13
# 2. Create a new directory for build artifacts
#        mkdir build
#        cd build
14 15
# 3. Run cmake to generate project files for Windows, add more options to enable required third-party libraries.
#    See thirdparty.inc for more information.
16
#        sample command: cmake -G "Visual Studio 12 Win64" -DGFLAGS=1 -DSNAPPY=1 -DJEMALLOC=1 ..
Y
yuslepukhin 已提交
17
#        OR for VS Studio 15 cmake -G "Visual Studio 14 Win64" -DGFLAGS=1 -DSNAPPY=1 -DJEMALLOC=1 ..
18 19 20 21 22 23 24
# 4. Then build the project in debug mode (you may want to add /m[:<N>] flag to run msbuild in <N> parallel threads
#                                          or simply /m ot use all avail cores)
#        msbuild rocksdb.sln
#
#        rocksdb.sln build features exclusions of test only code in Release. If you build ALL_BUILD then everything
#        will be attempted but test only code does not build in Release mode.
#
25
# 5. And release mode (/m[:<N>] is also supported)
26
#        msbuild rocksdb.sln /p:Configuration=Release
D
Dmitri Smirnov 已提交
27 28 29 30 31 32 33 34 35 36 37 38 39
#

cmake_minimum_required(VERSION 2.6)
project(rocksdb)

include(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty.inc)

execute_process(COMMAND $ENV{COMSPEC} " /C date /T" OUTPUT_VARIABLE DATE)
execute_process(COMMAND $ENV{COMSPEC} " /C time /T" OUTPUT_VARIABLE TIME)
string(REGEX REPLACE "(..)/(..)/..(..).*" "\\1/\\2/\\3" DATE ${DATE})
string(REGEX REPLACE "(..):(.....).*" " \\1:\\2" TIME ${TIME})
string(CONCAT GIT_DATE_TIME ${DATE} ${TIME})

40 41 42 43 44 45 46 47
find_package(Git)

if (GIT_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git")
    execute_process(COMMAND $ENV{COMSPEC} /C ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse HEAD OUTPUT_VARIABLE GIT_SHA)
else()
    set(GIT_SHA 0)
endif()

D
Dmitri Smirnov 已提交
48 49 50 51 52 53 54 55 56 57 58 59 60
string(REGEX REPLACE "[^0-9a-f]+" "" GIT_SHA ${GIT_SHA})

set(BUILD_VERSION_CC ${CMAKE_CURRENT_SOURCE_DIR}/util/build_version.cc)

add_custom_command(OUTPUT ${BUILD_VERSION_CC}
    COMMAND echo "#include \"build_version.h\"" > ${BUILD_VERSION_CC}
    COMMAND echo "const char* rocksdb_build_git_sha = \"rocksdb_build_git_sha:${GIT_SHA}\";" >> ${BUILD_VERSION_CC}
    COMMAND echo "const char* rocksdb_build_git_datetime = \"rocksdb_build_git_datetime:${GIT_DATE_TIME}\";" >> ${BUILD_VERSION_CC}
    COMMAND echo const char* rocksdb_build_compile_date = __DATE__\; >> ${BUILD_VERSION_CC}
)

add_custom_target(GenerateBuildVersion DEPENDS ${BUILD_VERSION_CC})

61
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi /nologo  /EHsc /GS /Gd /GR /GF /fp:precise /Zc:wchar_t /Zc:forScope /errorReport:queue")
62

S
Siying Dong 已提交
63
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /FC /d2Zi+ /W3 /WX /wd4127 /wd4800 /wd4996 /wd4351")
D
Dmitri Smirnov 已提交
64

65 66 67 68 69 70 71 72 73 74
# Used to run CI build and tests so we can run faster
set(OPTIMIZE_DEBUG_DEFAULT 0)        # Debug build is unoptimized by default use -DOPTDBG=1 to optimize

if(DEFINED OPTDBG)
   set(OPTIMIZE_DEBUG ${OPTDBG})
else()
   set(OPTIMIZE_DEBUG ${OPTIMIZE_DEBUG_DEFAULT})
endif()

if((${OPTIMIZE_DEBUG} EQUAL 1))
75
   message(STATUS "Debug optimization is enabled")
76 77 78 79 80 81
   set(CMAKE_CXX_FLAGS_DEBUG "/Oxt /MDd")
else()
   set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /RTC1 /Gm /MDd")
endif()

set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oxt /Zp8 /Gm- /Gy /MD")
D
Dmitri Smirnov 已提交
82

83
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG")
D
Dmitri Smirnov 已提交
84 85 86 87 88 89 90 91
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG")

add_definitions(-DWIN32 -DOS_WIN -D_MBCS -DWIN64)

include_directories(${PROJECT_SOURCE_DIR})
include_directories(${PROJECT_SOURCE_DIR}/include)
include_directories(${PROJECT_SOURCE_DIR}/third-party/gtest-1.7.0/fused-src)

92
set(ROCKSDB_LIBS rocksdblib${ARTIFACT_SUFFIX})
D
Dmitri Smirnov 已提交
93 94 95 96 97 98 99
set(THIRDPARTY_LIBS ${THIRDPARTY_LIBS} gtest)
set(SYSTEM_LIBS Shlwapi.lib Rpcrt4.lib)

set(LIBS ${ROCKSDB_LIBS} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})

add_subdirectory(third-party/gtest-1.7.0/fused-src/gtest)

100
# Main library source code
D
Dmitri Smirnov 已提交
101 102 103 104
set(SOURCES
        db/builder.cc
        db/c.cc
        db/column_family.cc
105
        db/compacted_db_impl.cc
D
Dmitri Smirnov 已提交
106
        db/compaction.cc
107
        db/compaction_iterator.cc
D
Dmitri Smirnov 已提交
108 109
        db/compaction_job.cc
        db/compaction_picker.cc
A
agiardullo 已提交
110
        db/convenience.cc
D
Dmitri Smirnov 已提交
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
        db/dbformat.cc
        db/db_filesnapshot.cc
        db/db_impl.cc
        db/db_impl_debug.cc
        db/db_impl_experimental.cc
        db/db_impl_readonly.cc
        db/db_iter.cc
        db/event_helpers.cc
        db/experimental.cc
        db/filename.cc
        db/file_indexer.cc
        db/flush_job.cc
        db/flush_scheduler.cc
        db/forward_iterator.cc
        db/internal_stats.cc
        db/log_reader.cc
        db/log_writer.cc
        db/managed_iterator.cc
        db/memtable.cc
        db/memtable_allocator.cc
        db/memtable_list.cc
        db/merge_helper.cc
        db/merge_operator.cc
        db/repair.cc
        db/slice.cc
136
        db/snapshot_impl.cc
D
Dmitri Smirnov 已提交
137 138 139 140 141 142 143 144 145 146 147
        db/table_cache.cc
        db/table_properties_collector.cc
        db/transaction_log_impl.cc
        db/version_builder.cc
        db/version_edit.cc
        db/version_set.cc
        db/wal_manager.cc
        db/write_batch.cc
        db/write_batch_base.cc
        db/write_controller.cc
        db/write_thread.cc
148
        db/xfunc_test_points.cc
149 150 151
        memtable/hash_cuckoo_rep.cc
        memtable/hash_linklist_rep.cc
        memtable/hash_skiplist_rep.cc
D
Dmitri Smirnov 已提交
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
        port/stack_trace.cc
        port/win/env_win.cc
        port/win/port_win.cc
        port/win/win_logger.cc
        table/adaptive_table_factory.cc
        table/block.cc
        table/block_based_filter_block.cc
        table/block_based_table_builder.cc
        table/block_based_table_factory.cc
        table/block_based_table_reader.cc
        table/block_builder.cc
        table/block_hash_index.cc
        table/block_prefix_index.cc
        table/bloom_block.cc
        table/cuckoo_table_builder.cc
        table/cuckoo_table_factory.cc
        table/cuckoo_table_reader.cc
        table/flush_block_policy.cc
        table/format.cc
        table/full_filter_block.cc
        table/get_context.cc
        table/iterator.cc
        table/merger.cc
175
        table/sst_file_writer.cc
D
Dmitri Smirnov 已提交
176 177 178 179 180 181 182 183 184
        table/meta_blocks.cc
        table/mock_table.cc
        table/plain_table_builder.cc
        table/plain_table_factory.cc
        table/plain_table_index.cc
        table/plain_table_key_coding.cc
        table/plain_table_reader.cc
        table/table_properties.cc
        table/two_level_iterator.cc
185
        tools/sst_dump_tool.cc
186
        tools/dump/db_dump_tool.cc
D
Dmitri Smirnov 已提交
187 188 189 190 191 192 193 194
        util/arena.cc
        util/auto_roll_logger.cc
        util/bloom.cc
        util/build_version.cc
        util/cache.cc
        util/coding.cc
        util/compaction_job_stats_impl.cc
        util/comparator.cc
195
        util/concurrent_arena.cc
D
Dmitri Smirnov 已提交
196 197
        util/crc32c.cc
        util/db_info_dumper.cc
198
        util/delete_scheduler_impl.cc
D
Dmitri Smirnov 已提交
199 200 201 202 203
        util/dynamic_bloom.cc
        util/env.cc
        util/env_hdfs.cc
        util/event_logger.cc
        util/file_util.cc
204
        util/file_reader_writer.cc
D
Dmitri Smirnov 已提交
205 206 207 208 209
        util/filter_policy.cc
        util/hash.cc
        util/histogram.cc
        util/instrumented_mutex.cc
        util/iostats_context.cc
210 211
        tools/ldb_cmd.cc
        tools/ldb_tool.cc
D
Dmitri Smirnov 已提交
212 213 214 215 216 217 218 219 220
        util/logging.cc
        util/log_buffer.cc
        util/memenv.cc
        util/mock_env.cc
        util/murmurhash.cc
        util/mutable_cf_options.cc
        util/options.cc
        util/options_builder.cc
        util/options_helper.cc
221
        util/options_parser.cc
Y
Yueh-Hsuan Chiang 已提交
222
        util/options_sanity_check.cc
D
Dmitri Smirnov 已提交
223 224
        util/perf_context.cc
        util/perf_level.cc
225
        util/random.cc
D
Dmitri Smirnov 已提交
226 227 228 229 230
        util/rate_limiter.cc
        util/skiplistrep.cc
        util/slice.cc
        util/statistics.cc
        util/status.cc
A
agiardullo 已提交
231
        util/status_message.cc
D
Dmitri Smirnov 已提交
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248
        util/string_util.cc
        util/sync_point.cc
        util/testharness.cc
        util/testutil.cc
        util/thread_local.cc
        util/thread_status_impl.cc
        util/thread_status_updater.cc
        util/thread_status_util.cc
        util/thread_status_util_debug.cc
        util/vectorrep.cc
        util/xfunc.cc
        util/xxhash.cc
        utilities/backupable/backupable_db.cc
        utilities/checkpoint/checkpoint.cc
        utilities/document/document_db.cc
        utilities/document/json_document.cc
        utilities/document/json_document_builder.cc
D
Dmitri Smirnov 已提交
249
        utilities/env_mirror.cc
D
Dmitri Smirnov 已提交
250 251 252
        utilities/flashcache/flashcache.cc
        utilities/geodb/geodb_impl.cc
        utilities/leveldb_options/leveldb_options.cc
253
        utilities/memory/memory_util.cc
D
Dmitri Smirnov 已提交
254 255 256 257
        utilities/merge_operators/string_append/stringappend.cc
        utilities/merge_operators/string_append/stringappend2.cc
        utilities/merge_operators/put.cc
        utilities/merge_operators/uint64add.cc
258
        utilities/options/options_util.cc
D
Dmitri Smirnov 已提交
259 260
        utilities/redis/redis_lists.cc
        utilities/spatialdb/spatial_db.cc
261
        utilities/table_properties_collectors/compact_on_deletion_collector.cc
262
        utilities/transactions/optimistic_transaction_impl.cc
D
Dmitri Smirnov 已提交
263
        utilities/transactions/optimistic_transaction_db_impl.cc
A
agiardullo 已提交
264
        utilities/transactions/transaction_base.cc
A
agiardullo 已提交
265 266
        utilities/transactions/transaction_impl.cc
        utilities/transactions/transaction_db_impl.cc
A
agiardullo 已提交
267
        utilities/transactions/transaction_db_mutex_impl.cc
A
agiardullo 已提交
268 269
        utilities/transactions/transaction_lock_mgr.cc
        utilities/transactions/transaction_util.cc
D
Dmitri Smirnov 已提交
270 271 272 273 274
        utilities/ttl/db_ttl_impl.cc
        utilities/write_batch_with_index/write_batch_with_index.cc
        utilities/write_batch_with_index/write_batch_with_index_internal.cc
)

275 276 277 278
# For test util library that is build only in DEBUG mode
# and linked to tests. Add test only code that is not #ifdefed for Release here.
set(TESTUTIL_SOURCE
    db/db_test_util.cc
279
    util/thread_status_updater_debug.cc
280 281
)

282 283 284
add_library(rocksdblib${ARTIFACT_SUFFIX} ${SOURCES})
set_target_properties(rocksdblib${ARTIFACT_SUFFIX} PROPERTIES COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/rocksdblib${ARTIFACT_SUFFIX}.pdb")
add_dependencies(rocksdblib${ARTIFACT_SUFFIX} GenerateBuildVersion)
D
Dmitri Smirnov 已提交
285

286 287 288 289
add_library(rocksdb${ARTIFACT_SUFFIX} SHARED ${SOURCES})
set_target_properties(rocksdb${ARTIFACT_SUFFIX} PROPERTIES COMPILE_FLAGS "-DROCKSDB_DLL -DROCKSDB_LIBRARY_EXPORTS /Fd${CMAKE_CFG_INTDIR}/rocksdb${ARTIFACT_SUFFIX}.pdb")
add_dependencies(rocksdb${ARTIFACT_SUFFIX} GenerateBuildVersion)
target_link_libraries(rocksdb${ARTIFACT_SUFFIX} ${LIBS})
D
Dmitri Smirnov 已提交
290 291 292 293 294 295

set(APPS
        db/db_bench.cc
        db/memtablerep_bench.cc
        table/table_reader_bench.cc
        tools/db_stress.cc
I
Igor Canadi 已提交
296
        tools/write_stress.cc
D
Dmitri Smirnov 已提交
297 298 299 300 301 302 303
        tools/db_repl_stress.cc
        tools/sst_dump.cc
        tools/dump/rocksdb_dump.cc
        tools/dump/rocksdb_undump.cc
        util/cache_bench.cc
)

304 305
set(C_TESTS db/c_test.c)

D
Dmitri Smirnov 已提交
306 307 308
set(TESTS
        db/column_family_test.cc
        db/compact_files_test.cc
309
        db/compaction_iterator_test.cc
D
Dmitri Smirnov 已提交
310 311 312 313 314 315
        db/compaction_job_test.cc
        db/compaction_job_stats_test.cc
        db/compaction_picker_test.cc
        db/comparator_db_test.cc
        db/corruption_test.cc
        db/cuckoo_table_db_test.cc
316
        db/db_compaction_filter_test.cc
317
        db/db_compaction_test.cc
318
        db/db_dynamic_level_test.cc
319
        db/db_inplace_update_test.cc
320
        db/db_iter_test.cc
321
        db/db_log_iter_test.cc
322 323 324 325
        db/db_properties_test.cc
        db/db_table_properties_test.cc
        db/db_tailing_iter_test.cc
        db/db_test.cc
326
        db/db_universal_compaction_test.cc
S
sdong 已提交
327
        db/db_wal_test.cc
D
Dmitri Smirnov 已提交
328 329 330 331 332 333
        db/dbformat_test.cc
        db/deletefile_test.cc
        db/fault_injection_test.cc
        db/file_indexer_test.cc
        db/filename_test.cc
        db/flush_job_test.cc
N
Nathan Bronson 已提交
334
        db/inlineskiplist_test.cc
D
Dmitri Smirnov 已提交
335 336
        db/listener_test.cc
        db/log_test.cc
337
        db/manual_compaction_test.cc
D
Dmitri Smirnov 已提交
338 339
        db/memtable_list_test.cc
        db/merge_test.cc
340
        db/merge_helper_test.cc
341
        db/options_file_test.cc
D
Dmitri Smirnov 已提交
342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362
        db/perf_context_test.cc
        db/plain_table_db_test.cc
        db/prefix_test.cc
        db/skiplist_test.cc
        db/table_properties_collector_test.cc
        db/version_builder_test.cc
        db/version_edit_test.cc
        db/version_set_test.cc
        db/wal_manager_test.cc
        db/write_batch_test.cc
        db/write_callback_test.cc
        db/write_controller_test.cc
        table/block_based_filter_block_test.cc
        table/block_hash_index_test.cc
        table/block_test.cc
        table/cuckoo_table_builder_test.cc
        table/cuckoo_table_reader_test.cc
        table/full_filter_block_test.cc
        table/merger_test.cc
        table/table_test.cc
        tools/db_sanity_test.cc
363
        tools/ldb_cmd_test.cc
D
Dmitri Smirnov 已提交
364
        tools/reduce_levels_test.cc
365
        tools/sst_dump_test.cc
D
Dmitri Smirnov 已提交
366 367 368 369 370 371 372
        util/arena_test.cc
        util/autovector_test.cc
        util/auto_roll_logger_test.cc
        util/bloom_test.cc
        util/cache_test.cc
        util/coding_test.cc
        util/crc32c_test.cc
373
        util/delete_scheduler_test.cc
D
Dmitri Smirnov 已提交
374 375 376 377
        util/dynamic_bloom_test.cc
        util/env_test.cc
        util/event_logger_test.cc
        util/filelock_test.cc
378
        util/file_reader_writer_test.cc
379
        util/heap_test.cc
D
Dmitri Smirnov 已提交
380 381 382 383 384 385 386 387 388 389 390 391 392
        util/histogram_test.cc
        util/memenv_test.cc
        util/mock_env_test.cc
        util/options_test.cc
        util/rate_limiter_test.cc
        util/slice_transform_test.cc
        util/thread_list_test.cc
        util/thread_local_test.cc
        utilities/backupable/backupable_db_test.cc
        utilities/checkpoint/checkpoint_test.cc
        utilities/document/document_db_test.cc
        utilities/document/json_document_test.cc
        utilities/geodb/geodb_test.cc
393
        utilities/memory/memory_test.cc
D
Dmitri Smirnov 已提交
394
        utilities/merge_operators/string_append/stringappend_test.cc
Y
yuslepukhin 已提交
395
        utilities/options/options_util_test.cc
D
Dmitri Smirnov 已提交
396 397
        utilities/redis/redis_lists_test.cc
        utilities/spatialdb/spatial_db_test.cc
398
        utilities/table_properties_collectors/compact_on_deletion_collector_test.cc
D
Dmitri Smirnov 已提交
399
        utilities/transactions/optimistic_transaction_test.cc
A
agiardullo 已提交
400
        utilities/transactions/transaction_test.cc
D
Dmitri Smirnov 已提交
401 402 403 404
        utilities/ttl/ttl_test.cc
        utilities/write_batch_with_index/write_batch_with_index_test.cc
)

405
set(EXES ${APPS})
D
Dmitri Smirnov 已提交
406 407 408 409

foreach(sourcefile ${EXES})
    string(REPLACE ".cc" "" exename ${sourcefile})
    string(REGEX REPLACE "^((.+)/)+" "" exename ${exename})
410 411
    add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile})
    target_link_libraries(${exename}${ARTIFACT_SUFFIX} ${LIBS})
D
Dmitri Smirnov 已提交
412
endforeach(sourcefile ${EXES})
413

414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438
# test utilities are only build in debug
set(TESTUTILLIB testutillib${ARTIFACT_SUFFIX})
add_library(${TESTUTILLIB} STATIC ${TESTUTIL_SOURCE})
set_target_properties(${TESTUTILLIB} PROPERTIES COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/testutillib${ARTIFACT_SUFFIX}.pdb")
set_target_properties(${TESTUTILLIB}
      PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1
      EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1
      EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
      )

# Tests are excluded from Release builds
set(TEST_EXES ${TESTS})

foreach(sourcefile ${TEST_EXES})
    string(REPLACE ".cc" "" exename ${sourcefile})
    string(REGEX REPLACE "^((.+)/)+" "" exename ${exename})
    add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile})
    set_target_properties(${exename}${ARTIFACT_SUFFIX}
      PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1
      EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1
      EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
      )
    target_link_libraries(${exename}${ARTIFACT_SUFFIX} ${LIBS} testutillib${ARTIFACT_SUFFIX})
endforeach(sourcefile ${TEST_EXES})

439
# C executables must link to a shared object
440
set(C_TEST_EXES ${C_TESTS})
441

442
foreach(sourcefile ${C_TEST_EXES})
443 444 445
    string(REPLACE ".c" "" exename ${sourcefile})
    string(REGEX REPLACE "^((.+)/)+" "" exename ${exename})
    add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile})
446 447 448 449 450 451 452
    set_target_properties(${exename}${ARTIFACT_SUFFIX}
      PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1
      EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1
      EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
      )
    target_link_libraries(${exename}${ARTIFACT_SUFFIX} rocksdb${ARTIFACT_SUFFIX} testutillib${ARTIFACT_SUFFIX})
endforeach(sourcefile ${C_TEST_EXES})