CMakeLists.txt 17.7 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 17
#        sample command: cmake -G "Visual Studio 12 Win64" -DGFLAGS=1 -DSNAPPY=1 -DJEMALLOC=1 -DJNI=1 ..
#        OR for VS Studio 15 cmake -G "Visual Studio 14 Win64" -DGFLAGS=1 -DSNAPPY=1 -DJEMALLOC=1 -DJNI=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
#

cmake_minimum_required(VERSION 2.6)
project(rocksdb)

include(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty.inc)
33 34 35
execute_process(COMMAND powershell -Command "Get-Date -format MM_dd_yyyy" OUTPUT_VARIABLE DATE)
execute_process(COMMAND powershell -Command "Get-Date -format HH:mm:ss" OUTPUT_VARIABLE TIME)
string(REGEX REPLACE "(..)_(..)_..(..).*" "\\1/\\2/\\3" DATE ${DATE})
D
Dmitri Smirnov 已提交
36 37 38
string(REGEX REPLACE "(..):(.....).*" " \\1:\\2" TIME ${TIME})
string(CONCAT GIT_DATE_TIME ${DATE} ${TIME})

39 40 41 42 43 44 45 46
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 已提交
47 48 49 50 51 52 53 54 55 56 57 58 59
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})

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

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

64 65 66 67 68 69 70 71 72 73
# 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))
74
   message(STATUS "Debug optimization is enabled")
75 76 77 78 79 80
   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 已提交
81

82
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG")
D
Dmitri Smirnov 已提交
83 84
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG")

85
add_definitions(-DWIN32 -DOS_WIN -D_MBCS -DWIN64 -DNOMINMAX)
D
Dmitri Smirnov 已提交
86 87 88 89 90

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

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

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

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

99
# Main library source code
D
Dmitri Smirnov 已提交
100
set(SOURCES
101
        db/auto_roll_logger.cc
D
Dmitri Smirnov 已提交
102 103 104
        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
        db/dbformat.cc
        db/db_filesnapshot.cc
        db/db_impl.cc
        db/db_impl_debug.cc
        db/db_impl_experimental.cc
116
        db/db_impl_add_file.cc
D
Dmitri Smirnov 已提交
117
        db/db_impl_readonly.cc
118
        db/db_info_dumper.cc
D
Dmitri Smirnov 已提交
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
        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
137
        db/snapshot_impl.cc
D
Dmitri Smirnov 已提交
138 139 140 141 142 143 144 145 146 147 148
        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
149
        db/xfunc_test_points.cc
150 151 152
        memtable/hash_cuckoo_rep.cc
        memtable/hash_linklist_rep.cc
        memtable/hash_skiplist_rep.cc
153 154
        memtable/skiplistrep.cc
        memtable/vectorrep.cc
D
Dmitri Smirnov 已提交
155
        port/stack_trace.cc
156
        port/win/io_win.cc
D
Dmitri Smirnov 已提交
157
        port/win/env_win.cc
158
        port/win/env_default.cc
D
Dmitri Smirnov 已提交
159 160
        port/win/port_win.cc
        port/win/win_logger.cc
161
        port/win/xpress_win.cc
D
Dmitri Smirnov 已提交
162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
        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_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
180
        table/sst_file_writer.cc
D
Dmitri Smirnov 已提交
181 182 183 184 185 186
        table/meta_blocks.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
D
Dmitri Smirnov 已提交
187
        table/persistent_cache_helper.cc
D
Dmitri Smirnov 已提交
188 189
        table/table_properties.cc
        table/two_level_iterator.cc
190
        tools/sst_dump_tool.cc
191
        tools/db_bench_tool.cc
192
        tools/dump/db_dump_tool.cc
D
Dmitri Smirnov 已提交
193 194 195 196 197 198 199
        util/arena.cc
        util/bloom.cc
        util/build_version.cc
        util/cache.cc
        util/coding.cc
        util/compaction_job_stats_impl.cc
        util/comparator.cc
200
        util/concurrent_arena.cc
D
Dmitri Smirnov 已提交
201
        util/crc32c.cc
202
        util/delete_scheduler.cc
D
Dmitri Smirnov 已提交
203 204
        util/dynamic_bloom.cc
        util/env.cc
A
Andrew Kryczka 已提交
205
        util/env_chroot.cc
D
Dmitri Smirnov 已提交
206 207 208
        util/env_hdfs.cc
        util/event_logger.cc
        util/file_util.cc
209
        util/file_reader_writer.cc
210
        util/sst_file_manager_impl.cc
D
Dmitri Smirnov 已提交
211 212 213
        util/filter_policy.cc
        util/hash.cc
        util/histogram.cc
214
        util/histogram_windowing.cc
D
Dmitri Smirnov 已提交
215 216
        util/instrumented_mutex.cc
        util/iostats_context.cc
217 218
        tools/ldb_cmd.cc
        tools/ldb_tool.cc
D
Dmitri Smirnov 已提交
219 220 221 222 223 224 225
        util/logging.cc
        util/log_buffer.cc
        util/memenv.cc
        util/murmurhash.cc
        util/mutable_cf_options.cc
        util/options.cc
        util/options_helper.cc
226
        util/options_parser.cc
Y
Yueh-Hsuan Chiang 已提交
227
        util/options_sanity_check.cc
D
Dmitri Smirnov 已提交
228 229
        util/perf_context.cc
        util/perf_level.cc
230
        util/random.cc
D
Dmitri Smirnov 已提交
231 232 233 234
        util/rate_limiter.cc
        util/slice.cc
        util/statistics.cc
        util/status.cc
A
agiardullo 已提交
235
        util/status_message.cc
D
Dmitri Smirnov 已提交
236 237 238 239 240
        util/string_util.cc
        util/sync_point.cc
        util/testharness.cc
        util/testutil.cc
        util/thread_local.cc
241
        util/threadpool.cc
D
Dmitri Smirnov 已提交
242 243 244 245
        util/thread_status_impl.cc
        util/thread_status_updater.cc
        util/thread_status_util.cc
        util/thread_status_util_debug.cc
S
SherlockNoMad 已提交
246
        util/transaction_test_util.cc
D
Dmitri Smirnov 已提交
247 248 249 250
        util/xfunc.cc
        util/xxhash.cc
        utilities/backupable/backupable_db.cc
        utilities/checkpoint/checkpoint.cc
251
        utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc
D
Dmitri Smirnov 已提交
252 253 254
        utilities/document/document_db.cc
        utilities/document/json_document.cc
        utilities/document/json_document_builder.cc
D
Dmitri Smirnov 已提交
255
        utilities/env_mirror.cc
256
        utilities/env_registry.cc
D
Dmitri Smirnov 已提交
257 258 259
        utilities/flashcache/flashcache.cc
        utilities/geodb/geodb_impl.cc
        utilities/leveldb_options/leveldb_options.cc
260
        utilities/memory/memory_util.cc
D
Dmitri Smirnov 已提交
261 262 263
        utilities/merge_operators/string_append/stringappend.cc
        utilities/merge_operators/string_append/stringappend2.cc
        utilities/merge_operators/put.cc
264
        utilities/merge_operators/max.cc
D
Dmitri Smirnov 已提交
265
        utilities/merge_operators/uint64add.cc
266
        utilities/options/options_util.cc
267
        utilities/persistent_cache/persistent_cache_tier.cc
268
        utilities/persistent_cache/volatile_tier_impl.cc
D
Dmitri Smirnov 已提交
269
        utilities/redis/redis_lists.cc
270
        utilities/simulator_cache/sim_cache.cc
D
Dmitri Smirnov 已提交
271
        utilities/spatialdb/spatial_db.cc
272
        utilities/table_properties_collectors/compact_on_deletion_collector.cc
273
        utilities/transactions/optimistic_transaction_impl.cc
D
Dmitri Smirnov 已提交
274
        utilities/transactions/optimistic_transaction_db_impl.cc
A
agiardullo 已提交
275
        utilities/transactions/transaction_base.cc
A
agiardullo 已提交
276 277
        utilities/transactions/transaction_impl.cc
        utilities/transactions/transaction_db_impl.cc
A
agiardullo 已提交
278
        utilities/transactions/transaction_db_mutex_impl.cc
A
agiardullo 已提交
279 280
        utilities/transactions/transaction_lock_mgr.cc
        utilities/transactions/transaction_util.cc
D
Dmitri Smirnov 已提交
281 282 283 284 285
        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
)

286 287 288 289
# 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
290 291
    table/mock_table.cc
    util/mock_env.cc
292
    util/fault_injection_test_env.cc
293
    util/thread_status_updater_debug.cc
294 295
)

296 297 298
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 已提交
299

300 301 302 303
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 已提交
304

305 306 307 308 309 310 311 312 313 314 315
if (DEFINED JNI)
  if (${JNI} EQUAL 1)
    message(STATUS "JNI library is enabled")
    add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/java)
  else()
    message(STATUS "JNI library is disabled")
  endif()
else()
  message(STATUS "JNI library is disabled")
endif()

D
Dmitri Smirnov 已提交
316
set(APPS
317
        tools/db_bench.cc
D
Dmitri Smirnov 已提交
318 319 320
        db/memtablerep_bench.cc
        table/table_reader_bench.cc
        tools/db_stress.cc
I
Igor Canadi 已提交
321
        tools/write_stress.cc
D
Dmitri Smirnov 已提交
322
        tools/db_repl_stress.cc
323
        tools/ldb.cc
D
Dmitri Smirnov 已提交
324 325 326 327
        tools/sst_dump.cc
        tools/dump/rocksdb_dump.cc
        tools/dump/rocksdb_undump.cc
        util/cache_bench.cc
328
        utilities/persistent_cache/hash_table_bench.cc
D
Dmitri Smirnov 已提交
329 330
)

331 332
set(C_TESTS db/c_test.c)

D
Dmitri Smirnov 已提交
333
set(TESTS
334
        db/auto_roll_logger_test.cc
D
Dmitri Smirnov 已提交
335 336
        db/column_family_test.cc
        db/compact_files_test.cc
337
        db/compaction_iterator_test.cc
D
Dmitri Smirnov 已提交
338 339 340 341 342 343
        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
344
        db/db_compaction_filter_test.cc
345
        db/db_compaction_test.cc
346
        db/db_dynamic_level_test.cc
347
        db/db_inplace_update_test.cc
348
        db/db_iter_test.cc
349
        db/db_log_iter_test.cc
350 351 352 353
        db/db_properties_test.cc
        db/db_table_properties_test.cc
        db/db_tailing_iter_test.cc
        db/db_test.cc
354
        db/db_test2.cc
355
        db/db_block_cache_test.cc
Y
Yi Wu 已提交
356 357 358
        db/db_bloom_filter_test.cc
        db/db_iterator_test.cc
        db/db_sst_test.cc
359
        db/db_universal_compaction_test.cc
S
sdong 已提交
360
        db/db_wal_test.cc
D
Dmitri Smirnov 已提交
361 362 363 364 365 366
        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 已提交
367
        db/inlineskiplist_test.cc
D
Dmitri Smirnov 已提交
368 369
        db/listener_test.cc
        db/log_test.cc
370
        db/manual_compaction_test.cc
D
Dmitri Smirnov 已提交
371 372
        db/memtable_list_test.cc
        db/merge_test.cc
373
        db/merge_helper_test.cc
374
        db/options_file_test.cc
D
Dmitri Smirnov 已提交
375 376 377
        db/perf_context_test.cc
        db/plain_table_db_test.cc
        db/prefix_test.cc
A
Andrew Kryczka 已提交
378
        db/repair_test.cc
D
Dmitri Smirnov 已提交
379 380 381 382 383 384 385 386 387
        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
O
omegaga 已提交
388
        db/db_io_failure_test.cc
D
Dmitri Smirnov 已提交
389 390 391 392 393 394 395 396
        table/block_based_filter_block_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
397
        tools/ldb_cmd_test.cc
D
Dmitri Smirnov 已提交
398
        tools/reduce_levels_test.cc
399
        tools/sst_dump_test.cc
D
Dmitri Smirnov 已提交
400 401 402 403 404 405
        util/arena_test.cc
        util/autovector_test.cc
        util/bloom_test.cc
        util/cache_test.cc
        util/coding_test.cc
        util/crc32c_test.cc
406
        util/delete_scheduler_test.cc
D
Dmitri Smirnov 已提交
407
        util/dynamic_bloom_test.cc
408
        util/env_basic_test.cc
D
Dmitri Smirnov 已提交
409 410 411
        util/env_test.cc
        util/event_logger_test.cc
        util/filelock_test.cc
412
        util/file_reader_writer_test.cc
413
        util/heap_test.cc
D
Dmitri Smirnov 已提交
414
        util/histogram_test.cc
415
        util/iostats_context_test.cc
D
Dmitri Smirnov 已提交
416
        util/mock_env_test.cc
417
        util/options_settable_test.cc
D
Dmitri Smirnov 已提交
418 419 420 421 422 423 424 425 426
        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
427
        utilities/env_registry_test.cc
D
Dmitri Smirnov 已提交
428
        utilities/geodb/geodb_test.cc
429
        utilities/memory/memory_test.cc
D
Dmitri Smirnov 已提交
430
        utilities/merge_operators/string_append/stringappend_test.cc
Y
yuslepukhin 已提交
431
        utilities/options/options_util_test.cc
432
        utilities/persistent_cache/hash_table_test.cc
433
        utilities/persistent_cache/persistent_cache_test.cc
D
Dmitri Smirnov 已提交
434 435
        utilities/redis/redis_lists_test.cc
        utilities/spatialdb/spatial_db_test.cc
436
        utilities/table_properties_collectors/compact_on_deletion_collector_test.cc
D
Dmitri Smirnov 已提交
437
        utilities/transactions/optimistic_transaction_test.cc
A
agiardullo 已提交
438
        utilities/transactions/transaction_test.cc
D
Dmitri Smirnov 已提交
439 440 441 442
        utilities/ttl/ttl_test.cc
        utilities/write_batch_with_index/write_batch_with_index_test.cc
)

443
set(EXES ${APPS})
D
Dmitri Smirnov 已提交
444 445 446 447

foreach(sourcefile ${EXES})
    string(REPLACE ".cc" "" exename ${sourcefile})
    string(REGEX REPLACE "^((.+)/)+" "" exename ${exename})
448 449
    add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile})
    target_link_libraries(${exename}${ARTIFACT_SUFFIX} ${LIBS})
D
Dmitri Smirnov 已提交
450
endforeach(sourcefile ${EXES})
451

452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476
# 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})

477
# C executables must link to a shared object
478
set(C_TEST_EXES ${C_TESTS})
479

480
foreach(sourcefile ${C_TEST_EXES})
481 482 483
    string(REPLACE ".c" "" exename ${sourcefile})
    string(REGEX REPLACE "^((.+)/)+" "" exename ${exename})
    add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile})
484 485 486 487 488 489 490
    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})