1# Copyright (c) 2011 The LevelDB Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. See the AUTHORS file for names of contributors. 4 5# Inherit some settings from environment variables, if available 6 7#----------------------------------------------- 8 9BASH_EXISTS := $(shell which bash) 10SHELL := $(shell which bash) 11 12CLEAN_FILES = # deliberately empty, so we can append below. 13CFLAGS += ${EXTRA_CFLAGS} 14CXXFLAGS += ${EXTRA_CXXFLAGS} 15LDFLAGS += $(EXTRA_LDFLAGS) 16MACHINE ?= $(shell uname -m) 17ARFLAGS = ${EXTRA_ARFLAGS} rs 18STRIPFLAGS = -S -x 19 20# Transform parallel LOG output into something more readable. 21perl_command = perl -n \ 22 -e '@a=split("\t",$$_,-1); $$t=$$a[8];' \ 23 -e '$$t =~ /.*if\s\[\[\s"(.*?\.[\w\/]+)/ and $$t=$$1;' \ 24 -e '$$t =~ s,^\./,,;' \ 25 -e '$$t =~ s, >.*,,; chomp $$t;' \ 26 -e '$$t =~ /.*--gtest_filter=(.*?\.[\w\/]+)/ and $$t=$$1;' \ 27 -e 'printf "%7.3f %s %s\n", $$a[3], $$a[6] == 0 ? "PASS" : "FAIL", $$t' 28quoted_perl_command = $(subst ','\'',$(perl_command)) 29 30# DEBUG_LEVEL can have three values: 31# * DEBUG_LEVEL=2; this is the ultimate debug mode. It will compile rocksdb 32# without any optimizations. To compile with level 2, issue `make dbg` 33# * DEBUG_LEVEL=1; debug level 1 enables all assertions and debug code, but 34# compiles rocksdb with -O2 optimizations. this is the default debug level. 35# `make all` or `make <binary_target>` compile RocksDB with debug level 1. 36# We use this debug level when developing RocksDB. 37# * DEBUG_LEVEL=0; this is the debug level we use for release. If you're 38# running rocksdb in production you most definitely want to compile RocksDB 39# with debug level 0. To compile with level 0, run `make shared_lib`, 40# `make install-shared`, `make static_lib`, `make install-static` or 41# `make install` 42 43# Set the default DEBUG_LEVEL to 1 44DEBUG_LEVEL?=1 45 46ifeq ($(MAKECMDGOALS),dbg) 47 DEBUG_LEVEL=2 48endif 49 50ifeq ($(MAKECMDGOALS),clean) 51 DEBUG_LEVEL=0 52endif 53 54ifeq ($(MAKECMDGOALS),release) 55 DEBUG_LEVEL=0 56endif 57 58ifeq ($(MAKECMDGOALS),shared_lib) 59 DEBUG_LEVEL=0 60endif 61 62ifeq ($(MAKECMDGOALS),install-shared) 63 DEBUG_LEVEL=0 64endif 65 66ifeq ($(MAKECMDGOALS),static_lib) 67 DEBUG_LEVEL=0 68endif 69 70ifeq ($(MAKECMDGOALS),install-static) 71 DEBUG_LEVEL=0 72endif 73 74ifeq ($(MAKECMDGOALS),install) 75 DEBUG_LEVEL=0 76endif 77 78ifeq ($(MAKECMDGOALS),rocksdbjavastatic) 79 ifneq ($(DEBUG_LEVEL),2) 80 DEBUG_LEVEL=0 81 endif 82endif 83 84ifeq ($(MAKECMDGOALS),rocksdbjavastaticrelease) 85 ifneq ($(DEBUG_LEVEL),2) 86 DEBUG_LEVEL=0 87 endif 88endif 89 90ifeq ($(MAKECMDGOALS),rocksdbjavastaticreleasedocker) 91 ifneq ($(DEBUG_LEVEL),2) 92 DEBUG_LEVEL=0 93 endif 94endif 95 96ifeq ($(MAKECMDGOALS),rocksdbjavastaticpublish) 97 DEBUG_LEVEL=0 98endif 99 100$(info $$DEBUG_LEVEL is ${DEBUG_LEVEL}) 101 102# Lite build flag. 103LITE ?= 0 104ifeq ($(LITE), 0) 105ifneq ($(filter -DROCKSDB_LITE,$(OPT)),) 106 # Be backward compatible and support older format where OPT=-DROCKSDB_LITE is 107 # specified instead of LITE=1 on the command line. 108 LITE=1 109endif 110else ifeq ($(LITE), 1) 111ifeq ($(filter -DROCKSDB_LITE,$(OPT)),) 112 OPT += -DROCKSDB_LITE 113endif 114endif 115 116# Figure out optimize level. 117ifneq ($(DEBUG_LEVEL), 2) 118ifeq ($(LITE), 0) 119 OPT += -O2 120else 121 OPT += -Os 122endif 123endif 124 125# compile with -O2 if debug level is not 2 126ifneq ($(DEBUG_LEVEL), 2) 127OPT += -fno-omit-frame-pointer 128# Skip for archs that don't support -momit-leaf-frame-pointer 129ifeq (,$(shell $(CXX) -fsyntax-only -momit-leaf-frame-pointer -xc /dev/null 2>&1)) 130OPT += -momit-leaf-frame-pointer 131endif 132endif 133 134ifeq (,$(shell $(CXX) -fsyntax-only -maltivec -xc /dev/null 2>&1)) 135CXXFLAGS += -DHAS_ALTIVEC 136CFLAGS += -DHAS_ALTIVEC 137HAS_ALTIVEC=1 138endif 139 140ifeq (,$(shell $(CXX) -fsyntax-only -mcpu=power8 -xc /dev/null 2>&1)) 141CXXFLAGS += -DHAVE_POWER8 142CFLAGS += -DHAVE_POWER8 143HAVE_POWER8=1 144endif 145 146ifeq (,$(shell $(CXX) -fsyntax-only -march=armv8-a+crc+crypto -xc /dev/null 2>&1)) 147CXXFLAGS += -march=armv8-a+crc+crypto 148CFLAGS += -march=armv8-a+crc+crypto 149ARMCRC_SOURCE=1 150endif 151 152# if we're compiling for release, compile without debug code (-DNDEBUG) 153ifeq ($(DEBUG_LEVEL),0) 154OPT += -DNDEBUG 155 156ifneq ($(USE_RTTI), 1) 157 CXXFLAGS += -fno-rtti 158else 159 CXXFLAGS += -DROCKSDB_USE_RTTI 160endif 161else 162ifneq ($(USE_RTTI), 0) 163 CXXFLAGS += -DROCKSDB_USE_RTTI 164else 165 CXXFLAGS += -fno-rtti 166endif 167 168$(warning Warning: Compiling in debug mode. Don't use the resulting binary in production) 169endif 170 171#----------------------------------------------- 172include src.mk 173 174AM_DEFAULT_VERBOSITY = 0 175 176AM_V_GEN = $(am__v_GEN_$(V)) 177am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) 178am__v_GEN_0 = @echo " GEN " $@; 179am__v_GEN_1 = 180AM_V_at = $(am__v_at_$(V)) 181am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) 182am__v_at_0 = @ 183am__v_at_1 = 184 185AM_V_CC = $(am__v_CC_$(V)) 186am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) 187am__v_CC_0 = @echo " CC " $@; 188am__v_CC_1 = 189CCLD = $(CC) 190LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ 191AM_V_CCLD = $(am__v_CCLD_$(V)) 192am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) 193am__v_CCLD_0 = @echo " CCLD " $@; 194am__v_CCLD_1 = 195AM_V_AR = $(am__v_AR_$(V)) 196am__v_AR_ = $(am__v_AR_$(AM_DEFAULT_VERBOSITY)) 197am__v_AR_0 = @echo " AR " $@; 198am__v_AR_1 = 199 200ifdef ROCKSDB_USE_LIBRADOS 201LIB_SOURCES += utilities/env_librados.cc 202LDFLAGS += -lrados 203endif 204 205AM_LINK = $(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(COVERAGEFLAGS) 206# detect what platform we're building on 207dummy := $(shell (export ROCKSDB_ROOT="$(CURDIR)"; export PORTABLE="$(PORTABLE)"; "$(CURDIR)/build_tools/build_detect_platform" "$(CURDIR)/make_config.mk")) 208# this file is generated by the previous line to set build flags and sources 209include make_config.mk 210CLEAN_FILES += make_config.mk 211 212missing_make_config_paths := $(shell \ 213 grep "\./\S*\|/\S*" -o $(CURDIR)/make_config.mk | \ 214 while read path; \ 215 do [ -e $$path ] || echo $$path; \ 216 done | sort | uniq) 217 218$(foreach path, $(missing_make_config_paths), \ 219 $(warning Warning: $(path) dont exist)) 220 221ifeq ($(PLATFORM), OS_AIX) 222# no debug info 223else ifneq ($(PLATFORM), IOS) 224CFLAGS += -g 225CXXFLAGS += -g 226else 227# no debug info for IOS, that will make our library big 228OPT += -DNDEBUG 229endif 230 231ifeq ($(PLATFORM), OS_AIX) 232ARFLAGS = -X64 rs 233STRIPFLAGS = -X64 -x 234endif 235 236ifeq ($(PLATFORM), OS_SOLARIS) 237 PLATFORM_CXXFLAGS += -D _GLIBCXX_USE_C99 238endif 239ifneq ($(filter -DROCKSDB_LITE,$(OPT)),) 240 # found 241 CFLAGS += -fno-exceptions 242 CXXFLAGS += -fno-exceptions 243 # LUA is not supported under ROCKSDB_LITE 244 LUA_PATH = 245endif 246 247# ASAN doesn't work well with jemalloc. If we're compiling with ASAN, we should use regular malloc. 248ifdef COMPILE_WITH_ASAN 249 DISABLE_JEMALLOC=1 250 EXEC_LDFLAGS += -fsanitize=address 251 PLATFORM_CCFLAGS += -fsanitize=address 252 PLATFORM_CXXFLAGS += -fsanitize=address 253endif 254 255# TSAN doesn't work well with jemalloc. If we're compiling with TSAN, we should use regular malloc. 256ifdef COMPILE_WITH_TSAN 257 DISABLE_JEMALLOC=1 258 EXEC_LDFLAGS += -fsanitize=thread 259 PLATFORM_CCFLAGS += -fsanitize=thread -fPIC -DFOLLY_SANITIZE_THREAD 260 PLATFORM_CXXFLAGS += -fsanitize=thread -fPIC -DFOLLY_SANITIZE_THREAD 261 # Turn off -pg when enabling TSAN testing, because that induces 262 # a link failure. TODO: find the root cause 263 PROFILING_FLAGS = 264 # LUA is not supported under TSAN 265 LUA_PATH = 266 # Limit keys for crash test under TSAN to avoid error: 267 # "ThreadSanitizer: DenseSlabAllocator overflow. Dying." 268 CRASH_TEST_EXT_ARGS += --max_key=1000000 269endif 270 271# AIX doesn't work with -pg 272ifeq ($(PLATFORM), OS_AIX) 273 PROFILING_FLAGS = 274endif 275 276# USAN doesn't work well with jemalloc. If we're compiling with USAN, we should use regular malloc. 277ifdef COMPILE_WITH_UBSAN 278 DISABLE_JEMALLOC=1 279 # Suppress alignment warning because murmurhash relies on casting unaligned 280 # memory to integer. Fixing it may cause performance regression. 3-way crc32 281 # relies on it too, although it can be rewritten to eliminate with minimal 282 # performance regression. 283 EXEC_LDFLAGS += -fsanitize=undefined -fno-sanitize-recover=all 284 PLATFORM_CCFLAGS += -fsanitize=undefined -fno-sanitize-recover=all -DROCKSDB_UBSAN_RUN 285 PLATFORM_CXXFLAGS += -fsanitize=undefined -fno-sanitize-recover=all -DROCKSDB_UBSAN_RUN 286endif 287 288ifdef ROCKSDB_VALGRIND_RUN 289 PLATFORM_CCFLAGS += -DROCKSDB_VALGRIND_RUN 290 PLATFORM_CXXFLAGS += -DROCKSDB_VALGRIND_RUN 291endif 292 293ifndef DISABLE_JEMALLOC 294 ifdef JEMALLOC 295 PLATFORM_CXXFLAGS += -DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE 296 PLATFORM_CCFLAGS += -DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE 297 endif 298 ifdef WITH_JEMALLOC_FLAG 299 PLATFORM_LDFLAGS += -ljemalloc 300 JAVA_LDFLAGS += -ljemalloc 301 endif 302 EXEC_LDFLAGS := $(JEMALLOC_LIB) $(EXEC_LDFLAGS) 303 PLATFORM_CXXFLAGS += $(JEMALLOC_INCLUDE) 304 PLATFORM_CCFLAGS += $(JEMALLOC_INCLUDE) 305endif 306 307ifndef USE_FOLLY_DISTRIBUTED_MUTEX 308 USE_FOLLY_DISTRIBUTED_MUTEX=0 309endif 310 311export GTEST_THROW_ON_FAILURE=1 312export GTEST_HAS_EXCEPTIONS=1 313GTEST_DIR = ./third-party/gtest-1.8.1/fused-src 314# AIX: pre-defined system headers are surrounded by an extern "C" block 315ifeq ($(PLATFORM), OS_AIX) 316 PLATFORM_CCFLAGS += -I$(GTEST_DIR) 317 PLATFORM_CXXFLAGS += -I$(GTEST_DIR) 318else 319 PLATFORM_CCFLAGS += -isystem $(GTEST_DIR) 320 PLATFORM_CXXFLAGS += -isystem $(GTEST_DIR) 321endif 322 323ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1) 324 FOLLY_DIR = ./third-party/folly 325 # AIX: pre-defined system headers are surrounded by an extern "C" block 326 ifeq ($(PLATFORM), OS_AIX) 327 PLATFORM_CCFLAGS += -I$(FOLLY_DIR) 328 PLATFORM_CXXFLAGS += -I$(FOLLY_DIR) 329 else 330 PLATFORM_CCFLAGS += -isystem $(FOLLY_DIR) 331 PLATFORM_CXXFLAGS += -isystem $(FOLLY_DIR) 332 endif 333endif 334 335ifdef TEST_CACHE_LINE_SIZE 336 PLATFORM_CCFLAGS += -DTEST_CACHE_LINE_SIZE=$(TEST_CACHE_LINE_SIZE) 337 PLATFORM_CXXFLAGS += -DTEST_CACHE_LINE_SIZE=$(TEST_CACHE_LINE_SIZE) 338endif 339 340# This (the first rule) must depend on "all". 341default: all 342 343WARNING_FLAGS = -W -Wextra -Wall -Wsign-compare -Wshadow \ 344 -Wunused-parameter 345 346ifeq ($(PLATFORM), OS_OPENBSD) 347 WARNING_FLAGS += -Wno-unused-lambda-capture 348endif 349 350ifndef DISABLE_WARNING_AS_ERROR 351 WARNING_FLAGS += -Werror 352endif 353 354 355ifdef LUA_PATH 356 357ifndef LUA_INCLUDE 358LUA_INCLUDE=$(LUA_PATH)/include 359endif 360 361LUA_INCLUDE_FILE=$(LUA_INCLUDE)/lualib.h 362 363ifeq ("$(wildcard $(LUA_INCLUDE_FILE))", "") 364# LUA_INCLUDE_FILE does not exist 365$(error Cannot find lualib.h under $(LUA_INCLUDE). Try to specify both LUA_PATH and LUA_INCLUDE manually) 366endif 367LUA_FLAGS = -I$(LUA_INCLUDE) -DLUA -DLUA_COMPAT_ALL 368CFLAGS += $(LUA_FLAGS) 369CXXFLAGS += $(LUA_FLAGS) 370 371ifndef LUA_LIB 372LUA_LIB = $(LUA_PATH)/lib/liblua.a 373endif 374ifeq ("$(wildcard $(LUA_LIB))", "") # LUA_LIB does not exist 375$(error $(LUA_LIB) does not exist. Try to specify both LUA_PATH and LUA_LIB manually) 376endif 377EXEC_LDFLAGS += $(LUA_LIB) 378 379endif 380 381ifeq ($(NO_THREEWAY_CRC32C), 1) 382 CXXFLAGS += -DNO_THREEWAY_CRC32C 383endif 384 385CFLAGS += $(WARNING_FLAGS) -I. -I./include $(PLATFORM_CCFLAGS) $(OPT) 386CXXFLAGS += $(WARNING_FLAGS) -I. -I./include $(PLATFORM_CXXFLAGS) $(OPT) -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers 387 388LDFLAGS += $(PLATFORM_LDFLAGS) 389 390# If NO_UPDATE_BUILD_VERSION is set we don't update util/build_version.cc, but 391# the file needs to already exist or else the build will fail 392ifndef NO_UPDATE_BUILD_VERSION 393date := $(shell date +%F) 394ifdef FORCE_GIT_SHA 395 git_sha := $(FORCE_GIT_SHA) 396else 397 git_sha := $(shell git rev-parse HEAD 2>/dev/null) 398endif 399gen_build_version = sed -e s/@@GIT_SHA@@/$(git_sha)/ -e s/@@GIT_DATE_TIME@@/$(date)/ util/build_version.cc.in 400 401# Record the version of the source that we are compiling. 402# We keep a record of the git revision in this file. It is then built 403# as a regular source file as part of the compilation process. 404# One can run "strings executable_filename | grep _build_" to find 405# the version of the source that we used to build the executable file. 406FORCE: 407util/build_version.cc: FORCE 408 $(AM_V_GEN)rm -f $@-t 409 $(AM_V_at)$(gen_build_version) > $@-t 410 $(AM_V_at)if test -f $@; then \ 411 cmp -s $@-t $@ && rm -f $@-t || mv -f $@-t $@; \ 412 else mv -f $@-t $@; fi 413endif 414 415LIBOBJECTS = $(LIB_SOURCES:.cc=.o) 416ifeq ($(HAVE_POWER8),1) 417LIB_CC_OBJECTS = $(LIB_SOURCES:.cc=.o) 418LIBOBJECTS += $(LIB_SOURCES_C:.c=.o) 419LIBOBJECTS += $(LIB_SOURCES_ASM:.S=.o) 420else 421LIB_CC_OBJECTS = $(LIB_SOURCES:.cc=.o) 422endif 423 424LIBOBJECTS += $(TOOL_LIB_SOURCES:.cc=.o) 425MOCKOBJECTS = $(MOCK_LIB_SOURCES:.cc=.o) 426ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1) 427 FOLLYOBJECTS = $(FOLLY_SOURCES:.cpp=.o) 428endif 429 430GTEST = $(GTEST_DIR)/gtest/gtest-all.o 431TESTUTIL = ./test_util/testutil.o 432TESTHARNESS = ./test_util/testharness.o $(TESTUTIL) $(MOCKOBJECTS) $(GTEST) 433VALGRIND_ERROR = 2 434VALGRIND_VER := $(join $(VALGRIND_VER),valgrind) 435 436VALGRIND_OPTS = --error-exitcode=$(VALGRIND_ERROR) --leak-check=full 437 438BENCHTOOLOBJECTS = $(BENCH_LIB_SOURCES:.cc=.o) $(LIBOBJECTS) $(TESTUTIL) 439 440ANALYZETOOLOBJECTS = $(ANALYZER_LIB_SOURCES:.cc=.o) 441 442STRESSTOOLOBJECTS = $(STRESS_LIB_SOURCES:.cc=.o) $(LIBOBJECTS) $(TESTUTIL) 443 444EXPOBJECTS = $(LIBOBJECTS) $(TESTUTIL) 445 446TESTS = \ 447 db_basic_test \ 448 db_encryption_test \ 449 db_test2 \ 450 external_sst_file_basic_test \ 451 auto_roll_logger_test \ 452 bloom_test \ 453 dynamic_bloom_test \ 454 c_test \ 455 checkpoint_test \ 456 crc32c_test \ 457 coding_test \ 458 inlineskiplist_test \ 459 env_basic_test \ 460 env_test \ 461 env_logger_test \ 462 hash_test \ 463 random_test \ 464 thread_local_test \ 465 rate_limiter_test \ 466 perf_context_test \ 467 iostats_context_test \ 468 db_wal_test \ 469 db_block_cache_test \ 470 db_test \ 471 db_blob_index_test \ 472 db_iter_test \ 473 db_iter_stress_test \ 474 db_log_iter_test \ 475 db_bloom_filter_test \ 476 db_compaction_filter_test \ 477 db_compaction_test \ 478 db_dynamic_level_test \ 479 db_flush_test \ 480 db_inplace_update_test \ 481 db_iterator_test \ 482 db_memtable_test \ 483 db_merge_operator_test \ 484 db_merge_operand_test \ 485 db_options_test \ 486 db_range_del_test \ 487 db_secondary_test \ 488 db_sst_test \ 489 db_tailing_iter_test \ 490 db_io_failure_test \ 491 db_properties_test \ 492 db_table_properties_test \ 493 db_statistics_test \ 494 db_write_test \ 495 error_handler_test \ 496 autovector_test \ 497 blob_db_test \ 498 cleanable_test \ 499 column_family_test \ 500 table_properties_collector_test \ 501 arena_test \ 502 block_test \ 503 data_block_hash_index_test \ 504 cache_test \ 505 corruption_test \ 506 slice_test \ 507 slice_transform_test \ 508 dbformat_test \ 509 fault_injection_test \ 510 filelock_test \ 511 filename_test \ 512 file_reader_writer_test \ 513 block_based_filter_block_test \ 514 full_filter_block_test \ 515 partitioned_filter_block_test \ 516 hash_table_test \ 517 histogram_test \ 518 log_test \ 519 manual_compaction_test \ 520 mock_env_test \ 521 memtable_list_test \ 522 merge_helper_test \ 523 memory_test \ 524 merge_test \ 525 merger_test \ 526 util_merge_operators_test \ 527 options_file_test \ 528 reduce_levels_test \ 529 plain_table_db_test \ 530 comparator_db_test \ 531 external_sst_file_test \ 532 import_column_family_test \ 533 prefix_test \ 534 skiplist_test \ 535 write_buffer_manager_test \ 536 stringappend_test \ 537 cassandra_format_test \ 538 cassandra_functional_test \ 539 cassandra_row_merge_test \ 540 cassandra_serialize_test \ 541 ttl_test \ 542 backupable_db_test \ 543 cache_simulator_test \ 544 sim_cache_test \ 545 version_edit_test \ 546 version_set_test \ 547 compaction_picker_test \ 548 version_builder_test \ 549 file_indexer_test \ 550 write_batch_test \ 551 write_batch_with_index_test \ 552 write_controller_test\ 553 deletefile_test \ 554 obsolete_files_test \ 555 table_test \ 556 delete_scheduler_test \ 557 options_test \ 558 options_settable_test \ 559 options_util_test \ 560 event_logger_test \ 561 timer_queue_test \ 562 cuckoo_table_builder_test \ 563 cuckoo_table_reader_test \ 564 cuckoo_table_db_test \ 565 flush_job_test \ 566 wal_manager_test \ 567 listener_test \ 568 compaction_iterator_test \ 569 compaction_job_test \ 570 thread_list_test \ 571 sst_dump_test \ 572 compact_files_test \ 573 optimistic_transaction_test \ 574 write_callback_test \ 575 heap_test \ 576 compact_on_deletion_collector_test \ 577 compaction_job_stats_test \ 578 option_change_migration_test \ 579 transaction_test \ 580 ldb_cmd_test \ 581 persistent_cache_test \ 582 statistics_test \ 583 stats_history_test \ 584 lru_cache_test \ 585 object_registry_test \ 586 repair_test \ 587 env_timed_test \ 588 write_prepared_transaction_test \ 589 write_unprepared_transaction_test \ 590 db_universal_compaction_test \ 591 trace_analyzer_test \ 592 repeatable_thread_test \ 593 range_tombstone_fragmenter_test \ 594 range_del_aggregator_test \ 595 sst_file_reader_test \ 596 db_secondary_test \ 597 block_cache_tracer_test \ 598 block_cache_trace_analyzer_test \ 599 defer_test \ 600 601ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1) 602 TESTS += folly_synchronization_distributed_mutex_test 603endif 604 605PARALLEL_TEST = \ 606 backupable_db_test \ 607 db_bloom_filter_test \ 608 db_compaction_filter_test \ 609 db_compaction_test \ 610 db_merge_operator_test \ 611 db_sst_test \ 612 db_test \ 613 db_universal_compaction_test \ 614 db_wal_test \ 615 external_sst_file_test \ 616 import_column_family_test \ 617 fault_injection_test \ 618 file_reader_writer_test \ 619 inlineskiplist_test \ 620 manual_compaction_test \ 621 persistent_cache_test \ 622 table_test \ 623 transaction_test \ 624 write_prepared_transaction_test \ 625 write_unprepared_transaction_test \ 626 627# options_settable_test doesn't pass with UBSAN as we use hack in the test 628ifdef COMPILE_WITH_UBSAN 629 TESTS := $(shell echo $(TESTS) | sed 's/\boptions_settable_test\b//g') 630endif 631SUBSET := $(TESTS) 632ifdef ROCKSDBTESTS_START 633 SUBSET := $(shell echo $(SUBSET) | sed 's/^.*$(ROCKSDBTESTS_START)/$(ROCKSDBTESTS_START)/') 634endif 635 636ifdef ROCKSDBTESTS_END 637 SUBSET := $(shell echo $(SUBSET) | sed 's/$(ROCKSDBTESTS_END).*//') 638endif 639 640TOOLS = \ 641 sst_dump \ 642 db_sanity_test \ 643 db_stress \ 644 write_stress \ 645 ldb \ 646 db_repl_stress \ 647 rocksdb_dump \ 648 rocksdb_undump \ 649 blob_dump \ 650 trace_analyzer \ 651 block_cache_trace_analyzer \ 652 653TEST_LIBS = \ 654 librocksdb_env_basic_test.a 655 656# TODO: add back forward_iterator_bench, after making it build in all environemnts. 657BENCHMARKS = db_bench table_reader_bench cache_bench memtablerep_bench filter_bench persistent_cache_bench range_del_aggregator_bench 658 659# if user didn't config LIBNAME, set the default 660ifeq ($(LIBNAME),) 661# we should only run rocksdb in production with DEBUG_LEVEL 0 662ifeq ($(DEBUG_LEVEL),0) 663 LIBNAME=librocksdb 664else 665 LIBNAME=librocksdb_debug 666endif 667endif 668LIBRARY = ${LIBNAME}.a 669TOOLS_LIBRARY = ${LIBNAME}_tools.a 670STRESS_LIBRARY = ${LIBNAME}_stress.a 671 672ROCKSDB_MAJOR = $(shell egrep "ROCKSDB_MAJOR.[0-9]" include/rocksdb/version.h | cut -d ' ' -f 3) 673ROCKSDB_MINOR = $(shell egrep "ROCKSDB_MINOR.[0-9]" include/rocksdb/version.h | cut -d ' ' -f 3) 674ROCKSDB_PATCH = $(shell egrep "ROCKSDB_PATCH.[0-9]" include/rocksdb/version.h | cut -d ' ' -f 3) 675 676default: all 677 678#----------------------------------------------- 679# Create platform independent shared libraries. 680#----------------------------------------------- 681ifneq ($(PLATFORM_SHARED_EXT),) 682 683ifneq ($(PLATFORM_SHARED_VERSIONED),true) 684SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT) 685SHARED2 = $(SHARED1) 686SHARED3 = $(SHARED1) 687SHARED4 = $(SHARED1) 688SHARED = $(SHARED1) 689else 690SHARED_MAJOR = $(ROCKSDB_MAJOR) 691SHARED_MINOR = $(ROCKSDB_MINOR) 692SHARED_PATCH = $(ROCKSDB_PATCH) 693SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT) 694ifeq ($(PLATFORM), OS_MACOSX) 695SHARED_OSX = $(LIBNAME).$(SHARED_MAJOR) 696SHARED2 = $(SHARED_OSX).$(PLATFORM_SHARED_EXT) 697SHARED3 = $(SHARED_OSX).$(SHARED_MINOR).$(PLATFORM_SHARED_EXT) 698SHARED4 = $(SHARED_OSX).$(SHARED_MINOR).$(SHARED_PATCH).$(PLATFORM_SHARED_EXT) 699else 700SHARED2 = $(SHARED1).$(SHARED_MAJOR) 701SHARED3 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR) 702SHARED4 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR).$(SHARED_PATCH) 703endif 704SHARED = $(SHARED1) $(SHARED2) $(SHARED3) $(SHARED4) 705$(SHARED1): $(SHARED4) 706 ln -fs $(SHARED4) $(SHARED1) 707$(SHARED2): $(SHARED4) 708 ln -fs $(SHARED4) $(SHARED2) 709$(SHARED3): $(SHARED4) 710 ln -fs $(SHARED4) $(SHARED3) 711endif 712ifeq ($(HAVE_POWER8),1) 713SHARED_C_OBJECTS = $(LIB_SOURCES_C:.c=.o) 714SHARED_ASM_OBJECTS = $(LIB_SOURCES_ASM:.S=.o) 715SHARED_C_LIBOBJECTS = $(patsubst %.o,shared-objects/%.o,$(SHARED_C_OBJECTS)) 716SHARED_ASM_LIBOBJECTS = $(patsubst %.o,shared-objects/%.o,$(SHARED_ASM_OBJECTS)) 717shared_libobjects = $(patsubst %,shared-objects/%,$(LIB_CC_OBJECTS)) 718else 719shared_libobjects = $(patsubst %,shared-objects/%,$(LIBOBJECTS)) 720endif 721 722CLEAN_FILES += shared-objects 723shared_all_libobjects = $(shared_libobjects) 724 725ifeq ($(HAVE_POWER8),1) 726shared-ppc-objects = $(SHARED_C_LIBOBJECTS) $(SHARED_ASM_LIBOBJECTS) 727 728shared-objects/util/crc32c_ppc.o: util/crc32c_ppc.c 729 $(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@ 730 731shared-objects/util/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S 732 $(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@ 733endif 734$(shared_libobjects): shared-objects/%.o: %.cc 735 $(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) -c $< -o $@ 736 737ifeq ($(HAVE_POWER8),1) 738shared_all_libobjects = $(shared_libobjects) $(shared-ppc-objects) 739endif 740$(SHARED4): $(shared_all_libobjects) 741 $(CXX) $(PLATFORM_SHARED_LDFLAGS)$(SHARED3) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) $(shared_all_libobjects) $(LDFLAGS) -o $@ 742 743endif # PLATFORM_SHARED_EXT 744 745.PHONY: blackbox_crash_test check clean coverage crash_test ldb_tests package \ 746 release tags tags0 valgrind_check whitebox_crash_test format static_lib shared_lib all \ 747 dbg rocksdbjavastatic rocksdbjava install install-static install-shared uninstall \ 748 analyze tools tools_lib \ 749 blackbox_crash_test_with_atomic_flush whitebox_crash_test_with_atomic_flush \ 750 blackbox_crash_test_with_txn whitebox_crash_test_with_txn 751 752 753all: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(TESTS) 754 755all_but_some_tests: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(SUBSET) 756 757static_lib: $(LIBRARY) 758 759shared_lib: $(SHARED) 760 761stress_lib: $(STRESS_LIBRARY) 762 763tools: $(TOOLS) 764 765tools_lib: $(TOOLS_LIBRARY) 766 767test_libs: $(TEST_LIBS) 768 769dbg: $(LIBRARY) $(BENCHMARKS) tools $(TESTS) 770 771# creates static library and programs 772release: 773 $(MAKE) clean 774 DEBUG_LEVEL=0 $(MAKE) static_lib tools db_bench 775 776coverage: 777 $(MAKE) clean 778 COVERAGEFLAGS="-fprofile-arcs -ftest-coverage" LDFLAGS+="-lgcov" $(MAKE) J=1 all check 779 cd coverage && ./coverage_test.sh 780 # Delete intermediate files 781 $(FIND) . -type f -regex ".*\.\(\(gcda\)\|\(gcno\)\)" -exec rm {} \; 782 783ifneq (,$(filter check parallel_check,$(MAKECMDGOALS)),) 784# Use /dev/shm if it has the sticky bit set (otherwise, /tmp), 785# and create a randomly-named rocksdb.XXXX directory therein. 786# We'll use that directory in the "make check" rules. 787ifeq ($(TMPD),) 788TMPDIR := $(shell echo $${TMPDIR:-/tmp}) 789TMPD := $(shell f=/dev/shm; test -k $$f || f=$(TMPDIR); \ 790 perl -le 'use File::Temp "tempdir";' \ 791 -e 'print tempdir("'$$f'/rocksdb.XXXX", CLEANUP => 0)') 792endif 793endif 794 795# Run all tests in parallel, accumulating per-test logs in t/log-*. 796# 797# Each t/run-* file is a tiny generated bourne shell script that invokes one of 798# sub-tests. Why use a file for this? Because that makes the invocation of 799# parallel below simpler, which in turn makes the parsing of parallel's 800# LOG simpler (the latter is for live monitoring as parallel 801# tests run). 802# 803# Test names are extracted by running tests with --gtest_list_tests. 804# This filter removes the "#"-introduced comments, and expands to 805# fully-qualified names by changing input like this: 806# 807# DBTest. 808# Empty 809# WriteEmptyBatch 810# MultiThreaded/MultiThreadedDBTest. 811# MultiThreaded/0 # GetParam() = 0 812# MultiThreaded/1 # GetParam() = 1 813# 814# into this: 815# 816# DBTest.Empty 817# DBTest.WriteEmptyBatch 818# MultiThreaded/MultiThreadedDBTest.MultiThreaded/0 819# MultiThreaded/MultiThreadedDBTest.MultiThreaded/1 820# 821 822parallel_tests = $(patsubst %,parallel_%,$(PARALLEL_TEST)) 823.PHONY: gen_parallel_tests $(parallel_tests) 824$(parallel_tests): $(PARALLEL_TEST) 825 $(AM_V_at)TEST_BINARY=$(patsubst parallel_%,%,$@); \ 826 TEST_NAMES=` \ 827 ./$$TEST_BINARY --gtest_list_tests \ 828 | perl -n \ 829 -e 's/ *\#.*//;' \ 830 -e '/^(\s*)(\S+)/; !$$1 and do {$$p=$$2; break};' \ 831 -e 'print qq! $$p$$2!'`; \ 832 for TEST_NAME in $$TEST_NAMES; do \ 833 TEST_SCRIPT=t/run-$$TEST_BINARY-$${TEST_NAME//\//-}; \ 834 echo " GEN " $$TEST_SCRIPT; \ 835 printf '%s\n' \ 836 '#!/bin/sh' \ 837 "d=\$(TMPD)$$TEST_SCRIPT" \ 838 'mkdir -p $$d' \ 839 "TEST_TMPDIR=\$$d $(DRIVER) ./$$TEST_BINARY --gtest_filter=$$TEST_NAME" \ 840 > $$TEST_SCRIPT; \ 841 chmod a=rx $$TEST_SCRIPT; \ 842 done 843 844gen_parallel_tests: 845 $(AM_V_at)mkdir -p t 846 $(AM_V_at)rm -f t/run-* 847 $(MAKE) $(parallel_tests) 848 849# Reorder input lines (which are one per test) so that the 850# longest-running tests appear first in the output. 851# Do this by prefixing each selected name with its duration, 852# sort the resulting names, and remove the leading numbers. 853# FIXME: the "100" we prepend is a fake time, for now. 854# FIXME: squirrel away timings from each run and use them 855# (when present) on subsequent runs to order these tests. 856# 857# Without this reordering, these two tests would happen to start only 858# after almost all other tests had completed, thus adding 100 seconds 859# to the duration of parallel "make check". That's the difference 860# between 4 minutes (old) and 2m20s (new). 861# 862# 152.120 PASS t/DBTest.FileCreationRandomFailure 863# 107.816 PASS t/DBTest.EncodeDecompressedBlockSizeTest 864# 865slow_test_regexp = \ 866 ^.*SnapshotConcurrentAccessTest.*$$|^t/run-table_test-HarnessTest.Randomized$$|^t/run-db_test-.*(?:FileCreationRandomFailure|EncodeDecompressedBlockSizeTest)$$|^.*RecoverFromCorruptedWALWithoutFlush$$ 867prioritize_long_running_tests = \ 868 perl -pe 's,($(slow_test_regexp)),100 $$1,' \ 869 | sort -k1,1gr \ 870 | sed 's/^[.0-9]* //' 871 872# "make check" uses 873# Run with "make J=1 check" to disable parallelism in "make check". 874# Run with "make J=200% check" to run two parallel jobs per core. 875# The default is to run one job per core (J=100%). 876# See "man parallel" for its "-j ..." option. 877J ?= 100% 878 879# Use this regexp to select the subset of tests whose names match. 880tests-regexp = . 881 882.PHONY: check_0 883check_0: 884 $(AM_V_GEN)export TEST_TMPDIR=$(TMPD); \ 885 printf '%s\n' '' \ 886 'To monitor subtest <duration,pass/fail,name>,' \ 887 ' run "make watch-log" in a separate window' ''; \ 888 test -t 1 && eta=--eta || eta=; \ 889 { \ 890 printf './%s\n' $(filter-out $(PARALLEL_TEST),$(TESTS)); \ 891 find t -name 'run-*' -print; \ 892 } \ 893 | $(prioritize_long_running_tests) \ 894 | grep -E '$(tests-regexp)' \ 895 | build_tools/gnu_parallel -j$(J) --plain --joblog=LOG $$eta --gnu '{} >& t/log-{/}' 896 897valgrind-blacklist-regexp = InlineSkipTest.ConcurrentInsert|TransactionStressTest.DeadlockStress|DBCompactionTest.SuggestCompactRangeNoTwoLevel0Compactions|BackupableDBTest.RateLimiting|DBTest.CloseSpeedup|DBTest.ThreadStatusFlush|DBTest.RateLimitingTest|DBTest.EncodeDecompressedBlockSizeTest|FaultInjectionTest.UninstalledCompaction|HarnessTest.Randomized|ExternalSSTFileTest.CompactDuringAddFileRandom|ExternalSSTFileTest.IngestFileWithGlobalSeqnoRandomized|MySQLStyleTransactionTest.TransactionStressTest 898 899.PHONY: valgrind_check_0 900valgrind_check_0: 901 $(AM_V_GEN)export TEST_TMPDIR=$(TMPD); \ 902 printf '%s\n' '' \ 903 'To monitor subtest <duration,pass/fail,name>,' \ 904 ' run "make watch-log" in a separate window' ''; \ 905 test -t 1 && eta=--eta || eta=; \ 906 { \ 907 printf './%s\n' $(filter-out $(PARALLEL_TEST) %skiplist_test options_settable_test, $(TESTS)); \ 908 find t -name 'run-*' -print; \ 909 } \ 910 | $(prioritize_long_running_tests) \ 911 | grep -E '$(tests-regexp)' \ 912 | grep -E -v '$(valgrind-blacklist-regexp)' \ 913 | build_tools/gnu_parallel -j$(J) --plain --joblog=LOG $$eta --gnu \ 914 '(if [[ "{}" == "./"* ]] ; then $(DRIVER) {}; else {}; fi) ' \ 915 '>& t/valgrind_log-{/}' 916 917CLEAN_FILES += t LOG $(TMPD) 918 919# When running parallel "make check", you can monitor its progress 920# from another window. 921# Run "make watch_LOG" to show the duration,PASS/FAIL,name of parallel 922# tests as they are being run. We sort them so that longer-running ones 923# appear at the top of the list and any failing tests remain at the top 924# regardless of their duration. As with any use of "watch", hit ^C to 925# interrupt. 926watch-log: 927 $(WATCH) --interval=0 'sort -k7,7nr -k4,4gr LOG|$(quoted_perl_command)' 928 929# If J != 1 and GNU parallel is installed, run the tests in parallel, 930# via the check_0 rule above. Otherwise, run them sequentially. 931check: all 932 $(MAKE) gen_parallel_tests 933 $(AM_V_GEN)if test "$(J)" != 1 \ 934 && (build_tools/gnu_parallel --gnu --help 2>/dev/null) | \ 935 grep -q 'GNU Parallel'; \ 936 then \ 937 $(MAKE) T="$$t" TMPD=$(TMPD) check_0; \ 938 else \ 939 for t in $(TESTS); do \ 940 echo "===== Running $$t"; ./$$t || exit 1; done; \ 941 fi 942 rm -rf $(TMPD) 943ifneq ($(PLATFORM), OS_AIX) 944 python tools/check_all_python.py 945ifeq ($(filter -DROCKSDB_LITE,$(OPT)),) 946 python tools/ldb_test.py 947 sh tools/rocksdb_dump_test.sh 948endif 949endif 950 951# TODO add ldb_tests 952check_some: $(SUBSET) 953 for t in $(SUBSET); do echo "===== Running $$t"; ./$$t || exit 1; done 954 955.PHONY: ldb_tests 956ldb_tests: ldb 957 python tools/ldb_test.py 958 959crash_test: whitebox_crash_test blackbox_crash_test 960 961crash_test_with_atomic_flush: whitebox_crash_test_with_atomic_flush blackbox_crash_test_with_atomic_flush 962 963crash_test_with_txn: whitebox_crash_test_with_txn blackbox_crash_test_with_txn 964 965blackbox_crash_test: db_stress 966 python -u tools/db_crashtest.py --simple blackbox $(CRASH_TEST_EXT_ARGS) 967 python -u tools/db_crashtest.py blackbox $(CRASH_TEST_EXT_ARGS) 968 969blackbox_crash_test_with_atomic_flush: db_stress 970 python -u tools/db_crashtest.py --cf_consistency blackbox $(CRASH_TEST_EXT_ARGS) 971 972blackbox_crash_test_with_txn: db_stress 973 python -u tools/db_crashtest.py --txn blackbox $(CRASH_TEST_EXT_ARGS) 974 975ifeq ($(CRASH_TEST_KILL_ODD),) 976 CRASH_TEST_KILL_ODD=888887 977endif 978 979whitebox_crash_test: db_stress 980 python -u tools/db_crashtest.py --simple whitebox --random_kill_odd \ 981 $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS) 982 python -u tools/db_crashtest.py whitebox --random_kill_odd \ 983 $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS) 984 985whitebox_crash_test_with_atomic_flush: db_stress 986 python -u tools/db_crashtest.py --cf_consistency whitebox --random_kill_odd \ 987 $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS) 988 989whitebox_crash_test_with_txn: db_stress 990 python -u tools/db_crashtest.py --txn whitebox --random_kill_odd \ 991 $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS) 992 993asan_check: 994 $(MAKE) clean 995 COMPILE_WITH_ASAN=1 $(MAKE) check -j32 996 $(MAKE) clean 997 998asan_crash_test: 999 $(MAKE) clean 1000 COMPILE_WITH_ASAN=1 $(MAKE) crash_test 1001 $(MAKE) clean 1002 1003asan_crash_test_with_atomic_flush: 1004 $(MAKE) clean 1005 COMPILE_WITH_ASAN=1 $(MAKE) crash_test_with_atomic_flush 1006 $(MAKE) clean 1007 1008asan_crash_test_with_txn: 1009 $(MAKE) clean 1010 COMPILE_WITH_ASAN=1 $(MAKE) crash_test_with_txn 1011 $(MAKE) clean 1012 1013ubsan_check: 1014 $(MAKE) clean 1015 COMPILE_WITH_UBSAN=1 $(MAKE) check -j32 1016 $(MAKE) clean 1017 1018ubsan_crash_test: 1019 $(MAKE) clean 1020 COMPILE_WITH_UBSAN=1 $(MAKE) crash_test 1021 $(MAKE) clean 1022 1023ubsan_crash_test_with_atomic_flush: 1024 $(MAKE) clean 1025 COMPILE_WITH_UBSAN=1 $(MAKE) crash_test_with_atomic_flush 1026 $(MAKE) clean 1027 1028ubsan_crash_test_with_txn: 1029 $(MAKE) clean 1030 COMPILE_WITH_UBSAN=1 $(MAKE) crash_test_with_txn 1031 $(MAKE) clean 1032 1033valgrind_test: 1034 ROCKSDB_VALGRIND_RUN=1 DISABLE_JEMALLOC=1 $(MAKE) valgrind_check 1035 1036valgrind_check: $(TESTS) 1037 $(MAKE) DRIVER="$(VALGRIND_VER) $(VALGRIND_OPTS)" gen_parallel_tests 1038 $(AM_V_GEN)if test "$(J)" != 1 \ 1039 && (build_tools/gnu_parallel --gnu --help 2>/dev/null) | \ 1040 grep -q 'GNU Parallel'; \ 1041 then \ 1042 $(MAKE) TMPD=$(TMPD) \ 1043 DRIVER="$(VALGRIND_VER) $(VALGRIND_OPTS)" valgrind_check_0; \ 1044 else \ 1045 for t in $(filter-out %skiplist_test options_settable_test,$(TESTS)); do \ 1046 $(VALGRIND_VER) $(VALGRIND_OPTS) ./$$t; \ 1047 ret_code=$$?; \ 1048 if [ $$ret_code -ne 0 ]; then \ 1049 exit $$ret_code; \ 1050 fi; \ 1051 done; \ 1052 fi 1053 1054 1055ifneq ($(PAR_TEST),) 1056parloop: 1057 ret_bad=0; \ 1058 for t in $(PAR_TEST); do \ 1059 echo "===== Running $$t in parallel $(NUM_PAR)";\ 1060 if [ $(db_test) -eq 1 ]; then \ 1061 seq $(J) | v="$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{}; export TEST_TMPDIR=$$s;' \ 1062 'timeout 2m ./db_test --gtest_filter=$$v >> $$s/log-{} 2>1'; \ 1063 else\ 1064 seq $(J) | v="./$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{};' \ 1065 'export TEST_TMPDIR=$$s; timeout 10m $$v >> $$s/log-{} 2>1'; \ 1066 fi; \ 1067 ret_code=$$?; \ 1068 if [ $$ret_code -ne 0 ]; then \ 1069 ret_bad=$$ret_code; \ 1070 echo $$t exited with $$ret_code; \ 1071 fi; \ 1072 done; \ 1073 exit $$ret_bad; 1074endif 1075 1076test_names = \ 1077 ./db_test --gtest_list_tests \ 1078 | perl -n \ 1079 -e 's/ *\#.*//;' \ 1080 -e '/^(\s*)(\S+)/; !$$1 and do {$$p=$$2; break};' \ 1081 -e 'print qq! $$p$$2!' 1082 1083parallel_check: $(TESTS) 1084 $(AM_V_GEN)if test "$(J)" > 1 \ 1085 && (build_tools/gnu_parallel --gnu --help 2>/dev/null) | \ 1086 grep -q 'GNU Parallel'; \ 1087 then \ 1088 echo Running in parallel $(J); \ 1089 else \ 1090 echo "Need to have GNU Parallel and J > 1"; exit 1; \ 1091 fi; \ 1092 ret_bad=0; \ 1093 echo $(J);\ 1094 echo Test Dir: $(TMPD); \ 1095 seq $(J) | build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{}; rm -rf $$s; mkdir $$s'; \ 1096 $(MAKE) PAR_TEST="$(shell $(test_names))" TMPD=$(TMPD) \ 1097 J=$(J) db_test=1 parloop; \ 1098 $(MAKE) PAR_TEST="$(filter-out db_test, $(TESTS))" \ 1099 TMPD=$(TMPD) J=$(J) db_test=0 parloop; 1100 1101analyze: clean 1102 USE_CLANG=1 $(MAKE) analyze_incremental 1103 1104analyze_incremental: 1105 $(CLANG_SCAN_BUILD) --use-analyzer=$(CLANG_ANALYZER) \ 1106 --use-c++=$(CXX) --use-cc=$(CC) --status-bugs \ 1107 -o $(CURDIR)/scan_build_report \ 1108 $(MAKE) dbg 1109 1110CLEAN_FILES += unity.cc 1111unity.cc: Makefile 1112 rm -f $@ $@-t 1113 for source_file in $(LIB_SOURCES); do \ 1114 echo "#include \"$$source_file\"" >> $@-t; \ 1115 done 1116 chmod a=r $@-t 1117 mv $@-t $@ 1118 1119unity.a: unity.o 1120 $(AM_V_AR)rm -f $@ 1121 $(AM_V_at)$(AR) $(ARFLAGS) $@ unity.o 1122 1123 1124TOOLLIBOBJECTS = $(TOOL_LIB_SOURCES:.cc=.o) 1125# try compiling db_test with unity 1126unity_test: db/db_test.o db/db_test_util.o $(TESTHARNESS) $(TOOLLIBOBJECTS) unity.a 1127 $(AM_LINK) 1128 ./unity_test 1129 1130rocksdb.h rocksdb.cc: build_tools/amalgamate.py Makefile $(LIB_SOURCES) unity.cc 1131 build_tools/amalgamate.py -I. -i./include unity.cc -x include/rocksdb/c.h -H rocksdb.h -o rocksdb.cc 1132 1133clean: clean-ext-libraries-all clean-rocks clean-rocksjava 1134 1135clean-not-downloaded: clean-ext-libraries-bin clean-rocks clean-not-downloaded-rocksjava 1136 1137clean-rocks: 1138 rm -f $(BENCHMARKS) $(TOOLS) $(TESTS) $(PARALLEL_TEST) $(LIBRARY) $(SHARED) 1139 rm -rf $(CLEAN_FILES) ios-x86 ios-arm scan_build_report 1140 $(FIND) . -name "*.[oda]" -exec rm -f {} \; 1141 $(FIND) . -type f -regex ".*\.\(\(gcda\)\|\(gcno\)\)" -exec rm {} \; 1142 1143clean-rocksjava: 1144 cd java && $(MAKE) clean 1145 1146clean-not-downloaded-rocksjava: 1147 cd java && $(MAKE) clean-not-downloaded 1148 1149clean-ext-libraries-all: 1150 rm -rf bzip2* snappy* zlib* lz4* zstd* 1151 1152clean-ext-libraries-bin: 1153 find . -maxdepth 1 -type d \( -name bzip2\* -or -name snappy\* -or -name zlib\* -or -name lz4\* -or -name zstd\* \) -prune -exec rm -rf {} \; 1154 1155tags: 1156 ctags -R . 1157 cscope -b `$(FIND) . -name '*.cc'` `$(FIND) . -name '*.h'` `$(FIND) . -name '*.c'` 1158 ctags -e -R -o etags * 1159 1160tags0: 1161 ctags -R . 1162 cscope -b `$(FIND) . -name '*.cc' -and ! -name '*_test.cc'` \ 1163 `$(FIND) . -name '*.c' -and ! -name '*_test.c'` \ 1164 `$(FIND) . -name '*.h' -and ! -name '*_test.h'` 1165 ctags -e -R -o etags * 1166 1167format: 1168 build_tools/format-diff.sh 1169 1170package: 1171 bash build_tools/make_package.sh $(SHARED_MAJOR).$(SHARED_MINOR) 1172 1173# --------------------------------------------------------------------------- 1174# Unit tests and tools 1175# --------------------------------------------------------------------------- 1176$(LIBRARY): $(LIBOBJECTS) 1177 $(AM_V_AR)rm -f $@ 1178 $(AM_V_at)$(AR) $(ARFLAGS) $@ $(LIBOBJECTS) 1179 1180$(TOOLS_LIBRARY): $(BENCH_LIB_SOURCES:.cc=.o) $(TOOL_LIB_SOURCES:.cc=.o) $(LIB_SOURCES:.cc=.o) $(TESTUTIL) $(ANALYZER_LIB_SOURCES:.cc=.o) 1181 $(AM_V_AR)rm -f $@ 1182 $(AM_V_at)$(AR) $(ARFLAGS) $@ $^ 1183 1184$(STRESS_LIBRARY): $(LIB_SOURCES:.cc=.o) $(TESTUTIL) $(ANALYZER_LIB_SOURCES:.cc=.o) $(STRESS_LIB_SOURCES:.cc=.o) 1185 $(AM_V_AR)rm -f $@ 1186 $(AM_V_at)$(AR) $(ARFLAGS) $@ $^ 1187 1188librocksdb_env_basic_test.a: env/env_basic_test.o $(LIBOBJECTS) $(TESTHARNESS) 1189 $(AM_V_AR)rm -f $@ 1190 $(AM_V_at)$(AR) $(ARFLAGS) $@ $^ 1191 1192db_bench: tools/db_bench.o $(BENCHTOOLOBJECTS) 1193 $(AM_LINK) 1194 1195trace_analyzer: tools/trace_analyzer.o $(ANALYZETOOLOBJECTS) $(LIBOBJECTS) 1196 $(AM_LINK) 1197 1198block_cache_trace_analyzer: tools/block_cache_analyzer/block_cache_trace_analyzer_tool.o $(ANALYZETOOLOBJECTS) $(LIBOBJECTS) 1199 $(AM_LINK) 1200 1201ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1) 1202folly_synchronization_distributed_mutex_test: $(LIBOBJECTS) $(TESTHARNESS) $(FOLLYOBJECTS) third-party/folly/folly/synchronization/test/DistributedMutexTest.o 1203 $(AM_LINK) 1204endif 1205 1206cache_bench: cache/cache_bench.o $(LIBOBJECTS) $(TESTUTIL) 1207 $(AM_LINK) 1208 1209persistent_cache_bench: utilities/persistent_cache/persistent_cache_bench.o $(LIBOBJECTS) $(TESTUTIL) 1210 $(AM_LINK) 1211 1212memtablerep_bench: memtable/memtablerep_bench.o $(LIBOBJECTS) $(TESTUTIL) 1213 $(AM_LINK) 1214 1215filter_bench: util/filter_bench.o $(LIBOBJECTS) $(TESTUTIL) 1216 $(AM_LINK) 1217 1218db_stress: db_stress_tool/db_stress.o $(STRESSTOOLOBJECTS) 1219 $(AM_LINK) 1220 1221write_stress: tools/write_stress.o $(LIBOBJECTS) $(TESTUTIL) 1222 $(AM_LINK) 1223 1224db_sanity_test: tools/db_sanity_test.o $(LIBOBJECTS) $(TESTUTIL) 1225 $(AM_LINK) 1226 1227db_repl_stress: tools/db_repl_stress.o $(LIBOBJECTS) $(TESTUTIL) 1228 $(AM_LINK) 1229 1230arena_test: memory/arena_test.o $(LIBOBJECTS) $(TESTHARNESS) 1231 $(AM_LINK) 1232 1233autovector_test: util/autovector_test.o $(LIBOBJECTS) $(TESTHARNESS) 1234 $(AM_LINK) 1235 1236column_family_test: db/column_family_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1237 $(AM_LINK) 1238 1239table_properties_collector_test: db/table_properties_collector_test.o $(LIBOBJECTS) $(TESTHARNESS) 1240 $(AM_LINK) 1241 1242bloom_test: util/bloom_test.o $(LIBOBJECTS) $(TESTHARNESS) 1243 $(AM_LINK) 1244 1245dynamic_bloom_test: util/dynamic_bloom_test.o $(LIBOBJECTS) $(TESTHARNESS) 1246 $(AM_LINK) 1247 1248c_test: db/c_test.o $(LIBOBJECTS) $(TESTHARNESS) 1249 $(AM_LINK) 1250 1251cache_test: cache/cache_test.o $(LIBOBJECTS) $(TESTHARNESS) 1252 $(AM_LINK) 1253 1254coding_test: util/coding_test.o $(LIBOBJECTS) $(TESTHARNESS) 1255 $(AM_LINK) 1256 1257hash_test: util/hash_test.o $(LIBOBJECTS) $(TESTHARNESS) 1258 $(AM_LINK) 1259 1260random_test: util/random_test.o $(LIBOBJECTS) $(TESTHARNESS) 1261 $(AM_LINK) 1262 1263option_change_migration_test: utilities/option_change_migration/option_change_migration_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1264 $(AM_LINK) 1265 1266stringappend_test: utilities/merge_operators/string_append/stringappend_test.o $(LIBOBJECTS) $(TESTHARNESS) 1267 $(AM_LINK) 1268 1269cassandra_format_test: utilities/cassandra/cassandra_format_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS) 1270 $(AM_LINK) 1271 1272cassandra_functional_test: utilities/cassandra/cassandra_functional_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS) 1273 $(AM_LINK) 1274 1275cassandra_row_merge_test: utilities/cassandra/cassandra_row_merge_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS) 1276 $(AM_LINK) 1277 1278cassandra_serialize_test: utilities/cassandra/cassandra_serialize_test.o $(LIBOBJECTS) $(TESTHARNESS) 1279 $(AM_LINK) 1280 1281hash_table_test: utilities/persistent_cache/hash_table_test.o $(LIBOBJECTS) $(TESTHARNESS) 1282 $(AM_LINK) 1283 1284histogram_test: monitoring/histogram_test.o $(LIBOBJECTS) $(TESTHARNESS) 1285 $(AM_LINK) 1286 1287thread_local_test: util/thread_local_test.o $(LIBOBJECTS) $(TESTHARNESS) 1288 $(AM_LINK) 1289 1290corruption_test: db/corruption_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1291 $(AM_LINK) 1292 1293crc32c_test: util/crc32c_test.o $(LIBOBJECTS) $(TESTHARNESS) 1294 $(AM_LINK) 1295 1296slice_test: util/slice_test.o $(LIBOBJECTS) $(TESTHARNESS) 1297 $(AM_LINK) 1298 1299slice_transform_test: util/slice_transform_test.o $(LIBOBJECTS) $(TESTHARNESS) 1300 $(AM_LINK) 1301 1302db_basic_test: db/db_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1303 $(AM_LINK) 1304 1305db_encryption_test: db/db_encryption_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1306 $(AM_LINK) 1307 1308db_test: db/db_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1309 $(AM_LINK) 1310 1311db_test2: db/db_test2.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1312 $(AM_LINK) 1313 1314db_blob_index_test: db/db_blob_index_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1315 $(AM_LINK) 1316 1317db_block_cache_test: db/db_block_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1318 $(AM_LINK) 1319 1320db_bloom_filter_test: db/db_bloom_filter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1321 $(AM_LINK) 1322 1323db_log_iter_test: db/db_log_iter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1324 $(AM_LINK) 1325 1326db_compaction_filter_test: db/db_compaction_filter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1327 $(AM_LINK) 1328 1329db_compaction_test: db/db_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1330 $(AM_LINK) 1331 1332db_dynamic_level_test: db/db_dynamic_level_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1333 $(AM_LINK) 1334 1335db_flush_test: db/db_flush_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1336 $(AM_LINK) 1337 1338db_inplace_update_test: db/db_inplace_update_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1339 $(AM_LINK) 1340 1341db_iterator_test: db/db_iterator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1342 $(AM_LINK) 1343 1344db_memtable_test: db/db_memtable_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1345 $(AM_LINK) 1346 1347db_merge_operator_test: db/db_merge_operator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1348 $(AM_LINK) 1349 1350db_merge_operand_test: db/db_merge_operand_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1351 $(AM_LINK) 1352 1353db_options_test: db/db_options_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1354 $(AM_LINK) 1355 1356db_range_del_test: db/db_range_del_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1357 $(AM_LINK) 1358 1359db_sst_test: db/db_sst_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1360 $(AM_LINK) 1361 1362db_statistics_test: db/db_statistics_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1363 $(AM_LINK) 1364 1365db_write_test: db/db_write_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1366 $(AM_LINK) 1367 1368error_handler_test: db/error_handler_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1369 $(AM_LINK) 1370 1371external_sst_file_basic_test: db/external_sst_file_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1372 $(AM_LINK) 1373 1374external_sst_file_test: db/external_sst_file_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1375 $(AM_LINK) 1376 1377import_column_family_test: db/import_column_family_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1378 $(AM_LINK) 1379 1380db_tailing_iter_test: db/db_tailing_iter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1381 $(AM_LINK) 1382 1383db_iter_test: db/db_iter_test.o $(LIBOBJECTS) $(TESTHARNESS) 1384 $(AM_LINK) 1385 1386db_iter_stress_test: db/db_iter_stress_test.o $(LIBOBJECTS) $(TESTHARNESS) 1387 $(AM_LINK) 1388 1389db_universal_compaction_test: db/db_universal_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1390 $(AM_LINK) 1391 1392db_wal_test: db/db_wal_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1393 $(AM_LINK) 1394 1395db_io_failure_test: db/db_io_failure_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1396 $(AM_LINK) 1397 1398db_properties_test: db/db_properties_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1399 $(AM_LINK) 1400 1401db_table_properties_test: db/db_table_properties_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1402 $(AM_LINK) 1403 1404log_write_bench: util/log_write_bench.o $(LIBOBJECTS) $(TESTHARNESS) 1405 $(AM_LINK) $(PROFILING_FLAGS) 1406 1407plain_table_db_test: db/plain_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS) 1408 $(AM_LINK) 1409 1410comparator_db_test: db/comparator_db_test.o $(LIBOBJECTS) $(TESTHARNESS) 1411 $(AM_LINK) 1412 1413table_reader_bench: table/table_reader_bench.o $(LIBOBJECTS) $(TESTHARNESS) 1414 $(AM_LINK) $(PROFILING_FLAGS) 1415 1416perf_context_test: db/perf_context_test.o $(LIBOBJECTS) $(TESTHARNESS) 1417 $(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) 1418 1419prefix_test: db/prefix_test.o $(LIBOBJECTS) $(TESTHARNESS) 1420 $(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) 1421 1422backupable_db_test: utilities/backupable/backupable_db_test.o $(LIBOBJECTS) $(TESTHARNESS) 1423 $(AM_LINK) 1424 1425checkpoint_test: utilities/checkpoint/checkpoint_test.o $(LIBOBJECTS) $(TESTHARNESS) 1426 $(AM_LINK) 1427 1428cache_simulator_test: utilities/simulator_cache/cache_simulator_test.o $(LIBOBJECTS) $(TESTHARNESS) 1429 $(AM_LINK) 1430 1431sim_cache_test: utilities/simulator_cache/sim_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1432 $(AM_LINK) 1433 1434env_mirror_test: utilities/env_mirror_test.o $(LIBOBJECTS) $(TESTHARNESS) 1435 $(AM_LINK) 1436 1437env_timed_test: utilities/env_timed_test.o $(LIBOBJECTS) $(TESTHARNESS) 1438 $(AM_LINK) 1439 1440ifdef ROCKSDB_USE_LIBRADOS 1441env_librados_test: utilities/env_librados_test.o $(LIBOBJECTS) $(TESTHARNESS) 1442 $(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(COVERAGEFLAGS) 1443endif 1444 1445object_registry_test: utilities/object_registry_test.o $(LIBOBJECTS) $(TESTHARNESS) 1446 $(AM_LINK) 1447 1448ttl_test: utilities/ttl/ttl_test.o $(LIBOBJECTS) $(TESTHARNESS) 1449 $(AM_LINK) 1450 1451write_batch_with_index_test: utilities/write_batch_with_index/write_batch_with_index_test.o $(LIBOBJECTS) $(TESTHARNESS) 1452 $(AM_LINK) 1453 1454flush_job_test: db/flush_job_test.o $(LIBOBJECTS) $(TESTHARNESS) 1455 $(AM_LINK) 1456 1457compaction_iterator_test: db/compaction/compaction_iterator_test.o $(LIBOBJECTS) $(TESTHARNESS) 1458 $(AM_LINK) 1459 1460compaction_job_test: db/compaction/compaction_job_test.o $(LIBOBJECTS) $(TESTHARNESS) 1461 $(AM_LINK) 1462 1463compaction_job_stats_test: db/compaction/compaction_job_stats_test.o $(LIBOBJECTS) $(TESTHARNESS) 1464 $(AM_LINK) 1465 1466compact_on_deletion_collector_test: utilities/table_properties_collectors/compact_on_deletion_collector_test.o $(LIBOBJECTS) $(TESTHARNESS) 1467 $(AM_LINK) 1468 1469wal_manager_test: db/wal_manager_test.o $(LIBOBJECTS) $(TESTHARNESS) 1470 $(AM_LINK) 1471 1472dbformat_test: db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS) 1473 $(AM_LINK) 1474 1475env_basic_test: env/env_basic_test.o $(LIBOBJECTS) $(TESTHARNESS) 1476 $(AM_LINK) 1477 1478env_test: env/env_test.o $(LIBOBJECTS) $(TESTHARNESS) 1479 $(AM_LINK) 1480 1481fault_injection_test: db/fault_injection_test.o $(LIBOBJECTS) $(TESTHARNESS) 1482 $(AM_LINK) 1483 1484rate_limiter_test: util/rate_limiter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1485 $(AM_LINK) 1486 1487delete_scheduler_test: file/delete_scheduler_test.o $(LIBOBJECTS) $(TESTHARNESS) 1488 $(AM_LINK) 1489 1490filename_test: db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS) 1491 $(AM_LINK) 1492 1493file_reader_writer_test: util/file_reader_writer_test.o $(LIBOBJECTS) $(TESTHARNESS) 1494 $(AM_LINK) 1495 1496block_based_filter_block_test: table/block_based/block_based_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS) 1497 $(AM_LINK) 1498 1499full_filter_block_test: table/block_based/full_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS) 1500 $(AM_LINK) 1501 1502partitioned_filter_block_test: table/block_based/partitioned_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS) 1503 $(AM_LINK) 1504 1505log_test: db/log_test.o $(LIBOBJECTS) $(TESTHARNESS) 1506 $(AM_LINK) 1507 1508cleanable_test: table/cleanable_test.o $(LIBOBJECTS) $(TESTHARNESS) 1509 $(AM_LINK) 1510 1511table_test: table/table_test.o $(LIBOBJECTS) $(TESTHARNESS) 1512 $(AM_LINK) 1513 1514block_test: table/block_based/block_test.o $(LIBOBJECTS) $(TESTHARNESS) 1515 $(AM_LINK) 1516 1517data_block_hash_index_test: table/block_based/data_block_hash_index_test.o $(LIBOBJECTS) $(TESTHARNESS) 1518 $(AM_LINK) 1519 1520inlineskiplist_test: memtable/inlineskiplist_test.o $(LIBOBJECTS) $(TESTHARNESS) 1521 $(AM_LINK) 1522 1523skiplist_test: memtable/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS) 1524 $(AM_LINK) 1525 1526write_buffer_manager_test: memtable/write_buffer_manager_test.o $(LIBOBJECTS) $(TESTHARNESS) 1527 $(AM_LINK) 1528 1529version_edit_test: db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS) 1530 $(AM_LINK) 1531 1532version_set_test: db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS) 1533 $(AM_LINK) 1534 1535compaction_picker_test: db/compaction/compaction_picker_test.o $(LIBOBJECTS) $(TESTHARNESS) 1536 $(AM_LINK) 1537 1538version_builder_test: db/version_builder_test.o $(LIBOBJECTS) $(TESTHARNESS) 1539 $(AM_LINK) 1540 1541file_indexer_test: db/file_indexer_test.o $(LIBOBJECTS) $(TESTHARNESS) 1542 $(AM_LINK) 1543 1544reduce_levels_test: tools/reduce_levels_test.o $(LIBOBJECTS) $(TESTHARNESS) 1545 $(AM_LINK) 1546 1547write_batch_test: db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS) 1548 $(AM_LINK) 1549 1550write_controller_test: db/write_controller_test.o $(LIBOBJECTS) $(TESTHARNESS) 1551 $(AM_LINK) 1552 1553merge_helper_test: db/merge_helper_test.o $(LIBOBJECTS) $(TESTHARNESS) 1554 $(AM_LINK) 1555 1556memory_test: utilities/memory/memory_test.o $(LIBOBJECTS) $(TESTHARNESS) 1557 $(AM_LINK) 1558 1559merge_test: db/merge_test.o $(LIBOBJECTS) $(TESTHARNESS) 1560 $(AM_LINK) 1561 1562merger_test: table/merger_test.o $(LIBOBJECTS) $(TESTHARNESS) 1563 $(AM_LINK) 1564 1565util_merge_operators_test: utilities/util_merge_operators_test.o $(LIBOBJECTS) $(TESTHARNESS) 1566 $(AM_LINK) 1567 1568options_file_test: db/options_file_test.o $(LIBOBJECTS) $(TESTHARNESS) 1569 $(AM_LINK) 1570 1571deletefile_test: db/deletefile_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1572 $(AM_LINK) 1573 1574obsolete_files_test: db/obsolete_files_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1575 $(AM_LINK) 1576 1577rocksdb_dump: tools/dump/rocksdb_dump.o $(LIBOBJECTS) 1578 $(AM_LINK) 1579 1580rocksdb_undump: tools/dump/rocksdb_undump.o $(LIBOBJECTS) 1581 $(AM_LINK) 1582 1583cuckoo_table_builder_test: table/cuckoo/cuckoo_table_builder_test.o $(LIBOBJECTS) $(TESTHARNESS) 1584 $(AM_LINK) 1585 1586cuckoo_table_reader_test: table/cuckoo/cuckoo_table_reader_test.o $(LIBOBJECTS) $(TESTHARNESS) 1587 $(AM_LINK) 1588 1589cuckoo_table_db_test: db/cuckoo_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS) 1590 $(AM_LINK) 1591 1592listener_test: db/listener_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1593 $(AM_LINK) 1594 1595thread_list_test: util/thread_list_test.o $(LIBOBJECTS) $(TESTHARNESS) 1596 $(AM_LINK) 1597 1598compact_files_test: db/compact_files_test.o $(LIBOBJECTS) $(TESTHARNESS) 1599 $(AM_LINK) 1600 1601options_test: options/options_test.o $(LIBOBJECTS) $(TESTHARNESS) 1602 $(AM_LINK) 1603 1604options_settable_test: options/options_settable_test.o $(LIBOBJECTS) $(TESTHARNESS) 1605 $(AM_LINK) 1606 1607options_util_test: utilities/options/options_util_test.o $(LIBOBJECTS) $(TESTHARNESS) 1608 $(AM_LINK) 1609 1610db_bench_tool_test: tools/db_bench_tool_test.o $(BENCHTOOLOBJECTS) $(TESTHARNESS) 1611 $(AM_LINK) 1612 1613trace_analyzer_test: tools/trace_analyzer_test.o $(LIBOBJECTS) $(ANALYZETOOLOBJECTS) $(TESTHARNESS) 1614 $(AM_LINK) 1615 1616event_logger_test: logging/event_logger_test.o $(LIBOBJECTS) $(TESTHARNESS) 1617 $(AM_LINK) 1618 1619timer_queue_test: util/timer_queue_test.o $(LIBOBJECTS) $(TESTHARNESS) 1620 $(AM_LINK) 1621 1622sst_dump_test: tools/sst_dump_test.o $(LIBOBJECTS) $(TESTHARNESS) 1623 $(AM_LINK) 1624 1625optimistic_transaction_test: utilities/transactions/optimistic_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS) 1626 $(AM_LINK) 1627 1628mock_env_test : env/mock_env_test.o $(LIBOBJECTS) $(TESTHARNESS) 1629 $(AM_LINK) 1630 1631manual_compaction_test: db/manual_compaction_test.o $(LIBOBJECTS) $(TESTHARNESS) 1632 $(AM_LINK) 1633 1634filelock_test: util/filelock_test.o $(LIBOBJECTS) $(TESTHARNESS) 1635 $(AM_LINK) 1636 1637auto_roll_logger_test: logging/auto_roll_logger_test.o $(LIBOBJECTS) $(TESTHARNESS) 1638 $(AM_LINK) 1639 1640env_logger_test: logging/env_logger_test.o $(LIBOBJECTS) $(TESTHARNESS) 1641 $(AM_LINK) 1642 1643memtable_list_test: db/memtable_list_test.o $(LIBOBJECTS) $(TESTHARNESS) 1644 $(AM_LINK) 1645 1646write_callback_test: db/write_callback_test.o $(LIBOBJECTS) $(TESTHARNESS) 1647 $(AM_LINK) 1648 1649heap_test: util/heap_test.o $(GTEST) 1650 $(AM_LINK) 1651 1652transaction_test: utilities/transactions/transaction_test.o $(LIBOBJECTS) $(TESTHARNESS) 1653 $(AM_LINK) 1654 1655write_prepared_transaction_test: utilities/transactions/write_prepared_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS) 1656 $(AM_LINK) 1657 1658write_unprepared_transaction_test: utilities/transactions/write_unprepared_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS) 1659 $(AM_LINK) 1660 1661sst_dump: tools/sst_dump.o $(LIBOBJECTS) 1662 $(AM_LINK) 1663 1664blob_dump: tools/blob_dump.o $(LIBOBJECTS) 1665 $(AM_LINK) 1666 1667repair_test: db/repair_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1668 $(AM_LINK) 1669 1670ldb_cmd_test: tools/ldb_cmd_test.o $(LIBOBJECTS) $(TESTHARNESS) 1671 $(AM_LINK) 1672 1673ldb: tools/ldb.o $(LIBOBJECTS) 1674 $(AM_LINK) 1675 1676iostats_context_test: monitoring/iostats_context_test.o $(LIBOBJECTS) $(TESTHARNESS) 1677 $(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) 1678 1679persistent_cache_test: utilities/persistent_cache/persistent_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1680 $(AM_LINK) 1681 1682statistics_test: monitoring/statistics_test.o $(LIBOBJECTS) $(TESTHARNESS) 1683 $(AM_LINK) 1684 1685stats_history_test: monitoring/stats_history_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1686 $(AM_LINK) 1687 1688lru_cache_test: cache/lru_cache_test.o $(LIBOBJECTS) $(TESTHARNESS) 1689 $(AM_LINK) 1690 1691range_del_aggregator_test: db/range_del_aggregator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1692 $(AM_LINK) 1693 1694range_del_aggregator_bench: db/range_del_aggregator_bench.o $(LIBOBJECTS) $(TESTUTIL) 1695 $(AM_LINK) 1696 1697blob_db_test: utilities/blob_db/blob_db_test.o $(LIBOBJECTS) $(TESTHARNESS) 1698 $(AM_LINK) 1699 1700repeatable_thread_test: util/repeatable_thread_test.o $(LIBOBJECTS) $(TESTHARNESS) 1701 $(AM_LINK) 1702 1703range_tombstone_fragmenter_test: db/range_tombstone_fragmenter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1704 $(AM_LINK) 1705 1706sst_file_reader_test: table/sst_file_reader_test.o $(LIBOBJECTS) $(TESTHARNESS) 1707 $(AM_LINK) 1708 1709db_secondary_test: db/db_impl/db_secondary_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) 1710 $(AM_LINK) 1711 1712block_cache_tracer_test: trace_replay/block_cache_tracer_test.o trace_replay/block_cache_tracer.o $(LIBOBJECTS) $(TESTHARNESS) 1713 $(AM_LINK) 1714 1715block_cache_trace_analyzer_test: tools/block_cache_analyzer/block_cache_trace_analyzer_test.o tools/block_cache_analyzer/block_cache_trace_analyzer.o $(LIBOBJECTS) $(TESTHARNESS) 1716 $(AM_LINK) 1717 1718defer_test: util/defer_test.o $(LIBOBJECTS) $(TESTHARNESS) 1719 $(AM_LINK) 1720 1721#------------------------------------------------- 1722# make install related stuff 1723INSTALL_PATH ?= /usr/local 1724 1725uninstall: 1726 rm -rf $(INSTALL_PATH)/include/rocksdb \ 1727 $(INSTALL_PATH)/lib/$(LIBRARY) \ 1728 $(INSTALL_PATH)/lib/$(SHARED4) \ 1729 $(INSTALL_PATH)/lib/$(SHARED3) \ 1730 $(INSTALL_PATH)/lib/$(SHARED2) \ 1731 $(INSTALL_PATH)/lib/$(SHARED1) 1732 1733install-headers: 1734 install -d $(INSTALL_PATH)/lib 1735 for header_dir in `$(FIND) "include/rocksdb" -type d`; do \ 1736 install -d $(INSTALL_PATH)/$$header_dir; \ 1737 done 1738 for header in `$(FIND) "include/rocksdb" -type f -name *.h`; do \ 1739 install -C -m 644 $$header $(INSTALL_PATH)/$$header; \ 1740 done 1741 1742install-static: install-headers $(LIBRARY) 1743 install -C -m 755 $(LIBRARY) $(INSTALL_PATH)/lib 1744 1745install-shared: install-headers $(SHARED4) 1746 install -C -m 755 $(SHARED4) $(INSTALL_PATH)/lib && \ 1747 ln -fs $(SHARED4) $(INSTALL_PATH)/lib/$(SHARED3) && \ 1748 ln -fs $(SHARED4) $(INSTALL_PATH)/lib/$(SHARED2) && \ 1749 ln -fs $(SHARED4) $(INSTALL_PATH)/lib/$(SHARED1) 1750 1751# install static by default + install shared if it exists 1752install: install-static 1753 [ -e $(SHARED4) ] && $(MAKE) install-shared || : 1754 1755#------------------------------------------------- 1756 1757 1758# --------------------------------------------------------------------------- 1759# Jni stuff 1760# --------------------------------------------------------------------------- 1761 1762JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/linux 1763ifeq ($(PLATFORM), OS_SOLARIS) 1764 ARCH := $(shell isainfo -b) 1765else ifeq ($(PLATFORM), OS_OPENBSD) 1766 ifneq (,$(filter amd64 ppc64 ppc64le arm64 aarch64 sparc64, $(MACHINE))) 1767 ARCH := 64 1768 else 1769 ARCH := 32 1770 endif 1771else 1772 ARCH := $(shell getconf LONG_BIT) 1773endif 1774 1775ifeq ($(shell ldd /usr/bin/env 2>/dev/null | grep -q musl; echo $$?),0) 1776 JNI_LIBC = musl 1777# GNU LibC (or glibc) is so pervasive we can assume it is the default 1778# else 1779# JNI_LIBC = glibc 1780endif 1781 1782ifneq ($(origin JNI_LIBC), undefined) 1783 JNI_LIBC_POSTFIX = -$(JNI_LIBC) 1784endif 1785 1786ifneq (,$(filter ppc% arm64 aarch64 sparc64, $(MACHINE))) 1787 ROCKSDBJNILIB = librocksdbjni-linux-$(MACHINE)$(JNI_LIBC_POSTFIX).so 1788else 1789 ROCKSDBJNILIB = librocksdbjni-linux$(ARCH)$(JNI_LIBC_POSTFIX).so 1790endif 1791ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-linux$(ARCH)$(JNI_LIBC_POSTFIX).jar 1792ROCKSDB_JAR_ALL = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH).jar 1793ROCKSDB_JAVADOCS_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-javadoc.jar 1794ROCKSDB_SOURCES_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-sources.jar 1795SHA256_CMD = sha256sum 1796 1797ZLIB_VER ?= 1.2.11 1798ZLIB_SHA256 ?= c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1 1799ZLIB_DOWNLOAD_BASE ?= http://zlib.net 1800BZIP2_VER ?= 1.0.6 1801BZIP2_SHA256 ?= a2848f34fcd5d6cf47def00461fcb528a0484d8edef8208d6d2e2909dc61d9cd 1802BZIP2_DOWNLOAD_BASE ?= https://downloads.sourceforge.net/project/bzip2 1803SNAPPY_VER ?= 1.1.7 1804SNAPPY_SHA256 ?= 3dfa02e873ff51a11ee02b9ca391807f0c8ea0529a4924afa645fbf97163f9d4 1805SNAPPY_DOWNLOAD_BASE ?= https://github.com/google/snappy/archive 1806LZ4_VER ?= 1.9.2 1807LZ4_SHA256 ?= 658ba6191fa44c92280d4aa2c271b0f4fbc0e34d249578dd05e50e76d0e5efcc 1808LZ4_DOWNLOAD_BASE ?= https://github.com/lz4/lz4/archive 1809ZSTD_VER ?= 1.4.4 1810ZSTD_SHA256 ?= a364f5162c7d1a455cc915e8e3cf5f4bd8b75d09bc0f53965b0c9ca1383c52c8 1811ZSTD_DOWNLOAD_BASE ?= https://github.com/facebook/zstd/archive 1812CURL_SSL_OPTS ?= --tlsv1 1813 1814ifeq ($(PLATFORM), OS_MACOSX) 1815 ROCKSDBJNILIB = librocksdbjni-osx.jnilib 1816 ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-osx.jar 1817 SHA256_CMD = openssl sha256 -r 1818ifneq ("$(wildcard $(JAVA_HOME)/include/darwin)","") 1819 JAVA_INCLUDE = -I$(JAVA_HOME)/include -I $(JAVA_HOME)/include/darwin 1820else 1821 JAVA_INCLUDE = -I/System/Library/Frameworks/JavaVM.framework/Headers/ 1822endif 1823endif 1824ifeq ($(PLATFORM), OS_FREEBSD) 1825 JAVA_INCLUDE = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/freebsd 1826 ROCKSDBJNILIB = librocksdbjni-freebsd$(ARCH).so 1827 ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-freebsd$(ARCH).jar 1828endif 1829ifeq ($(PLATFORM), OS_SOLARIS) 1830 ROCKSDBJNILIB = librocksdbjni-solaris$(ARCH).so 1831 ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-solaris$(ARCH).jar 1832 JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/solaris 1833 SHA256_CMD = digest -a sha256 1834endif 1835ifeq ($(PLATFORM), OS_AIX) 1836 JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/aix 1837 ROCKSDBJNILIB = librocksdbjni-aix.so 1838 EXTRACT_SOURCES = gunzip < TAR_GZ | tar xvf - 1839 SNAPPY_MAKE_TARGET = libsnappy.la 1840endif 1841ifeq ($(PLATFORM), OS_OPENBSD) 1842 JAVA_INCLUDE = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/openbsd 1843 ROCKSDBJNILIB = librocksdbjni-openbsd$(ARCH).so 1844 ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-openbsd$(ARCH).jar 1845endif 1846 1847libz.a: 1848 -rm -rf zlib-$(ZLIB_VER) 1849ifeq (,$(wildcard ./zlib-$(ZLIB_VER).tar.gz)) 1850 curl --fail --output zlib-$(ZLIB_VER).tar.gz --location ${ZLIB_DOWNLOAD_BASE}/zlib-$(ZLIB_VER).tar.gz 1851endif 1852 ZLIB_SHA256_ACTUAL=`$(SHA256_CMD) zlib-$(ZLIB_VER).tar.gz | cut -d ' ' -f 1`; \ 1853 if [ "$(ZLIB_SHA256)" != "$$ZLIB_SHA256_ACTUAL" ]; then \ 1854 echo zlib-$(ZLIB_VER).tar.gz checksum mismatch, expected=\"$(ZLIB_SHA256)\" actual=\"$$ZLIB_SHA256_ACTUAL\"; \ 1855 exit 1; \ 1856 fi 1857 tar xvzf zlib-$(ZLIB_VER).tar.gz 1858 cd zlib-$(ZLIB_VER) && CFLAGS='-fPIC ${EXTRA_CFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' ./configure --static && $(MAKE) 1859 cp zlib-$(ZLIB_VER)/libz.a . 1860 1861libbz2.a: 1862 -rm -rf bzip2-$(BZIP2_VER) 1863ifeq (,$(wildcard ./bzip2-$(BZIP2_VER).tar.gz)) 1864 curl --fail --output bzip2-$(BZIP2_VER).tar.gz --location ${CURL_SSL_OPTS} ${BZIP2_DOWNLOAD_BASE}/bzip2-$(BZIP2_VER).tar.gz 1865endif 1866 BZIP2_SHA256_ACTUAL=`$(SHA256_CMD) bzip2-$(BZIP2_VER).tar.gz | cut -d ' ' -f 1`; \ 1867 if [ "$(BZIP2_SHA256)" != "$$BZIP2_SHA256_ACTUAL" ]; then \ 1868 echo bzip2-$(BZIP2_VER).tar.gz checksum mismatch, expected=\"$(BZIP2_SHA256)\" actual=\"$$BZIP2_SHA256_ACTUAL\"; \ 1869 exit 1; \ 1870 fi 1871 tar xvzf bzip2-$(BZIP2_VER).tar.gz 1872 cd bzip2-$(BZIP2_VER) && $(MAKE) CFLAGS='-fPIC -O2 -g -D_FILE_OFFSET_BITS=64 ${EXTRA_CFLAGS}' AR='ar ${EXTRA_ARFLAGS}' 1873 cp bzip2-$(BZIP2_VER)/libbz2.a . 1874 1875libsnappy.a: 1876 -rm -rf snappy-$(SNAPPY_VER) 1877ifeq (,$(wildcard ./snappy-$(SNAPPY_VER).tar.gz)) 1878 curl --fail --output snappy-$(SNAPPY_VER).tar.gz --location ${CURL_SSL_OPTS} ${SNAPPY_DOWNLOAD_BASE}/$(SNAPPY_VER).tar.gz 1879endif 1880 SNAPPY_SHA256_ACTUAL=`$(SHA256_CMD) snappy-$(SNAPPY_VER).tar.gz | cut -d ' ' -f 1`; \ 1881 if [ "$(SNAPPY_SHA256)" != "$$SNAPPY_SHA256_ACTUAL" ]; then \ 1882 echo snappy-$(SNAPPY_VER).tar.gz checksum mismatch, expected=\"$(SNAPPY_SHA256)\" actual=\"$$SNAPPY_SHA256_ACTUAL\"; \ 1883 exit 1; \ 1884 fi 1885 tar xvzf snappy-$(SNAPPY_VER).tar.gz 1886 mkdir snappy-$(SNAPPY_VER)/build 1887 cd snappy-$(SNAPPY_VER)/build && CFLAGS='${EXTRA_CFLAGS}' CXXFLAGS='${EXTRA_CXXFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON .. && $(MAKE) ${SNAPPY_MAKE_TARGET} 1888 cp snappy-$(SNAPPY_VER)/build/libsnappy.a . 1889 1890liblz4.a: 1891 -rm -rf lz4-$(LZ4_VER) 1892ifeq (,$(wildcard ./lz4-$(LZ4_VER).tar.gz)) 1893 curl --fail --output lz4-$(LZ4_VER).tar.gz --location ${CURL_SSL_OPTS} ${LZ4_DOWNLOAD_BASE}/v$(LZ4_VER).tar.gz 1894endif 1895 LZ4_SHA256_ACTUAL=`$(SHA256_CMD) lz4-$(LZ4_VER).tar.gz | cut -d ' ' -f 1`; \ 1896 if [ "$(LZ4_SHA256)" != "$$LZ4_SHA256_ACTUAL" ]; then \ 1897 echo lz4-$(LZ4_VER).tar.gz checksum mismatch, expected=\"$(LZ4_SHA256)\" actual=\"$$LZ4_SHA256_ACTUAL\"; \ 1898 exit 1; \ 1899 fi 1900 tar xvzf lz4-$(LZ4_VER).tar.gz 1901 cd lz4-$(LZ4_VER)/lib && $(MAKE) CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' all 1902 cp lz4-$(LZ4_VER)/lib/liblz4.a . 1903 1904libzstd.a: 1905 -rm -rf zstd-$(ZSTD_VER) 1906ifeq (,$(wildcard ./zstd-$(ZSTD_VER).tar.gz)) 1907 curl --fail --output zstd-$(ZSTD_VER).tar.gz --location ${CURL_SSL_OPTS} ${ZSTD_DOWNLOAD_BASE}/v$(ZSTD_VER).tar.gz 1908endif 1909 ZSTD_SHA256_ACTUAL=`$(SHA256_CMD) zstd-$(ZSTD_VER).tar.gz | cut -d ' ' -f 1`; \ 1910 if [ "$(ZSTD_SHA256)" != "$$ZSTD_SHA256_ACTUAL" ]; then \ 1911 echo zstd-$(ZSTD_VER).tar.gz checksum mismatch, expected=\"$(ZSTD_SHA256)\" actual=\"$$ZSTD_SHA256_ACTUAL\"; \ 1912 exit 1; \ 1913 fi 1914 tar xvzf zstd-$(ZSTD_VER).tar.gz 1915 cd zstd-$(ZSTD_VER)/lib && DESTDIR=. PREFIX= $(MAKE) CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' install 1916 cp zstd-$(ZSTD_VER)/lib/libzstd.a . 1917 1918# A version of each $(LIBOBJECTS) compiled with -fPIC and a fixed set of static compression libraries 1919java_static_libobjects = $(patsubst %,jls/%,$(LIB_CC_OBJECTS)) 1920CLEAN_FILES += jls 1921java_static_all_libobjects = $(java_static_libobjects) 1922 1923ifneq ($(ROCKSDB_JAVA_NO_COMPRESSION), 1) 1924JAVA_COMPRESSIONS = libz.a libbz2.a libsnappy.a liblz4.a libzstd.a 1925endif 1926 1927JAVA_STATIC_FLAGS = -DZLIB -DBZIP2 -DSNAPPY -DLZ4 -DZSTD 1928JAVA_STATIC_INCLUDES = -I./zlib-$(ZLIB_VER) -I./bzip2-$(BZIP2_VER) -I./snappy-$(SNAPPY_VER) -I./lz4-$(LZ4_VER)/lib -I./zstd-$(ZSTD_VER)/lib/include 1929 1930ifeq ($(HAVE_POWER8),1) 1931JAVA_STATIC_C_LIBOBJECTS = $(patsubst %.c.o,jls/%.c.o,$(LIB_SOURCES_C:.c=.o)) 1932JAVA_STATIC_ASM_LIBOBJECTS = $(patsubst %.S.o,jls/%.S.o,$(LIB_SOURCES_ASM:.S=.o)) 1933 1934java_static_ppc_libobjects = $(JAVA_STATIC_C_LIBOBJECTS) $(JAVA_STATIC_ASM_LIBOBJECTS) 1935 1936jls/util/crc32c_ppc.o: util/crc32c_ppc.c 1937 $(AM_V_CC)$(CC) $(CFLAGS) $(JAVA_STATIC_FLAGS) $(JAVA_STATIC_INCLUDES) -c $< -o $@ 1938 1939jls/util/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S 1940 $(AM_V_CC)$(CC) $(CFLAGS) $(JAVA_STATIC_FLAGS) $(JAVA_STATIC_INCLUDES) -c $< -o $@ 1941 1942java_static_all_libobjects += $(java_static_ppc_libobjects) 1943endif 1944 1945$(java_static_libobjects): jls/%.o: %.cc $(JAVA_COMPRESSIONS) 1946 $(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) $(JAVA_STATIC_FLAGS) $(JAVA_STATIC_INCLUDES) -fPIC -c $< -o $@ $(COVERAGEFLAGS) 1947 1948rocksdbjavastatic: $(java_static_all_libobjects) 1949 cd java;$(MAKE) javalib; 1950 rm -f ./java/target/$(ROCKSDBJNILIB) 1951 $(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC \ 1952 -o ./java/target/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) \ 1953 $(java_static_all_libobjects) $(COVERAGEFLAGS) \ 1954 $(JAVA_COMPRESSIONS) $(JAVA_STATIC_LDFLAGS) 1955 cd java/target;if [ "$(DEBUG_LEVEL)" == "0" ]; then \ 1956 strip $(STRIPFLAGS) $(ROCKSDBJNILIB); \ 1957 fi 1958 cd java;jar -cf target/$(ROCKSDB_JAR) HISTORY*.md 1959 cd java/target;jar -uf $(ROCKSDB_JAR) $(ROCKSDBJNILIB) 1960 cd java/target/classes;jar -uf ../$(ROCKSDB_JAR) org/rocksdb/*.class org/rocksdb/util/*.class 1961 cd java/target/apidocs;jar -cf ../$(ROCKSDB_JAVADOCS_JAR) * 1962 cd java/src/main/java;jar -cf ../../../target/$(ROCKSDB_SOURCES_JAR) org 1963 1964rocksdbjavastaticrelease: rocksdbjavastatic 1965 cd java/crossbuild && (vagrant destroy -f || true) && vagrant up linux32 && vagrant halt linux32 && vagrant up linux64 && vagrant halt linux64 && vagrant up linux64-musl && vagrant halt linux64-musl 1966 cd java;jar -cf target/$(ROCKSDB_JAR_ALL) HISTORY*.md 1967 cd java/target;jar -uf $(ROCKSDB_JAR_ALL) librocksdbjni-*.so librocksdbjni-*.jnilib 1968 cd java/target/classes;jar -uf ../$(ROCKSDB_JAR_ALL) org/rocksdb/*.class org/rocksdb/util/*.class 1969 1970rocksdbjavastaticreleasedocker: rocksdbjavastatic rocksdbjavastaticdockerx86 rocksdbjavastaticdockerx86_64 rocksdbjavastaticdockerx86musl rocksdbjavastaticdockerx86_64musl 1971 cd java;jar -cf target/$(ROCKSDB_JAR_ALL) HISTORY*.md 1972 cd java/target;jar -uf $(ROCKSDB_JAR_ALL) librocksdbjni-*.so librocksdbjni-*.jnilib 1973 cd java/target/classes;jar -uf ../$(ROCKSDB_JAR_ALL) org/rocksdb/*.class org/rocksdb/util/*.class 1974 1975rocksdbjavastaticdockerx86: 1976 mkdir -p java/target 1977 docker run --rm --name rocksdb_linux_x86-be --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) evolvedbinary/rocksjava:centos6_x86-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh 1978 1979rocksdbjavastaticdockerx86_64: 1980 mkdir -p java/target 1981 docker run --rm --name rocksdb_linux_x64-be --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) evolvedbinary/rocksjava:centos6_x64-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh 1982 1983rocksdbjavastaticdockerppc64le: 1984 mkdir -p java/target 1985 docker run --rm --name rocksdb_linux_ppc64le-be --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) evolvedbinary/rocksjava:centos7_ppc64le-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh 1986 1987rocksdbjavastaticdockerarm64v8: 1988 mkdir -p java/target 1989 docker run --rm --name rocksdb_linux_arm64v8-be --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) evolvedbinary/rocksjava:centos7_arm64v8-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh 1990 1991rocksdbjavastaticdockerx86musl: 1992 mkdir -p java/target 1993 docker run --rm --name rocksdb_linux_x86-musl-be --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) evolvedbinary/rocksjava:alpine3_x86-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh 1994 1995rocksdbjavastaticdockerx86_64musl: 1996 mkdir -p java/target 1997 docker run --rm --name rocksdb_linux_x64-musl-be --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) evolvedbinary/rocksjava:alpine3_x64-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh 1998 1999rocksdbjavastaticdockerppc64lemusl: 2000 mkdir -p java/target 2001 docker run --rm --name rocksdb_linux_ppc64le-musl-be --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) evolvedbinary/rocksjava:alpine3_ppc64le-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh 2002 2003rocksdbjavastaticdockerarm64v8musl: 2004 mkdir -p java/target 2005 docker run --rm --name rocksdb_linux_arm64v8-musl-be --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) evolvedbinary/rocksjava:alpine3_arm64v8-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh 2006 2007rocksdbjavastaticpublish: rocksdbjavastaticrelease rocksdbjavastaticpublishcentral 2008 2009rocksdbjavastaticpublishdocker: rocksdbjavastaticreleasedocker rocksdbjavastaticpublishcentral 2010 2011rocksdbjavastaticpublishcentral: 2012 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/rocksjni.pom -Dfile=java/target/rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-javadoc.jar -Dclassifier=javadoc 2013 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/rocksjni.pom -Dfile=java/target/rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-sources.jar -Dclassifier=sources 2014 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/rocksjni.pom -Dfile=java/target/rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-linux64.jar -Dclassifier=linux64 2015 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/rocksjni.pom -Dfile=java/target/rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-linux32.jar -Dclassifier=linux32 2016 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/rocksjni.pom -Dfile=java/target/rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-linux64-musl.jar -Dclassifier=linux64-musl 2017 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/rocksjni.pom -Dfile=java/target/rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-linux32-musl.jar -Dclassifier=linux32-musl 2018 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/rocksjni.pom -Dfile=java/target/rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-osx.jar -Dclassifier=osx 2019 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/rocksjni.pom -Dfile=java/target/rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-win64.jar -Dclassifier=win64 2020 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/rocksjni.pom -Dfile=java/target/rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH).jar 2021 2022# A version of each $(LIBOBJECTS) compiled with -fPIC 2023ifeq ($(HAVE_POWER8),1) 2024JAVA_CC_OBJECTS = $(SHARED_CC_OBJECTS) 2025JAVA_C_OBJECTS = $(SHARED_C_OBJECTS) 2026JAVA_ASM_OBJECTS = $(SHARED_ASM_OBJECTS) 2027 2028JAVA_C_LIBOBJECTS = $(patsubst %.c.o,jl/%.c.o,$(JAVA_C_OBJECTS)) 2029JAVA_ASM_LIBOBJECTS = $(patsubst %.S.o,jl/%.S.o,$(JAVA_ASM_OBJECTS)) 2030endif 2031 2032java_libobjects = $(patsubst %,jl/%,$(LIB_CC_OBJECTS)) 2033CLEAN_FILES += jl 2034java_all_libobjects = $(java_libobjects) 2035 2036ifeq ($(HAVE_POWER8),1) 2037java_ppc_libobjects = $(JAVA_C_LIBOBJECTS) $(JAVA_ASM_LIBOBJECTS) 2038 2039jl/crc32c_ppc.o: util/crc32c_ppc.c 2040 $(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@ 2041 2042jl/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S 2043 $(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@ 2044java_all_libobjects += $(java_ppc_libobjects) 2045endif 2046 2047$(java_libobjects): jl/%.o: %.cc 2048 $(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) -fPIC -c $< -o $@ $(COVERAGEFLAGS) 2049 2050 2051 2052rocksdbjava: $(java_all_libobjects) 2053 $(AM_V_GEN)cd java;$(MAKE) javalib; 2054 $(AM_V_at)rm -f ./java/target/$(ROCKSDBJNILIB) 2055 $(AM_V_at)$(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC -o ./java/target/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) $(java_all_libobjects) $(JAVA_LDFLAGS) $(COVERAGEFLAGS) 2056 $(AM_V_at)cd java;jar -cf target/$(ROCKSDB_JAR) HISTORY*.md 2057 $(AM_V_at)cd java/target;jar -uf $(ROCKSDB_JAR) $(ROCKSDBJNILIB) 2058 $(AM_V_at)cd java/target/classes;jar -uf ../$(ROCKSDB_JAR) org/rocksdb/*.class org/rocksdb/util/*.class 2059 2060jclean: 2061 cd java;$(MAKE) clean; 2062 2063jtest_compile: rocksdbjava 2064 cd java;$(MAKE) java_test 2065 2066jtest_run: 2067 cd java;$(MAKE) run_test 2068 2069jtest: rocksdbjava 2070 cd java;$(MAKE) sample;$(MAKE) test; 2071 python tools/check_all_python.py # TODO peterd: find a better place for this check in CI targets 2072 2073jdb_bench: 2074 cd java;$(MAKE) db_bench; 2075 2076commit_prereq: build_tools/rocksdb-lego-determinator \ 2077 build_tools/precommit_checker.py 2078 J=$(J) build_tools/precommit_checker.py unit unit_481 clang_unit release release_481 clang_release tsan asan ubsan lite unit_non_shm 2079 $(MAKE) clean && $(MAKE) jclean && $(MAKE) rocksdbjava; 2080 2081# --------------------------------------------------------------------------- 2082# Platform-specific compilation 2083# --------------------------------------------------------------------------- 2084 2085ifeq ($(PLATFORM), IOS) 2086# For iOS, create universal object files to be used on both the simulator and 2087# a device. 2088XCODEROOT=$(shell xcode-select -print-path) 2089PLATFORMSROOT=$(XCODEROOT)/Platforms 2090SIMULATORROOT=$(PLATFORMSROOT)/iPhoneSimulator.platform/Developer 2091DEVICEROOT=$(PLATFORMSROOT)/iPhoneOS.platform/Developer 2092IOSVERSION=$(shell defaults read $(PLATFORMSROOT)/iPhoneOS.platform/version CFBundleShortVersionString) 2093 2094.cc.o: 2095 mkdir -p ios-x86/$(dir $@) 2096 $(CXX) $(CXXFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@ 2097 mkdir -p ios-arm/$(dir $@) 2098 xcrun -sdk iphoneos $(CXX) $(CXXFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -arch armv7s -arch arm64 -c $< -o ios-arm/$@ 2099 lipo ios-x86/$@ ios-arm/$@ -create -output $@ 2100 2101.c.o: 2102 mkdir -p ios-x86/$(dir $@) 2103 $(CC) $(CFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@ 2104 mkdir -p ios-arm/$(dir $@) 2105 xcrun -sdk iphoneos $(CC) $(CFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -arch armv7s -arch arm64 -c $< -o ios-arm/$@ 2106 lipo ios-x86/$@ ios-arm/$@ -create -output $@ 2107 2108else 2109ifeq ($(HAVE_POWER8),1) 2110util/crc32c_ppc.o: util/crc32c_ppc.c 2111 $(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@ 2112 2113util/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S 2114 $(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@ 2115endif 2116.cc.o: 2117 $(AM_V_CC)$(CXX) $(CXXFLAGS) -c $< -o $@ $(COVERAGEFLAGS) 2118 2119.cpp.o: 2120 $(AM_V_CC)$(CXX) $(CXXFLAGS) -c $< -o $@ $(COVERAGEFLAGS) 2121 2122.c.o: 2123 $(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@ 2124endif 2125# --------------------------------------------------------------------------- 2126# Source files dependencies detection 2127# --------------------------------------------------------------------------- 2128 2129all_sources = $(LIB_SOURCES) $(MAIN_SOURCES) $(MOCK_LIB_SOURCES) $(TOOL_LIB_SOURCES) $(BENCH_LIB_SOURCES) $(TEST_LIB_SOURCES) $(ANALYZER_LIB_SOURCES) $(STRESS_LIB_SOURCES) 2130DEPFILES = $(all_sources:.cc=.cc.d) 2131 2132ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1) 2133 DEPFILES += $(FOLLY_SOURCES:.cpp=.cpp.d) 2134endif 2135 2136# Add proper dependency support so changing a .h file forces a .cc file to 2137# rebuild. 2138 2139# The .d file indicates .cc file's dependencies on .h files. We generate such 2140# dependency by g++'s -MM option, whose output is a make dependency rule. 2141%.cc.d: %.cc 2142 @$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \ 2143 -MM -MT'$@' -MT'$(<:.cc=.o)' "$<" -o '$@' 2144 2145%.cpp.d: %.cpp 2146 @$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \ 2147 -MM -MT'$@' -MT'$(<:.cpp=.o)' "$<" -o '$@' 2148 2149ifeq ($(HAVE_POWER8),1) 2150DEPFILES_C = $(LIB_SOURCES_C:.c=.c.d) 2151DEPFILES_ASM = $(LIB_SOURCES_ASM:.S=.S.d) 2152 2153%.c.d: %.c 2154 @$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \ 2155 -MM -MT'$@' -MT'$(<:.c=.o)' "$<" -o '$@' 2156 2157%.S.d: %.S 2158 @$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \ 2159 -MM -MT'$@' -MT'$(<:.S=.o)' "$<" -o '$@' 2160 2161$(DEPFILES_C): %.c.d 2162 2163$(DEPFILES_ASM): %.S.d 2164depend: $(DEPFILES) $(DEPFILES_C) $(DEPFILES_ASM) 2165else 2166depend: $(DEPFILES) 2167endif 2168 2169# if the make goal is either "clean" or "format", we shouldn't 2170# try to import the *.d files. 2171# TODO(kailiu) The unfamiliarity of Make's conditions leads to the ugly 2172# working solution. 2173ifneq ($(MAKECMDGOALS),clean) 2174ifneq ($(MAKECMDGOALS),format) 2175ifneq ($(MAKECMDGOALS),jclean) 2176ifneq ($(MAKECMDGOALS),jtest) 2177ifneq ($(MAKECMDGOALS),package) 2178ifneq ($(MAKECMDGOALS),analyze) 2179-include $(DEPFILES) 2180endif 2181endif 2182endif 2183endif 2184endif 2185endif 2186