Makefile 79.0 KB
Newer Older
J
jorlow@chromium.org 已提交
1 2 3 4
# Copyright (c) 2011 The LevelDB Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. See the AUTHORS file for names of contributors.

5
# Inherit some settings from environment variables, if available
J
jorlow@chromium.org 已提交
6

7
#-----------------------------------------------
8

J
Jonathan Lee 已提交
9 10
BASH_EXISTS := $(shell which bash)
SHELL := $(shell which bash)
11 12 13
# Default to python3. Some distros like CentOS 8 do not have `python`.
PYTHON?=$(shell which python3 || which python || echo python3)
export PYTHON
J
Jonathan Lee 已提交
14

15
CLEAN_FILES = # deliberately empty, so we can append below.
16 17 18 19
CFLAGS += ${EXTRA_CFLAGS}
CXXFLAGS += ${EXTRA_CXXFLAGS}
LDFLAGS += $(EXTRA_LDFLAGS)
MACHINE ?= $(shell uname -m)
T
Tomas Kolda 已提交
20 21
ARFLAGS = ${EXTRA_ARFLAGS} rs
STRIPFLAGS = -S -x
22

23 24
# Transform parallel LOG output into something more readable.
perl_command = perl -n \
25 26 27
  -e '@a=split("\t",$$_,-1); $$t=$$a[8];'				\
  -e '$$t =~ /.*if\s\[\[\s"(.*?\.[\w\/]+)/ and $$t=$$1;'		\
  -e '$$t =~ s,^\./,,;'							\
Y
Yueh-Hsuan Chiang 已提交
28 29 30
  -e '$$t =~ s, >.*,,; chomp $$t;'					\
  -e '$$t =~ /.*--gtest_filter=(.*?\.[\w\/]+)/ and $$t=$$1;'		\
  -e 'printf "%7.3f %s %s\n", $$a[3], $$a[6] == 0 ? "PASS" : "FAIL", $$t'
31 32
quoted_perl_command = $(subst ','\'',$(perl_command))

33 34 35 36 37 38 39 40 41
# DEBUG_LEVEL can have three values:
# * DEBUG_LEVEL=2; this is the ultimate debug mode. It will compile rocksdb
# without any optimizations. To compile with level 2, issue `make dbg`
# * DEBUG_LEVEL=1; debug level 1 enables all assertions and debug code, but
# compiles rocksdb with -O2 optimizations. this is the default debug level.
# `make all` or `make <binary_target>` compile RocksDB with debug level 1.
# We use this debug level when developing RocksDB.
# * DEBUG_LEVEL=0; this is the debug level we use for release. If you're
# running rocksdb in production you most definitely want to compile RocksDB
A
agiardullo 已提交
42
# with debug level 0. To compile with level 0, run `make shared_lib`,
43 44
# `make install-shared`, `make static_lib`, `make install-static` or
# `make install`
45 46 47

# Set the default DEBUG_LEVEL to 1
DEBUG_LEVEL?=1
48 49

ifeq ($(MAKECMDGOALS),dbg)
Y
Yueh-Hsuan Chiang 已提交
50
	DEBUG_LEVEL=2
51
endif
52

53 54 55 56 57 58 59 60
ifeq ($(MAKECMDGOALS),clean)
	DEBUG_LEVEL=0
endif

ifeq ($(MAKECMDGOALS),release)
	DEBUG_LEVEL=0
endif

61
ifeq ($(MAKECMDGOALS),shared_lib)
Y
Yueh-Hsuan Chiang 已提交
62
	DEBUG_LEVEL=0
I
Igor Canadi 已提交
63
endif
I
Igor Canadi 已提交
64

I
Igor Canadi 已提交
65
ifeq ($(MAKECMDGOALS),install-shared)
Y
Yueh-Hsuan Chiang 已提交
66
	DEBUG_LEVEL=0
I
Igor Canadi 已提交
67 68
endif

I
Igor Canadi 已提交
69
ifeq ($(MAKECMDGOALS),static_lib)
Y
Yueh-Hsuan Chiang 已提交
70
	DEBUG_LEVEL=0
71
endif
I
Igor Canadi 已提交
72

I
Igor Canadi 已提交
73
ifeq ($(MAKECMDGOALS),install-static)
Y
Yueh-Hsuan Chiang 已提交
74
	DEBUG_LEVEL=0
I
Igor Canadi 已提交
75 76 77
endif

ifeq ($(MAKECMDGOALS),install)
Y
Yueh-Hsuan Chiang 已提交
78
	DEBUG_LEVEL=0
79 80
endif

81
ifeq ($(MAKECMDGOALS),rocksdbjavastatic)
82 83 84
	ifneq ($(DEBUG_LEVEL),2)
		DEBUG_LEVEL=0
	endif
85 86
endif

Y
Yueh-Hsuan Chiang 已提交
87
ifeq ($(MAKECMDGOALS),rocksdbjavastaticrelease)
88 89 90
	ifneq ($(DEBUG_LEVEL),2)
		DEBUG_LEVEL=0
	endif
Y
Yueh-Hsuan Chiang 已提交
91 92
endif

93
ifeq ($(MAKECMDGOALS),rocksdbjavastaticreleasedocker)
94
	ifneq ($(DEBUG_LEVEL),2)
95
		DEBUG_LEVEL=0
96
	endif
97 98
endif

Y
Yueh-Hsuan Chiang 已提交
99 100 101 102
ifeq ($(MAKECMDGOALS),rocksdbjavastaticpublish)
	DEBUG_LEVEL=0
endif

103 104
$(info $$DEBUG_LEVEL is ${DEBUG_LEVEL})

Y
Yi Wu 已提交
105 106
# Lite build flag.
LITE ?= 0
107 108 109 110 111 112 113 114
ifeq ($(LITE), 0)
ifneq ($(filter -DROCKSDB_LITE,$(OPT)),)
  # Be backward compatible and support older format where OPT=-DROCKSDB_LITE is
  # specified instead of LITE=1 on the command line.
  LITE=1
endif
else ifeq ($(LITE), 1)
ifeq ($(filter -DROCKSDB_LITE,$(OPT)),)
Y
Yi Wu 已提交
115 116
	OPT += -DROCKSDB_LITE
endif
117
endif
Y
Yi Wu 已提交
118 119 120 121 122 123 124 125 126 127

# Figure out optimize level.
ifneq ($(DEBUG_LEVEL), 2)
ifeq ($(LITE), 0)
	OPT += -O2
else
	OPT += -Os
endif
endif

128 129
# compile with -O2 if debug level is not 2
ifneq ($(DEBUG_LEVEL), 2)
Y
Yi Wu 已提交
130
OPT += -fno-omit-frame-pointer
131 132
# Skip for archs that don't support -momit-leaf-frame-pointer
ifeq (,$(shell $(CXX) -fsyntax-only -momit-leaf-frame-pointer -xc /dev/null 2>&1))
133 134 135 136
OPT += -momit-leaf-frame-pointer
endif
endif

137 138 139 140 141 142 143 144 145 146 147 148
ifeq (,$(shell $(CXX) -fsyntax-only -maltivec -xc /dev/null 2>&1))
CXXFLAGS += -DHAS_ALTIVEC
CFLAGS += -DHAS_ALTIVEC
HAS_ALTIVEC=1
endif

ifeq (,$(shell $(CXX) -fsyntax-only -mcpu=power8 -xc /dev/null 2>&1))
CXXFLAGS += -DHAVE_POWER8
CFLAGS +=  -DHAVE_POWER8
HAVE_POWER8=1
endif

149
ifeq (,$(shell $(CXX) -fsyntax-only -march=armv8-a+crc+crypto -xc /dev/null 2>&1))
150 151
CXXFLAGS += -march=armv8-a+crc+crypto
CFLAGS += -march=armv8-a+crc+crypto
152 153 154
ARMCRC_SOURCE=1
endif

155
# if we're compiling for release, compile without debug code (-DNDEBUG)
156
ifeq ($(DEBUG_LEVEL),0)
I
Igor Canadi 已提交
157
OPT += -DNDEBUG
S
Siying Dong 已提交
158 159 160 161 162 163

ifneq ($(USE_RTTI), 1)
	CXXFLAGS += -fno-rtti
else
	CXXFLAGS += -DROCKSDB_USE_RTTI
endif
164
else
S
Siying Dong 已提交
165 166 167 168 169 170
ifneq ($(USE_RTTI), 0)
	CXXFLAGS += -DROCKSDB_USE_RTTI
else
	CXXFLAGS += -fno-rtti
endif

171 172 173 174 175 176
ifdef ASSERT_STATUS_CHECKED
ifeq ($(filter -DROCKSDB_ASSERT_STATUS_CHECKED,$(OPT)),)
	OPT += -DROCKSDB_ASSERT_STATUS_CHECKED
endif
endif

177
$(warning Warning: Compiling in debug mode. Don't use the resulting binary in production)
I
Igor Canadi 已提交
178 179
endif

180
#-----------------------------------------------
181
include src.mk
182

183 184 185 186 187 188
AM_DEFAULT_VERBOSITY = 0

AM_V_GEN = $(am__v_GEN_$(V))
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
am__v_GEN_0 = @echo "  GEN     " $@;
am__v_GEN_1 =
J
Jim Meyering 已提交
189 190 191 192
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
am__v_at_0 = @
am__v_at_1 =
193 194 195 196 197

AM_V_CC = $(am__v_CC_$(V))
am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
am__v_CC_0 = @echo "  CC      " $@;
am__v_CC_1 =
198

199 200
AM_V_CCLD = $(am__v_CCLD_$(V))
am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
201
ifneq ($(SKIP_LINK), 1)
202 203
am__v_CCLD_0 = @echo "  CCLD    " $@;
am__v_CCLD_1 =
204 205 206 207
else
am__v_CCLD_0 = @echo "  !CCLD   " $@; true skip
am__v_CCLD_1 = true skip
endif
J
Jim Meyering 已提交
208 209 210 211
AM_V_AR = $(am__v_AR_$(V))
am__v_AR_ = $(am__v_AR_$(AM_DEFAULT_VERBOSITY))
am__v_AR_0 = @echo "  AR      " $@;
am__v_AR_1 =
212

213 214 215 216
ifdef ROCKSDB_USE_LIBRADOS
LIB_SOURCES += utilities/env_librados.cc
LDFLAGS += -lrados
endif
217

218
AM_LINK = $(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(COVERAGEFLAGS)
219

220 221 222 223 224 225 226 227 228 229 230
# Detect what platform we're building on.
# Export some common variables that might have been passed as Make variables
# instead of environment variables.
dummy := $(shell (export ROCKSDB_ROOT="$(CURDIR)"; \
                  export COMPILE_WITH_ASAN="$(COMPILE_WITH_ASAN)"; \
                  export COMPILE_WITH_TSAN="$(COMPILE_WITH_TSAN)"; \
                  export COMPILE_WITH_UBSAN="$(COMPILE_WITH_UBSAN)"; \
                  export PORTABLE="$(PORTABLE)"; \
                  export ROCKSDB_NO_FBCODE="$(ROCKSDB_NO_FBCODE)"; \
                  export USE_CLANG="$(USE_CLANG)"; \
                  "$(CURDIR)/build_tools/build_detect_platform" "$(CURDIR)/make_config.mk"))
S
Sanjay Ghemawat 已提交
231
# this file is generated by the previous line to set build flags and sources
I
Igor Canadi 已提交
232
include make_config.mk
233
export JAVAC_ARGS
234
CLEAN_FILES += make_config.mk
J
jorlow@chromium.org 已提交
235

236
missing_make_config_paths := $(shell				\
237
	grep "\./\S*\|/\S*" -o $(CURDIR)/make_config.mk | 	\
238 239 240 241 242
	while read path;					\
		do [ -e $$path ] || echo $$path; 		\
	done | sort | uniq)

$(foreach path, $(missing_make_config_paths), \
243
	$(warning Warning: $(path) does not exist))
244

T
Tomas Kolda 已提交
245 246 247
ifeq ($(PLATFORM), OS_AIX)
# no debug info
else ifneq ($(PLATFORM), IOS)
I
Igor Canadi 已提交
248 249 250 251 252 253 254
CFLAGS += -g
CXXFLAGS += -g
else
# no debug info for IOS, that will make our library big
OPT += -DNDEBUG
endif

T
Tomas Kolda 已提交
255 256 257 258 259
ifeq ($(PLATFORM), OS_AIX)
ARFLAGS = -X64 rs
STRIPFLAGS = -X64 -x
endif

D
David Bernard 已提交
260 261 262
ifeq ($(PLATFORM), OS_SOLARIS)
	PLATFORM_CXXFLAGS += -D _GLIBCXX_USE_C99
endif
263
ifneq ($(filter -DROCKSDB_LITE,$(OPT)),)
Y
Yueh-Hsuan Chiang 已提交
264 265 266
	# found
	CFLAGS += -fno-exceptions
	CXXFLAGS += -fno-exceptions
267 268
	# LUA is not supported under ROCKSDB_LITE
	LUA_PATH =
269 270
endif

I
Igor Canadi 已提交
271 272
# ASAN doesn't work well with jemalloc. If we're compiling with ASAN, we should use regular malloc.
ifdef COMPILE_WITH_ASAN
Y
Yueh-Hsuan Chiang 已提交
273 274 275 276
	DISABLE_JEMALLOC=1
	EXEC_LDFLAGS += -fsanitize=address
	PLATFORM_CCFLAGS += -fsanitize=address
	PLATFORM_CXXFLAGS += -fsanitize=address
I
Igor Canadi 已提交
277 278 279 280
endif

# TSAN doesn't work well with jemalloc. If we're compiling with TSAN, we should use regular malloc.
ifdef COMPILE_WITH_TSAN
Y
Yueh-Hsuan Chiang 已提交
281
	DISABLE_JEMALLOC=1
S
Siying Dong 已提交
282
	EXEC_LDFLAGS += -fsanitize=thread
283 284
	PLATFORM_CCFLAGS += -fsanitize=thread -fPIC -DFOLLY_SANITIZE_THREAD
	PLATFORM_CXXFLAGS += -fsanitize=thread -fPIC -DFOLLY_SANITIZE_THREAD
285 286
        # Turn off -pg when enabling TSAN testing, because that induces
        # a link failure.  TODO: find the root cause
D
dx9 已提交
287
	PROFILING_FLAGS =
288 289
	# LUA is not supported under TSAN
	LUA_PATH =
290 291 292
	# Limit keys for crash test under TSAN to avoid error:
	# "ThreadSanitizer: DenseSlabAllocator overflow. Dying."
	CRASH_TEST_EXT_ARGS += --max_key=1000000
I
Igor Canadi 已提交
293 294
endif

T
Tomas Kolda 已提交
295 296 297 298 299
# AIX doesn't work with -pg
ifeq ($(PLATFORM), OS_AIX)
	PROFILING_FLAGS =
endif

300 301 302
# USAN doesn't work well with jemalloc. If we're compiling with USAN, we should use regular malloc.
ifdef COMPILE_WITH_UBSAN
	DISABLE_JEMALLOC=1
S
Siying Dong 已提交
303 304 305 306
	# Suppress alignment warning because murmurhash relies on casting unaligned
	# memory to integer. Fixing it may cause performance regression. 3-way crc32
	# relies on it too, although it can be rewritten to eliminate with minimal
	# performance regression.
307 308 309
	EXEC_LDFLAGS += -fsanitize=undefined -fno-sanitize-recover=all
	PLATFORM_CCFLAGS += -fsanitize=undefined -fno-sanitize-recover=all -DROCKSDB_UBSAN_RUN
	PLATFORM_CXXFLAGS += -fsanitize=undefined -fno-sanitize-recover=all -DROCKSDB_UBSAN_RUN
310 311
endif

312 313 314 315 316
ifdef ROCKSDB_VALGRIND_RUN
	PLATFORM_CCFLAGS += -DROCKSDB_VALGRIND_RUN
	PLATFORM_CXXFLAGS += -DROCKSDB_VALGRIND_RUN
endif

I
Igor Canadi 已提交
317
ifndef DISABLE_JEMALLOC
318
	ifdef JEMALLOC
T
Tamir Duberstein 已提交
319 320
		PLATFORM_CXXFLAGS += -DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE
		PLATFORM_CCFLAGS  += -DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE
321
	endif
322 323 324 325
	ifdef WITH_JEMALLOC_FLAG
		PLATFORM_LDFLAGS += -ljemalloc
		JAVA_LDFLAGS += -ljemalloc
	endif
Y
Yueh-Hsuan Chiang 已提交
326 327 328
	EXEC_LDFLAGS := $(JEMALLOC_LIB) $(EXEC_LDFLAGS)
	PLATFORM_CXXFLAGS += $(JEMALLOC_INCLUDE)
	PLATFORM_CCFLAGS += $(JEMALLOC_INCLUDE)
I
Igor Canadi 已提交
329 330
endif

331 332 333 334
ifndef USE_FOLLY_DISTRIBUTED_MUTEX
	USE_FOLLY_DISTRIBUTED_MUTEX=0
endif

T
Tamir Duberstein 已提交
335 336
export GTEST_THROW_ON_FAILURE=1
export GTEST_HAS_EXCEPTIONS=1
337
GTEST_DIR = third-party/gtest-1.10.0/fused-src
T
Tomas Kolda 已提交
338 339 340 341 342 343 344 345
# AIX: pre-defined system headers are surrounded by an extern "C" block
ifeq ($(PLATFORM), OS_AIX)
	PLATFORM_CCFLAGS += -I$(GTEST_DIR)
	PLATFORM_CXXFLAGS += -I$(GTEST_DIR)
else
	PLATFORM_CCFLAGS += -isystem $(GTEST_DIR)
	PLATFORM_CXXFLAGS += -isystem $(GTEST_DIR)
endif
I
Igor Sugak 已提交
346

347
ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1)
348 349 350 351 352 353 354 355 356 357
	FOLLY_DIR = ./third-party/folly
	# AIX: pre-defined system headers are surrounded by an extern "C" block
	ifeq ($(PLATFORM), OS_AIX)
		PLATFORM_CCFLAGS += -I$(FOLLY_DIR)
		PLATFORM_CXXFLAGS += -I$(FOLLY_DIR)
	else
		PLATFORM_CCFLAGS += -isystem $(FOLLY_DIR)
		PLATFORM_CXXFLAGS += -isystem $(FOLLY_DIR)
	endif
endif
358 359 360 361 362

ifdef TEST_CACHE_LINE_SIZE
  PLATFORM_CCFLAGS += -DTEST_CACHE_LINE_SIZE=$(TEST_CACHE_LINE_SIZE)
  PLATFORM_CXXFLAGS += -DTEST_CACHE_LINE_SIZE=$(TEST_CACHE_LINE_SIZE)
endif
363

364 365 366
# This (the first rule) must depend on "all".
default: all

367
WARNING_FLAGS = -W -Wextra -Wall -Wsign-compare -Wshadow \
368
  -Wunused-parameter
369

370 371 372 373
ifeq ($(PLATFORM), OS_OPENBSD)
	WARNING_FLAGS += -Wno-unused-lambda-capture
endif

374
ifndef DISABLE_WARNING_AS_ERROR
Y
Yueh-Hsuan Chiang 已提交
375
	WARNING_FLAGS += -Werror
376 377
endif

378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400

ifdef LUA_PATH

ifndef LUA_INCLUDE
LUA_INCLUDE=$(LUA_PATH)/include
endif

LUA_INCLUDE_FILE=$(LUA_INCLUDE)/lualib.h

ifeq ("$(wildcard $(LUA_INCLUDE_FILE))", "")
# LUA_INCLUDE_FILE does not exist
$(error Cannot find lualib.h under $(LUA_INCLUDE).  Try to specify both LUA_PATH and LUA_INCLUDE manually)
endif
LUA_FLAGS = -I$(LUA_INCLUDE) -DLUA -DLUA_COMPAT_ALL
CFLAGS += $(LUA_FLAGS)
CXXFLAGS += $(LUA_FLAGS)

ifndef LUA_LIB
LUA_LIB = $(LUA_PATH)/lib/liblua.a
endif
ifeq ("$(wildcard $(LUA_LIB))", "") # LUA_LIB does not exist
$(error $(LUA_LIB) does not exist.  Try to specify both LUA_PATH and LUA_LIB manually)
endif
401
EXEC_LDFLAGS += $(LUA_LIB)
402 403 404

endif

405 406 407
ifeq ($(NO_THREEWAY_CRC32C), 1)
	CXXFLAGS += -DNO_THREEWAY_CRC32C
endif
408

I
Igor Canadi 已提交
409
CFLAGS += $(WARNING_FLAGS) -I. -I./include $(PLATFORM_CCFLAGS) $(OPT)
I
Islam AbdelRahman 已提交
410
CXXFLAGS += $(WARNING_FLAGS) -I. -I./include $(PLATFORM_CXXFLAGS) $(OPT) -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers
411

S
Sanjay Ghemawat 已提交
412
LDFLAGS += $(PLATFORM_LDFLAGS)
J
jorlow@chromium.org 已提交
413

414 415 416
# If NO_UPDATE_BUILD_VERSION is set we don't update util/build_version.cc, but
# the file needs to already exist or else the build will fail
ifndef NO_UPDATE_BUILD_VERSION
417
date := $(shell date +%F)
I
Igor Canadi 已提交
418
ifdef FORCE_GIT_SHA
Y
Yueh-Hsuan Chiang 已提交
419
	git_sha := $(FORCE_GIT_SHA)
I
Igor Canadi 已提交
420
else
Y
Yueh-Hsuan Chiang 已提交
421
	git_sha := $(shell git rev-parse HEAD 2>/dev/null)
I
Igor Canadi 已提交
422
endif
423
gen_build_version = sed -e s/@@GIT_SHA@@/$(git_sha)/ -e s/@@GIT_DATE_TIME@@/$(date)/ util/build_version.cc.in
424 425 426 427 428 429

# Record the version of the source that we are compiling.
# We keep a record of the git revision in this file.  It is then built
# as a regular source file as part of the compilation process.
# One can run "strings executable_filename | grep _build_" to find
# the version of the source that we used to build the executable file.
430 431
FORCE:
util/build_version.cc: FORCE
Y
Yueh-Hsuan Chiang 已提交
432 433 434 435 436
	$(AM_V_GEN)rm -f $@-t
	$(AM_V_at)$(gen_build_version) > $@-t
	$(AM_V_at)if test -f $@; then					\
	  cmp -s $@-t $@ && rm -f $@-t || mv -f $@-t $@;		\
	else mv -f $@-t $@; fi
437
endif
438

439
LIBOBJECTS = $(LIB_SOURCES:.cc=.o)
440 441 442 443
ifeq ($(HAVE_POWER8),1)
LIB_CC_OBJECTS = $(LIB_SOURCES:.cc=.o)
LIBOBJECTS += $(LIB_SOURCES_C:.c=.o)
LIBOBJECTS += $(LIB_SOURCES_ASM:.S=.o)
A
Andrew Kryczka 已提交
444 445
else
LIB_CC_OBJECTS = $(LIB_SOURCES:.cc=.o)
446 447
endif

448 449
LIBOBJECTS += $(TOOL_LIB_SOURCES:.cc=.o)
MOCKOBJECTS = $(MOCK_LIB_SOURCES:.cc=.o)
450 451 452
ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1)
  FOLLYOBJECTS = $(FOLLY_SOURCES:.cpp=.o)
endif
J
jorlow@chromium.org 已提交
453

I
Igor Sugak 已提交
454
GTEST = $(GTEST_DIR)/gtest/gtest-all.o
455 456
TESTUTIL = ./test_util/testutil.o
TESTHARNESS = ./test_util/testharness.o $(TESTUTIL) $(MOCKOBJECTS) $(GTEST)
457
VALGRIND_ERROR = 2
458
VALGRIND_VER := $(join $(VALGRIND_VER),valgrind)
459

460
VALGRIND_OPTS = --error-exitcode=$(VALGRIND_ERROR) --leak-check=full
461

O
omegaga 已提交
462
BENCHTOOLOBJECTS = $(BENCH_LIB_SOURCES:.cc=.o) $(LIBOBJECTS) $(TESTUTIL)
463

464 465
ANALYZETOOLOBJECTS = $(ANALYZER_LIB_SOURCES:.cc=.o)

A
anand76 已提交
466
ifeq ($(DEBUG_LEVEL),0)
467
STRESSTOOLOBJECTS = $(STRESS_LIB_SOURCES:.cc=.o) $(LIBOBJECTS) $(TESTUTIL)
A
anand76 已提交
468 469 470 471
else
STRESSTOOLOBJECTS = $(STRESS_LIB_SOURCES:.cc=.o) $(LIBOBJECTS) $(TESTUTIL) \
	$(TESTHARNESS)
endif
472

S
Siying Dong 已提交
473
EXPOBJECTS = $(LIBOBJECTS) $(TESTUTIL)
O
omegaga 已提交
474

J
jorlow@chromium.org 已提交
475
TESTS = \
476
	db_basic_test \
477
	db_with_timestamp_basic_test \
E
Ewout Prangsma 已提交
478
	db_encryption_test \
479
	db_test2 \
S
Siying Dong 已提交
480
	external_sst_file_basic_test \
S
Siying Dong 已提交
481 482 483 484 485 486 487 488 489 490
	auto_roll_logger_test \
	bloom_test \
	dynamic_bloom_test \
	c_test \
	checkpoint_test \
	crc32c_test \
	coding_test \
	inlineskiplist_test \
	env_basic_test \
	env_test \
491
	env_logger_test \
492
	io_posix_test \
493
	hash_test \
494
	random_test \
S
Siying Dong 已提交
495
	thread_local_test \
496
	work_queue_test \
S
Siying Dong 已提交
497 498 499 500
	rate_limiter_test \
	perf_context_test \
	iostats_context_test \
	db_wal_test \
501
	db_block_cache_test \
502
	db_test \
503
	db_logical_block_size_cache_test \
Y
Yi Wu 已提交
504
	db_blob_index_test \
505
	db_iter_test \
506
	db_iter_stress_test \
507
	db_log_iter_test \
508
	db_bloom_filter_test \
509
	db_compaction_filter_test \
510
	db_compaction_test \
511
	db_dynamic_level_test \
512
	db_flush_test \
513
	db_inplace_update_test \
Y
Yi Wu 已提交
514
	db_iterator_test \
515
	db_memtable_test \
516
	db_merge_operator_test \
517
	db_merge_operand_test \
518
	db_options_test \
519
	db_range_del_test \
520
	db_secondary_test \
Y
Yi Wu 已提交
521
	db_sst_test \
522
	db_tailing_iter_test \
O
omegaga 已提交
523
	db_io_failure_test \
524
	db_properties_test \
525
	db_table_properties_test \
526
	db_statistics_test \
Y
Yi Wu 已提交
527
	db_write_test \
528
	error_handler_fs_test \
529
	autovector_test \
Y
Yi Wu 已提交
530
	blob_db_test \
M
Maysam Yabandeh 已提交
531
	cleanable_test \
532 533 534
	column_family_test \
	table_properties_collector_test \
	arena_test \
535
	memkind_kmem_allocator_test \
536
	block_test \
537
	data_block_hash_index_test \
538 539
	cache_test \
	corruption_test \
540
	slice_test \
541 542 543 544 545
	slice_transform_test \
	dbformat_test \
	fault_injection_test \
	filelock_test \
	filename_test \
546
	random_access_file_reader_test \
547
	file_reader_writer_test \
548
	block_based_filter_block_test \
549
	block_based_table_reader_test \
550
	full_filter_block_test \
M
Maysam Yabandeh 已提交
551
	partitioned_filter_block_test \
552
	hash_table_test \
553 554 555 556 557 558
	histogram_test \
	log_test \
	manual_compaction_test \
	mock_env_test \
	memtable_list_test \
	merge_helper_test \
559
	memory_test \
560 561
	merge_test \
	merger_test \
562
	util_merge_operators_test \
563
	options_file_test \
564 565 566
	reduce_levels_test \
	plain_table_db_test \
	comparator_db_test \
567
	external_sst_file_test \
568
	import_column_family_test \
569 570
	prefix_test \
	skiplist_test \
571
	write_buffer_manager_test \
572
	stringappend_test \
573
	cassandra_format_test \
574
	cassandra_functional_test \
575 576
	cassandra_row_merge_test \
	cassandra_serialize_test \
577 578
	ttl_test \
	backupable_db_test \
579
	cache_simulator_test \
580
	sim_cache_test \
581 582 583 584 585 586 587 588 589
	version_edit_test \
	version_set_test \
	compaction_picker_test \
	version_builder_test \
	file_indexer_test \
	write_batch_test \
	write_batch_with_index_test \
	write_controller_test\
	deletefile_test \
590
	obsolete_files_test \
591
	table_test \
592
	block_fetcher_test \
I
Islam AbdelRahman 已提交
593
	delete_scheduler_test \
594
	options_test \
595
	options_settable_test \
596
	options_util_test \
597
	event_logger_test \
A
Anirban Rahut 已提交
598
	timer_queue_test \
599 600 601 602 603 604
	cuckoo_table_builder_test \
	cuckoo_table_reader_test \
	cuckoo_table_db_test \
	flush_job_test \
	wal_manager_test \
	listener_test \
A
Andres Noetzli 已提交
605
	compaction_iterator_test \
606 607 608 609 610 611
	compaction_job_test \
	thread_list_test \
	sst_dump_test \
	compact_files_test \
	optimistic_transaction_test \
	write_callback_test \
612 613
	heap_test \
	compact_on_deletion_collector_test \
A
agiardullo 已提交
614
	compaction_job_stats_test \
615
	option_change_migration_test \
616
	transaction_test \
617
	transaction_lock_mgr_test \
618
	ldb_cmd_test \
619
	persistent_cache_test \
620
	statistics_test \
621
	stats_history_test \
Y
Yi Wu 已提交
622
	lru_cache_test \
623
	object_registry_test \
A
Andrew Kryczka 已提交
624
	repair_test \
A
Andrew Kryczka 已提交
625
	env_timed_test \
626
	write_prepared_transaction_test \
627
	write_unprepared_transaction_test \
Z
Zhongyi Xie 已提交
628
	db_universal_compaction_test \
Z
Zhichao Cao 已提交
629
	trace_analyzer_test \
630
	repeatable_thread_test \
631
	range_tombstone_fragmenter_test \
632
	range_del_aggregator_test \
633
	sst_file_reader_test \
634
	db_secondary_test \
H
haoyuhuang 已提交
635
	block_cache_tracer_test \
636
	block_cache_trace_analyzer_test \
C
Cheng Chang 已提交
637
	defer_test \
638 639
	blob_file_addition_test \
	blob_file_garbage_test \
640
	timer_test \
641
	db_with_timestamp_compaction_test \
642

Y
Yi Wu 已提交
643 644
PARALLEL_TEST = \
	backupable_db_test \
645
	db_bloom_filter_test \
Y
Yi Wu 已提交
646 647
	db_compaction_filter_test \
	db_compaction_test \
648
	db_merge_operator_test \
649
	db_sst_test \
Y
Yi Wu 已提交
650 651
	db_test \
	db_universal_compaction_test \
652 653
	db_wal_test \
	external_sst_file_test \
654
	import_column_family_test \
Y
Yi Wu 已提交
655
	fault_injection_test \
656
	file_reader_writer_test \
Y
Yi Wu 已提交
657 658
	inlineskiplist_test \
	manual_compaction_test \
659 660
	persistent_cache_test \
	table_test \
661
	transaction_test \
662
	transaction_lock_mgr_test \
663
	write_prepared_transaction_test \
664
	write_unprepared_transaction_test \
Y
Yi Wu 已提交
665

666 667 668 669 670
ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1)
	TESTS += folly_synchronization_distributed_mutex_test
	PARALLEL_TEST += folly_synchronization_distributed_mutex_test
endif

671 672 673 674
# options_settable_test doesn't pass with UBSAN as we use hack in the test
ifdef COMPILE_WITH_UBSAN
        TESTS := $(shell echo $(TESTS) | sed 's/\boptions_settable_test\b//g')
endif
675 676 677
ifdef ASSERT_STATUS_CHECKED
	# This is a new check for which we will add support incrementally. The
	# whitelist can be removed once support is fully added.
678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706
	TESTS_WHITELIST = \
		arena_test \
		autovector_test \
		blob_file_addition_test \
		blob_file_garbage_test \
		bloom_test \
		cassandra_format_test \
		cassandra_row_merge_test \
		cassandra_serialize_test \
		cleanable_test \
		coding_test \
		crc32c_test \
		dbformat_test \
		defer_test \
		dynamic_bloom_test \
		event_logger_test \
		file_indexer_test \
		folly_synchronization_distributed_mutex_test \
		hash_table_test \
		hash_test \
		heap_test \
		histogram_test \
		inlineskiplist_test \
		io_posix_test \
		iostats_context_test \
		memkind_kmem_allocator_test \
		merger_test \
		mock_env_test \
		object_registry_test \
707
		options_settable_test \
708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725
		options_test \
		random_test \
		range_del_aggregator_test \
		range_tombstone_fragmenter_test \
		repeatable_thread_test \
		skiplist_test \
		slice_test \
		statistics_test \
		thread_local_test \
		timer_queue_test \
		timer_test \
		util_merge_operators_test \
		version_edit_test \
		work_queue_test \
		write_controller_test \

	TESTS := $(filter $(TESTS_WHITELIST),$(TESTS))
	PARALLEL_TEST := $(filter $(TESTS_WHITELIST),$(PARALLEL_TEST))
726
endif
I
Islam AbdelRahman 已提交
727 728 729 730 731 732 733 734
SUBSET := $(TESTS)
ifdef ROCKSDBTESTS_START
        SUBSET := $(shell echo $(SUBSET) | sed 's/^.*$(ROCKSDBTESTS_START)/$(ROCKSDBTESTS_START)/')
endif

ifdef ROCKSDBTESTS_END
        SUBSET := $(shell echo $(SUBSET) | sed 's/$(ROCKSDBTESTS_END).*//')
endif
735

736
TOOLS = \
Y
Yueh-Hsuan Chiang 已提交
737 738 739
	sst_dump \
	db_sanity_test \
	db_stress \
I
Igor Canadi 已提交
740
	write_stress \
Y
Yueh-Hsuan Chiang 已提交
741 742 743
	ldb \
	db_repl_stress \
	rocksdb_dump \
Y
Yi Wu 已提交
744 745
	rocksdb_undump \
	blob_dump \
Z
Zhichao Cao 已提交
746
	trace_analyzer \
747
	block_cache_trace_analyzer \
J
jorlow@chromium.org 已提交
748

749 750 751
TEST_LIBS = \
	librocksdb_env_basic_test.a

S
sdong 已提交
752
# TODO: add back forward_iterator_bench, after making it build in all environemnts.
753
BENCHMARKS = db_bench table_reader_bench cache_bench memtablerep_bench filter_bench persistent_cache_bench range_del_aggregator_bench
J
jorlow@chromium.org 已提交
754

755
# if user didn't config LIBNAME, set the default
756
ifeq ($(LIBNAME),)
757 758
# we should only run rocksdb in production with DEBUG_LEVEL 0
ifeq ($(DEBUG_LEVEL),0)
Y
Yueh-Hsuan Chiang 已提交
759
        LIBNAME=librocksdb
760 761 762
else
        LIBNAME=librocksdb_debug
endif
763
endif
764
LIBRARY = ${LIBNAME}.a
765
TOOLS_LIBRARY = ${LIBNAME}_tools.a
766
STRESS_LIBRARY = ${LIBNAME}_stress.a
767

768 769 770
ROCKSDB_MAJOR = $(shell egrep "ROCKSDB_MAJOR.[0-9]" include/rocksdb/version.h | cut -d ' ' -f 3)
ROCKSDB_MINOR = $(shell egrep "ROCKSDB_MINOR.[0-9]" include/rocksdb/version.h | cut -d ' ' -f 3)
ROCKSDB_PATCH = $(shell egrep "ROCKSDB_PATCH.[0-9]" include/rocksdb/version.h | cut -d ' ' -f 3)
771

772 773
default: all

774 775 776
#-----------------------------------------------
# Create platform independent shared libraries.
#-----------------------------------------------
777
ifneq ($(PLATFORM_SHARED_EXT),)
H
heyongqiang 已提交
778 779

ifneq ($(PLATFORM_SHARED_VERSIONED),true)
780
SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
H
heyongqiang 已提交
781 782
SHARED2 = $(SHARED1)
SHARED3 = $(SHARED1)
783
SHARED4 = $(SHARED1)
H
heyongqiang 已提交
784 785
SHARED = $(SHARED1)
else
786 787
SHARED_MAJOR = $(ROCKSDB_MAJOR)
SHARED_MINOR = $(ROCKSDB_MINOR)
788
SHARED_PATCH = $(ROCKSDB_PATCH)
789
SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
790 791 792 793 794 795
ifeq ($(PLATFORM), OS_MACOSX)
SHARED_OSX = $(LIBNAME).$(SHARED_MAJOR)
SHARED2 = $(SHARED_OSX).$(PLATFORM_SHARED_EXT)
SHARED3 = $(SHARED_OSX).$(SHARED_MINOR).$(PLATFORM_SHARED_EXT)
SHARED4 = $(SHARED_OSX).$(SHARED_MINOR).$(SHARED_PATCH).$(PLATFORM_SHARED_EXT)
else
796 797
SHARED2 = $(SHARED1).$(SHARED_MAJOR)
SHARED3 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR)
798
SHARED4 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR).$(SHARED_PATCH)
799
endif
800 801
SHARED = $(SHARED1) $(SHARED2) $(SHARED3) $(SHARED4)
$(SHARED1): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
802
	ln -fs $(SHARED4) $(SHARED1)
803
$(SHARED2): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
804
	ln -fs $(SHARED4) $(SHARED2)
805
$(SHARED3): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
806
	ln -fs $(SHARED4) $(SHARED3)
807
endif
808 809 810 811 812 813 814
ifeq ($(HAVE_POWER8),1)
SHARED_C_OBJECTS = $(LIB_SOURCES_C:.c=.o)
SHARED_ASM_OBJECTS = $(LIB_SOURCES_ASM:.S=.o)
SHARED_C_LIBOBJECTS = $(patsubst %.o,shared-objects/%.o,$(SHARED_C_OBJECTS))
SHARED_ASM_LIBOBJECTS = $(patsubst %.o,shared-objects/%.o,$(SHARED_ASM_OBJECTS))
shared_libobjects = $(patsubst %,shared-objects/%,$(LIB_CC_OBJECTS))
else
815
shared_libobjects = $(patsubst %,shared-objects/%,$(LIBOBJECTS))
816 817
endif

818
CLEAN_FILES += shared-objects
819
shared_all_libobjects = $(shared_libobjects)
820

821 822 823 824 825 826 827 828 829
ifeq ($(HAVE_POWER8),1)
shared-ppc-objects = $(SHARED_C_LIBOBJECTS) $(SHARED_ASM_LIBOBJECTS)

shared-objects/util/crc32c_ppc.o: util/crc32c_ppc.c
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@

shared-objects/util/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
endif
830
$(shared_libobjects): shared-objects/%.o: %.cc
831 832
	$(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) -c $< -o $@

833 834 835 836
ifeq ($(HAVE_POWER8),1)
shared_all_libobjects = $(shared_libobjects) $(shared-ppc-objects)
endif
$(SHARED4): $(shared_all_libobjects)
Z
zhsj 已提交
837
	$(CXX) $(PLATFORM_SHARED_LDFLAGS)$(SHARED3) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) $(shared_all_libobjects) $(LDFLAGS) -o $@
H
heyongqiang 已提交
838 839 840

endif  # PLATFORM_SHARED_EXT

841
.PHONY: blackbox_crash_test check clean coverage crash_test ldb_tests package \
842
	release tags tags0 valgrind_check whitebox_crash_test format static_lib shared_lib all \
Y
Yueh-Hsuan Chiang 已提交
843
	dbg rocksdbjavastatic rocksdbjava install install-static install-shared uninstall \
844
	analyze tools tools_lib \
845
	blackbox_crash_test_with_atomic_flush whitebox_crash_test_with_atomic_flush  \
846
	blackbox_crash_test_with_txn whitebox_crash_test_with_txn
847

M
maurice barnum 已提交
848

849
all: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(TESTS)
850

851 852
all_but_some_tests: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(SUBSET)

I
Igor Canadi 已提交
853 854 855 856
static_lib: $(LIBRARY)

shared_lib: $(SHARED)

857 858
stress_lib: $(STRESS_LIBRARY)

M
maurice barnum 已提交
859 860
tools: $(TOOLS)

861 862
tools_lib: $(TOOLS_LIBRARY)

863 864
test_libs: $(TEST_LIBS)

M
maurice barnum 已提交
865
dbg: $(LIBRARY) $(BENCHMARKS) tools $(TESTS)
K
Kai Liu 已提交
866

867
# creates static library and programs
868
release:
Y
Yueh-Hsuan Chiang 已提交
869
	$(MAKE) clean
870
	DEBUG_LEVEL=0 $(MAKE) static_lib tools db_bench
K
Kai Liu 已提交
871 872

coverage:
Y
Yueh-Hsuan Chiang 已提交
873 874 875 876
	$(MAKE) clean
	COVERAGEFLAGS="-fprofile-arcs -ftest-coverage" LDFLAGS+="-lgcov" $(MAKE) J=1 all check
	cd coverage && ./coverage_test.sh
        # Delete intermediate files
877
	$(FIND) . -type f -regex ".*\.\(\(gcda\)\|\(gcno\)\)" -exec rm {} \;
J
jorlow@chromium.org 已提交
878

Y
Yi Wu 已提交
879 880 881 882 883
ifneq (,$(filter check parallel_check,$(MAKECMDGOALS)),)
# Use /dev/shm if it has the sticky bit set (otherwise, /tmp),
# and create a randomly-named rocksdb.XXXX directory therein.
# We'll use that directory in the "make check" rules.
ifeq ($(TMPD),)
T
Tomas Kolda 已提交
884 885
TMPDIR := $(shell echo $${TMPDIR:-/tmp})
TMPD := $(shell f=/dev/shm; test -k $$f || f=$(TMPDIR);     \
Y
Yi Wu 已提交
886 887 888 889 890 891 892 893 894 895 896 897 898 899
  perl -le 'use File::Temp "tempdir";'					\
    -e 'print tempdir("'$$f'/rocksdb.XXXX", CLEANUP => 0)')
endif
endif

# Run all tests in parallel, accumulating per-test logs in t/log-*.
#
# Each t/run-* file is a tiny generated bourne shell script that invokes one of
# sub-tests. Why use a file for this?  Because that makes the invocation of
# parallel below simpler, which in turn makes the parsing of parallel's
# LOG simpler (the latter is for live monitoring as parallel
# tests run).
#
# Test names are extracted by running tests with --gtest_list_tests.
900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917
# This filter removes the "#"-introduced comments, and expands to
# fully-qualified names by changing input like this:
#
#   DBTest.
#     Empty
#     WriteEmptyBatch
#   MultiThreaded/MultiThreadedDBTest.
#     MultiThreaded/0  # GetParam() = 0
#     MultiThreaded/1  # GetParam() = 1
#
# into this:
#
#   DBTest.Empty
#   DBTest.WriteEmptyBatch
#   MultiThreaded/MultiThreadedDBTest.MultiThreaded/0
#   MultiThreaded/MultiThreadedDBTest.MultiThreaded/1
#

Y
Yi Wu 已提交
918 919 920 921 922 923 924 925 926 927 928
parallel_tests = $(patsubst %,parallel_%,$(PARALLEL_TEST))
.PHONY: gen_parallel_tests $(parallel_tests)
$(parallel_tests): $(PARALLEL_TEST)
	$(AM_V_at)TEST_BINARY=$(patsubst parallel_%,%,$@); \
  TEST_NAMES=` \
    ./$$TEST_BINARY --gtest_list_tests \
    | perl -n \
      -e 's/ *\#.*//;' \
      -e '/^(\s*)(\S+)/; !$$1 and do {$$p=$$2; break};'	\
      -e 'print qq! $$p$$2!'`; \
	for TEST_NAME in $$TEST_NAMES; do \
929
		TEST_SCRIPT=t/run-$$TEST_BINARY-$${TEST_NAME//\//-}; \
Y
Yi Wu 已提交
930 931 932 933 934
		echo "  GEN     " $$TEST_SCRIPT; \
    printf '%s\n' \
      '#!/bin/sh' \
      "d=\$(TMPD)$$TEST_SCRIPT" \
      'mkdir -p $$d' \
935
      "TEST_TMPDIR=\$$d $(DRIVER) ./$$TEST_BINARY --gtest_filter=$$TEST_NAME" \
Y
Yi Wu 已提交
936 937 938 939 940 941 942 943
		> $$TEST_SCRIPT; \
		chmod a=rx $$TEST_SCRIPT; \
	done

gen_parallel_tests:
	$(AM_V_at)mkdir -p t
	$(AM_V_at)rm -f t/run-*
	$(MAKE) $(parallel_tests)
944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961

# Reorder input lines (which are one per test) so that the
# longest-running tests appear first in the output.
# Do this by prefixing each selected name with its duration,
# sort the resulting names, and remove the leading numbers.
# FIXME: the "100" we prepend is a fake time, for now.
# FIXME: squirrel away timings from each run and use them
# (when present) on subsequent runs to order these tests.
#
# Without this reordering, these two tests would happen to start only
# after almost all other tests had completed, thus adding 100 seconds
# to the duration of parallel "make check".  That's the difference
# between 4 minutes (old) and 2m20s (new).
#
# 152.120 PASS t/DBTest.FileCreationRandomFailure
# 107.816 PASS t/DBTest.EncodeDecompressedBlockSizeTest
#
slow_test_regexp = \
Y
Yi Wu 已提交
962
	^.*SnapshotConcurrentAccessTest.*$$|^t/run-table_test-HarnessTest.Randomized$$|^t/run-db_test-.*(?:FileCreationRandomFailure|EncodeDecompressedBlockSizeTest)$$|^.*RecoverFromCorruptedWALWithoutFlush$$
963
prioritize_long_running_tests =						\
Y
Yueh-Hsuan Chiang 已提交
964 965 966
  perl -pe 's,($(slow_test_regexp)),100 $$1,'				\
    | sort -k1,1gr							\
    | sed 's/^[.0-9]* //'
967 968 969 970 971 972

# "make check" uses
# Run with "make J=1 check" to disable parallelism in "make check".
# Run with "make J=200% check" to run two parallel jobs per core.
# The default is to run one job per core (J=100%).
# See "man parallel" for its "-j ..." option.
Y
Yi Wu 已提交
973
J ?= 100%
974

V
Venkatesh Radhakrishnan 已提交
975 976 977
# Use this regexp to select the subset of tests whose names match.
tests-regexp = .

978
.PHONY: check_0
Y
Yi Wu 已提交
979 980
check_0:
	$(AM_V_GEN)export TEST_TMPDIR=$(TMPD); \
Y
Yueh-Hsuan Chiang 已提交
981 982 983
	printf '%s\n' ''						\
	  'To monitor subtest <duration,pass/fail,name>,'		\
	  '  run "make watch-log" in a separate window' '';		\
Y
Yi Wu 已提交
984 985 986
	test -t 1 && eta=--eta || eta=; \
	{ \
		printf './%s\n' $(filter-out $(PARALLEL_TEST),$(TESTS)); \
987
		find t -name 'run-*' -print; \
Y
Yi Wu 已提交
988
	} \
Y
Yueh-Hsuan Chiang 已提交
989 990
	  | $(prioritize_long_running_tests)				\
	  | grep -E '$(tests-regexp)'					\
991
	  | build_tools/gnu_parallel -j$(J) --plain --joblog=LOG $$eta --gnu '{} >& t/log-{/}'
S
sdong 已提交
992

993
valgrind-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
994

S
sdong 已提交
995
.PHONY: valgrind_check_0
Y
Yi Wu 已提交
996
valgrind_check_0:
S
sdong 已提交
997 998 999 1000 1001 1002
	$(AM_V_GEN)export TEST_TMPDIR=$(TMPD);				\
	printf '%s\n' ''						\
	  'To monitor subtest <duration,pass/fail,name>,'		\
	  '  run "make watch-log" in a separate window' '';		\
	test -t 1 && eta=--eta || eta=;					\
	{								\
Y
Yi Wu 已提交
1003
	  printf './%s\n' $(filter-out $(PARALLEL_TEST) %skiplist_test options_settable_test, $(TESTS));		\
1004
	  find t -name 'run-*' -print; \
S
sdong 已提交
1005 1006 1007
	}								\
	  | $(prioritize_long_running_tests)				\
	  | grep -E '$(tests-regexp)'					\
1008
	  | grep -E -v '$(valgrind-blacklist-regexp)'					\
1009
	  | build_tools/gnu_parallel -j$(J) --plain --joblog=LOG $$eta --gnu \
1010 1011
	  '(if [[ "{}" == "./"* ]] ; then $(DRIVER) {}; else {}; fi) ' \
	  '>& t/valgrind_log-{/}'
1012 1013

CLEAN_FILES += t LOG $(TMPD)
1014

1015 1016 1017 1018 1019 1020 1021 1022
# When running parallel "make check", you can monitor its progress
# from another window.
# Run "make watch_LOG" to show the duration,PASS/FAIL,name of parallel
# tests as they are being run.  We sort them so that longer-running ones
# appear at the top of the list and any failing tests remain at the top
# regardless of their duration. As with any use of "watch", hit ^C to
# interrupt.
watch-log:
1023
	$(WATCH) --interval=0 'sort -k7,7nr -k4,4gr LOG|$(quoted_perl_command)'
1024

1025 1026 1027
dump-log:
	bash -c '$(quoted_perl_command)' < LOG

I
Igor Canadi 已提交
1028
# If J != 1 and GNU parallel is installed, run the tests in parallel,
1029 1030
# via the check_0 rule above.  Otherwise, run them sequentially.
check: all
Y
Yi Wu 已提交
1031
	$(MAKE) gen_parallel_tests
Y
Yueh-Hsuan Chiang 已提交
1032
	$(AM_V_GEN)if test "$(J)" != 1                                  \
1033
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |                    \
Y
Yueh-Hsuan Chiang 已提交
1034 1035 1036 1037 1038
	        grep -q 'GNU Parallel';                                 \
	then                                                            \
	    $(MAKE) T="$$t" TMPD=$(TMPD) check_0;                       \
	else                                                            \
	    for t in $(TESTS); do                                       \
1039
	      echo "===== Running $$t (`date`)"; ./$$t || exit 1; done;          \
Y
Yueh-Hsuan Chiang 已提交
1040 1041
	fi
	rm -rf $(TMPD)
T
Tomas Kolda 已提交
1042
ifneq ($(PLATFORM), OS_AIX)
1043
	$(PYTHON) tools/check_all_python.py
I
Islam AbdelRahman 已提交
1044
ifeq ($(filter -DROCKSDB_LITE,$(OPT)),)
1045
ifndef ASSERT_STATUS_CHECKED # not yet working with these tests
1046
	$(PYTHON) tools/ldb_test.py
Y
Yueh-Hsuan Chiang 已提交
1047
	sh tools/rocksdb_dump_test.sh
I
Islam AbdelRahman 已提交
1048
endif
1049
endif
T
Tomas Kolda 已提交
1050
endif
1051 1052
	$(MAKE) check-format
	$(MAKE) check-buck-targets
1053

S
Siying Dong 已提交
1054 1055
# TODO add ldb_tests
check_some: $(SUBSET)
1056
	for t in $(SUBSET); do echo "===== Running $$t (`date`)"; ./$$t || exit 1; done
1057 1058

.PHONY: ldb_tests
1059
ldb_tests: ldb
1060
	$(PYTHON) tools/ldb_test.py
1061

I
Igor Canadi 已提交
1062
crash_test: whitebox_crash_test blackbox_crash_test
1063

1064 1065
crash_test_with_atomic_flush: whitebox_crash_test_with_atomic_flush blackbox_crash_test_with_atomic_flush

1066 1067
crash_test_with_txn: whitebox_crash_test_with_txn blackbox_crash_test_with_txn

1068
blackbox_crash_test: db_stress
1069 1070
	$(PYTHON) -u tools/db_crashtest.py --simple blackbox $(CRASH_TEST_EXT_ARGS)
	$(PYTHON) -u tools/db_crashtest.py blackbox $(CRASH_TEST_EXT_ARGS)
1071

1072
blackbox_crash_test_with_atomic_flush: db_stress
1073
	$(PYTHON) -u tools/db_crashtest.py --cf_consistency blackbox $(CRASH_TEST_EXT_ARGS)
1074

1075
blackbox_crash_test_with_txn: db_stress
1076
	$(PYTHON) -u tools/db_crashtest.py --txn blackbox $(CRASH_TEST_EXT_ARGS)
1077

1078 1079 1080 1081
ifeq ($(CRASH_TEST_KILL_ODD),)
  CRASH_TEST_KILL_ODD=888887
endif

1082
whitebox_crash_test: db_stress
1083
	$(PYTHON) -u tools/db_crashtest.py --simple whitebox --random_kill_odd \
1084
      $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
1085
	$(PYTHON) -u tools/db_crashtest.py whitebox  --random_kill_odd \
1086
      $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
1087

1088
whitebox_crash_test_with_atomic_flush: db_stress
1089
	$(PYTHON) -u tools/db_crashtest.py --cf_consistency whitebox  --random_kill_odd \
1090 1091
      $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)

1092
whitebox_crash_test_with_txn: db_stress
1093
	$(PYTHON) -u tools/db_crashtest.py --txn whitebox --random_kill_odd \
1094 1095
      $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)

I
Igor Canadi 已提交
1096
asan_check:
Y
Yueh-Hsuan Chiang 已提交
1097 1098 1099
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) check -j32
	$(MAKE) clean
1100 1101

asan_crash_test:
Y
Yueh-Hsuan Chiang 已提交
1102 1103 1104
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) crash_test
	$(MAKE) clean
I
Igor Canadi 已提交
1105

1106 1107 1108 1109 1110
asan_crash_test_with_atomic_flush:
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) crash_test_with_atomic_flush
	$(MAKE) clean

1111 1112 1113 1114 1115
asan_crash_test_with_txn:
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) crash_test_with_txn
	$(MAKE) clean

1116 1117 1118 1119 1120 1121 1122 1123 1124 1125
ubsan_check:
	$(MAKE) clean
	COMPILE_WITH_UBSAN=1 $(MAKE) check -j32
	$(MAKE) clean

ubsan_crash_test:
	$(MAKE) clean
	COMPILE_WITH_UBSAN=1 $(MAKE) crash_test
	$(MAKE) clean

1126 1127 1128 1129 1130
ubsan_crash_test_with_atomic_flush:
	$(MAKE) clean
	COMPILE_WITH_UBSAN=1 $(MAKE) crash_test_with_atomic_flush
	$(MAKE) clean

1131 1132 1133 1134 1135
ubsan_crash_test_with_txn:
	$(MAKE) clean
	COMPILE_WITH_UBSAN=1 $(MAKE) crash_test_with_txn
	$(MAKE) clean

1136
valgrind_test:
1137
	ROCKSDB_VALGRIND_RUN=1 DISABLE_JEMALLOC=1 $(MAKE) valgrind_check
1138

I
Igor Canadi 已提交
1139
valgrind_check: $(TESTS)
1140
	$(MAKE) DRIVER="$(VALGRIND_VER) $(VALGRIND_OPTS)" gen_parallel_tests
S
sdong 已提交
1141
	$(AM_V_GEN)if test "$(J)" != 1                                  \
1142
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |                    \
S
sdong 已提交
1143 1144
	        grep -q 'GNU Parallel';                                 \
	then                                                            \
Y
Yi Wu 已提交
1145
      $(MAKE) TMPD=$(TMPD)                                        \
S
sdong 已提交
1146 1147 1148 1149 1150 1151 1152 1153 1154 1155
      DRIVER="$(VALGRIND_VER) $(VALGRIND_OPTS)" valgrind_check_0; \
	else                                                            \
		for t in $(filter-out %skiplist_test options_settable_test,$(TESTS)); do \
			$(VALGRIND_VER) $(VALGRIND_OPTS) ./$$t; \
			ret_code=$$?; \
			if [ $$ret_code -ne 0 ]; then \
				exit $$ret_code; \
			fi; \
		done; \
	fi
1156

1157 1158 1159 1160 1161

ifneq ($(PAR_TEST),)
parloop:
	ret_bad=0;							\
	for t in $(PAR_TEST); do		\
1162
		echo "===== Running $$t in parallel $(NUM_PAR) (`date`)";\
1163
		if [ $(db_test) -eq 1 ]; then \
1164
			seq $(J) | v="$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{};  export TEST_TMPDIR=$$s;' \
1165 1166
				'timeout 2m ./db_test --gtest_filter=$$v >> $$s/log-{} 2>1'; \
		else\
1167
			seq $(J) | v="./$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{};' \
1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178
			     'export TEST_TMPDIR=$$s; timeout 10m $$v >> $$s/log-{} 2>1'; \
		fi; \
		ret_code=$$?; \
		if [ $$ret_code -ne 0 ]; then \
			ret_bad=$$ret_code; \
			echo $$t exited with $$ret_code; \
		fi; \
	done; \
	exit $$ret_bad;
endif

Y
Yi Wu 已提交
1179 1180 1181 1182 1183 1184 1185
test_names = \
  ./db_test --gtest_list_tests						\
    | perl -n								\
      -e 's/ *\#.*//;'							\
      -e '/^(\s*)(\S+)/; !$$1 and do {$$p=$$2; break};'			\
      -e 'print qq! $$p$$2!'

1186 1187
parallel_check: $(TESTS)
	$(AM_V_GEN)if test "$(J)" > 1                                  \
1188
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |                    \
1189 1190 1191 1192 1193 1194 1195 1196 1197
	        grep -q 'GNU Parallel';                                 \
	then                                                            \
	    echo Running in parallel $(J);			\
	else                                                            \
	    echo "Need to have GNU Parallel and J > 1"; exit 1;		\
	fi;								\
	ret_bad=0;							\
	echo $(J);\
	echo Test Dir: $(TMPD); \
1198
        seq $(J) | build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{}; rm -rf $$s; mkdir $$s'; \
1199
	$(MAKE)  PAR_TEST="$(shell $(test_names))" TMPD=$(TMPD) \
1200 1201 1202 1203
		J=$(J) db_test=1 parloop; \
	$(MAKE) PAR_TEST="$(filter-out db_test, $(TESTS))" \
		TMPD=$(TMPD) J=$(J) db_test=0 parloop;

1204
analyze: clean
1205 1206 1207
	USE_CLANG=1 $(MAKE) analyze_incremental

analyze_incremental:
Y
Yueh-Hsuan Chiang 已提交
1208 1209 1210 1211
	$(CLANG_SCAN_BUILD) --use-analyzer=$(CLANG_ANALYZER) \
		--use-c++=$(CXX) --use-cc=$(CC) --status-bugs \
		-o $(CURDIR)/scan_build_report \
		$(MAKE) dbg
1212

1213 1214
CLEAN_FILES += unity.cc
unity.cc: Makefile
Y
Yueh-Hsuan Chiang 已提交
1215 1216
	rm -f $@ $@-t
	for source_file in $(LIB_SOURCES); do \
E
Evan Shaw 已提交
1217
		echo "#include \"$$source_file\"" >> $@-t; \
Y
Yueh-Hsuan Chiang 已提交
1218 1219 1220
	done
	chmod a=r $@-t
	mv $@-t $@
M
miguelportilla 已提交
1221

E
Evan Shaw 已提交
1222 1223 1224 1225
unity.a: unity.o
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ unity.o

1226 1227

TOOLLIBOBJECTS = $(TOOL_LIB_SOURCES:.cc=.o)
I
Igor Canadi 已提交
1228
# try compiling db_test with unity
1229
unity_test: db/db_test.o db/db_test_util.o $(TESTHARNESS) $(TOOLLIBOBJECTS) unity.a
I
Igor Canadi 已提交
1230 1231 1232
	$(AM_LINK)
	./unity_test

E
Evan Shaw 已提交
1233 1234
rocksdb.h rocksdb.cc: build_tools/amalgamate.py Makefile $(LIB_SOURCES) unity.cc
	build_tools/amalgamate.py -I. -i./include unity.cc -x include/rocksdb/c.h -H rocksdb.h -o rocksdb.cc
M
miguelportilla 已提交
1235

1236
clean: clean-ext-libraries-all clean-rocks clean-rocksjava
1237

1238
clean-not-downloaded: clean-ext-libraries-bin clean-rocks clean-not-downloaded-rocksjava
1239 1240

clean-rocks:
1241
	rm -f $(BENCHMARKS) $(TOOLS) $(TESTS) $(PARALLEL_TEST) $(LIBRARY) $(SHARED)
Y
Yueh-Hsuan Chiang 已提交
1242
	rm -rf $(CLEAN_FILES) ios-x86 ios-arm scan_build_report
1243 1244
	$(FIND) . -name "*.[oda]" -exec rm -f {} \;
	$(FIND) . -type f -regex ".*\.\(\(gcda\)\|\(gcno\)\)" -exec rm {} \;
1245 1246 1247 1248 1249 1250

clean-rocksjava:
	cd java && $(MAKE) clean

clean-not-downloaded-rocksjava:
	cd java && $(MAKE) clean-not-downloaded
1251

1252 1253 1254 1255 1256 1257
clean-ext-libraries-all:
	rm -rf bzip2* snappy* zlib* lz4* zstd*

clean-ext-libraries-bin:
	find . -maxdepth 1 -type d \( -name bzip2\* -or -name snappy\* -or -name zlib\* -or -name lz4\* -or -name zstd\* \) -prune -exec rm -rf {} \;

1258
tags:
1259
	ctags -R .
1260
	cscope -b `$(FIND) . -name '*.cc'` `$(FIND) . -name '*.h'` `$(FIND) . -name '*.c'`
L
Leonidas Galanis 已提交
1261
	ctags -e -R -o etags *
1262

1263 1264 1265 1266 1267 1268 1269
tags0:
	ctags -R .
	cscope -b `$(FIND) . -name '*.cc' -and ! -name '*_test.cc'` \
		  `$(FIND) . -name '*.c' -and ! -name '*_test.c'` \
		  `$(FIND) . -name '*.h' -and ! -name '*_test.h'`
	ctags -e -R -o etags *

1270
format:
Y
Yueh-Hsuan Chiang 已提交
1271
	build_tools/format-diff.sh
1272

1273 1274 1275 1276 1277 1278
check-format:
	build_tools/format-diff.sh -c

check-buck-targets:
	buckifier/check_buck_targets.sh

1279
package:
Y
Yueh-Hsuan Chiang 已提交
1280
	bash build_tools/make_package.sh $(SHARED_MAJOR).$(SHARED_MINOR)
1281

1282 1283 1284
# ---------------------------------------------------------------------------
# 	Unit tests and tools
# ---------------------------------------------------------------------------
1285
$(LIBRARY): $(LIBOBJECTS)
Y
Yueh-Hsuan Chiang 已提交
1286 1287
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $(LIBOBJECTS)
J
jorlow@chromium.org 已提交
1288

1289
$(TOOLS_LIBRARY): $(BENCH_LIB_SOURCES:.cc=.o) $(TOOL_LIB_SOURCES:.cc=.o) $(LIB_SOURCES:.cc=.o) $(TESTUTIL) $(ANALYZER_LIB_SOURCES:.cc=.o)
1290 1291 1292
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $^

1293 1294 1295 1296
$(STRESS_LIBRARY): $(LIB_SOURCES:.cc=.o) $(TESTUTIL) $(ANALYZER_LIB_SOURCES:.cc=.o) $(STRESS_LIB_SOURCES:.cc=.o)
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $^

1297
librocksdb_env_basic_test.a: env/env_basic_test.o $(LIBOBJECTS) $(TESTHARNESS)
1298 1299 1300
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $^

1301
db_bench: tools/db_bench.o $(BENCHTOOLOBJECTS)
Y
Yueh-Hsuan Chiang 已提交
1302
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1303

1304 1305 1306
trace_analyzer: tools/trace_analyzer.o $(ANALYZETOOLOBJECTS) $(LIBOBJECTS)
	$(AM_LINK)

1307
block_cache_trace_analyzer: tools/block_cache_analyzer/block_cache_trace_analyzer_tool.o $(ANALYZETOOLOBJECTS) $(LIBOBJECTS)
1308 1309
	$(AM_LINK)

1310 1311 1312 1313 1314
ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1)
folly_synchronization_distributed_mutex_test: $(LIBOBJECTS) $(TESTHARNESS) $(FOLLYOBJECTS) third-party/folly/folly/synchronization/test/DistributedMutexTest.o
	$(AM_LINK)
endif

1315
cache_bench: cache/cache_bench.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
1316
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1317

1318 1319 1320
persistent_cache_bench: utilities/persistent_cache/persistent_cache_bench.o $(LIBOBJECTS) $(TESTUTIL)
	$(AM_LINK)

1321
memtablerep_bench: memtable/memtablerep_bench.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
1322
	$(AM_LINK)
A
Ameya Gupte 已提交
1323

1324 1325 1326
filter_bench: util/filter_bench.o $(LIBOBJECTS) $(TESTUTIL)
	$(AM_LINK)

1327
db_stress: db_stress_tool/db_stress.o $(STRESSTOOLOBJECTS)
Y
Yueh-Hsuan Chiang 已提交
1328
	$(AM_LINK)
1329

I
Igor Canadi 已提交
1330 1331 1332
write_stress: tools/write_stress.o $(LIBOBJECTS) $(TESTUTIL)
	$(AM_LINK)

I
Igor Canadi 已提交
1333
db_sanity_test: tools/db_sanity_test.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
1334
	$(AM_LINK)
1335

1336
db_repl_stress: tools/db_repl_stress.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
1337
	$(AM_LINK)
1338

1339
arena_test: memory/arena_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1340
	$(AM_LINK)
1341

1342
memkind_kmem_allocator_test: memory/memkind_kmem_allocator_test.o $(LIBOBJECTS) $(TESTHARNESS)
1343
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1344

K
kailiu 已提交
1345
autovector_test: util/autovector_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1346
	$(AM_LINK)
K
kailiu 已提交
1347

1348
column_family_test: db/column_family_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1349
	$(AM_LINK)
1350

K
kailiu 已提交
1351
table_properties_collector_test: db/table_properties_collector_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1352
	$(AM_LINK)
1353

S
Sanjay Ghemawat 已提交
1354
bloom_test: util/bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1355
	$(AM_LINK)
S
Sanjay Ghemawat 已提交
1356

1357
dynamic_bloom_test: util/dynamic_bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1358
	$(AM_LINK)
1359

1360
c_test: db/c_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1361
	$(AM_LINK)
1362

1363
cache_test: cache/cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1364
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1365 1366

coding_test: util/coding_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1367
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1368

1369 1370 1371
hash_test: util/hash_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1372 1373 1374
random_test: util/random_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1375 1376 1377
option_change_migration_test: utilities/option_change_migration/option_change_migration_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1378
stringappend_test: utilities/merge_operators/string_append/stringappend_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1379
	$(AM_LINK)
1380

1381
cassandra_format_test: utilities/cassandra/cassandra_format_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
1382 1383
	$(AM_LINK)

1384
cassandra_functional_test: utilities/cassandra/cassandra_functional_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
1385 1386
	$(AM_LINK)

1387
cassandra_row_merge_test: utilities/cassandra/cassandra_row_merge_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
1388 1389
	$(AM_LINK)

1390
cassandra_serialize_test: utilities/cassandra/cassandra_serialize_test.o $(LIBOBJECTS) $(TESTHARNESS)
1391 1392
	$(AM_LINK)

1393 1394 1395
hash_table_test: utilities/persistent_cache/hash_table_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1396
histogram_test: monitoring/histogram_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1397
	$(AM_LINK)
A
Abhishek Kona 已提交
1398

L
Lei Jin 已提交
1399
thread_local_test: util/thread_local_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1400
	$(AM_LINK)
L
Lei Jin 已提交
1401

1402 1403 1404
work_queue_test: util/work_queue_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

S
sdong 已提交
1405
corruption_test: db/corruption_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1406
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1407 1408

crc32c_test: util/crc32c_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1409
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1410

1411 1412 1413
slice_test: util/slice_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1414
slice_transform_test: util/slice_transform_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1415
	$(AM_LINK)
1416

1417
db_basic_test: db/db_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
E
Ewout Prangsma 已提交
1418 1419
	$(AM_LINK)

1420 1421 1422
db_with_timestamp_basic_test: db/db_with_timestamp_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1423 1424 1425
db_with_timestamp_compaction_test: db/db_with_timestamp_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

E
Ewout Prangsma 已提交
1426
db_encryption_test: db/db_encryption_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1427 1428
	$(AM_LINK)

1429
db_test: db/db_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1430
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1431

1432 1433 1434
db_test2: db/db_test2.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1435 1436 1437
db_logical_block_size_cache_test: db/db_logical_block_size_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1438
db_blob_index_test: db/blob/db_blob_index_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yi Wu 已提交
1439 1440
	$(AM_LINK)

1441 1442 1443
db_block_cache_test: db/db_block_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
1444 1445 1446
db_bloom_filter_test: db/db_bloom_filter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1447
db_log_iter_test: db/db_log_iter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1448
	$(AM_LINK)
1449

1450
db_compaction_filter_test: db/db_compaction_filter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1451 1452
	$(AM_LINK)

1453
db_compaction_test: db/db_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1454 1455
	$(AM_LINK)

1456
db_dynamic_level_test: db/db_dynamic_level_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1457 1458
	$(AM_LINK)

1459 1460 1461
db_flush_test: db/db_flush_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1462
db_inplace_update_test: db/db_inplace_update_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1463 1464
	$(AM_LINK)

Y
Yi Wu 已提交
1465 1466 1467
db_iterator_test: db/db_iterator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1468 1469 1470
db_memtable_test: db/db_memtable_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1471 1472 1473
db_merge_operator_test: db/db_merge_operator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1474 1475
db_merge_operand_test: db/db_merge_operand_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)
1476

1477 1478 1479
db_options_test: db/db_options_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1480 1481 1482
db_range_del_test: db/db_range_del_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
1483 1484 1485
db_sst_test: db/db_sst_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1486 1487 1488
db_statistics_test: db/db_statistics_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
1489 1490 1491
db_write_test: db/db_write_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1492
error_handler_fs_test: db/error_handler_fs_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1493 1494
	$(AM_LINK)

S
Siying Dong 已提交
1495 1496 1497
external_sst_file_basic_test: db/external_sst_file_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1498 1499 1500
external_sst_file_test: db/external_sst_file_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1501 1502 1503
import_column_family_test: db/import_column_family_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1504
db_tailing_iter_test: db/db_tailing_iter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1505 1506
	$(AM_LINK)

S
Stanislau Hlebik 已提交
1507
db_iter_test: db/db_iter_test.o $(LIBOBJECTS) $(TESTHARNESS)
1508
	$(AM_LINK)
S
Stanislau Hlebik 已提交
1509

1510 1511 1512
db_iter_stress_test: db/db_iter_stress_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1513
db_universal_compaction_test: db/db_universal_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1514 1515
	$(AM_LINK)

1516
db_wal_test: db/db_wal_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
S
sdong 已提交
1517 1518
	$(AM_LINK)

O
omegaga 已提交
1519 1520 1521
db_io_failure_test: db/db_io_failure_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1522 1523 1524
db_properties_test: db/db_properties_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1525 1526 1527
db_table_properties_test: db/db_table_properties_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1528
log_write_bench: util/log_write_bench.o $(LIBOBJECTS) $(TESTHARNESS)
D
dx9 已提交
1529
	$(AM_LINK) $(PROFILING_FLAGS)
1530

S
Siying Dong 已提交
1531
plain_table_db_test: db/plain_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1532
	$(AM_LINK)
S
Siying Dong 已提交
1533

1534
comparator_db_test: db/comparator_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1535
	$(AM_LINK)
1536

1537
table_reader_bench: table/table_reader_bench.o $(LIBOBJECTS) $(TESTHARNESS)
D
dx9 已提交
1538
	$(AM_LINK) $(PROFILING_FLAGS)
1539

1540
perf_context_test: db/perf_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
1541
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)
1542

H
Haobo Xu 已提交
1543
prefix_test: db/prefix_test.o $(LIBOBJECTS) $(TESTHARNESS)
1544
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)
H
Haobo Xu 已提交
1545

I
Igor Canadi 已提交
1546
backupable_db_test: utilities/backupable/backupable_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1547
	$(AM_LINK)
I
Igor Canadi 已提交
1548

1549 1550 1551
checkpoint_test: utilities/checkpoint/checkpoint_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1552 1553 1554
cache_simulator_test: utilities/simulator_cache/cache_simulator_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1555 1556 1557
sim_cache_test: utilities/simulator_cache/sim_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

S
Sage Weil 已提交
1558 1559 1560
env_mirror_test: utilities/env_mirror_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
Andrew Kryczka 已提交
1561 1562 1563
env_timed_test: utilities/env_timed_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1564 1565 1566 1567 1568
ifdef ROCKSDB_USE_LIBRADOS
env_librados_test: utilities/env_librados_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(COVERAGEFLAGS)
endif

1569
object_registry_test: utilities/object_registry_test.o $(LIBOBJECTS) $(TESTHARNESS)
1570 1571
	$(AM_LINK)

1572
ttl_test: utilities/ttl/ttl_test.o $(LIBOBJECTS) $(TESTHARNESS)
1573
	$(AM_LINK)
1574

1575
write_batch_with_index_test: utilities/write_batch_with_index/write_batch_with_index_test.o $(LIBOBJECTS) $(TESTHARNESS)
1576
	$(AM_LINK)
1577

I
Igor Canadi 已提交
1578
flush_job_test: db/flush_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
1579
	$(AM_LINK)
A
Andres Noetzli 已提交
1580

1581
compaction_iterator_test: db/compaction/compaction_iterator_test.o $(LIBOBJECTS) $(TESTHARNESS)
A
Andres Noetzli 已提交
1582
	$(AM_LINK)
I
Igor Canadi 已提交
1583

1584
compaction_job_test: db/compaction/compaction_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
1585
	$(AM_LINK)
I
Igor Canadi 已提交
1586

1587
compaction_job_stats_test: db/compaction/compaction_job_stats_test.o $(LIBOBJECTS) $(TESTHARNESS)
1588 1589
	$(AM_LINK)

1590 1591 1592
compact_on_deletion_collector_test: utilities/table_properties_collectors/compact_on_deletion_collector_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1593
wal_manager_test: db/wal_manager_test.o $(LIBOBJECTS) $(TESTHARNESS)
1594
	$(AM_LINK)
I
Igor Canadi 已提交
1595

J
jorlow@chromium.org 已提交
1596
dbformat_test: db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS)
1597
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1598

1599
env_basic_test: env/env_basic_test.o $(LIBOBJECTS) $(TESTHARNESS)
1600 1601
	$(AM_LINK)

1602
env_test: env/env_test.o $(LIBOBJECTS) $(TESTHARNESS)
1603
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1604

1605 1606 1607
io_posix_test: env/io_posix_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1608
fault_injection_test: db/fault_injection_test.o $(LIBOBJECTS) $(TESTHARNESS)
1609
	$(AM_LINK)
1610

A
Andrew Kryczka 已提交
1611
rate_limiter_test: util/rate_limiter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1612
	$(AM_LINK)
L
Lei Jin 已提交
1613

1614
delete_scheduler_test: file/delete_scheduler_test.o $(LIBOBJECTS) $(TESTHARNESS)
I
Islam AbdelRahman 已提交
1615 1616
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1617
filename_test: db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS)
1618
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1619

1620 1621 1622
random_access_file_reader_test: file/random_access_file_reader_test.o $(LIBOBJECTS) $(TESTHARNESS) $(TESTUTIL)
	$(AM_LINK)

1623 1624 1625
file_reader_writer_test: util/file_reader_writer_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1626
block_based_filter_block_test: table/block_based/block_based_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1627
	$(AM_LINK)
1628

1629 1630 1631
block_based_table_reader_test: table/block_based/block_based_table_reader_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1632
full_filter_block_test: table/block_based/full_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1633
	$(AM_LINK)
S
Sanjay Ghemawat 已提交
1634

1635
partitioned_filter_block_test: table/block_based/partitioned_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
M
Maysam Yabandeh 已提交
1636 1637
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1638
log_test: db/log_test.o $(LIBOBJECTS) $(TESTHARNESS)
M
Maysam Yabandeh 已提交
1639 1640 1641
	$(AM_LINK)

cleanable_test: table/cleanable_test.o $(LIBOBJECTS) $(TESTHARNESS)
1642
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1643 1644

table_test: table/table_test.o $(LIBOBJECTS) $(TESTHARNESS)
1645
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1646

1647 1648 1649
block_fetcher_test: table/block_fetcher_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1650
block_test: table/block_based/block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1651
	$(AM_LINK)
D
Dhruba Borthakur 已提交
1652

1653
data_block_hash_index_test: table/block_based/data_block_hash_index_test.o $(LIBOBJECTS) $(TESTHARNESS)
1654 1655
	$(AM_LINK)

1656
inlineskiplist_test: memtable/inlineskiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
N
Nathan Bronson 已提交
1657 1658
	$(AM_LINK)

1659
skiplist_test: memtable/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
1660
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1661

1662 1663 1664
write_buffer_manager_test: memtable/write_buffer_manager_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1665
version_edit_test: db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS)
1666
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1667

1668
version_set_test: db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS)
1669
	$(AM_LINK)
1670

1671
compaction_picker_test: db/compaction/compaction_picker_test.o $(LIBOBJECTS) $(TESTHARNESS)
1672
	$(AM_LINK)
S
sdong 已提交
1673

S
sdong 已提交
1674
version_builder_test: db/version_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
1675
	$(AM_LINK)
S
sdong 已提交
1676

1677
file_indexer_test: db/file_indexer_test.o $(LIBOBJECTS) $(TESTHARNESS)
1678
	$(AM_LINK)
1679

1680
reduce_levels_test: tools/reduce_levels_test.o $(LIBOBJECTS) $(TESTHARNESS)
1681
	$(AM_LINK)
1682

J
jorlow@chromium.org 已提交
1683
write_batch_test: db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS)
1684
	$(AM_LINK)
1685

1686
write_controller_test: db/write_controller_test.o $(LIBOBJECTS) $(TESTHARNESS)
1687
	$(AM_LINK)
1688

1689 1690 1691
merge_helper_test: db/merge_helper_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1692 1693 1694
memory_test: utilities/memory/memory_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
Jim Paton 已提交
1695
merge_test: db/merge_test.o $(LIBOBJECTS) $(TESTHARNESS)
1696
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1697

I
Igor Canadi 已提交
1698
merger_test: table/merger_test.o $(LIBOBJECTS) $(TESTHARNESS)
1699
	$(AM_LINK)
I
Igor Canadi 已提交
1700

1701 1702 1703
util_merge_operators_test: utilities/util_merge_operators_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1704 1705 1706
options_file_test: db/options_file_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yanqin Jin 已提交
1707
deletefile_test: db/deletefile_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1708
	$(AM_LINK)
1709

1710
obsolete_files_test: db/obsolete_files_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1711 1712
	$(AM_LINK)

1713 1714 1715 1716 1717 1718
rocksdb_dump: tools/dump/rocksdb_dump.o $(LIBOBJECTS)
	$(AM_LINK)

rocksdb_undump: tools/dump/rocksdb_undump.o $(LIBOBJECTS)
	$(AM_LINK)

1719
cuckoo_table_builder_test: table/cuckoo/cuckoo_table_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
1720
	$(AM_LINK)
1721

1722
cuckoo_table_reader_test: table/cuckoo/cuckoo_table_reader_test.o $(LIBOBJECTS) $(TESTHARNESS)
1723
	$(AM_LINK)
1724

1725
cuckoo_table_db_test: db/cuckoo_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1726
	$(AM_LINK)
1727

1728
listener_test: db/listener_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1729
	$(AM_LINK)
1730

Y
Yueh-Hsuan Chiang 已提交
1731
thread_list_test: util/thread_list_test.o $(LIBOBJECTS) $(TESTHARNESS)
1732
	$(AM_LINK)
Y
Yueh-Hsuan Chiang 已提交
1733

1734 1735 1736
compact_files_test: db/compact_files_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1737
options_test: options/options_test.o $(LIBOBJECTS) $(TESTHARNESS)
1738 1739
	$(AM_LINK)

1740
options_settable_test: options/options_settable_test.o $(LIBOBJECTS) $(TESTHARNESS)
1741
	$(AM_LINK)
1742

1743 1744 1745
options_util_test: utilities/options/options_util_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1746 1747 1748
db_bench_tool_test: tools/db_bench_tool_test.o $(BENCHTOOLOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1749
trace_analyzer_test: tools/trace_analyzer_test.o $(LIBOBJECTS) $(ANALYZETOOLOBJECTS) $(TESTHARNESS)
Z
Zhichao Cao 已提交
1750 1751
	$(AM_LINK)

1752
event_logger_test: logging/event_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
I
Igor Canadi 已提交
1753 1754
	$(AM_LINK)

A
Anirban Rahut 已提交
1755 1756 1757
timer_queue_test: util/timer_queue_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1758
sst_dump_test: tools/sst_dump_test.o $(LIBOBJECTS) $(TESTHARNESS)
1759
	$(AM_LINK)
1760

A
agiardullo 已提交
1761 1762 1763
optimistic_transaction_test: utilities/transactions/optimistic_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1764
mock_env_test : env/mock_env_test.o $(LIBOBJECTS) $(TESTHARNESS)
1765
	$(AM_LINK)
1766

1767
manual_compaction_test: db/manual_compaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
1768
	$(AM_LINK)
1769

1770
filelock_test: util/filelock_test.o $(LIBOBJECTS) $(TESTHARNESS)
1771
	$(AM_LINK)
K
Kai Liu 已提交
1772

1773
auto_roll_logger_test: logging/auto_roll_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
1774
	$(AM_LINK)
1775

1776 1777 1778
env_logger_test: logging/env_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
agiardullo 已提交
1779 1780 1781
memtable_list_test: db/memtable_list_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
agiardullo 已提交
1782 1783 1784
write_callback_test: db/write_callback_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1785 1786 1787
heap_test: util/heap_test.o $(GTEST)
	$(AM_LINK)

1788 1789 1790
transaction_lock_mgr_test: utilities/transactions/transaction_lock_mgr_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
agiardullo 已提交
1791 1792 1793
transaction_test: utilities/transactions/transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1794 1795 1796
write_prepared_transaction_test: utilities/transactions/write_prepared_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1797 1798 1799
write_unprepared_transaction_test: utilities/transactions/write_unprepared_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1800
sst_dump: tools/sst_dump.o $(LIBOBJECTS)
1801
	$(AM_LINK)
1802

Y
Yi Wu 已提交
1803 1804 1805
blob_dump: tools/blob_dump.o $(LIBOBJECTS)
	$(AM_LINK)

A
Andrew Kryczka 已提交
1806 1807 1808
repair_test: db/repair_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1809
ldb_cmd_test: tools/ldb_cmd_test.o $(LIBOBJECTS) $(TESTHARNESS)
1810 1811
	$(AM_LINK)

1812
ldb: tools/ldb.o $(LIBOBJECTS)
1813
	$(AM_LINK)
1814

1815
iostats_context_test: monitoring/iostats_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
1816 1817
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)

1818 1819 1820
persistent_cache_test: utilities/persistent_cache/persistent_cache_test.o  db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1821
statistics_test: monitoring/statistics_test.o $(LIBOBJECTS) $(TESTHARNESS)
1822 1823
	$(AM_LINK)

1824 1825 1826
stats_history_test: monitoring/stats_history_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1827
lru_cache_test: cache/lru_cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yi Wu 已提交
1828 1829
	$(AM_LINK)

A
Andrew Kryczka 已提交
1830 1831 1832
range_del_aggregator_test: db/range_del_aggregator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1833 1834 1835
range_del_aggregator_bench: db/range_del_aggregator_bench.o $(LIBOBJECTS) $(TESTUTIL)
	$(AM_LINK)

Y
Yi Wu 已提交
1836 1837 1838
blob_db_test: utilities/blob_db/blob_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1839 1840 1841
repeatable_thread_test: util/repeatable_thread_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1842 1843 1844
range_tombstone_fragmenter_test: db/range_tombstone_fragmenter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1845 1846 1847
sst_file_reader_test: table/sst_file_reader_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1848
db_secondary_test: db/db_impl/db_secondary_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1849 1850
	$(AM_LINK)

H
haoyuhuang 已提交
1851 1852 1853
block_cache_tracer_test: trace_replay/block_cache_tracer_test.o trace_replay/block_cache_tracer.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1854
block_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)
1855 1856
	$(AM_LINK)

C
Cheng Chang 已提交
1857 1858 1859
defer_test: util/defer_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1860
blob_file_addition_test: db/blob/blob_file_addition_test.o $(LIBOBJECTS) $(TESTHARNESS)
1861 1862
	$(AM_LINK)

1863
blob_file_garbage_test: db/blob/blob_file_garbage_test.o $(LIBOBJECTS) $(TESTHARNESS)
1864 1865
	$(AM_LINK)

1866 1867 1868
timer_test: util/timer_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882
#-------------------------------------------------
# make install related stuff
INSTALL_PATH ?= /usr/local

uninstall:
	rm -rf $(INSTALL_PATH)/include/rocksdb \
	  $(INSTALL_PATH)/lib/$(LIBRARY) \
	  $(INSTALL_PATH)/lib/$(SHARED4) \
	  $(INSTALL_PATH)/lib/$(SHARED3) \
	  $(INSTALL_PATH)/lib/$(SHARED2) \
	  $(INSTALL_PATH)/lib/$(SHARED1)

install-headers:
	install -d $(INSTALL_PATH)/lib
1883
	for header_dir in `$(FIND) "include/rocksdb" -type d`; do \
I
Igor Canadi 已提交
1884 1885
		install -d $(INSTALL_PATH)/$$header_dir; \
	done
1886
	for header in `$(FIND) "include/rocksdb" -type f -name *.h`; do \
I
Igor Canadi 已提交
1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900
		install -C -m 644 $$header $(INSTALL_PATH)/$$header; \
	done

install-static: install-headers $(LIBRARY)
	install -C -m 755 $(LIBRARY) $(INSTALL_PATH)/lib

install-shared: install-headers $(SHARED4)
	install -C -m 755 $(SHARED4) $(INSTALL_PATH)/lib && \
		ln -fs $(SHARED4) $(INSTALL_PATH)/lib/$(SHARED3) && \
		ln -fs $(SHARED4) $(INSTALL_PATH)/lib/$(SHARED2) && \
		ln -fs $(SHARED4) $(INSTALL_PATH)/lib/$(SHARED1)

# install static by default + install shared if it exists
install: install-static
I
Igor Canadi 已提交
1901
	[ -e $(SHARED4) ] && $(MAKE) install-shared || :
I
Igor Canadi 已提交
1902 1903 1904 1905

#-------------------------------------------------


1906 1907 1908 1909
# ---------------------------------------------------------------------------
# Jni stuff
# ---------------------------------------------------------------------------

1910
JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/linux
D
David Bernard 已提交
1911 1912
ifeq ($(PLATFORM), OS_SOLARIS)
	ARCH := $(shell isainfo -b)
1913
else ifeq ($(PLATFORM), OS_OPENBSD)
1914
	ifneq (,$(filter amd64 ppc64 ppc64le arm64 aarch64 sparc64, $(MACHINE)))
1915 1916 1917 1918
		ARCH := 64
	else
		ARCH := 32
	endif
D
David Bernard 已提交
1919 1920 1921
else
	ARCH := $(shell getconf LONG_BIT)
endif
1922

1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933
ifeq ($(shell ldd /usr/bin/env 2>/dev/null | grep -q musl; echo $$?),0)
        JNI_LIBC = musl
# GNU LibC (or glibc) is so pervasive we can assume it is the default
# else
#        JNI_LIBC = glibc
endif

ifneq ($(origin JNI_LIBC), undefined)
  JNI_LIBC_POSTFIX = -$(JNI_LIBC)
endif

1934
ifneq (,$(filter ppc% arm64 aarch64 sparc64, $(MACHINE)))
1935
	ROCKSDBJNILIB = librocksdbjni-linux-$(MACHINE)$(JNI_LIBC_POSTFIX).so
1936
else
1937
	ROCKSDBJNILIB = librocksdbjni-linux$(ARCH)$(JNI_LIBC_POSTFIX).so
1938
endif
1939
ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-linux$(ARCH)$(JNI_LIBC_POSTFIX).jar
1940
ROCKSDB_JAR_ALL = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH).jar
C
Chris Riccomini 已提交
1941
ROCKSDB_JAVADOCS_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-javadoc.jar
1942
ROCKSDB_SOURCES_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-sources.jar
1943 1944
SHA256_CMD = sha256sum

T
Tomas Kolda 已提交
1945 1946 1947
ZLIB_VER ?= 1.2.11
ZLIB_SHA256 ?= c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1
ZLIB_DOWNLOAD_BASE ?= http://zlib.net
1948 1949 1950
BZIP2_VER ?= 1.0.8
BZIP2_SHA256 ?= ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269
BZIP2_DOWNLOAD_BASE ?= https://sourceware.org/pub/bzip2
1951 1952
SNAPPY_VER ?= 1.1.8
SNAPPY_SHA256 ?= 16b677f07832a612b0836178db7f374e414f94657c138e6993cbfc5dcc58651f
1953
SNAPPY_DOWNLOAD_BASE ?= https://github.com/google/snappy/archive
1954 1955
LZ4_VER ?= 1.9.2
LZ4_SHA256 ?= 658ba6191fa44c92280d4aa2c271b0f4fbc0e34d249578dd05e50e76d0e5efcc
T
Tomas Kolda 已提交
1956
LZ4_DOWNLOAD_BASE ?= https://github.com/lz4/lz4/archive
1957 1958
ZSTD_VER ?= 1.4.4
ZSTD_SHA256 ?= a364f5162c7d1a455cc915e8e3cf5f4bd8b75d09bc0f53965b0c9ca1383c52c8
1959
ZSTD_DOWNLOAD_BASE ?= https://github.com/facebook/zstd/archive
P
Pengchao Wang 已提交
1960
CURL_SSL_OPTS ?= --tlsv1
1961 1962

ifeq ($(PLATFORM), OS_MACOSX)
D
David Bernard 已提交
1963 1964
	ROCKSDBJNILIB = librocksdbjni-osx.jnilib
	ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-osx.jar
1965
	SHA256_CMD = openssl sha256 -r
1966 1967 1968 1969 1970
ifneq ("$(wildcard $(JAVA_HOME)/include/darwin)","")
	JAVA_INCLUDE = -I$(JAVA_HOME)/include -I $(JAVA_HOME)/include/darwin
else
	JAVA_INCLUDE = -I/System/Library/Frameworks/JavaVM.framework/Headers/
endif
1971
endif
1972
ifeq ($(PLATFORM), OS_FREEBSD)
1973
	JAVA_INCLUDE = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/freebsd
1974 1975 1976
	ROCKSDBJNILIB = librocksdbjni-freebsd$(ARCH).so
	ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-freebsd$(ARCH).jar
endif
D
David Bernard 已提交
1977 1978 1979 1980
ifeq ($(PLATFORM), OS_SOLARIS)
	ROCKSDBJNILIB = librocksdbjni-solaris$(ARCH).so
	ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-solaris$(ARCH).jar
	JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/solaris
1981
	SHA256_CMD = digest -a sha256
D
David Bernard 已提交
1982
endif
T
Tomas Kolda 已提交
1983 1984 1985 1986 1987 1988
ifeq ($(PLATFORM), OS_AIX)
	JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/aix
	ROCKSDBJNILIB = librocksdbjni-aix.so
	EXTRACT_SOURCES = gunzip < TAR_GZ | tar xvf -
	SNAPPY_MAKE_TARGET = libsnappy.la
endif
1989 1990 1991 1992 1993
ifeq ($(PLATFORM), OS_OPENBSD)
        JAVA_INCLUDE = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/openbsd
	ROCKSDBJNILIB = librocksdbjni-openbsd$(ARCH).so
        ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-openbsd$(ARCH).jar
endif
1994

N
Naveen 已提交
1995
libz.a:
1996
	-rm -rf zlib-$(ZLIB_VER)
1997
ifeq (,$(wildcard ./zlib-$(ZLIB_VER).tar.gz))
1998
	curl --fail --output zlib-$(ZLIB_VER).tar.gz --location ${ZLIB_DOWNLOAD_BASE}/zlib-$(ZLIB_VER).tar.gz
1999
endif
2000 2001 2002 2003 2004 2005
	ZLIB_SHA256_ACTUAL=`$(SHA256_CMD) zlib-$(ZLIB_VER).tar.gz | cut -d ' ' -f 1`; \
	if [ "$(ZLIB_SHA256)" != "$$ZLIB_SHA256_ACTUAL" ]; then \
		echo zlib-$(ZLIB_VER).tar.gz checksum mismatch, expected=\"$(ZLIB_SHA256)\" actual=\"$$ZLIB_SHA256_ACTUAL\"; \
		exit 1; \
	fi
	tar xvzf zlib-$(ZLIB_VER).tar.gz
2006
	cd zlib-$(ZLIB_VER) && CFLAGS='-fPIC ${EXTRA_CFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' ./configure --static && $(MAKE)
2007
	cp zlib-$(ZLIB_VER)/libz.a .
N
Naveen 已提交
2008 2009

libbz2.a:
2010
	-rm -rf bzip2-$(BZIP2_VER)
2011
ifeq (,$(wildcard ./bzip2-$(BZIP2_VER).tar.gz))
2012
	curl --fail --output bzip2-$(BZIP2_VER).tar.gz --location ${CURL_SSL_OPTS} ${BZIP2_DOWNLOAD_BASE}/bzip2-$(BZIP2_VER).tar.gz
2013
endif
2014 2015 2016 2017 2018 2019
	BZIP2_SHA256_ACTUAL=`$(SHA256_CMD) bzip2-$(BZIP2_VER).tar.gz | cut -d ' ' -f 1`; \
	if [ "$(BZIP2_SHA256)" != "$$BZIP2_SHA256_ACTUAL" ]; then \
		echo bzip2-$(BZIP2_VER).tar.gz checksum mismatch, expected=\"$(BZIP2_SHA256)\" actual=\"$$BZIP2_SHA256_ACTUAL\"; \
		exit 1; \
	fi
	tar xvzf bzip2-$(BZIP2_VER).tar.gz
2020
	cd bzip2-$(BZIP2_VER) && $(MAKE) CFLAGS='-fPIC -O2 -g -D_FILE_OFFSET_BITS=64 ${EXTRA_CFLAGS}' AR='ar ${EXTRA_ARFLAGS}'
2021
	cp bzip2-$(BZIP2_VER)/libbz2.a .
N
Naveen 已提交
2022

N
Naveen 已提交
2023
libsnappy.a:
2024
	-rm -rf snappy-$(SNAPPY_VER)
2025
ifeq (,$(wildcard ./snappy-$(SNAPPY_VER).tar.gz))
2026
	curl --fail --output snappy-$(SNAPPY_VER).tar.gz --location ${CURL_SSL_OPTS} ${SNAPPY_DOWNLOAD_BASE}/$(SNAPPY_VER).tar.gz
2027
endif
2028 2029 2030 2031 2032
	SNAPPY_SHA256_ACTUAL=`$(SHA256_CMD) snappy-$(SNAPPY_VER).tar.gz | cut -d ' ' -f 1`; \
	if [ "$(SNAPPY_SHA256)" != "$$SNAPPY_SHA256_ACTUAL" ]; then \
		echo snappy-$(SNAPPY_VER).tar.gz checksum mismatch, expected=\"$(SNAPPY_SHA256)\" actual=\"$$SNAPPY_SHA256_ACTUAL\"; \
		exit 1; \
	fi
2033
	tar xvzf snappy-$(SNAPPY_VER).tar.gz
2034
	mkdir snappy-$(SNAPPY_VER)/build
2035
	cd snappy-$(SNAPPY_VER)/build && CFLAGS='${EXTRA_CFLAGS}' CXXFLAGS='${EXTRA_CXXFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON .. && $(MAKE) ${SNAPPY_MAKE_TARGET}
2036
	cp snappy-$(SNAPPY_VER)/build/libsnappy.a .
2037

2038
liblz4.a:
2039
	-rm -rf lz4-$(LZ4_VER)
2040
ifeq (,$(wildcard ./lz4-$(LZ4_VER).tar.gz))
2041
	curl --fail --output lz4-$(LZ4_VER).tar.gz --location ${CURL_SSL_OPTS} ${LZ4_DOWNLOAD_BASE}/v$(LZ4_VER).tar.gz
2042
endif
2043 2044 2045 2046 2047 2048
	LZ4_SHA256_ACTUAL=`$(SHA256_CMD) lz4-$(LZ4_VER).tar.gz | cut -d ' ' -f 1`; \
	if [ "$(LZ4_SHA256)" != "$$LZ4_SHA256_ACTUAL" ]; then \
		echo lz4-$(LZ4_VER).tar.gz checksum mismatch, expected=\"$(LZ4_SHA256)\" actual=\"$$LZ4_SHA256_ACTUAL\"; \
		exit 1; \
	fi
	tar xvzf lz4-$(LZ4_VER).tar.gz
2049
	cd lz4-$(LZ4_VER)/lib && $(MAKE) CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' all
2050
	cp lz4-$(LZ4_VER)/lib/liblz4.a .
N
Naveen 已提交
2051

2052 2053
libzstd.a:
	-rm -rf zstd-$(ZSTD_VER)
2054
ifeq (,$(wildcard ./zstd-$(ZSTD_VER).tar.gz))
2055
	curl --fail --output zstd-$(ZSTD_VER).tar.gz --location ${CURL_SSL_OPTS} ${ZSTD_DOWNLOAD_BASE}/v$(ZSTD_VER).tar.gz
2056
endif
2057 2058 2059 2060 2061 2062
	ZSTD_SHA256_ACTUAL=`$(SHA256_CMD) zstd-$(ZSTD_VER).tar.gz | cut -d ' ' -f 1`; \
	if [ "$(ZSTD_SHA256)" != "$$ZSTD_SHA256_ACTUAL" ]; then \
		echo zstd-$(ZSTD_VER).tar.gz checksum mismatch, expected=\"$(ZSTD_SHA256)\" actual=\"$$ZSTD_SHA256_ACTUAL\"; \
		exit 1; \
	fi
	tar xvzf zstd-$(ZSTD_VER).tar.gz
2063
	cd zstd-$(ZSTD_VER)/lib && DESTDIR=. PREFIX= $(MAKE) CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' install
2064 2065
	cp zstd-$(ZSTD_VER)/lib/libzstd.a .

2066
# A version of each $(LIBOBJECTS) compiled with -fPIC and a fixed set of static compression libraries
A
Andrew Kryczka 已提交
2067
java_static_libobjects = $(patsubst %,jls/%,$(LIB_CC_OBJECTS))
2068
CLEAN_FILES += jls
A
Andrew Kryczka 已提交
2069
java_static_all_libobjects = $(java_static_libobjects)
2070

2071
ifneq ($(ROCKSDB_JAVA_NO_COMPRESSION), 1)
2072
JAVA_COMPRESSIONS = libz.a libbz2.a libsnappy.a liblz4.a libzstd.a
2073 2074
endif

2075
JAVA_STATIC_FLAGS = -DZLIB -DBZIP2 -DSNAPPY -DLZ4 -DZSTD
2076
JAVA_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
2077

A
Andrew Kryczka 已提交
2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092
ifeq ($(HAVE_POWER8),1)
JAVA_STATIC_C_LIBOBJECTS = $(patsubst %.c.o,jls/%.c.o,$(LIB_SOURCES_C:.c=.o))
JAVA_STATIC_ASM_LIBOBJECTS = $(patsubst %.S.o,jls/%.S.o,$(LIB_SOURCES_ASM:.S=.o))

java_static_ppc_libobjects = $(JAVA_STATIC_C_LIBOBJECTS) $(JAVA_STATIC_ASM_LIBOBJECTS)

jls/util/crc32c_ppc.o: util/crc32c_ppc.c
	$(AM_V_CC)$(CC) $(CFLAGS) $(JAVA_STATIC_FLAGS) $(JAVA_STATIC_INCLUDES) -c $< -o $@

jls/util/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S
	$(AM_V_CC)$(CC) $(CFLAGS) $(JAVA_STATIC_FLAGS) $(JAVA_STATIC_INCLUDES) -c $< -o $@

java_static_all_libobjects += $(java_static_ppc_libobjects)
endif

2093
$(java_static_libobjects): jls/%.o: %.cc $(JAVA_COMPRESSIONS)
2094
	$(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) $(JAVA_STATIC_FLAGS) $(JAVA_STATIC_INCLUDES) -fPIC -c $< -o $@ $(COVERAGEFLAGS)
2095

A
Andrew Kryczka 已提交
2096
rocksdbjavastatic: $(java_static_all_libobjects)
F
fyrz 已提交
2097
	cd java;$(MAKE) javalib;
2098
	rm -f ./java/target/$(ROCKSDBJNILIB)
2099 2100
	$(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC \
	  -o ./java/target/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) \
A
Andrew Kryczka 已提交
2101
	  $(java_static_all_libobjects) $(COVERAGEFLAGS) \
2102
	  $(JAVA_COMPRESSIONS) $(JAVA_STATIC_LDFLAGS)
2103 2104 2105
	cd java/target;if [ "$(DEBUG_LEVEL)" == "0" ]; then \
		strip $(STRIPFLAGS) $(ROCKSDBJNILIB); \
	fi
2106 2107 2108 2109 2110
	cd java;jar -cf target/$(ROCKSDB_JAR) HISTORY*.md
	cd java/target;jar -uf $(ROCKSDB_JAR) $(ROCKSDBJNILIB)
	cd java/target/classes;jar -uf ../$(ROCKSDB_JAR) org/rocksdb/*.class org/rocksdb/util/*.class
	cd java/target/apidocs;jar -cf ../$(ROCKSDB_JAVADOCS_JAR) *
	cd java/src/main/java;jar -cf ../../../target/$(ROCKSDB_SOURCES_JAR) org
N
Naveen 已提交
2111

2112
rocksdbjavastaticrelease: rocksdbjavastatic
2113
	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
2114
	cd java;jar -cf target/$(ROCKSDB_JAR_ALL) HISTORY*.md
2115
	cd java/target;jar -uf $(ROCKSDB_JAR_ALL) librocksdbjni-*.so librocksdbjni-*.jnilib
2116
	cd java/target/classes;jar -uf ../$(ROCKSDB_JAR_ALL) org/rocksdb/*.class org/rocksdb/util/*.class
2117

2118
rocksdbjavastaticreleasedocker: rocksdbjavastatic rocksdbjavastaticdockerx86 rocksdbjavastaticdockerx86_64 rocksdbjavastaticdockerx86musl rocksdbjavastaticdockerx86_64musl
2119 2120 2121 2122 2123 2124
	cd java;jar -cf target/$(ROCKSDB_JAR_ALL) HISTORY*.md
	cd java/target;jar -uf $(ROCKSDB_JAR_ALL) librocksdbjni-*.so librocksdbjni-*.jnilib
	cd java/target/classes;jar -uf ../$(ROCKSDB_JAR_ALL) org/rocksdb/*.class org/rocksdb/util/*.class

rocksdbjavastaticdockerx86:
	mkdir -p java/target
2125
	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
2126 2127 2128

rocksdbjavastaticdockerx86_64:
	mkdir -p java/target
2129
	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
2130

2131 2132
rocksdbjavastaticdockerppc64le:
	mkdir -p java/target
2133
	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
2134

2135 2136
rocksdbjavastaticdockerarm64v8:
	mkdir -p java/target
2137
	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
2138

2139 2140
rocksdbjavastaticdockerx86musl:
	mkdir -p java/target
2141
	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
2142 2143 2144

rocksdbjavastaticdockerx86_64musl:
	mkdir -p java/target
2145
	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
2146 2147 2148

rocksdbjavastaticdockerppc64lemusl:
	mkdir -p java/target
2149
	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
2150 2151 2152

rocksdbjavastaticdockerarm64v8musl:
	mkdir -p java/target
2153
	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
2154

2155 2156
rocksdbjavastaticpublish: rocksdbjavastaticrelease rocksdbjavastaticpublishcentral

2157 2158
rocksdbjavastaticpublishdocker: rocksdbjavastaticreleasedocker rocksdbjavastaticpublishcentral

2159
rocksdbjavastaticpublishcentral:
2160 2161 2162 2163
	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
	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
	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
	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
2164 2165
	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
	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
2166
	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
2167
	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
2168
	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
2169

2170
# A version of each $(LIBOBJECTS) compiled with -fPIC
2171 2172 2173 2174 2175 2176 2177 2178 2179
ifeq ($(HAVE_POWER8),1)
JAVA_CC_OBJECTS = $(SHARED_CC_OBJECTS)
JAVA_C_OBJECTS = $(SHARED_C_OBJECTS)
JAVA_ASM_OBJECTS = $(SHARED_ASM_OBJECTS)

JAVA_C_LIBOBJECTS = $(patsubst %.c.o,jl/%.c.o,$(JAVA_C_OBJECTS))
JAVA_ASM_LIBOBJECTS = $(patsubst %.S.o,jl/%.S.o,$(JAVA_ASM_OBJECTS))
endif

S
Sagar Vemuri 已提交
2180
java_libobjects = $(patsubst %,jl/%,$(LIB_CC_OBJECTS))
2181
CLEAN_FILES += jl
2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193
java_all_libobjects = $(java_libobjects)

ifeq ($(HAVE_POWER8),1)
java_ppc_libobjects = $(JAVA_C_LIBOBJECTS) $(JAVA_ASM_LIBOBJECTS)

jl/crc32c_ppc.o: util/crc32c_ppc.c
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@

jl/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
java_all_libobjects += $(java_ppc_libobjects)
endif
2194

2195
$(java_libobjects): jl/%.o: %.cc
2196 2197
	$(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) -fPIC -c $< -o $@ $(COVERAGEFLAGS)

2198 2199 2200


rocksdbjava: $(java_all_libobjects)
2201 2202
	$(AM_V_GEN)cd java;$(MAKE) javalib;
	$(AM_V_at)rm -f ./java/target/$(ROCKSDBJNILIB)
2203
	$(AM_V_at)$(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC -o ./java/target/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) $(java_all_libobjects) $(JAVA_LDFLAGS) $(COVERAGEFLAGS)
2204 2205 2206
	$(AM_V_at)cd java;jar -cf target/$(ROCKSDB_JAR) HISTORY*.md
	$(AM_V_at)cd java/target;jar -uf $(ROCKSDB_JAR) $(ROCKSDBJNILIB)
	$(AM_V_at)cd java/target/classes;jar -uf ../$(ROCKSDB_JAR) org/rocksdb/*.class org/rocksdb/util/*.class
2207 2208 2209 2210

jclean:
	cd java;$(MAKE) clean;

2211 2212 2213 2214 2215 2216
jtest_compile: rocksdbjava
	cd java;$(MAKE) java_test

jtest_run:
	cd java;$(MAKE) run_test

2217
jtest: rocksdbjava
2218
	cd java;$(MAKE) sample;$(MAKE) test;
2219
	$(PYTHON) tools/check_all_python.py # TODO peterd: find a better place for this check in CI targets
2220

2221 2222 2223
jdb_bench:
	cd java;$(MAKE) db_bench;

2224 2225
commit_prereq: build_tools/rocksdb-lego-determinator \
               build_tools/precommit_checker.py
2226
	J=$(J) build_tools/precommit_checker.py unit unit_481 clang_unit release release_481 clang_release tsan asan ubsan lite unit_non_shm
2227
	$(MAKE) clean && $(MAKE) jclean && $(MAKE) rocksdbjava;
2228

2229 2230 2231
# ---------------------------------------------------------------------------
#  	Platform-specific compilation
# ---------------------------------------------------------------------------
J
Jim Paton 已提交
2232

2233 2234 2235
ifeq ($(PLATFORM), IOS)
# For iOS, create universal object files to be used on both the simulator and
# a device.
2236 2237
XCODEROOT=$(shell xcode-select -print-path)
PLATFORMSROOT=$(XCODEROOT)/Platforms
H
heyongqiang 已提交
2238 2239
SIMULATORROOT=$(PLATFORMSROOT)/iPhoneSimulator.platform/Developer
DEVICEROOT=$(PLATFORMSROOT)/iPhoneOS.platform/Developer
I
Igor Canadi 已提交
2240
IOSVERSION=$(shell defaults read $(PLATFORMSROOT)/iPhoneOS.platform/version CFBundleShortVersionString)
2241

2242 2243
.cc.o:
	mkdir -p ios-x86/$(dir $@)
I
Igor Canadi 已提交
2244
	$(CXX) $(CXXFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@
2245
	mkdir -p ios-arm/$(dir $@)
I
Igor Canadi 已提交
2246
	xcrun -sdk iphoneos $(CXX) $(CXXFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -arch armv7s -arch arm64 -c $< -o ios-arm/$@
2247
	lipo ios-x86/$@ ios-arm/$@ -create -output $@
2248 2249 2250

.c.o:
	mkdir -p ios-x86/$(dir $@)
I
Igor Canadi 已提交
2251
	$(CC) $(CFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@
2252
	mkdir -p ios-arm/$(dir $@)
I
Igor Canadi 已提交
2253
	xcrun -sdk iphoneos $(CC) $(CFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -arch armv7s -arch arm64 -c $< -o ios-arm/$@
2254 2255
	lipo ios-x86/$@ ios-arm/$@ -create -output $@

2256
else
2257 2258 2259 2260 2261 2262 2263
ifeq ($(HAVE_POWER8),1)
util/crc32c_ppc.o: util/crc32c_ppc.c
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@

util/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
endif
2264
.cc.o:
2265
	$(AM_V_CC)$(CXX) $(CXXFLAGS) -c $< -o $@ $(COVERAGEFLAGS)
2266

2267 2268 2269
.cpp.o:
	$(AM_V_CC)$(CXX) $(CXXFLAGS) -c $< -o $@ $(COVERAGEFLAGS)

2270
.c.o:
2271
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
2272
endif
2273 2274 2275 2276
# ---------------------------------------------------------------------------
#  	Source files dependencies detection
# ---------------------------------------------------------------------------

2277
# FIXME: nothing checks that entries in MAIN_SOURCES actually exist
2278
all_sources = $(LIB_SOURCES) $(MAIN_SOURCES) $(MOCK_LIB_SOURCES) $(TOOL_LIB_SOURCES) $(BENCH_LIB_SOURCES) $(TEST_LIB_SOURCES) $(ANALYZER_LIB_SOURCES) $(STRESS_LIB_SOURCES)
2279 2280 2281 2282 2283
DEPFILES = $(all_sources:.cc=.cc.d)

ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1)
  DEPFILES += $(FOLLY_SOURCES:.cpp=.cpp.d)
endif
2284

2285 2286 2287 2288 2289
# Add proper dependency support so changing a .h file forces a .cc file to
# rebuild.

# The .d file indicates .cc file's dependencies on .h files. We generate such
# dependency by g++'s -MM option, whose output is a make dependency rule.
2290
%.cc.d: %.cc
2291
	@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
2292
	  -MM -MT'$@' -MT'$(<:.cc=.o)' "$<" -o '$@'
2293

2294 2295 2296 2297
%.cpp.d: %.cpp
	@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
	  -MM -MT'$@' -MT'$(<:.cpp=.o)' "$<" -o '$@'

2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314
ifeq ($(HAVE_POWER8),1)
DEPFILES_C = $(LIB_SOURCES_C:.c=.c.d)
DEPFILES_ASM = $(LIB_SOURCES_ASM:.S=.S.d)

%.c.d: %.c
	@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
	  -MM -MT'$@' -MT'$(<:.c=.o)' "$<" -o '$@'

%.S.d: %.S
	@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
	  -MM -MT'$@' -MT'$(<:.S=.o)' "$<" -o '$@'

$(DEPFILES_C): %.c.d

$(DEPFILES_ASM): %.S.d
depend: $(DEPFILES) $(DEPFILES_C) $(DEPFILES_ASM)
else
2315
depend: $(DEPFILES)
2316
endif
2317

2318 2319 2320 2321
# if the make goal is either "clean" or "format", we shouldn't
# try to import the *.d files.
# TODO(kailiu) The unfamiliarity of Make's conditions leads to the ugly
# working solution.
2322
ifneq ($(MAKECMDGOALS),clean)
2323
ifneq ($(MAKECMDGOALS),format)
2324 2325
ifneq ($(MAKECMDGOALS),jclean)
ifneq ($(MAKECMDGOALS),jtest)
2326
ifneq ($(MAKECMDGOALS),package)
2327
ifneq ($(MAKECMDGOALS),analyze)
2328 2329
-include $(DEPFILES)
endif
2330
endif
2331 2332
endif
endif
2333
endif
2334
endif