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 198 199 200 201 202 203

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 =
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_$(V))
am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
am__v_CCLD_0 = @echo "  CCLD    " $@;
am__v_CCLD_1 =
J
Jim Meyering 已提交
204 205 206 207
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 =
208

209 210 211 212
ifdef ROCKSDB_USE_LIBRADOS
LIB_SOURCES += utilities/env_librados.cc
LDFLAGS += -lrados
endif
213

214
AM_LINK = $(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(COVERAGEFLAGS)
215 216 217 218 219 220 221 222 223 224 225
# 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 已提交
226
# this file is generated by the previous line to set build flags and sources
I
Igor Canadi 已提交
227
include make_config.mk
228
export JAVAC_ARGS
229
CLEAN_FILES += make_config.mk
J
jorlow@chromium.org 已提交
230

231
missing_make_config_paths := $(shell				\
232
	grep "\./\S*\|/\S*" -o $(CURDIR)/make_config.mk | 	\
233 234 235 236 237
	while read path;					\
		do [ -e $$path ] || echo $$path; 		\
	done | sort | uniq)

$(foreach path, $(missing_make_config_paths), \
238
	$(warning Warning: $(path) does not exist))
239

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

T
Tomas Kolda 已提交
250 251 252 253 254
ifeq ($(PLATFORM), OS_AIX)
ARFLAGS = -X64 rs
STRIPFLAGS = -X64 -x
endif

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

I
Igor Canadi 已提交
266 267
# 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 已提交
268 269 270 271
	DISABLE_JEMALLOC=1
	EXEC_LDFLAGS += -fsanitize=address
	PLATFORM_CCFLAGS += -fsanitize=address
	PLATFORM_CXXFLAGS += -fsanitize=address
I
Igor Canadi 已提交
272 273 274 275
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 已提交
276
	DISABLE_JEMALLOC=1
S
Siying Dong 已提交
277
	EXEC_LDFLAGS += -fsanitize=thread
278 279
	PLATFORM_CCFLAGS += -fsanitize=thread -fPIC -DFOLLY_SANITIZE_THREAD
	PLATFORM_CXXFLAGS += -fsanitize=thread -fPIC -DFOLLY_SANITIZE_THREAD
280 281
        # Turn off -pg when enabling TSAN testing, because that induces
        # a link failure.  TODO: find the root cause
D
dx9 已提交
282
	PROFILING_FLAGS =
283 284
	# LUA is not supported under TSAN
	LUA_PATH =
285 286 287
	# Limit keys for crash test under TSAN to avoid error:
	# "ThreadSanitizer: DenseSlabAllocator overflow. Dying."
	CRASH_TEST_EXT_ARGS += --max_key=1000000
I
Igor Canadi 已提交
288 289
endif

T
Tomas Kolda 已提交
290 291 292 293 294
# AIX doesn't work with -pg
ifeq ($(PLATFORM), OS_AIX)
	PROFILING_FLAGS =
endif

295 296 297
# 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 已提交
298 299 300 301
	# 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.
302 303 304
	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
305 306
endif

307 308 309 310 311
ifdef ROCKSDB_VALGRIND_RUN
	PLATFORM_CCFLAGS += -DROCKSDB_VALGRIND_RUN
	PLATFORM_CXXFLAGS += -DROCKSDB_VALGRIND_RUN
endif

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

326 327 328 329
ifndef USE_FOLLY_DISTRIBUTED_MUTEX
	USE_FOLLY_DISTRIBUTED_MUTEX=0
endif

T
Tamir Duberstein 已提交
330 331
export GTEST_THROW_ON_FAILURE=1
export GTEST_HAS_EXCEPTIONS=1
332
GTEST_DIR = third-party/gtest-1.10.0/fused-src
T
Tomas Kolda 已提交
333 334 335 336 337 338 339 340
# 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 已提交
341

342
ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1)
343 344 345 346 347 348 349 350 351 352
	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
353 354 355 356 357

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
358

359 360 361
# This (the first rule) must depend on "all".
default: all

362
WARNING_FLAGS = -W -Wextra -Wall -Wsign-compare -Wshadow \
363
  -Wunused-parameter
364

365 366 367 368
ifeq ($(PLATFORM), OS_OPENBSD)
	WARNING_FLAGS += -Wno-unused-lambda-capture
endif

369
ifndef DISABLE_WARNING_AS_ERROR
Y
Yueh-Hsuan Chiang 已提交
370
	WARNING_FLAGS += -Werror
371 372
endif

373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395

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
396
EXEC_LDFLAGS += $(LUA_LIB)
397 398 399

endif

400 401 402
ifeq ($(NO_THREEWAY_CRC32C), 1)
	CXXFLAGS += -DNO_THREEWAY_CRC32C
endif
403

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

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

409 410 411
# 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
412
date := $(shell date +%F)
I
Igor Canadi 已提交
413
ifdef FORCE_GIT_SHA
Y
Yueh-Hsuan Chiang 已提交
414
	git_sha := $(FORCE_GIT_SHA)
I
Igor Canadi 已提交
415
else
Y
Yueh-Hsuan Chiang 已提交
416
	git_sha := $(shell git rev-parse HEAD 2>/dev/null)
I
Igor Canadi 已提交
417
endif
418
gen_build_version = sed -e s/@@GIT_SHA@@/$(git_sha)/ -e s/@@GIT_DATE_TIME@@/$(date)/ util/build_version.cc.in
419 420 421 422 423 424

# 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.
425 426
FORCE:
util/build_version.cc: FORCE
Y
Yueh-Hsuan Chiang 已提交
427 428 429 430 431
	$(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
432
endif
433

434
LIBOBJECTS = $(LIB_SOURCES:.cc=.o)
435 436 437 438
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 已提交
439 440
else
LIB_CC_OBJECTS = $(LIB_SOURCES:.cc=.o)
441 442
endif

443 444
LIBOBJECTS += $(TOOL_LIB_SOURCES:.cc=.o)
MOCKOBJECTS = $(MOCK_LIB_SOURCES:.cc=.o)
445 446 447
ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1)
  FOLLYOBJECTS = $(FOLLY_SOURCES:.cpp=.o)
endif
J
jorlow@chromium.org 已提交
448

I
Igor Sugak 已提交
449
GTEST = $(GTEST_DIR)/gtest/gtest-all.o
450 451
TESTUTIL = ./test_util/testutil.o
TESTHARNESS = ./test_util/testharness.o $(TESTUTIL) $(MOCKOBJECTS) $(GTEST)
452
VALGRIND_ERROR = 2
453
VALGRIND_VER := $(join $(VALGRIND_VER),valgrind)
454

455
VALGRIND_OPTS = --error-exitcode=$(VALGRIND_ERROR) --leak-check=full
456

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

459 460
ANALYZETOOLOBJECTS = $(ANALYZER_LIB_SOURCES:.cc=.o)

A
anand76 已提交
461
ifeq ($(DEBUG_LEVEL),0)
462
STRESSTOOLOBJECTS = $(STRESS_LIB_SOURCES:.cc=.o) $(LIBOBJECTS) $(TESTUTIL)
A
anand76 已提交
463 464 465 466
else
STRESSTOOLOBJECTS = $(STRESS_LIB_SOURCES:.cc=.o) $(LIBOBJECTS) $(TESTUTIL) \
	$(TESTHARNESS)
endif
467

S
Siying Dong 已提交
468
EXPOBJECTS = $(LIBOBJECTS) $(TESTUTIL)
O
omegaga 已提交
469

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

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

661 662 663 664 665
ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1)
	TESTS += folly_synchronization_distributed_mutex_test
	PARALLEL_TEST += folly_synchronization_distributed_mutex_test
endif

666 667 668 669
# 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
670 671 672
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.
673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701
	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 \
702
		options_settable_test \
703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720
		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))
721
endif
I
Islam AbdelRahman 已提交
722 723 724 725 726 727 728 729
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
730

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

744 745 746
TEST_LIBS = \
	librocksdb_env_basic_test.a

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

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

763 764 765
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)
766

767 768
default: all

769 770 771
#-----------------------------------------------
# Create platform independent shared libraries.
#-----------------------------------------------
772
ifneq ($(PLATFORM_SHARED_EXT),)
H
heyongqiang 已提交
773 774

ifneq ($(PLATFORM_SHARED_VERSIONED),true)
775
SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
H
heyongqiang 已提交
776 777
SHARED2 = $(SHARED1)
SHARED3 = $(SHARED1)
778
SHARED4 = $(SHARED1)
H
heyongqiang 已提交
779 780
SHARED = $(SHARED1)
else
781 782
SHARED_MAJOR = $(ROCKSDB_MAJOR)
SHARED_MINOR = $(ROCKSDB_MINOR)
783
SHARED_PATCH = $(ROCKSDB_PATCH)
784
SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
785 786 787 788 789 790
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
791 792
SHARED2 = $(SHARED1).$(SHARED_MAJOR)
SHARED3 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR)
793
SHARED4 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR).$(SHARED_PATCH)
794
endif
795 796
SHARED = $(SHARED1) $(SHARED2) $(SHARED3) $(SHARED4)
$(SHARED1): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
797
	ln -fs $(SHARED4) $(SHARED1)
798
$(SHARED2): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
799
	ln -fs $(SHARED4) $(SHARED2)
800
$(SHARED3): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
801
	ln -fs $(SHARED4) $(SHARED3)
802
endif
803 804 805 806 807 808 809
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
810
shared_libobjects = $(patsubst %,shared-objects/%,$(LIBOBJECTS))
811 812
endif

813
CLEAN_FILES += shared-objects
814
shared_all_libobjects = $(shared_libobjects)
815

816 817 818 819 820 821 822 823 824
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
825
$(shared_libobjects): shared-objects/%.o: %.cc
826 827
	$(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) -c $< -o $@

828 829 830 831
ifeq ($(HAVE_POWER8),1)
shared_all_libobjects = $(shared_libobjects) $(shared-ppc-objects)
endif
$(SHARED4): $(shared_all_libobjects)
Z
zhsj 已提交
832
	$(CXX) $(PLATFORM_SHARED_LDFLAGS)$(SHARED3) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) $(shared_all_libobjects) $(LDFLAGS) -o $@
H
heyongqiang 已提交
833 834 835

endif  # PLATFORM_SHARED_EXT

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

M
maurice barnum 已提交
843

844
all: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(TESTS)
845

846 847
all_but_some_tests: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(SUBSET)

I
Igor Canadi 已提交
848 849 850 851
static_lib: $(LIBRARY)

shared_lib: $(SHARED)

852 853
stress_lib: $(STRESS_LIBRARY)

M
maurice barnum 已提交
854 855
tools: $(TOOLS)

856 857
tools_lib: $(TOOLS_LIBRARY)

858 859
test_libs: $(TEST_LIBS)

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

862
# creates static library and programs
863
release:
Y
Yueh-Hsuan Chiang 已提交
864
	$(MAKE) clean
865
	DEBUG_LEVEL=0 $(MAKE) static_lib tools db_bench
K
Kai Liu 已提交
866 867

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

Y
Yi Wu 已提交
874 875 876 877 878
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 已提交
879 880
TMPDIR := $(shell echo $${TMPDIR:-/tmp})
TMPD := $(shell f=/dev/shm; test -k $$f || f=$(TMPDIR);     \
Y
Yi Wu 已提交
881 882 883 884 885 886 887 888 889 890 891 892 893 894
  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.
895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912
# 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 已提交
913 914 915 916 917 918 919 920 921 922 923
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 \
924
		TEST_SCRIPT=t/run-$$TEST_BINARY-$${TEST_NAME//\//-}; \
Y
Yi Wu 已提交
925 926 927 928 929
		echo "  GEN     " $$TEST_SCRIPT; \
    printf '%s\n' \
      '#!/bin/sh' \
      "d=\$(TMPD)$$TEST_SCRIPT" \
      'mkdir -p $$d' \
930
      "TEST_TMPDIR=\$$d $(DRIVER) ./$$TEST_BINARY --gtest_filter=$$TEST_NAME" \
Y
Yi Wu 已提交
931 932 933 934 935 936 937 938
		> $$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)
939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956

# 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 已提交
957
	^.*SnapshotConcurrentAccessTest.*$$|^t/run-table_test-HarnessTest.Randomized$$|^t/run-db_test-.*(?:FileCreationRandomFailure|EncodeDecompressedBlockSizeTest)$$|^.*RecoverFromCorruptedWALWithoutFlush$$
958
prioritize_long_running_tests =						\
Y
Yueh-Hsuan Chiang 已提交
959 960 961
  perl -pe 's,($(slow_test_regexp)),100 $$1,'				\
    | sort -k1,1gr							\
    | sed 's/^[.0-9]* //'
962 963 964 965 966 967

# "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 已提交
968
J ?= 100%
969

V
Venkatesh Radhakrishnan 已提交
970 971 972
# Use this regexp to select the subset of tests whose names match.
tests-regexp = .

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

988
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
989

S
sdong 已提交
990
.PHONY: valgrind_check_0
Y
Yi Wu 已提交
991
valgrind_check_0:
S
sdong 已提交
992 993 994 995 996 997
	$(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 已提交
998
	  printf './%s\n' $(filter-out $(PARALLEL_TEST) %skiplist_test options_settable_test, $(TESTS));		\
999
	  find t -name 'run-*' -print; \
S
sdong 已提交
1000 1001 1002
	}								\
	  | $(prioritize_long_running_tests)				\
	  | grep -E '$(tests-regexp)'					\
1003
	  | grep -E -v '$(valgrind-blacklist-regexp)'					\
1004
	  | build_tools/gnu_parallel -j$(J) --plain --joblog=LOG $$eta --gnu \
1005 1006
	  '(if [[ "{}" == "./"* ]] ; then $(DRIVER) {}; else {}; fi) ' \
	  '>& t/valgrind_log-{/}'
1007 1008

CLEAN_FILES += t LOG $(TMPD)
1009

1010 1011 1012 1013 1014 1015 1016 1017
# 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:
1018
	$(WATCH) --interval=0 'sort -k7,7nr -k4,4gr LOG|$(quoted_perl_command)'
1019

1020 1021 1022
dump-log:
	bash -c '$(quoted_perl_command)' < LOG

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

S
Siying Dong 已提交
1049 1050
# TODO add ldb_tests
check_some: $(SUBSET)
1051
	for t in $(SUBSET); do echo "===== Running $$t (`date`)"; ./$$t || exit 1; done
1052 1053

.PHONY: ldb_tests
1054
ldb_tests: ldb
1055
	$(PYTHON) tools/ldb_test.py
1056

I
Igor Canadi 已提交
1057
crash_test: whitebox_crash_test blackbox_crash_test
1058

1059 1060
crash_test_with_atomic_flush: whitebox_crash_test_with_atomic_flush blackbox_crash_test_with_atomic_flush

1061 1062
crash_test_with_txn: whitebox_crash_test_with_txn blackbox_crash_test_with_txn

1063
blackbox_crash_test: db_stress
1064 1065
	$(PYTHON) -u tools/db_crashtest.py --simple blackbox $(CRASH_TEST_EXT_ARGS)
	$(PYTHON) -u tools/db_crashtest.py blackbox $(CRASH_TEST_EXT_ARGS)
1066

1067
blackbox_crash_test_with_atomic_flush: db_stress
1068
	$(PYTHON) -u tools/db_crashtest.py --cf_consistency blackbox $(CRASH_TEST_EXT_ARGS)
1069

1070
blackbox_crash_test_with_txn: db_stress
1071
	$(PYTHON) -u tools/db_crashtest.py --txn blackbox $(CRASH_TEST_EXT_ARGS)
1072

1073 1074 1075 1076
ifeq ($(CRASH_TEST_KILL_ODD),)
  CRASH_TEST_KILL_ODD=888887
endif

1077
whitebox_crash_test: db_stress
1078
	$(PYTHON) -u tools/db_crashtest.py --simple whitebox --random_kill_odd \
1079
      $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
1080
	$(PYTHON) -u tools/db_crashtest.py whitebox  --random_kill_odd \
1081
      $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
1082

1083
whitebox_crash_test_with_atomic_flush: db_stress
1084
	$(PYTHON) -u tools/db_crashtest.py --cf_consistency whitebox  --random_kill_odd \
1085 1086
      $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)

1087
whitebox_crash_test_with_txn: db_stress
1088
	$(PYTHON) -u tools/db_crashtest.py --txn whitebox --random_kill_odd \
1089 1090
      $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)

I
Igor Canadi 已提交
1091
asan_check:
Y
Yueh-Hsuan Chiang 已提交
1092 1093 1094
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) check -j32
	$(MAKE) clean
1095 1096

asan_crash_test:
Y
Yueh-Hsuan Chiang 已提交
1097 1098 1099
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) crash_test
	$(MAKE) clean
I
Igor Canadi 已提交
1100

1101 1102 1103 1104 1105
asan_crash_test_with_atomic_flush:
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) crash_test_with_atomic_flush
	$(MAKE) clean

1106 1107 1108 1109 1110
asan_crash_test_with_txn:
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) crash_test_with_txn
	$(MAKE) clean

1111 1112 1113 1114 1115 1116 1117 1118 1119 1120
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

1121 1122 1123 1124 1125
ubsan_crash_test_with_atomic_flush:
	$(MAKE) clean
	COMPILE_WITH_UBSAN=1 $(MAKE) crash_test_with_atomic_flush
	$(MAKE) clean

1126 1127 1128 1129 1130
ubsan_crash_test_with_txn:
	$(MAKE) clean
	COMPILE_WITH_UBSAN=1 $(MAKE) crash_test_with_txn
	$(MAKE) clean

1131
valgrind_test:
1132
	ROCKSDB_VALGRIND_RUN=1 DISABLE_JEMALLOC=1 $(MAKE) valgrind_check
1133

I
Igor Canadi 已提交
1134
valgrind_check: $(TESTS)
1135
	$(MAKE) DRIVER="$(VALGRIND_VER) $(VALGRIND_OPTS)" gen_parallel_tests
S
sdong 已提交
1136
	$(AM_V_GEN)if test "$(J)" != 1                                  \
1137
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |                    \
S
sdong 已提交
1138 1139
	        grep -q 'GNU Parallel';                                 \
	then                                                            \
Y
Yi Wu 已提交
1140
      $(MAKE) TMPD=$(TMPD)                                        \
S
sdong 已提交
1141 1142 1143 1144 1145 1146 1147 1148 1149 1150
      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
1151

1152 1153 1154 1155 1156

ifneq ($(PAR_TEST),)
parloop:
	ret_bad=0;							\
	for t in $(PAR_TEST); do		\
1157
		echo "===== Running $$t in parallel $(NUM_PAR) (`date`)";\
1158
		if [ $(db_test) -eq 1 ]; then \
1159
			seq $(J) | v="$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{};  export TEST_TMPDIR=$$s;' \
1160 1161
				'timeout 2m ./db_test --gtest_filter=$$v >> $$s/log-{} 2>1'; \
		else\
1162
			seq $(J) | v="./$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{};' \
1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173
			     '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 已提交
1174 1175 1176 1177 1178 1179 1180
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!'

1181 1182
parallel_check: $(TESTS)
	$(AM_V_GEN)if test "$(J)" > 1                                  \
1183
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |                    \
1184 1185 1186 1187 1188 1189 1190 1191 1192
	        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); \
1193
        seq $(J) | build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{}; rm -rf $$s; mkdir $$s'; \
1194
	$(MAKE)  PAR_TEST="$(shell $(test_names))" TMPD=$(TMPD) \
1195 1196 1197 1198
		J=$(J) db_test=1 parloop; \
	$(MAKE) PAR_TEST="$(filter-out db_test, $(TESTS))" \
		TMPD=$(TMPD) J=$(J) db_test=0 parloop;

1199
analyze: clean
1200 1201 1202
	USE_CLANG=1 $(MAKE) analyze_incremental

analyze_incremental:
Y
Yueh-Hsuan Chiang 已提交
1203 1204 1205 1206
	$(CLANG_SCAN_BUILD) --use-analyzer=$(CLANG_ANALYZER) \
		--use-c++=$(CXX) --use-cc=$(CC) --status-bugs \
		-o $(CURDIR)/scan_build_report \
		$(MAKE) dbg
1207

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

E
Evan Shaw 已提交
1217 1218 1219 1220
unity.a: unity.o
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ unity.o

1221 1222

TOOLLIBOBJECTS = $(TOOL_LIB_SOURCES:.cc=.o)
I
Igor Canadi 已提交
1223
# try compiling db_test with unity
1224
unity_test: db/db_test.o db/db_test_util.o $(TESTHARNESS) $(TOOLLIBOBJECTS) unity.a
I
Igor Canadi 已提交
1225 1226 1227
	$(AM_LINK)
	./unity_test

E
Evan Shaw 已提交
1228 1229
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 已提交
1230

1231
clean: clean-ext-libraries-all clean-rocks clean-rocksjava
1232

1233
clean-not-downloaded: clean-ext-libraries-bin clean-rocks clean-not-downloaded-rocksjava
1234 1235

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

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

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

1247 1248 1249 1250 1251 1252
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 {} \;

1253
tags:
1254
	ctags -R .
1255
	cscope -b `$(FIND) . -name '*.cc'` `$(FIND) . -name '*.h'` `$(FIND) . -name '*.c'`
L
Leonidas Galanis 已提交
1256
	ctags -e -R -o etags *
1257

1258 1259 1260 1261 1262 1263 1264
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 *

1265
format:
Y
Yueh-Hsuan Chiang 已提交
1266
	build_tools/format-diff.sh
1267

1268 1269 1270 1271 1272 1273
check-format:
	build_tools/format-diff.sh -c

check-buck-targets:
	buckifier/check_buck_targets.sh

1274
package:
Y
Yueh-Hsuan Chiang 已提交
1275
	bash build_tools/make_package.sh $(SHARED_MAJOR).$(SHARED_MINOR)
1276

1277 1278 1279
# ---------------------------------------------------------------------------
# 	Unit tests and tools
# ---------------------------------------------------------------------------
1280
$(LIBRARY): $(LIBOBJECTS)
Y
Yueh-Hsuan Chiang 已提交
1281 1282
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $(LIBOBJECTS)
J
jorlow@chromium.org 已提交
1283

1284
$(TOOLS_LIBRARY): $(BENCH_LIB_SOURCES:.cc=.o) $(TOOL_LIB_SOURCES:.cc=.o) $(LIB_SOURCES:.cc=.o) $(TESTUTIL) $(ANALYZER_LIB_SOURCES:.cc=.o)
1285 1286 1287
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $^

1288 1289 1290 1291
$(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) $@ $^

1292
librocksdb_env_basic_test.a: env/env_basic_test.o $(LIBOBJECTS) $(TESTHARNESS)
1293 1294 1295
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $^

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

1299 1300 1301
trace_analyzer: tools/trace_analyzer.o $(ANALYZETOOLOBJECTS) $(LIBOBJECTS)
	$(AM_LINK)

1302
block_cache_trace_analyzer: tools/block_cache_analyzer/block_cache_trace_analyzer_tool.o $(ANALYZETOOLOBJECTS) $(LIBOBJECTS)
1303 1304
	$(AM_LINK)

1305 1306 1307 1308 1309
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

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

1313 1314 1315
persistent_cache_bench: utilities/persistent_cache/persistent_cache_bench.o $(LIBOBJECTS) $(TESTUTIL)
	$(AM_LINK)

1316
memtablerep_bench: memtable/memtablerep_bench.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
1317
	$(AM_LINK)
A
Ameya Gupte 已提交
1318

1319 1320 1321
filter_bench: util/filter_bench.o $(LIBOBJECTS) $(TESTUTIL)
	$(AM_LINK)

1322
db_stress: db_stress_tool/db_stress.o $(STRESSTOOLOBJECTS)
Y
Yueh-Hsuan Chiang 已提交
1323
	$(AM_LINK)
1324

I
Igor Canadi 已提交
1325 1326 1327
write_stress: tools/write_stress.o $(LIBOBJECTS) $(TESTUTIL)
	$(AM_LINK)

I
Igor Canadi 已提交
1328
db_sanity_test: tools/db_sanity_test.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
1329
	$(AM_LINK)
1330

1331
db_repl_stress: tools/db_repl_stress.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
1332
	$(AM_LINK)
1333

1334
arena_test: memory/arena_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1335
	$(AM_LINK)
1336

1337
memkind_kmem_allocator_test: memory/memkind_kmem_allocator_test.o $(LIBOBJECTS) $(TESTHARNESS)
1338
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1339

K
kailiu 已提交
1340
autovector_test: util/autovector_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1341
	$(AM_LINK)
K
kailiu 已提交
1342

1343
column_family_test: db/column_family_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1344
	$(AM_LINK)
1345

K
kailiu 已提交
1346
table_properties_collector_test: db/table_properties_collector_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1347
	$(AM_LINK)
1348

S
Sanjay Ghemawat 已提交
1349
bloom_test: util/bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1350
	$(AM_LINK)
S
Sanjay Ghemawat 已提交
1351

1352
dynamic_bloom_test: util/dynamic_bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1353
	$(AM_LINK)
1354

1355
c_test: db/c_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1356
	$(AM_LINK)
1357

1358
cache_test: cache/cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1359
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1360 1361

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

1364 1365 1366
hash_test: util/hash_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1367 1368 1369
random_test: util/random_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1370 1371 1372
option_change_migration_test: utilities/option_change_migration/option_change_migration_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1373
stringappend_test: utilities/merge_operators/string_append/stringappend_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1374
	$(AM_LINK)
1375

1376
cassandra_format_test: utilities/cassandra/cassandra_format_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
1377 1378
	$(AM_LINK)

1379
cassandra_functional_test: utilities/cassandra/cassandra_functional_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
1380 1381
	$(AM_LINK)

1382
cassandra_row_merge_test: utilities/cassandra/cassandra_row_merge_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
1383 1384
	$(AM_LINK)

1385
cassandra_serialize_test: utilities/cassandra/cassandra_serialize_test.o $(LIBOBJECTS) $(TESTHARNESS)
1386 1387
	$(AM_LINK)

1388 1389 1390
hash_table_test: utilities/persistent_cache/hash_table_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1391
histogram_test: monitoring/histogram_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1392
	$(AM_LINK)
A
Abhishek Kona 已提交
1393

L
Lei Jin 已提交
1394
thread_local_test: util/thread_local_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1395
	$(AM_LINK)
L
Lei Jin 已提交
1396

1397 1398 1399
work_queue_test: util/work_queue_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

S
sdong 已提交
1400
corruption_test: db/corruption_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1401
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1402 1403

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

1406 1407 1408
slice_test: util/slice_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1409
slice_transform_test: util/slice_transform_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1410
	$(AM_LINK)
1411

1412
db_basic_test: db/db_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
E
Ewout Prangsma 已提交
1413 1414
	$(AM_LINK)

1415 1416 1417
db_with_timestamp_basic_test: db/db_with_timestamp_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1418 1419 1420
db_with_timestamp_compaction_test: db/db_with_timestamp_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

E
Ewout Prangsma 已提交
1421
db_encryption_test: db/db_encryption_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1422 1423
	$(AM_LINK)

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

1427 1428 1429
db_test2: db/db_test2.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1430 1431 1432
db_logical_block_size_cache_test: db/db_logical_block_size_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1433
db_blob_index_test: db/blob/db_blob_index_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yi Wu 已提交
1434 1435
	$(AM_LINK)

1436 1437 1438
db_block_cache_test: db/db_block_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

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

1442
db_log_iter_test: db/db_log_iter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1443
	$(AM_LINK)
1444

1445
db_compaction_filter_test: db/db_compaction_filter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1446 1447
	$(AM_LINK)

1448
db_compaction_test: db/db_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1449 1450
	$(AM_LINK)

1451
db_dynamic_level_test: db/db_dynamic_level_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1452 1453
	$(AM_LINK)

1454 1455 1456
db_flush_test: db/db_flush_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1457
db_inplace_update_test: db/db_inplace_update_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1458 1459
	$(AM_LINK)

Y
Yi Wu 已提交
1460 1461 1462
db_iterator_test: db/db_iterator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1463 1464 1465
db_memtable_test: db/db_memtable_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1466 1467 1468
db_merge_operator_test: db/db_merge_operator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1469 1470
db_merge_operand_test: db/db_merge_operand_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)
1471

1472 1473 1474
db_options_test: db/db_options_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1475 1476 1477
db_range_del_test: db/db_range_del_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
1478 1479 1480
db_sst_test: db/db_sst_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1481 1482 1483
db_statistics_test: db/db_statistics_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

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

1487
error_handler_fs_test: db/error_handler_fs_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1488 1489
	$(AM_LINK)

S
Siying Dong 已提交
1490 1491 1492
external_sst_file_basic_test: db/external_sst_file_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1493 1494 1495
external_sst_file_test: db/external_sst_file_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1496 1497 1498
import_column_family_test: db/import_column_family_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1499
db_tailing_iter_test: db/db_tailing_iter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1500 1501
	$(AM_LINK)

S
Stanislau Hlebik 已提交
1502
db_iter_test: db/db_iter_test.o $(LIBOBJECTS) $(TESTHARNESS)
1503
	$(AM_LINK)
S
Stanislau Hlebik 已提交
1504

1505 1506 1507
db_iter_stress_test: db/db_iter_stress_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1508
db_universal_compaction_test: db/db_universal_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1509 1510
	$(AM_LINK)

1511
db_wal_test: db/db_wal_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
S
sdong 已提交
1512 1513
	$(AM_LINK)

O
omegaga 已提交
1514 1515 1516
db_io_failure_test: db/db_io_failure_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1517 1518 1519
db_properties_test: db/db_properties_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1520 1521 1522
db_table_properties_test: db/db_table_properties_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1523
log_write_bench: util/log_write_bench.o $(LIBOBJECTS) $(TESTHARNESS)
D
dx9 已提交
1524
	$(AM_LINK) $(PROFILING_FLAGS)
1525

S
Siying Dong 已提交
1526
plain_table_db_test: db/plain_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1527
	$(AM_LINK)
S
Siying Dong 已提交
1528

1529
comparator_db_test: db/comparator_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1530
	$(AM_LINK)
1531

1532
table_reader_bench: table/table_reader_bench.o $(LIBOBJECTS) $(TESTHARNESS)
D
dx9 已提交
1533
	$(AM_LINK) $(PROFILING_FLAGS)
1534

1535
perf_context_test: db/perf_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
1536
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)
1537

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

I
Igor Canadi 已提交
1541
backupable_db_test: utilities/backupable/backupable_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1542
	$(AM_LINK)
I
Igor Canadi 已提交
1543

1544 1545 1546
checkpoint_test: utilities/checkpoint/checkpoint_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1547 1548 1549
cache_simulator_test: utilities/simulator_cache/cache_simulator_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1550 1551 1552
sim_cache_test: utilities/simulator_cache/sim_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

S
Sage Weil 已提交
1553 1554 1555
env_mirror_test: utilities/env_mirror_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
Andrew Kryczka 已提交
1556 1557 1558
env_timed_test: utilities/env_timed_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1559 1560 1561 1562 1563
ifdef ROCKSDB_USE_LIBRADOS
env_librados_test: utilities/env_librados_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(COVERAGEFLAGS)
endif

1564
object_registry_test: utilities/object_registry_test.o $(LIBOBJECTS) $(TESTHARNESS)
1565 1566
	$(AM_LINK)

1567
ttl_test: utilities/ttl/ttl_test.o $(LIBOBJECTS) $(TESTHARNESS)
1568
	$(AM_LINK)
1569

1570
write_batch_with_index_test: utilities/write_batch_with_index/write_batch_with_index_test.o $(LIBOBJECTS) $(TESTHARNESS)
1571
	$(AM_LINK)
1572

I
Igor Canadi 已提交
1573
flush_job_test: db/flush_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
1574
	$(AM_LINK)
A
Andres Noetzli 已提交
1575

1576
compaction_iterator_test: db/compaction/compaction_iterator_test.o $(LIBOBJECTS) $(TESTHARNESS)
A
Andres Noetzli 已提交
1577
	$(AM_LINK)
I
Igor Canadi 已提交
1578

1579
compaction_job_test: db/compaction/compaction_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
1580
	$(AM_LINK)
I
Igor Canadi 已提交
1581

1582
compaction_job_stats_test: db/compaction/compaction_job_stats_test.o $(LIBOBJECTS) $(TESTHARNESS)
1583 1584
	$(AM_LINK)

1585 1586 1587
compact_on_deletion_collector_test: utilities/table_properties_collectors/compact_on_deletion_collector_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1588
wal_manager_test: db/wal_manager_test.o $(LIBOBJECTS) $(TESTHARNESS)
1589
	$(AM_LINK)
I
Igor Canadi 已提交
1590

J
jorlow@chromium.org 已提交
1591
dbformat_test: db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS)
1592
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1593

1594
env_basic_test: env/env_basic_test.o $(LIBOBJECTS) $(TESTHARNESS)
1595 1596
	$(AM_LINK)

1597
env_test: env/env_test.o $(LIBOBJECTS) $(TESTHARNESS)
1598
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1599

1600 1601 1602
io_posix_test: env/io_posix_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1603
fault_injection_test: db/fault_injection_test.o $(LIBOBJECTS) $(TESTHARNESS)
1604
	$(AM_LINK)
1605

A
Andrew Kryczka 已提交
1606
rate_limiter_test: util/rate_limiter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1607
	$(AM_LINK)
L
Lei Jin 已提交
1608

1609
delete_scheduler_test: file/delete_scheduler_test.o $(LIBOBJECTS) $(TESTHARNESS)
I
Islam AbdelRahman 已提交
1610 1611
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1612
filename_test: db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS)
1613
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1614

1615 1616 1617
random_access_file_reader_test: file/random_access_file_reader_test.o $(LIBOBJECTS) $(TESTHARNESS) $(TESTUTIL)
	$(AM_LINK)

1618 1619 1620
file_reader_writer_test: util/file_reader_writer_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1621
block_based_filter_block_test: table/block_based/block_based_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1622
	$(AM_LINK)
1623

1624 1625 1626
block_based_table_reader_test: table/block_based/block_based_table_reader_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1627
full_filter_block_test: table/block_based/full_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1628
	$(AM_LINK)
S
Sanjay Ghemawat 已提交
1629

1630
partitioned_filter_block_test: table/block_based/partitioned_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
M
Maysam Yabandeh 已提交
1631 1632
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1633
log_test: db/log_test.o $(LIBOBJECTS) $(TESTHARNESS)
M
Maysam Yabandeh 已提交
1634 1635 1636
	$(AM_LINK)

cleanable_test: table/cleanable_test.o $(LIBOBJECTS) $(TESTHARNESS)
1637
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1638 1639

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

1642 1643 1644
block_fetcher_test: table/block_fetcher_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1645
block_test: table/block_based/block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1646
	$(AM_LINK)
D
Dhruba Borthakur 已提交
1647

1648
data_block_hash_index_test: table/block_based/data_block_hash_index_test.o $(LIBOBJECTS) $(TESTHARNESS)
1649 1650
	$(AM_LINK)

1651
inlineskiplist_test: memtable/inlineskiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
N
Nathan Bronson 已提交
1652 1653
	$(AM_LINK)

1654
skiplist_test: memtable/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
1655
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1656

1657 1658 1659
write_buffer_manager_test: memtable/write_buffer_manager_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1660
version_edit_test: db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS)
1661
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1662

1663
version_set_test: db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS)
1664
	$(AM_LINK)
1665

1666
compaction_picker_test: db/compaction/compaction_picker_test.o $(LIBOBJECTS) $(TESTHARNESS)
1667
	$(AM_LINK)
S
sdong 已提交
1668

S
sdong 已提交
1669
version_builder_test: db/version_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
1670
	$(AM_LINK)
S
sdong 已提交
1671

1672
file_indexer_test: db/file_indexer_test.o $(LIBOBJECTS) $(TESTHARNESS)
1673
	$(AM_LINK)
1674

1675
reduce_levels_test: tools/reduce_levels_test.o $(LIBOBJECTS) $(TESTHARNESS)
1676
	$(AM_LINK)
1677

J
jorlow@chromium.org 已提交
1678
write_batch_test: db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS)
1679
	$(AM_LINK)
1680

1681
write_controller_test: db/write_controller_test.o $(LIBOBJECTS) $(TESTHARNESS)
1682
	$(AM_LINK)
1683

1684 1685 1686
merge_helper_test: db/merge_helper_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1687 1688 1689
memory_test: utilities/memory/memory_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
Jim Paton 已提交
1690
merge_test: db/merge_test.o $(LIBOBJECTS) $(TESTHARNESS)
1691
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1692

I
Igor Canadi 已提交
1693
merger_test: table/merger_test.o $(LIBOBJECTS) $(TESTHARNESS)
1694
	$(AM_LINK)
I
Igor Canadi 已提交
1695

1696 1697 1698
util_merge_operators_test: utilities/util_merge_operators_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1699 1700 1701
options_file_test: db/options_file_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yanqin Jin 已提交
1702
deletefile_test: db/deletefile_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1703
	$(AM_LINK)
1704

1705
obsolete_files_test: db/obsolete_files_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1706 1707
	$(AM_LINK)

1708 1709 1710 1711 1712 1713
rocksdb_dump: tools/dump/rocksdb_dump.o $(LIBOBJECTS)
	$(AM_LINK)

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

1714
cuckoo_table_builder_test: table/cuckoo/cuckoo_table_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
1715
	$(AM_LINK)
1716

1717
cuckoo_table_reader_test: table/cuckoo/cuckoo_table_reader_test.o $(LIBOBJECTS) $(TESTHARNESS)
1718
	$(AM_LINK)
1719

1720
cuckoo_table_db_test: db/cuckoo_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1721
	$(AM_LINK)
1722

1723
listener_test: db/listener_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1724
	$(AM_LINK)
1725

Y
Yueh-Hsuan Chiang 已提交
1726
thread_list_test: util/thread_list_test.o $(LIBOBJECTS) $(TESTHARNESS)
1727
	$(AM_LINK)
Y
Yueh-Hsuan Chiang 已提交
1728

1729 1730 1731
compact_files_test: db/compact_files_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1732
options_test: options/options_test.o $(LIBOBJECTS) $(TESTHARNESS)
1733 1734
	$(AM_LINK)

1735
options_settable_test: options/options_settable_test.o $(LIBOBJECTS) $(TESTHARNESS)
1736
	$(AM_LINK)
1737

1738 1739 1740
options_util_test: utilities/options/options_util_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1741 1742 1743
db_bench_tool_test: tools/db_bench_tool_test.o $(BENCHTOOLOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1744
trace_analyzer_test: tools/trace_analyzer_test.o $(LIBOBJECTS) $(ANALYZETOOLOBJECTS) $(TESTHARNESS)
Z
Zhichao Cao 已提交
1745 1746
	$(AM_LINK)

1747
event_logger_test: logging/event_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
I
Igor Canadi 已提交
1748 1749
	$(AM_LINK)

A
Anirban Rahut 已提交
1750 1751 1752
timer_queue_test: util/timer_queue_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1753
sst_dump_test: tools/sst_dump_test.o $(LIBOBJECTS) $(TESTHARNESS)
1754
	$(AM_LINK)
1755

A
agiardullo 已提交
1756 1757 1758
optimistic_transaction_test: utilities/transactions/optimistic_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1759
mock_env_test : env/mock_env_test.o $(LIBOBJECTS) $(TESTHARNESS)
1760
	$(AM_LINK)
1761

1762
manual_compaction_test: db/manual_compaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
1763
	$(AM_LINK)
1764

1765
filelock_test: util/filelock_test.o $(LIBOBJECTS) $(TESTHARNESS)
1766
	$(AM_LINK)
K
Kai Liu 已提交
1767

1768
auto_roll_logger_test: logging/auto_roll_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
1769
	$(AM_LINK)
1770

1771 1772 1773
env_logger_test: logging/env_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
agiardullo 已提交
1774 1775 1776
memtable_list_test: db/memtable_list_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
agiardullo 已提交
1777 1778 1779
write_callback_test: db/write_callback_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1780 1781 1782
heap_test: util/heap_test.o $(GTEST)
	$(AM_LINK)

1783 1784 1785
transaction_lock_mgr_test: utilities/transactions/transaction_lock_mgr_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
agiardullo 已提交
1786 1787 1788
transaction_test: utilities/transactions/transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1789 1790 1791
write_prepared_transaction_test: utilities/transactions/write_prepared_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1792 1793 1794
write_unprepared_transaction_test: utilities/transactions/write_unprepared_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1795
sst_dump: tools/sst_dump.o $(LIBOBJECTS)
1796
	$(AM_LINK)
1797

Y
Yi Wu 已提交
1798 1799 1800
blob_dump: tools/blob_dump.o $(LIBOBJECTS)
	$(AM_LINK)

A
Andrew Kryczka 已提交
1801 1802 1803
repair_test: db/repair_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1804
ldb_cmd_test: tools/ldb_cmd_test.o $(LIBOBJECTS) $(TESTHARNESS)
1805 1806
	$(AM_LINK)

1807
ldb: tools/ldb.o $(LIBOBJECTS)
1808
	$(AM_LINK)
1809

1810
iostats_context_test: monitoring/iostats_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
1811 1812
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)

1813 1814 1815
persistent_cache_test: utilities/persistent_cache/persistent_cache_test.o  db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1816
statistics_test: monitoring/statistics_test.o $(LIBOBJECTS) $(TESTHARNESS)
1817 1818
	$(AM_LINK)

1819 1820 1821
stats_history_test: monitoring/stats_history_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1822
lru_cache_test: cache/lru_cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yi Wu 已提交
1823 1824
	$(AM_LINK)

A
Andrew Kryczka 已提交
1825 1826 1827
range_del_aggregator_test: db/range_del_aggregator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1828 1829 1830
range_del_aggregator_bench: db/range_del_aggregator_bench.o $(LIBOBJECTS) $(TESTUTIL)
	$(AM_LINK)

Y
Yi Wu 已提交
1831 1832 1833
blob_db_test: utilities/blob_db/blob_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1834 1835 1836
repeatable_thread_test: util/repeatable_thread_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1837 1838 1839
range_tombstone_fragmenter_test: db/range_tombstone_fragmenter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1840 1841 1842
sst_file_reader_test: table/sst_file_reader_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1843
db_secondary_test: db/db_impl/db_secondary_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1844 1845
	$(AM_LINK)

H
haoyuhuang 已提交
1846 1847 1848
block_cache_tracer_test: trace_replay/block_cache_tracer_test.o trace_replay/block_cache_tracer.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1849
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)
1850 1851
	$(AM_LINK)

C
Cheng Chang 已提交
1852 1853 1854
defer_test: util/defer_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1855
blob_file_addition_test: db/blob/blob_file_addition_test.o $(LIBOBJECTS) $(TESTHARNESS)
1856 1857
	$(AM_LINK)

1858
blob_file_garbage_test: db/blob/blob_file_garbage_test.o $(LIBOBJECTS) $(TESTHARNESS)
1859 1860
	$(AM_LINK)

1861 1862 1863
timer_test: util/timer_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877
#-------------------------------------------------
# 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
1878
	for header_dir in `$(FIND) "include/rocksdb" -type d`; do \
I
Igor Canadi 已提交
1879 1880
		install -d $(INSTALL_PATH)/$$header_dir; \
	done
1881
	for header in `$(FIND) "include/rocksdb" -type f -name *.h`; do \
I
Igor Canadi 已提交
1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895
		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 已提交
1896
	[ -e $(SHARED4) ] && $(MAKE) install-shared || :
I
Igor Canadi 已提交
1897 1898 1899 1900

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


1901 1902 1903 1904
# ---------------------------------------------------------------------------
# Jni stuff
# ---------------------------------------------------------------------------

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

1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928
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

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

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

ifeq ($(PLATFORM), OS_MACOSX)
D
David Bernard 已提交
1958 1959
	ROCKSDBJNILIB = librocksdbjni-osx.jnilib
	ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-osx.jar
1960
	SHA256_CMD = openssl sha256 -r
1961 1962 1963 1964 1965
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
1966
endif
1967
ifeq ($(PLATFORM), OS_FREEBSD)
1968
	JAVA_INCLUDE = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/freebsd
1969 1970 1971
	ROCKSDBJNILIB = librocksdbjni-freebsd$(ARCH).so
	ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-freebsd$(ARCH).jar
endif
D
David Bernard 已提交
1972 1973 1974 1975
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
1976
	SHA256_CMD = digest -a sha256
D
David Bernard 已提交
1977
endif
T
Tomas Kolda 已提交
1978 1979 1980 1981 1982 1983
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
1984 1985 1986 1987 1988
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
1989

N
Naveen 已提交
1990
libz.a:
1991
	-rm -rf zlib-$(ZLIB_VER)
1992
ifeq (,$(wildcard ./zlib-$(ZLIB_VER).tar.gz))
1993
	curl --fail --output zlib-$(ZLIB_VER).tar.gz --location ${ZLIB_DOWNLOAD_BASE}/zlib-$(ZLIB_VER).tar.gz
1994
endif
1995 1996 1997 1998 1999 2000
	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
2001
	cd zlib-$(ZLIB_VER) && CFLAGS='-fPIC ${EXTRA_CFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' ./configure --static && $(MAKE)
2002
	cp zlib-$(ZLIB_VER)/libz.a .
N
Naveen 已提交
2003 2004

libbz2.a:
2005
	-rm -rf bzip2-$(BZIP2_VER)
2006
ifeq (,$(wildcard ./bzip2-$(BZIP2_VER).tar.gz))
2007
	curl --fail --output bzip2-$(BZIP2_VER).tar.gz --location ${CURL_SSL_OPTS} ${BZIP2_DOWNLOAD_BASE}/bzip2-$(BZIP2_VER).tar.gz
2008
endif
2009 2010 2011 2012 2013 2014
	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
2015
	cd bzip2-$(BZIP2_VER) && $(MAKE) CFLAGS='-fPIC -O2 -g -D_FILE_OFFSET_BITS=64 ${EXTRA_CFLAGS}' AR='ar ${EXTRA_ARFLAGS}'
2016
	cp bzip2-$(BZIP2_VER)/libbz2.a .
N
Naveen 已提交
2017

N
Naveen 已提交
2018
libsnappy.a:
2019
	-rm -rf snappy-$(SNAPPY_VER)
2020
ifeq (,$(wildcard ./snappy-$(SNAPPY_VER).tar.gz))
2021
	curl --fail --output snappy-$(SNAPPY_VER).tar.gz --location ${CURL_SSL_OPTS} ${SNAPPY_DOWNLOAD_BASE}/$(SNAPPY_VER).tar.gz
2022
endif
2023 2024 2025 2026 2027
	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
2028
	tar xvzf snappy-$(SNAPPY_VER).tar.gz
2029
	mkdir snappy-$(SNAPPY_VER)/build
2030
	cd snappy-$(SNAPPY_VER)/build && CFLAGS='${EXTRA_CFLAGS}' CXXFLAGS='${EXTRA_CXXFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON .. && $(MAKE) ${SNAPPY_MAKE_TARGET}
2031
	cp snappy-$(SNAPPY_VER)/build/libsnappy.a .
2032

2033
liblz4.a:
2034
	-rm -rf lz4-$(LZ4_VER)
2035
ifeq (,$(wildcard ./lz4-$(LZ4_VER).tar.gz))
2036
	curl --fail --output lz4-$(LZ4_VER).tar.gz --location ${CURL_SSL_OPTS} ${LZ4_DOWNLOAD_BASE}/v$(LZ4_VER).tar.gz
2037
endif
2038 2039 2040 2041 2042 2043
	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
2044
	cd lz4-$(LZ4_VER)/lib && $(MAKE) CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' all
2045
	cp lz4-$(LZ4_VER)/lib/liblz4.a .
N
Naveen 已提交
2046

2047 2048
libzstd.a:
	-rm -rf zstd-$(ZSTD_VER)
2049
ifeq (,$(wildcard ./zstd-$(ZSTD_VER).tar.gz))
2050
	curl --fail --output zstd-$(ZSTD_VER).tar.gz --location ${CURL_SSL_OPTS} ${ZSTD_DOWNLOAD_BASE}/v$(ZSTD_VER).tar.gz
2051
endif
2052 2053 2054 2055 2056 2057
	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
2058
	cd zstd-$(ZSTD_VER)/lib && DESTDIR=. PREFIX= $(MAKE) CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' install
2059 2060
	cp zstd-$(ZSTD_VER)/lib/libzstd.a .

2061
# A version of each $(LIBOBJECTS) compiled with -fPIC and a fixed set of static compression libraries
A
Andrew Kryczka 已提交
2062
java_static_libobjects = $(patsubst %,jls/%,$(LIB_CC_OBJECTS))
2063
CLEAN_FILES += jls
A
Andrew Kryczka 已提交
2064
java_static_all_libobjects = $(java_static_libobjects)
2065

2066
ifneq ($(ROCKSDB_JAVA_NO_COMPRESSION), 1)
2067
JAVA_COMPRESSIONS = libz.a libbz2.a libsnappy.a liblz4.a libzstd.a
2068 2069
endif

2070
JAVA_STATIC_FLAGS = -DZLIB -DBZIP2 -DSNAPPY -DLZ4 -DZSTD
2071
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
2072

A
Andrew Kryczka 已提交
2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087
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

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

A
Andrew Kryczka 已提交
2091
rocksdbjavastatic: $(java_static_all_libobjects)
F
fyrz 已提交
2092
	cd java;$(MAKE) javalib;
2093
	rm -f ./java/target/$(ROCKSDBJNILIB)
2094 2095
	$(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC \
	  -o ./java/target/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) \
A
Andrew Kryczka 已提交
2096
	  $(java_static_all_libobjects) $(COVERAGEFLAGS) \
2097
	  $(JAVA_COMPRESSIONS) $(JAVA_STATIC_LDFLAGS)
2098 2099 2100
	cd java/target;if [ "$(DEBUG_LEVEL)" == "0" ]; then \
		strip $(STRIPFLAGS) $(ROCKSDBJNILIB); \
	fi
2101 2102 2103 2104 2105
	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 已提交
2106

2107
rocksdbjavastaticrelease: rocksdbjavastatic
2108
	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
2109
	cd java;jar -cf target/$(ROCKSDB_JAR_ALL) HISTORY*.md
2110
	cd java/target;jar -uf $(ROCKSDB_JAR_ALL) librocksdbjni-*.so librocksdbjni-*.jnilib
2111
	cd java/target/classes;jar -uf ../$(ROCKSDB_JAR_ALL) org/rocksdb/*.class org/rocksdb/util/*.class
2112

2113
rocksdbjavastaticreleasedocker: rocksdbjavastatic rocksdbjavastaticdockerx86 rocksdbjavastaticdockerx86_64 rocksdbjavastaticdockerx86musl rocksdbjavastaticdockerx86_64musl
2114 2115 2116 2117 2118 2119
	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
2120
	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
2121 2122 2123

rocksdbjavastaticdockerx86_64:
	mkdir -p java/target
2124
	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
2125

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

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

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

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

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

rocksdbjavastaticdockerarm64v8musl:
	mkdir -p java/target
2148
	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
2149

2150 2151
rocksdbjavastaticpublish: rocksdbjavastaticrelease rocksdbjavastaticpublishcentral

2152 2153
rocksdbjavastaticpublishdocker: rocksdbjavastaticreleasedocker rocksdbjavastaticpublishcentral

2154
rocksdbjavastaticpublishcentral:
2155 2156 2157 2158
	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
2159 2160
	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
2161
	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
2162
	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
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).jar
2164

2165
# A version of each $(LIBOBJECTS) compiled with -fPIC
2166 2167 2168 2169 2170 2171 2172 2173 2174
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 已提交
2175
java_libobjects = $(patsubst %,jl/%,$(LIB_CC_OBJECTS))
2176
CLEAN_FILES += jl
2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188
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
2189

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

2193 2194 2195


rocksdbjava: $(java_all_libobjects)
2196 2197
	$(AM_V_GEN)cd java;$(MAKE) javalib;
	$(AM_V_at)rm -f ./java/target/$(ROCKSDBJNILIB)
2198
	$(AM_V_at)$(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC -o ./java/target/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) $(java_all_libobjects) $(JAVA_LDFLAGS) $(COVERAGEFLAGS)
2199 2200 2201
	$(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
2202 2203 2204 2205

jclean:
	cd java;$(MAKE) clean;

2206 2207 2208 2209 2210 2211
jtest_compile: rocksdbjava
	cd java;$(MAKE) java_test

jtest_run:
	cd java;$(MAKE) run_test

2212
jtest: rocksdbjava
2213
	cd java;$(MAKE) sample;$(MAKE) test;
2214
	$(PYTHON) tools/check_all_python.py # TODO peterd: find a better place for this check in CI targets
2215

2216 2217 2218
jdb_bench:
	cd java;$(MAKE) db_bench;

2219 2220
commit_prereq: build_tools/rocksdb-lego-determinator \
               build_tools/precommit_checker.py
2221
	J=$(J) build_tools/precommit_checker.py unit unit_481 clang_unit release release_481 clang_release tsan asan ubsan lite unit_non_shm
2222
	$(MAKE) clean && $(MAKE) jclean && $(MAKE) rocksdbjava;
2223

2224 2225 2226
# ---------------------------------------------------------------------------
#  	Platform-specific compilation
# ---------------------------------------------------------------------------
J
Jim Paton 已提交
2227

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

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

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

2251
else
2252 2253 2254 2255 2256 2257 2258
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
2259
.cc.o:
2260
	$(AM_V_CC)$(CXX) $(CXXFLAGS) -c $< -o $@ $(COVERAGEFLAGS)
2261

2262 2263 2264
.cpp.o:
	$(AM_V_CC)$(CXX) $(CXXFLAGS) -c $< -o $@ $(COVERAGEFLAGS)

2265
.c.o:
2266
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
2267
endif
2268 2269 2270 2271
# ---------------------------------------------------------------------------
#  	Source files dependencies detection
# ---------------------------------------------------------------------------

2272
# FIXME: nothing checks that entries in MAIN_SOURCES actually exist
2273
all_sources = $(LIB_SOURCES) $(MAIN_SOURCES) $(MOCK_LIB_SOURCES) $(TOOL_LIB_SOURCES) $(BENCH_LIB_SOURCES) $(TEST_LIB_SOURCES) $(ANALYZER_LIB_SOURCES) $(STRESS_LIB_SOURCES)
2274 2275 2276 2277 2278
DEPFILES = $(all_sources:.cc=.cc.d)

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

2280 2281 2282 2283 2284
# 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.
2285
%.cc.d: %.cc
2286
	@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
2287
	  -MM -MT'$@' -MT'$(<:.cc=.o)' "$<" -o '$@'
2288

2289 2290 2291 2292
%.cpp.d: %.cpp
	@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
	  -MM -MT'$@' -MT'$(<:.cpp=.o)' "$<" -o '$@'

2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309
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
2310
depend: $(DEPFILES)
2311
endif
2312

2313 2314 2315 2316
# 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.
2317
ifneq ($(MAKECMDGOALS),clean)
2318
ifneq ($(MAKECMDGOALS),format)
2319 2320
ifneq ($(MAKECMDGOALS),jclean)
ifneq ($(MAKECMDGOALS),jtest)
2321
ifneq ($(MAKECMDGOALS),package)
2322
ifneq ($(MAKECMDGOALS),analyze)
2323 2324
-include $(DEPFILES)
endif
2325
endif
2326 2327
endif
endif
2328
endif
2329
endif