Makefile 64.9 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 11
BASH_EXISTS := $(shell which bash)
SHELL := $(shell which bash)

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

20 21
# Transform parallel LOG output into something more readable.
perl_command = perl -n \
22 23 24
  -e '@a=split("\t",$$_,-1); $$t=$$a[8];'				\
  -e '$$t =~ /.*if\s\[\[\s"(.*?\.[\w\/]+)/ and $$t=$$1;'		\
  -e '$$t =~ s,^\./,,;'							\
Y
Yueh-Hsuan Chiang 已提交
25 26 27
  -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'
28 29
quoted_perl_command = $(subst ','\'',$(perl_command))

30 31 32 33 34 35 36 37 38
# 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 已提交
39
# with debug level 0. To compile with level 0, run `make shared_lib`,
40 41
# `make install-shared`, `make static_lib`, `make install-static` or
# `make install`
42 43 44

# Set the default DEBUG_LEVEL to 1
DEBUG_LEVEL?=1
45 46

ifeq ($(MAKECMDGOALS),dbg)
Y
Yueh-Hsuan Chiang 已提交
47
	DEBUG_LEVEL=2
48
endif
49

50 51 52 53 54 55 56 57
ifeq ($(MAKECMDGOALS),clean)
	DEBUG_LEVEL=0
endif

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

58
ifeq ($(MAKECMDGOALS),shared_lib)
Y
Yueh-Hsuan Chiang 已提交
59
	DEBUG_LEVEL=0
I
Igor Canadi 已提交
60
endif
I
Igor Canadi 已提交
61

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

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

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

ifeq ($(MAKECMDGOALS),install)
Y
Yueh-Hsuan Chiang 已提交
75
	DEBUG_LEVEL=0
76 77
endif

78
ifeq ($(MAKECMDGOALS),rocksdbjavastatic)
79 80 81
	ifneq ($(DEBUG_LEVEL),2)
		DEBUG_LEVEL=0
	endif
82 83
endif

Y
Yueh-Hsuan Chiang 已提交
84 85 86 87
ifeq ($(MAKECMDGOALS),rocksdbjavastaticrelease)
	DEBUG_LEVEL=0
endif

88 89 90 91
ifeq ($(MAKECMDGOALS),rocksdbjavastaticreleasedocker)
        DEBUG_LEVEL=0
endif

Y
Yueh-Hsuan Chiang 已提交
92 93 94 95
ifeq ($(MAKECMDGOALS),rocksdbjavastaticpublish)
	DEBUG_LEVEL=0
endif

96 97 98
# compile with -O2 if debug level is not 2
ifneq ($(DEBUG_LEVEL), 2)
OPT += -O2 -fno-omit-frame-pointer
99 100
# 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))
101 102 103 104
OPT += -momit-leaf-frame-pointer
endif
endif

105 106 107 108
ifeq (,$(shell $(CXX) -fsyntax-only -faligned-new -xc++ /dev/null 2>&1))
CXXFLAGS += -faligned-new -DHAVE_ALIGNED_NEW
endif

109 110 111 112 113 114 115 116 117 118 119 120
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

121
# if we're compiling for release, compile without debug code (-DNDEBUG)
122
ifeq ($(DEBUG_LEVEL),0)
I
Igor Canadi 已提交
123
OPT += -DNDEBUG
S
Siying Dong 已提交
124 125 126 127 128 129

ifneq ($(USE_RTTI), 1)
	CXXFLAGS += -fno-rtti
else
	CXXFLAGS += -DROCKSDB_USE_RTTI
endif
130
else
S
Siying Dong 已提交
131 132 133 134 135 136
ifneq ($(USE_RTTI), 0)
	CXXFLAGS += -DROCKSDB_USE_RTTI
else
	CXXFLAGS += -fno-rtti
endif

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

140
#-----------------------------------------------
141
include src.mk
142

143 144 145 146 147 148
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 已提交
149 150 151 152
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
am__v_at_0 = @
am__v_at_1 =
153 154 155 156 157 158 159 160 161 162 163

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 已提交
164 165 166 167
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 =
168

169 170 171 172
ifdef ROCKSDB_USE_LIBRADOS
LIB_SOURCES += utilities/env_librados.cc
LDFLAGS += -lrados
endif
173

174
AM_LINK = $(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(COVERAGEFLAGS)
175
# detect what platform we're building on
176
dummy := $(shell (export ROCKSDB_ROOT="$(CURDIR)"; export PORTABLE="$(PORTABLE)"; "$(CURDIR)/build_tools/build_detect_platform" "$(CURDIR)/make_config.mk"))
S
Sanjay Ghemawat 已提交
177
# this file is generated by the previous line to set build flags and sources
I
Igor Canadi 已提交
178
include make_config.mk
179
CLEAN_FILES += make_config.mk
J
jorlow@chromium.org 已提交
180

181 182 183 184 185 186 187 188 189
missing_make_config_paths := $(shell				\
	grep "\/\S*" -o $(CURDIR)/make_config.mk | 		\
	while read path;					\
		do [ -e $$path ] || echo $$path; 		\
	done | sort | uniq)

$(foreach path, $(missing_make_config_paths), \
	$(warning Warning: $(path) dont exist))

T
Tomas Kolda 已提交
190 191 192
ifeq ($(PLATFORM), OS_AIX)
# no debug info
else ifneq ($(PLATFORM), IOS)
I
Igor Canadi 已提交
193 194 195 196 197 198 199
CFLAGS += -g
CXXFLAGS += -g
else
# no debug info for IOS, that will make our library big
OPT += -DNDEBUG
endif

T
Tomas Kolda 已提交
200 201 202 203 204
ifeq ($(PLATFORM), OS_AIX)
ARFLAGS = -X64 rs
STRIPFLAGS = -X64 -x
endif

D
David Bernard 已提交
205 206 207
ifeq ($(PLATFORM), OS_SOLARIS)
	PLATFORM_CXXFLAGS += -D _GLIBCXX_USE_C99
endif
208
ifneq ($(filter -DROCKSDB_LITE,$(OPT)),)
Y
Yueh-Hsuan Chiang 已提交
209 210 211
	# found
	CFLAGS += -fno-exceptions
	CXXFLAGS += -fno-exceptions
212 213
	# LUA is not supported under ROCKSDB_LITE
	LUA_PATH =
214 215
endif

I
Igor Canadi 已提交
216 217
# 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 已提交
218 219 220 221
	DISABLE_JEMALLOC=1
	EXEC_LDFLAGS += -fsanitize=address
	PLATFORM_CCFLAGS += -fsanitize=address
	PLATFORM_CXXFLAGS += -fsanitize=address
I
Igor Canadi 已提交
222 223 224 225
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 已提交
226
	DISABLE_JEMALLOC=1
S
Siying Dong 已提交
227
	EXEC_LDFLAGS += -fsanitize=thread
228 229
	PLATFORM_CCFLAGS += -fsanitize=thread -fPIC
	PLATFORM_CXXFLAGS += -fsanitize=thread -fPIC
230 231
        # Turn off -pg when enabling TSAN testing, because that induces
        # a link failure.  TODO: find the root cause
D
dx9 已提交
232
	PROFILING_FLAGS =
233 234
	# LUA is not supported under TSAN
	LUA_PATH =
235 236 237
	# Limit keys for crash test under TSAN to avoid error:
	# "ThreadSanitizer: DenseSlabAllocator overflow. Dying."
	CRASH_TEST_EXT_ARGS += --max_key=1000000
I
Igor Canadi 已提交
238 239
endif

T
Tomas Kolda 已提交
240 241 242 243 244
# AIX doesn't work with -pg
ifeq ($(PLATFORM), OS_AIX)
	PROFILING_FLAGS =
endif

245 246 247
# 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 已提交
248 249 250 251
	# 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.
252 253 254
	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
255 256
endif

257 258 259 260 261
ifdef ROCKSDB_VALGRIND_RUN
	PLATFORM_CCFLAGS += -DROCKSDB_VALGRIND_RUN
	PLATFORM_CXXFLAGS += -DROCKSDB_VALGRIND_RUN
endif

I
Igor Canadi 已提交
262
ifndef DISABLE_JEMALLOC
263
	ifdef JEMALLOC
T
Tamir Duberstein 已提交
264 265
		PLATFORM_CXXFLAGS += -DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE
		PLATFORM_CCFLAGS  += -DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE
266
	endif
267 268 269 270
	ifdef WITH_JEMALLOC_FLAG
		PLATFORM_LDFLAGS += -ljemalloc
		JAVA_LDFLAGS += -ljemalloc
	endif
Y
Yueh-Hsuan Chiang 已提交
271 272 273
	EXEC_LDFLAGS := $(JEMALLOC_LIB) $(EXEC_LDFLAGS)
	PLATFORM_CXXFLAGS += $(JEMALLOC_INCLUDE)
	PLATFORM_CCFLAGS += $(JEMALLOC_INCLUDE)
I
Igor Canadi 已提交
274 275
endif

T
Tamir Duberstein 已提交
276 277
export GTEST_THROW_ON_FAILURE=1
export GTEST_HAS_EXCEPTIONS=1
I
Igor Sugak 已提交
278
GTEST_DIR = ./third-party/gtest-1.7.0/fused-src
T
Tomas Kolda 已提交
279 280 281 282 283 284 285 286
# 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 已提交
287

288 289 290
# This (the first rule) must depend on "all".
default: all

291
WARNING_FLAGS = -W -Wextra -Wall -Wsign-compare -Wshadow \
292
  -Wunused-parameter
293

294 295 296 297
ifeq ($(PLATFORM), OS_OPENBSD)
	WARNING_FLAGS += -Wno-unused-lambda-capture
endif

298
ifndef DISABLE_WARNING_AS_ERROR
Y
Yueh-Hsuan Chiang 已提交
299
	WARNING_FLAGS += -Werror
300 301
endif

302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328

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
LDFLAGS += $(LUA_LIB)

endif

329 330 331
ifeq ($(NO_THREEWAY_CRC32C), 1)
	CXXFLAGS += -DNO_THREEWAY_CRC32C
endif
332

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

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

338 339 340
# 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
341
date := $(shell date +%F)
I
Igor Canadi 已提交
342
ifdef FORCE_GIT_SHA
Y
Yueh-Hsuan Chiang 已提交
343
	git_sha := $(FORCE_GIT_SHA)
I
Igor Canadi 已提交
344
else
Y
Yueh-Hsuan Chiang 已提交
345
	git_sha := $(shell git rev-parse HEAD 2>/dev/null)
I
Igor Canadi 已提交
346
endif
347
gen_build_version = sed -e s/@@GIT_SHA@@/$(git_sha)/ -e s/@@GIT_DATE_TIME@@/$(date)/ util/build_version.cc.in
348 349 350 351 352 353

# 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.
354 355
FORCE:
util/build_version.cc: FORCE
Y
Yueh-Hsuan Chiang 已提交
356 357 358 359 360
	$(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
361
endif
362

363
LIBOBJECTS = $(LIB_SOURCES:.cc=.o)
364 365 366 367
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 已提交
368 369
else
LIB_CC_OBJECTS = $(LIB_SOURCES:.cc=.o)
370 371
endif

372 373
LIBOBJECTS += $(TOOL_LIB_SOURCES:.cc=.o)
MOCKOBJECTS = $(MOCK_LIB_SOURCES:.cc=.o)
J
jorlow@chromium.org 已提交
374

I
Igor Sugak 已提交
375
GTEST = $(GTEST_DIR)/gtest/gtest-all.o
J
jorlow@chromium.org 已提交
376
TESTUTIL = ./util/testutil.o
I
Igor Sugak 已提交
377
TESTHARNESS = ./util/testharness.o $(TESTUTIL) $(MOCKOBJECTS) $(GTEST)
378
VALGRIND_ERROR = 2
379
VALGRIND_VER := $(join $(VALGRIND_VER),valgrind)
380

381
VALGRIND_OPTS = --error-exitcode=$(VALGRIND_ERROR) --leak-check=full
382

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

O
omegaga 已提交
385 386
EXPOBJECTS = $(EXP_LIB_SOURCES:.cc=.o) $(LIBOBJECTS) $(TESTUTIL)

J
jorlow@chromium.org 已提交
387
TESTS = \
388
	db_basic_test \
E
Ewout Prangsma 已提交
389
	db_encryption_test \
390
	db_test2 \
S
Siying Dong 已提交
391
	external_sst_file_basic_test \
S
Siying Dong 已提交
392 393 394 395 396 397 398 399 400 401
	auto_roll_logger_test \
	bloom_test \
	dynamic_bloom_test \
	c_test \
	checkpoint_test \
	crc32c_test \
	coding_test \
	inlineskiplist_test \
	env_basic_test \
	env_test \
402
	hash_test \
S
Siying Dong 已提交
403 404 405 406 407
	thread_local_test \
	rate_limiter_test \
	perf_context_test \
	iostats_context_test \
	db_wal_test \
408
	db_block_cache_test \
409
	db_test \
Y
Yi Wu 已提交
410
	db_blob_index_test \
Y
Yi Wu 已提交
411
	db_bloom_filter_test \
412
	db_iter_test \
413
	db_iter_stress_test \
414 415
	db_log_iter_test \
	db_compaction_filter_test \
416
	db_compaction_test \
417
	db_dynamic_level_test \
418
	db_flush_test \
419
	db_inplace_update_test \
Y
Yi Wu 已提交
420
	db_iterator_test \
421
	db_memtable_test \
422
	db_merge_operator_test \
423
	db_options_test \
424
	db_range_del_test \
Y
Yi Wu 已提交
425
	db_sst_test \
426
	db_tailing_iter_test \
O
omegaga 已提交
427
	db_io_failure_test \
428
	db_properties_test \
429
	db_table_properties_test \
430
	db_statistics_test \
Y
Yi Wu 已提交
431
	db_write_test \
432
	error_handler_test \
433
	autovector_test \
Y
Yi Wu 已提交
434
	blob_db_test \
M
Maysam Yabandeh 已提交
435
	cleanable_test \
436 437 438 439 440 441 442 443 444 445 446
	column_family_test \
	table_properties_collector_test \
	arena_test \
	block_test \
	cache_test \
	corruption_test \
	slice_transform_test \
	dbformat_test \
	fault_injection_test \
	filelock_test \
	filename_test \
447
	file_reader_writer_test \
448 449
	block_based_filter_block_test \
	full_filter_block_test \
M
Maysam Yabandeh 已提交
450
	partitioned_filter_block_test \
451
	hash_table_test \
452 453 454 455 456 457
	histogram_test \
	log_test \
	manual_compaction_test \
	mock_env_test \
	memtable_list_test \
	merge_helper_test \
458
	memory_test \
459 460
	merge_test \
	merger_test \
461
	util_merge_operators_test \
462
	options_file_test \
463 464 465 466
	redis_test \
	reduce_levels_test \
	plain_table_db_test \
	comparator_db_test \
467
	external_sst_file_test \
468 469
	prefix_test \
	skiplist_test \
470
	write_buffer_manager_test \
471
	stringappend_test \
472
	cassandra_format_test \
473
	cassandra_functional_test \
474 475
	cassandra_row_merge_test \
	cassandra_serialize_test \
476
	ttl_test \
O
omegaga 已提交
477
	date_tiered_test \
478 479 480
	backupable_db_test \
	document_db_test \
	json_document_test \
481
	sim_cache_test \
482 483 484 485 486 487 488 489 490 491
	spatial_db_test \
	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 \
492
	obsolete_files_test \
493 494
	table_test \
	geodb_test \
I
Islam AbdelRahman 已提交
495
	delete_scheduler_test \
496
	options_test \
497
	options_settable_test \
498
	options_util_test \
499
	event_logger_test \
A
Anirban Rahut 已提交
500
	timer_queue_test \
501 502 503 504 505 506
	cuckoo_table_builder_test \
	cuckoo_table_reader_test \
	cuckoo_table_db_test \
	flush_job_test \
	wal_manager_test \
	listener_test \
A
Andres Noetzli 已提交
507
	compaction_iterator_test \
508 509 510
	compaction_job_test \
	thread_list_test \
	sst_dump_test \
O
omegaga 已提交
511
	column_aware_encoding_test \
512 513 514
	compact_files_test \
	optimistic_transaction_test \
	write_callback_test \
515 516
	heap_test \
	compact_on_deletion_collector_test \
A
agiardullo 已提交
517
	compaction_job_stats_test \
518
	option_change_migration_test \
519
	transaction_test \
520
	ldb_cmd_test \
521
	persistent_cache_test \
522
	statistics_test \
523
	lua_test \
A
Andrew Kryczka 已提交
524
	range_del_aggregator_test \
Y
Yi Wu 已提交
525
	lru_cache_test \
526
	object_registry_test \
A
Andrew Kryczka 已提交
527
	repair_test \
A
Andrew Kryczka 已提交
528
	env_timed_test \
529
	write_prepared_transaction_test \
530
	write_unprepared_transaction_test \
Z
Zhongyi Xie 已提交
531
	db_universal_compaction_test \
532

Y
Yi Wu 已提交
533 534 535 536
PARALLEL_TEST = \
	backupable_db_test \
	db_compaction_filter_test \
	db_compaction_test \
537
	db_merge_operator_test \
538
	db_sst_test \
Y
Yi Wu 已提交
539 540
	db_test \
	db_universal_compaction_test \
541 542
	db_wal_test \
	external_sst_file_test \
Y
Yi Wu 已提交
543 544 545
	fault_injection_test \
	inlineskiplist_test \
	manual_compaction_test \
546 547
	persistent_cache_test \
	table_test \
548
	transaction_test \
549
	write_prepared_transaction_test \
550
	write_unprepared_transaction_test \
Y
Yi Wu 已提交
551

552 553 554 555
# 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
I
Islam AbdelRahman 已提交
556 557 558 559 560 561 562 563
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
564

565
TOOLS = \
Y
Yueh-Hsuan Chiang 已提交
566 567 568
	sst_dump \
	db_sanity_test \
	db_stress \
I
Igor Canadi 已提交
569
	write_stress \
Y
Yueh-Hsuan Chiang 已提交
570 571 572
	ldb \
	db_repl_stress \
	rocksdb_dump \
Y
Yi Wu 已提交
573 574
	rocksdb_undump \
	blob_dump \
J
jorlow@chromium.org 已提交
575

576 577 578
TEST_LIBS = \
	librocksdb_env_basic_test.a

S
sdong 已提交
579
# TODO: add back forward_iterator_bench, after making it build in all environemnts.
580
BENCHMARKS = db_bench table_reader_bench cache_bench memtablerep_bench column_aware_encoding_exp persistent_cache_bench
J
jorlow@chromium.org 已提交
581

582
# if user didn't config LIBNAME, set the default
583
ifeq ($(LIBNAME),)
584 585
# we should only run rocksdb in production with DEBUG_LEVEL 0
ifeq ($(DEBUG_LEVEL),0)
Y
Yueh-Hsuan Chiang 已提交
586
        LIBNAME=librocksdb
587 588 589
else
        LIBNAME=librocksdb_debug
endif
590
endif
591
LIBRARY = ${LIBNAME}.a
592
TOOLS_LIBRARY = ${LIBNAME}_tools.a
593

594 595 596
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)
597

598 599
default: all

600 601 602
#-----------------------------------------------
# Create platform independent shared libraries.
#-----------------------------------------------
603
ifneq ($(PLATFORM_SHARED_EXT),)
H
heyongqiang 已提交
604 605

ifneq ($(PLATFORM_SHARED_VERSIONED),true)
606
SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
H
heyongqiang 已提交
607 608
SHARED2 = $(SHARED1)
SHARED3 = $(SHARED1)
609
SHARED4 = $(SHARED1)
H
heyongqiang 已提交
610 611
SHARED = $(SHARED1)
else
612 613
SHARED_MAJOR = $(ROCKSDB_MAJOR)
SHARED_MINOR = $(ROCKSDB_MINOR)
614
SHARED_PATCH = $(ROCKSDB_PATCH)
615
SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
616 617 618 619 620 621
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
622 623
SHARED2 = $(SHARED1).$(SHARED_MAJOR)
SHARED3 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR)
624
SHARED4 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR).$(SHARED_PATCH)
625
endif
626 627
SHARED = $(SHARED1) $(SHARED2) $(SHARED3) $(SHARED4)
$(SHARED1): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
628
	ln -fs $(SHARED4) $(SHARED1)
629
$(SHARED2): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
630
	ln -fs $(SHARED4) $(SHARED2)
631
$(SHARED3): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
632
	ln -fs $(SHARED4) $(SHARED3)
633
endif
634 635 636 637 638 639 640
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
641
shared_libobjects = $(patsubst %,shared-objects/%,$(LIBOBJECTS))
642 643
endif

644
CLEAN_FILES += shared-objects
645
shared_all_libobjects = $(shared_libobjects)
646

647 648 649 650 651 652 653 654 655
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
656
$(shared_libobjects): shared-objects/%.o: %.cc
657 658
	$(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) -c $< -o $@

659 660 661 662
ifeq ($(HAVE_POWER8),1)
shared_all_libobjects = $(shared_libobjects) $(shared-ppc-objects)
endif
$(SHARED4): $(shared_all_libobjects)
Z
zhsj 已提交
663
	$(CXX) $(PLATFORM_SHARED_LDFLAGS)$(SHARED3) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) $(shared_all_libobjects) $(LDFLAGS) -o $@
H
heyongqiang 已提交
664 665 666

endif  # PLATFORM_SHARED_EXT

667
.PHONY: blackbox_crash_test check clean coverage crash_test ldb_tests package \
Y
Yueh-Hsuan Chiang 已提交
668 669
	release tags valgrind_check whitebox_crash_test format static_lib shared_lib all \
	dbg rocksdbjavastatic rocksdbjava install install-static install-shared uninstall \
670
	analyze tools tools_lib
671

M
maurice barnum 已提交
672

673
all: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(TESTS)
674

675 676
all_but_some_tests: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(SUBSET)

I
Igor Canadi 已提交
677 678 679 680
static_lib: $(LIBRARY)

shared_lib: $(SHARED)

M
maurice barnum 已提交
681 682
tools: $(TOOLS)

683 684
tools_lib: $(TOOLS_LIBRARY)

685 686
test_libs: $(TEST_LIBS)

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

689
# creates static library and programs
690
release:
Y
Yueh-Hsuan Chiang 已提交
691
	$(MAKE) clean
692
	DEBUG_LEVEL=0 $(MAKE) static_lib tools db_bench
K
Kai Liu 已提交
693 694

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

Y
Yi Wu 已提交
701 702 703 704 705
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 已提交
706 707
TMPDIR := $(shell echo $${TMPDIR:-/tmp})
TMPD := $(shell f=/dev/shm; test -k $$f || f=$(TMPDIR);     \
Y
Yi Wu 已提交
708 709 710 711 712 713 714 715 716 717 718 719 720 721
  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.
722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739
# 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 已提交
740 741 742 743 744 745 746 747 748 749 750
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 \
751
		TEST_SCRIPT=t/run-$$TEST_BINARY-$${TEST_NAME//\//-}; \
Y
Yi Wu 已提交
752 753 754 755 756
		echo "  GEN     " $$TEST_SCRIPT; \
    printf '%s\n' \
      '#!/bin/sh' \
      "d=\$(TMPD)$$TEST_SCRIPT" \
      'mkdir -p $$d' \
757
      "TEST_TMPDIR=\$$d $(DRIVER) ./$$TEST_BINARY --gtest_filter=$$TEST_NAME" \
Y
Yi Wu 已提交
758 759 760 761 762 763 764 765
		> $$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)
766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783

# 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 已提交
784
	^.*SnapshotConcurrentAccessTest.*$$|^t/run-table_test-HarnessTest.Randomized$$|^t/run-db_test-.*(?:FileCreationRandomFailure|EncodeDecompressedBlockSizeTest)$$|^.*RecoverFromCorruptedWALWithoutFlush$$
785
prioritize_long_running_tests =						\
Y
Yueh-Hsuan Chiang 已提交
786 787 788
  perl -pe 's,($(slow_test_regexp)),100 $$1,'				\
    | sort -k1,1gr							\
    | sed 's/^[.0-9]* //'
789 790 791 792 793 794

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

V
Venkatesh Radhakrishnan 已提交
797 798 799
# Use this regexp to select the subset of tests whose names match.
tests-regexp = .

Y
Yi Wu 已提交
800
t_run = $(wildcard t/run-*)
801
.PHONY: check_0
Y
Yi Wu 已提交
802 803
check_0:
	$(AM_V_GEN)export TEST_TMPDIR=$(TMPD); \
Y
Yueh-Hsuan Chiang 已提交
804 805 806
	printf '%s\n' ''						\
	  'To monitor subtest <duration,pass/fail,name>,'		\
	  '  run "make watch-log" in a separate window' '';		\
Y
Yi Wu 已提交
807 808 809 810 811
	test -t 1 && eta=--eta || eta=; \
	{ \
		printf './%s\n' $(filter-out $(PARALLEL_TEST),$(TESTS)); \
		printf '%s\n' $(t_run); \
	} \
Y
Yueh-Hsuan Chiang 已提交
812 813
	  | $(prioritize_long_running_tests)				\
	  | grep -E '$(tests-regexp)'					\
814
	  | build_tools/gnu_parallel -j$(J) --plain --joblog=LOG $$eta --gnu '{} >& t/log-{/}'
S
sdong 已提交
815

816
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
817

S
sdong 已提交
818
.PHONY: valgrind_check_0
Y
Yi Wu 已提交
819
valgrind_check_0:
S
sdong 已提交
820 821 822 823 824 825
	$(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 已提交
826
	  printf './%s\n' $(filter-out $(PARALLEL_TEST) %skiplist_test options_settable_test, $(TESTS));		\
S
sdong 已提交
827 828 829 830
	  printf '%s\n' $(t_run);					\
	}								\
	  | $(prioritize_long_running_tests)				\
	  | grep -E '$(tests-regexp)'					\
831
	  | grep -E -v '$(valgrind-blacklist-regexp)'					\
832
	  | build_tools/gnu_parallel -j$(J) --plain --joblog=LOG $$eta --gnu \
833 834
	  '(if [[ "{}" == "./"* ]] ; then $(DRIVER) {}; else {}; fi) ' \
	  '>& t/valgrind_log-{/}'
835 836

CLEAN_FILES += t LOG $(TMPD)
837

838 839 840 841 842 843 844 845
# 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:
846
	$(WATCH) --interval=0 'sort -k7,7nr -k4,4gr LOG|$(quoted_perl_command)'
847

I
Igor Canadi 已提交
848
# If J != 1 and GNU parallel is installed, run the tests in parallel,
849 850
# via the check_0 rule above.  Otherwise, run them sequentially.
check: all
Y
Yi Wu 已提交
851
	$(MAKE) gen_parallel_tests
Y
Yueh-Hsuan Chiang 已提交
852
	$(AM_V_GEN)if test "$(J)" != 1                                  \
853
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |                    \
Y
Yueh-Hsuan Chiang 已提交
854 855 856 857 858 859 860 861
	        grep -q 'GNU Parallel';                                 \
	then                                                            \
	    $(MAKE) T="$$t" TMPD=$(TMPD) check_0;                       \
	else                                                            \
	    for t in $(TESTS); do                                       \
	      echo "===== Running $$t"; ./$$t || exit 1; done;          \
	fi
	rm -rf $(TMPD)
T
Tomas Kolda 已提交
862
ifneq ($(PLATFORM), OS_AIX)
I
Islam AbdelRahman 已提交
863
ifeq ($(filter -DROCKSDB_LITE,$(OPT)),)
Y
Yueh-Hsuan Chiang 已提交
864 865
	python tools/ldb_test.py
	sh tools/rocksdb_dump_test.sh
I
Islam AbdelRahman 已提交
866
endif
T
Tomas Kolda 已提交
867
endif
868

S
Siying Dong 已提交
869 870
# TODO add ldb_tests
check_some: $(SUBSET)
Y
Yueh-Hsuan Chiang 已提交
871
	for t in $(SUBSET); do echo "===== Running $$t"; ./$$t || exit 1; done
872 873

.PHONY: ldb_tests
874
ldb_tests: ldb
Y
Yueh-Hsuan Chiang 已提交
875
	python tools/ldb_test.py
876

I
Igor Canadi 已提交
877
crash_test: whitebox_crash_test blackbox_crash_test
878 879

blackbox_crash_test: db_stress
880 881
	python -u tools/db_crashtest.py --simple blackbox $(CRASH_TEST_EXT_ARGS)
	python -u tools/db_crashtest.py blackbox $(CRASH_TEST_EXT_ARGS)
882

883 884 885 886
ifeq ($(CRASH_TEST_KILL_ODD),)
  CRASH_TEST_KILL_ODD=888887
endif

887
whitebox_crash_test: db_stress
888
	python -u tools/db_crashtest.py --simple whitebox --random_kill_odd \
889
      $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
890
	python -u tools/db_crashtest.py whitebox  --random_kill_odd \
891
      $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
892

I
Igor Canadi 已提交
893
asan_check:
Y
Yueh-Hsuan Chiang 已提交
894 895 896
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) check -j32
	$(MAKE) clean
897 898

asan_crash_test:
Y
Yueh-Hsuan Chiang 已提交
899 900 901
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) crash_test
	$(MAKE) clean
I
Igor Canadi 已提交
902

903 904 905 906 907 908 909 910 911 912
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

913
valgrind_test:
914
	ROCKSDB_VALGRIND_RUN=1 DISABLE_JEMALLOC=1 $(MAKE) valgrind_check
915

I
Igor Canadi 已提交
916
valgrind_check: $(TESTS)
917
	$(MAKE) DRIVER="$(VALGRIND_VER) $(VALGRIND_OPTS)" gen_parallel_tests
S
sdong 已提交
918
	$(AM_V_GEN)if test "$(J)" != 1                                  \
919
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |                    \
S
sdong 已提交
920 921
	        grep -q 'GNU Parallel';                                 \
	then                                                            \
Y
Yi Wu 已提交
922
      $(MAKE) TMPD=$(TMPD)                                        \
S
sdong 已提交
923 924 925 926 927 928 929 930 931 932
      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
933

934 935 936 937 938 939 940

ifneq ($(PAR_TEST),)
parloop:
	ret_bad=0;							\
	for t in $(PAR_TEST); do		\
		echo "===== Running $$t in parallel $(NUM_PAR)";\
		if [ $(db_test) -eq 1 ]; then \
941
			seq $(J) | v="$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{};  export TEST_TMPDIR=$$s;' \
942 943
				'timeout 2m ./db_test --gtest_filter=$$v >> $$s/log-{} 2>1'; \
		else\
944
			seq $(J) | v="./$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{};' \
945 946 947 948 949 950 951 952 953 954 955
			     '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 已提交
956 957 958 959 960 961 962
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!'

963 964
parallel_check: $(TESTS)
	$(AM_V_GEN)if test "$(J)" > 1                                  \
965
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |                    \
966 967 968 969 970 971 972 973 974
	        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); \
975
        seq $(J) | build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{}; rm -rf $$s; mkdir $$s'; \
976
	$(MAKE)  PAR_TEST="$(shell $(test_names))" TMPD=$(TMPD) \
977 978 979 980
		J=$(J) db_test=1 parloop; \
	$(MAKE) PAR_TEST="$(filter-out db_test, $(TESTS))" \
		TMPD=$(TMPD) J=$(J) db_test=0 parloop;

981
analyze: clean
Y
Yueh-Hsuan Chiang 已提交
982 983 984 985
	$(CLANG_SCAN_BUILD) --use-analyzer=$(CLANG_ANALYZER) \
		--use-c++=$(CXX) --use-cc=$(CC) --status-bugs \
		-o $(CURDIR)/scan_build_report \
		$(MAKE) dbg
986

987 988
CLEAN_FILES += unity.cc
unity.cc: Makefile
Y
Yueh-Hsuan Chiang 已提交
989 990
	rm -f $@ $@-t
	for source_file in $(LIB_SOURCES); do \
E
Evan Shaw 已提交
991
		echo "#include \"$$source_file\"" >> $@-t; \
Y
Yueh-Hsuan Chiang 已提交
992 993 994
	done
	chmod a=r $@-t
	mv $@-t $@
M
miguelportilla 已提交
995

E
Evan Shaw 已提交
996 997 998 999
unity.a: unity.o
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ unity.o

I
Igor Canadi 已提交
1000
# try compiling db_test with unity
1001
unity_test: db/db_test.o db/db_test_util.o $(TESTHARNESS) unity.a
I
Igor Canadi 已提交
1002 1003 1004
	$(AM_LINK)
	./unity_test

E
Evan Shaw 已提交
1005 1006
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 已提交
1007

J
jorlow@chromium.org 已提交
1008
clean:
Y
Yueh-Hsuan Chiang 已提交
1009 1010
	rm -f $(BENCHMARKS) $(TOOLS) $(TESTS) $(LIBRARY) $(SHARED)
	rm -rf $(CLEAN_FILES) ios-x86 ios-arm scan_build_report
1011 1012
	$(FIND) . -name "*.[oda]" -exec rm -f {} \;
	$(FIND) . -type f -regex ".*\.\(\(gcda\)\|\(gcno\)\)" -exec rm {} \;
S
Sagar Vemuri 已提交
1013
	rm -rf bzip2* snappy* zlib* lz4* zstd*
Y
Yi Wu 已提交
1014
	cd java; $(MAKE) clean
1015

1016
tags:
1017
	ctags -R .
1018
	cscope -b `$(FIND) . -name '*.cc'` `$(FIND) . -name '*.h'` `$(FIND) . -name '*.c'`
L
Leonidas Galanis 已提交
1019
	ctags -e -R -o etags *
1020

1021
format:
Y
Yueh-Hsuan Chiang 已提交
1022
	build_tools/format-diff.sh
1023

1024
package:
Y
Yueh-Hsuan Chiang 已提交
1025
	bash build_tools/make_package.sh $(SHARED_MAJOR).$(SHARED_MINOR)
1026

1027 1028 1029
# ---------------------------------------------------------------------------
# 	Unit tests and tools
# ---------------------------------------------------------------------------
1030
$(LIBRARY): $(LIBOBJECTS)
Y
Yueh-Hsuan Chiang 已提交
1031 1032
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $(LIBOBJECTS)
J
jorlow@chromium.org 已提交
1033

O
omegaga 已提交
1034
$(TOOLS_LIBRARY): $(BENCH_LIB_SOURCES:.cc=.o) $(TOOL_LIB_SOURCES:.cc=.o) $(LIB_SOURCES:.cc=.o) $(TESTUTIL)
1035 1036 1037
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $^

1038
librocksdb_env_basic_test.a: env/env_basic_test.o $(LIBOBJECTS) $(TESTHARNESS)
1039 1040 1041
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $^

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

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

1048 1049 1050
persistent_cache_bench: utilities/persistent_cache/persistent_cache_bench.o $(LIBOBJECTS) $(TESTUTIL)
	$(AM_LINK)

1051
memtablerep_bench: memtable/memtablerep_bench.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
1052
	$(AM_LINK)
A
Ameya Gupte 已提交
1053

1054
db_stress: tools/db_stress.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
1055
	$(AM_LINK)
1056

I
Igor Canadi 已提交
1057 1058 1059
write_stress: tools/write_stress.o $(LIBOBJECTS) $(TESTUTIL)
	$(AM_LINK)

I
Igor Canadi 已提交
1060
db_sanity_test: tools/db_sanity_test.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
1061
	$(AM_LINK)
1062

1063
db_repl_stress: tools/db_repl_stress.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
1064
	$(AM_LINK)
1065

J
jorlow@chromium.org 已提交
1066
arena_test: util/arena_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1067
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1068

K
kailiu 已提交
1069
autovector_test: util/autovector_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1070
	$(AM_LINK)
K
kailiu 已提交
1071

1072
column_family_test: db/column_family_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1073
	$(AM_LINK)
1074

K
kailiu 已提交
1075
table_properties_collector_test: db/table_properties_collector_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1076
	$(AM_LINK)
1077

S
Sanjay Ghemawat 已提交
1078
bloom_test: util/bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1079
	$(AM_LINK)
S
Sanjay Ghemawat 已提交
1080

1081
dynamic_bloom_test: util/dynamic_bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1082
	$(AM_LINK)
1083

1084
c_test: db/c_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1085
	$(AM_LINK)
1086

1087
cache_test: cache/cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1088
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1089 1090

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

1093 1094 1095
hash_test: util/hash_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1096 1097 1098
option_change_migration_test: utilities/option_change_migration/option_change_migration_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1099
stringappend_test: utilities/merge_operators/string_append/stringappend_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1100
	$(AM_LINK)
1101

1102
cassandra_format_test: utilities/cassandra/cassandra_format_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
1103 1104
	$(AM_LINK)

1105
cassandra_functional_test: utilities/cassandra/cassandra_functional_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
1106 1107
	$(AM_LINK)

1108
cassandra_row_merge_test: utilities/cassandra/cassandra_row_merge_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
1109 1110
	$(AM_LINK)

1111
cassandra_serialize_test: utilities/cassandra/cassandra_serialize_test.o $(LIBOBJECTS) $(TESTHARNESS)
1112 1113
	$(AM_LINK)

1114
redis_test: utilities/redis/redis_lists_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1115
	$(AM_LINK)
1116

1117 1118 1119
hash_table_test: utilities/persistent_cache/hash_table_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1120
histogram_test: monitoring/histogram_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1121
	$(AM_LINK)
A
Abhishek Kona 已提交
1122

L
Lei Jin 已提交
1123
thread_local_test: util/thread_local_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1124
	$(AM_LINK)
L
Lei Jin 已提交
1125

J
jorlow@chromium.org 已提交
1126
corruption_test: db/corruption_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1127
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1128 1129

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

1132
slice_transform_test: util/slice_transform_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1133
	$(AM_LINK)
1134

1135
db_basic_test: db/db_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
E
Ewout Prangsma 已提交
1136 1137 1138
	$(AM_LINK)

db_encryption_test: db/db_encryption_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1139 1140
	$(AM_LINK)

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

1144 1145 1146
db_test2: db/db_test2.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
1147 1148 1149
db_blob_index_test: db/db_blob_index_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1150 1151 1152
db_block_cache_test: db/db_block_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
1153 1154 1155
db_bloom_filter_test: db/db_bloom_filter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1156
db_log_iter_test: db/db_log_iter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1157
	$(AM_LINK)
1158

1159
db_compaction_filter_test: db/db_compaction_filter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1160 1161
	$(AM_LINK)

1162
db_compaction_test: db/db_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1163 1164
	$(AM_LINK)

1165
db_dynamic_level_test: db/db_dynamic_level_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1166 1167
	$(AM_LINK)

1168 1169 1170
db_flush_test: db/db_flush_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1171
db_inplace_update_test: db/db_inplace_update_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1172 1173
	$(AM_LINK)

Y
Yi Wu 已提交
1174 1175 1176
db_iterator_test: db/db_iterator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1177 1178 1179
db_memtable_test: db/db_memtable_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1180 1181 1182
db_merge_operator_test: db/db_merge_operator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1183 1184 1185
db_options_test: db/db_options_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1186 1187 1188
db_range_del_test: db/db_range_del_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
1189 1190 1191
db_sst_test: db/db_sst_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1192 1193 1194
db_statistics_test: db/db_statistics_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
1195 1196 1197
db_write_test: db/db_write_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1198 1199 1200
error_handler_test: db/error_handler_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

S
Siying Dong 已提交
1201 1202 1203
external_sst_file_basic_test: db/external_sst_file_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1204 1205 1206
external_sst_file_test: db/external_sst_file_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1207
db_tailing_iter_test: db/db_tailing_iter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1208 1209
	$(AM_LINK)

S
Stanislau Hlebik 已提交
1210
db_iter_test: db/db_iter_test.o $(LIBOBJECTS) $(TESTHARNESS)
1211
	$(AM_LINK)
S
Stanislau Hlebik 已提交
1212

1213 1214 1215
db_iter_stress_test: db/db_iter_stress_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1216
db_universal_compaction_test: db/db_universal_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1217 1218
	$(AM_LINK)

1219
db_wal_test: db/db_wal_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
S
sdong 已提交
1220 1221
	$(AM_LINK)

O
omegaga 已提交
1222 1223 1224
db_io_failure_test: db/db_io_failure_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1225 1226 1227
db_properties_test: db/db_properties_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1228 1229 1230
db_table_properties_test: db/db_table_properties_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1231
log_write_bench: util/log_write_bench.o $(LIBOBJECTS) $(TESTHARNESS)
D
dx9 已提交
1232
	$(AM_LINK) $(PROFILING_FLAGS)
1233

S
Siying Dong 已提交
1234
plain_table_db_test: db/plain_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1235
	$(AM_LINK)
S
Siying Dong 已提交
1236

1237
comparator_db_test: db/comparator_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1238
	$(AM_LINK)
1239

1240
table_reader_bench: table/table_reader_bench.o $(LIBOBJECTS) $(TESTHARNESS)
D
dx9 已提交
1241
	$(AM_LINK) $(PROFILING_FLAGS)
1242

1243
perf_context_test: db/perf_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
1244
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)
1245

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

I
Igor Canadi 已提交
1249
backupable_db_test: utilities/backupable/backupable_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1250
	$(AM_LINK)
I
Igor Canadi 已提交
1251

1252 1253 1254
checkpoint_test: utilities/checkpoint/checkpoint_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1255
document_db_test: utilities/document/document_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1256
	$(AM_LINK)
I
Igor Canadi 已提交
1257

I
Igor Canadi 已提交
1258
json_document_test: utilities/document/json_document_test.o $(LIBOBJECTS) $(TESTHARNESS)
1259
	$(AM_LINK)
I
Igor Canadi 已提交
1260

1261 1262 1263
sim_cache_test: utilities/simulator_cache/sim_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1264
spatial_db_test: utilities/spatialdb/spatial_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1265
	$(AM_LINK)
I
Igor Canadi 已提交
1266

S
Sage Weil 已提交
1267 1268 1269
env_mirror_test: utilities/env_mirror_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
Andrew Kryczka 已提交
1270 1271 1272
env_timed_test: utilities/env_timed_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1273 1274 1275 1276 1277
ifdef ROCKSDB_USE_LIBRADOS
env_librados_test: utilities/env_librados_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(COVERAGEFLAGS)
endif

1278
object_registry_test: utilities/object_registry_test.o $(LIBOBJECTS) $(TESTHARNESS)
1279 1280
	$(AM_LINK)

1281
ttl_test: utilities/ttl/ttl_test.o $(LIBOBJECTS) $(TESTHARNESS)
1282
	$(AM_LINK)
1283

O
omegaga 已提交
1284 1285 1286
date_tiered_test: utilities/date_tiered/date_tiered_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1287
write_batch_with_index_test: utilities/write_batch_with_index/write_batch_with_index_test.o $(LIBOBJECTS) $(TESTHARNESS)
1288
	$(AM_LINK)
1289

I
Igor Canadi 已提交
1290
flush_job_test: db/flush_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
1291
	$(AM_LINK)
A
Andres Noetzli 已提交
1292 1293 1294

compaction_iterator_test: db/compaction_iterator_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)
I
Igor Canadi 已提交
1295

I
Igor Canadi 已提交
1296
compaction_job_test: db/compaction_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
1297
	$(AM_LINK)
I
Igor Canadi 已提交
1298

1299 1300 1301
compaction_job_stats_test: db/compaction_job_stats_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1302 1303 1304
compact_on_deletion_collector_test: utilities/table_properties_collectors/compact_on_deletion_collector_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1305
wal_manager_test: db/wal_manager_test.o $(LIBOBJECTS) $(TESTHARNESS)
1306
	$(AM_LINK)
I
Igor Canadi 已提交
1307

J
jorlow@chromium.org 已提交
1308
dbformat_test: db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS)
1309
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1310

1311
env_basic_test: env/env_basic_test.o $(LIBOBJECTS) $(TESTHARNESS)
1312 1313
	$(AM_LINK)

1314
env_test: env/env_test.o $(LIBOBJECTS) $(TESTHARNESS)
1315
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1316

1317
fault_injection_test: db/fault_injection_test.o $(LIBOBJECTS) $(TESTHARNESS)
1318
	$(AM_LINK)
1319

A
Andrew Kryczka 已提交
1320
rate_limiter_test: util/rate_limiter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1321
	$(AM_LINK)
L
Lei Jin 已提交
1322

I
Islam AbdelRahman 已提交
1323 1324 1325
delete_scheduler_test: util/delete_scheduler_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1326
filename_test: db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS)
1327
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1328

1329 1330 1331
file_reader_writer_test: util/file_reader_writer_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1332
block_based_filter_block_test: table/block_based_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1333
	$(AM_LINK)
1334 1335

full_filter_block_test: table/full_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1336
	$(AM_LINK)
S
Sanjay Ghemawat 已提交
1337

M
Maysam Yabandeh 已提交
1338 1339 1340
partitioned_filter_block_test: table/partitioned_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1341
log_test: db/log_test.o $(LIBOBJECTS) $(TESTHARNESS)
M
Maysam Yabandeh 已提交
1342 1343 1344
	$(AM_LINK)

cleanable_test: table/cleanable_test.o $(LIBOBJECTS) $(TESTHARNESS)
1345
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1346 1347

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

D
Dhruba Borthakur 已提交
1350
block_test: table/block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1351
	$(AM_LINK)
D
Dhruba Borthakur 已提交
1352

1353
inlineskiplist_test: memtable/inlineskiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
N
Nathan Bronson 已提交
1354 1355
	$(AM_LINK)

1356
skiplist_test: memtable/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
1357
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1358

1359 1360 1361
write_buffer_manager_test: memtable/write_buffer_manager_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1362
version_edit_test: db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS)
1363
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1364

1365
version_set_test: db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS)
1366
	$(AM_LINK)
1367

S
sdong 已提交
1368
compaction_picker_test: db/compaction_picker_test.o $(LIBOBJECTS) $(TESTHARNESS)
1369
	$(AM_LINK)
S
sdong 已提交
1370

S
sdong 已提交
1371
version_builder_test: db/version_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
1372
	$(AM_LINK)
S
sdong 已提交
1373

1374
file_indexer_test: db/file_indexer_test.o $(LIBOBJECTS) $(TESTHARNESS)
1375
	$(AM_LINK)
1376

1377
reduce_levels_test: tools/reduce_levels_test.o $(LIBOBJECTS) $(TESTHARNESS)
1378
	$(AM_LINK)
1379

J
jorlow@chromium.org 已提交
1380
write_batch_test: db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS)
1381
	$(AM_LINK)
1382

1383
write_controller_test: db/write_controller_test.o $(LIBOBJECTS) $(TESTHARNESS)
1384
	$(AM_LINK)
1385

1386 1387 1388
merge_helper_test: db/merge_helper_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1389 1390 1391
memory_test: utilities/memory/memory_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
Jim Paton 已提交
1392
merge_test: db/merge_test.o $(LIBOBJECTS) $(TESTHARNESS)
1393
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1394

I
Igor Canadi 已提交
1395
merger_test: table/merger_test.o $(LIBOBJECTS) $(TESTHARNESS)
1396
	$(AM_LINK)
I
Igor Canadi 已提交
1397

1398 1399 1400
util_merge_operators_test: utilities/util_merge_operators_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1401 1402 1403
options_file_test: db/options_file_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1404
deletefile_test: db/deletefile_test.o $(LIBOBJECTS) $(TESTHARNESS)
1405
	$(AM_LINK)
1406

1407 1408 1409
obsolete_files_test: db/obsolete_files_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1410
geodb_test: utilities/geodb/geodb_test.o $(LIBOBJECTS) $(TESTHARNESS)
1411
	$(AM_LINK)
1412

1413 1414 1415 1416 1417 1418
rocksdb_dump: tools/dump/rocksdb_dump.o $(LIBOBJECTS)
	$(AM_LINK)

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

1419
cuckoo_table_builder_test: table/cuckoo_table_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
1420
	$(AM_LINK)
1421

I
Igor Canadi 已提交
1422
cuckoo_table_reader_test: table/cuckoo_table_reader_test.o $(LIBOBJECTS) $(TESTHARNESS)
1423
	$(AM_LINK)
1424

1425
cuckoo_table_db_test: db/cuckoo_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1426
	$(AM_LINK)
1427

1428
listener_test: db/listener_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1429
	$(AM_LINK)
1430

Y
Yueh-Hsuan Chiang 已提交
1431
thread_list_test: util/thread_list_test.o $(LIBOBJECTS) $(TESTHARNESS)
1432
	$(AM_LINK)
Y
Yueh-Hsuan Chiang 已提交
1433

1434 1435 1436
compact_files_test: db/compact_files_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1437
options_test: options/options_test.o $(LIBOBJECTS) $(TESTHARNESS)
1438 1439
	$(AM_LINK)

1440
options_settable_test: options/options_settable_test.o $(LIBOBJECTS) $(TESTHARNESS)
1441
	$(AM_LINK)
1442

1443 1444 1445
options_util_test: utilities/options/options_util_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1446 1447 1448
db_bench_tool_test: tools/db_bench_tool_test.o $(BENCHTOOLOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1449 1450 1451
event_logger_test: util/event_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
Anirban Rahut 已提交
1452 1453 1454
timer_queue_test: util/timer_queue_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1455
sst_dump_test: tools/sst_dump_test.o $(LIBOBJECTS) $(TESTHARNESS)
1456
	$(AM_LINK)
1457

O
omegaga 已提交
1458 1459 1460
column_aware_encoding_test: utilities/column_aware_encoding_test.o $(TESTHARNESS) $(EXPOBJECTS)
	$(AM_LINK)

A
agiardullo 已提交
1461 1462 1463
optimistic_transaction_test: utilities/transactions/optimistic_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1464
mock_env_test : env/mock_env_test.o $(LIBOBJECTS) $(TESTHARNESS)
1465
	$(AM_LINK)
1466

1467
manual_compaction_test: db/manual_compaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
1468
	$(AM_LINK)
1469

1470
filelock_test: util/filelock_test.o $(LIBOBJECTS) $(TESTHARNESS)
1471
	$(AM_LINK)
K
Kai Liu 已提交
1472

1473
auto_roll_logger_test: util/auto_roll_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
1474
	$(AM_LINK)
1475

A
agiardullo 已提交
1476 1477 1478
memtable_list_test: db/memtable_list_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
agiardullo 已提交
1479 1480 1481
write_callback_test: db/write_callback_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1482 1483 1484
heap_test: util/heap_test.o $(GTEST)
	$(AM_LINK)

A
agiardullo 已提交
1485 1486 1487
transaction_test: utilities/transactions/transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1488 1489 1490
write_prepared_transaction_test: utilities/transactions/write_prepared_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1491 1492 1493
write_unprepared_transaction_test: utilities/transactions/write_unprepared_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1494
sst_dump: tools/sst_dump.o $(LIBOBJECTS)
1495
	$(AM_LINK)
1496

Y
Yi Wu 已提交
1497 1498 1499
blob_dump: tools/blob_dump.o $(LIBOBJECTS)
	$(AM_LINK)

O
omegaga 已提交
1500 1501 1502
column_aware_encoding_exp: utilities/column_aware_encoding_exp.o $(EXPOBJECTS)
	$(AM_LINK)

A
Andrew Kryczka 已提交
1503 1504 1505
repair_test: db/repair_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1506
ldb_cmd_test: tools/ldb_cmd_test.o $(LIBOBJECTS) $(TESTHARNESS)
1507 1508
	$(AM_LINK)

1509
ldb: tools/ldb.o $(LIBOBJECTS)
1510
	$(AM_LINK)
1511

1512
iostats_context_test: monitoring/iostats_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
1513 1514
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)

1515 1516 1517
persistent_cache_test: utilities/persistent_cache/persistent_cache_test.o  db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1518
statistics_test: monitoring/statistics_test.o $(LIBOBJECTS) $(TESTHARNESS)
1519 1520
	$(AM_LINK)

1521
lru_cache_test: cache/lru_cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yi Wu 已提交
1522 1523
	$(AM_LINK)

1524 1525
lua_test: utilities/lua/rocks_lua_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)
Y
Yi Wu 已提交
1526

A
Andrew Kryczka 已提交
1527 1528 1529
range_del_aggregator_test: db/range_del_aggregator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
1530 1531 1532
blob_db_test: utilities/blob_db/blob_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546
#-------------------------------------------------
# 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
1547
	for header_dir in `$(FIND) "include/rocksdb" -type d`; do \
I
Igor Canadi 已提交
1548 1549
		install -d $(INSTALL_PATH)/$$header_dir; \
	done
1550
	for header in `$(FIND) "include/rocksdb" -type f -name *.h`; do \
I
Igor Canadi 已提交
1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564
		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 已提交
1565
	[ -e $(SHARED4) ] && $(MAKE) install-shared || :
I
Igor Canadi 已提交
1566 1567 1568 1569

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


1570 1571 1572 1573
# ---------------------------------------------------------------------------
# Jni stuff
# ---------------------------------------------------------------------------

1574
JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/linux
D
David Bernard 已提交
1575 1576
ifeq ($(PLATFORM), OS_SOLARIS)
	ARCH := $(shell isainfo -b)
1577 1578 1579 1580 1581 1582
else ifeq ($(PLATFORM), OS_OPENBSD)
	ifneq (,$(filter $(MACHINE), amd64 arm64 sparc64))
		ARCH := 64
	else
		ARCH := 32
	endif
D
David Bernard 已提交
1583 1584 1585
else
	ARCH := $(shell getconf LONG_BIT)
endif
1586 1587 1588 1589 1590 1591

ifeq (,$(findstring ppc,$(MACHINE)))
        ROCKSDBJNILIB = librocksdbjni-linux$(ARCH).so
else
        ROCKSDBJNILIB = librocksdbjni-linux-$(MACHINE).so
endif
1592
ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-linux$(ARCH).jar
1593
ROCKSDB_JAR_ALL = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH).jar
C
Chris Riccomini 已提交
1594
ROCKSDB_JAVADOCS_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-javadoc.jar
1595
ROCKSDB_SOURCES_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-sources.jar
1596 1597
SHA256_CMD = sha256sum

T
Tomas Kolda 已提交
1598 1599 1600 1601 1602 1603
ZLIB_VER ?= 1.2.11
ZLIB_SHA256 ?= c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1
ZLIB_DOWNLOAD_BASE ?= http://zlib.net
BZIP2_VER ?= 1.0.6
BZIP2_SHA256 ?= a2848f34fcd5d6cf47def00461fcb528a0484d8edef8208d6d2e2909dc61d9cd
BZIP2_DOWNLOAD_BASE ?= http://www.bzip.org
S
Sagar Vemuri 已提交
1604 1605
SNAPPY_VER ?= 1.1.4
SNAPPY_SHA256 ?= 134bfe122fd25599bb807bb8130e7ba6d9bdb851e0b16efcb83ac4f5d0b70057
T
Tomas Kolda 已提交
1606
SNAPPY_DOWNLOAD_BASE ?= https://github.com/google/snappy/releases/download
A
Adam Retter 已提交
1607 1608
LZ4_VER ?= 1.8.0
LZ4_SHA256 ?= 2ca482ea7a9bb103603108b5a7510b7592b90158c151ff50a28f1ca8389fccf6
T
Tomas Kolda 已提交
1609
LZ4_DOWNLOAD_BASE ?= https://github.com/lz4/lz4/archive
A
Adam Retter 已提交
1610 1611
ZSTD_VER ?= 1.3.3
ZSTD_SHA256 ?= a77c47153ee7de02626c5b2a097005786b71688be61e9fb81806a011f90b297b
1612
ZSTD_DOWNLOAD_BASE ?= https://github.com/facebook/zstd/archive
P
Pengchao Wang 已提交
1613
CURL_SSL_OPTS ?= --tlsv1
1614 1615

ifeq ($(PLATFORM), OS_MACOSX)
D
David Bernard 已提交
1616 1617
	ROCKSDBJNILIB = librocksdbjni-osx.jnilib
	ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-osx.jar
1618
	SHA256_CMD = openssl sha256 -r
1619 1620 1621 1622 1623
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
1624
endif
1625
ifeq ($(PLATFORM), OS_FREEBSD)
1626
	JAVA_INCLUDE = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/freebsd
1627 1628 1629
	ROCKSDBJNILIB = librocksdbjni-freebsd$(ARCH).so
	ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-freebsd$(ARCH).jar
endif
D
David Bernard 已提交
1630 1631 1632 1633
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
1634
	SHA256_CMD = digest -a sha256
D
David Bernard 已提交
1635
endif
T
Tomas Kolda 已提交
1636 1637 1638 1639 1640 1641
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
1642 1643 1644 1645 1646
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
1647

N
Naveen 已提交
1648
libz.a:
1649
	-rm -rf zlib-$(ZLIB_VER)
T
Tomas Kolda 已提交
1650
	curl -O -L ${ZLIB_DOWNLOAD_BASE}/zlib-$(ZLIB_VER).tar.gz
1651 1652 1653 1654 1655 1656
	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
1657
	cd zlib-$(ZLIB_VER) && CFLAGS='-fPIC ${EXTRA_CFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' ./configure --static && $(MAKE)
1658
	cp zlib-$(ZLIB_VER)/libz.a .
N
Naveen 已提交
1659 1660

libbz2.a:
1661
	-rm -rf bzip2-$(BZIP2_VER)
T
Tomas Kolda 已提交
1662
	curl -O -L ${BZIP2_DOWNLOAD_BASE}/$(BZIP2_VER)/bzip2-$(BZIP2_VER).tar.gz
1663 1664 1665 1666 1667 1668
	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
1669
	cd bzip2-$(BZIP2_VER) && $(MAKE) CFLAGS='-fPIC -O2 -g -D_FILE_OFFSET_BITS=64 ${EXTRA_CFLAGS}' AR='ar ${EXTRA_ARFLAGS}'
1670
	cp bzip2-$(BZIP2_VER)/libbz2.a .
N
Naveen 已提交
1671

N
Naveen 已提交
1672
libsnappy.a:
1673
	-rm -rf snappy-$(SNAPPY_VER)
P
Pengchao Wang 已提交
1674
	curl -O -L ${CURL_SSL_OPTS} ${SNAPPY_DOWNLOAD_BASE}/$(SNAPPY_VER)/snappy-$(SNAPPY_VER).tar.gz
1675 1676 1677 1678 1679 1680
	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
	tar xvzf snappy-$(SNAPPY_VER).tar.gz
T
Tomas Kolda 已提交
1681
	cd snappy-$(SNAPPY_VER) && CFLAGS='${EXTRA_CFLAGS}' CXXFLAGS='${EXTRA_CXXFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' ./configure --with-pic --enable-static --disable-shared
1682
	cd snappy-$(SNAPPY_VER) && $(MAKE) ${SNAPPY_MAKE_TARGET}
1683
	cp snappy-$(SNAPPY_VER)/.libs/libsnappy.a .
1684

1685
liblz4.a:
1686
	-rm -rf lz4-$(LZ4_VER)
P
Pengchao Wang 已提交
1687
	curl -O -L ${CURL_SSL_OPTS} ${LZ4_DOWNLOAD_BASE}/v$(LZ4_VER).tar.gz
1688 1689 1690 1691 1692 1693 1694
	mv v$(LZ4_VER).tar.gz lz4-$(LZ4_VER).tar.gz
	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
1695
	cd lz4-$(LZ4_VER)/lib && $(MAKE) CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' all
1696
	cp lz4-$(LZ4_VER)/lib/liblz4.a .
N
Naveen 已提交
1697

1698 1699
libzstd.a:
	-rm -rf zstd-$(ZSTD_VER)
P
Pengchao Wang 已提交
1700
	curl -O -L ${CURL_SSL_OPTS} ${ZSTD_DOWNLOAD_BASE}/v$(ZSTD_VER).tar.gz
1701 1702 1703 1704 1705 1706 1707
	mv v$(ZSTD_VER).tar.gz zstd-$(ZSTD_VER).tar.gz
	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
1708
	cd zstd-$(ZSTD_VER)/lib && DESTDIR=. PREFIX= $(MAKE) CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' install
1709 1710
	cp zstd-$(ZSTD_VER)/lib/libzstd.a .

1711
# A version of each $(LIBOBJECTS) compiled with -fPIC and a fixed set of static compression libraries
A
Andrew Kryczka 已提交
1712
java_static_libobjects = $(patsubst %,jls/%,$(LIB_CC_OBJECTS))
1713
CLEAN_FILES += jls
A
Andrew Kryczka 已提交
1714
java_static_all_libobjects = $(java_static_libobjects)
1715

1716
ifneq ($(ROCKSDB_JAVA_NO_COMPRESSION), 1)
1717
JAVA_COMPRESSIONS = libz.a libbz2.a libsnappy.a liblz4.a libzstd.a
1718 1719
endif

1720
JAVA_STATIC_FLAGS = -DZLIB -DBZIP2 -DSNAPPY -DLZ4 -DZSTD
1721
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
1722

A
Andrew Kryczka 已提交
1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737
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

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

A
Andrew Kryczka 已提交
1741
rocksdbjavastatic: $(java_static_all_libobjects)
F
fyrz 已提交
1742
	cd java;$(MAKE) javalib;
1743
	rm -f ./java/target/$(ROCKSDBJNILIB)
1744 1745
	$(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC \
	  -o ./java/target/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) \
A
Andrew Kryczka 已提交
1746
	  $(java_static_all_libobjects) $(COVERAGEFLAGS) \
1747
	  $(JAVA_COMPRESSIONS) $(JAVA_STATIC_LDFLAGS)
1748 1749 1750
	cd java/target;if [ "$(DEBUG_LEVEL)" == "0" ]; then \
		strip $(STRIPFLAGS) $(ROCKSDBJNILIB); \
	fi
1751 1752 1753 1754 1755
	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 已提交
1756

1757
rocksdbjavastaticrelease: rocksdbjavastatic
1758
	cd java/crossbuild && vagrant destroy -f && vagrant up linux32 && vagrant halt linux32 && vagrant up linux64 && vagrant halt linux64
1759
	cd java;jar -cf target/$(ROCKSDB_JAR_ALL) HISTORY*.md
1760
	cd java/target;jar -uf $(ROCKSDB_JAR_ALL) librocksdbjni-*.so librocksdbjni-*.jnilib
1761
	cd java/target/classes;jar -uf ../$(ROCKSDB_JAR_ALL) org/rocksdb/*.class org/rocksdb/util/*.class
1762

1763 1764 1765 1766 1767 1768 1769
rocksdbjavastaticreleasedocker: rocksdbjavastatic rocksdbjavastaticdockerx86 rocksdbjavastaticdockerx86_64
	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
1770 1771
	DOCKER_LINUX_X86_CONTAINER=`docker ps -aqf name=rocksdb_linux_x86-be`; \
	if [ -z "$$DOCKER_LINUX_X86_CONTAINER" ]; then \
1772
		docker container create --attach stdin --attach stdout --attach stderr --volume `pwd`:/rocksdb-host --name rocksdb_linux_x86-be evolvedbinary/rocksjava:centos6_x86-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh; \
1773 1774
	fi
	docker start -a rocksdb_linux_x86-be
1775 1776 1777 1778 1779 1780 1781 1782

rocksdbjavastaticdockerx86_64:
	mkdir -p java/target
	DOCKER_LINUX_X64_CONTAINER=`docker ps -aqf name=rocksdb_linux_x64-be`; \
	if [ -z "$$DOCKER_LINUX_X64_CONTAINER" ]; then \
		docker container create --attach stdin --attach stdout --attach stderr --volume `pwd`:/rocksdb-host --name rocksdb_linux_x64-be evolvedbinary/rocksjava:centos6_x64-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh; \
	fi
	docker start -a rocksdb_linux_x64-be
1783

1784 1785 1786 1787 1788 1789 1790 1791
rocksdbjavastaticdockerppc64le:
	mkdir -p java/target
	DOCKER_LINUX_PPC64LE_CONTAINER=`docker ps -aqf name=rocksdb_linux_ppc64le-be`; \
	if [ -z "$$DOCKER_LINUX_PPC64LE_CONTAINER" ]; then \
		docker container create --attach stdin --attach stdout --attach stderr --volume `pwd`:/rocksdb-host --name rocksdb_linux_ppc64le-be evolvedbinary/rocksjava:centos7_ppc64le-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh; \
	fi
	docker start -a rocksdb_linux_ppc64le-be

1792 1793
rocksdbjavastaticpublish: rocksdbjavastaticrelease rocksdbjavastaticpublishcentral

1794 1795
rocksdbjavastaticpublishdocker: rocksdbjavastaticreleasedocker rocksdbjavastaticpublishcentral

1796
rocksdbjavastaticpublishcentral:
1797 1798 1799 1800 1801
	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
	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
1802
	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
1803
	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
1804

1805
# A version of each $(LIBOBJECTS) compiled with -fPIC
1806 1807 1808 1809 1810 1811 1812 1813 1814
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 已提交
1815
java_libobjects = $(patsubst %,jl/%,$(LIB_CC_OBJECTS))
1816
CLEAN_FILES += jl
1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828
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
1829

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

1833 1834 1835


rocksdbjava: $(java_all_libobjects)
1836 1837 1838 1839 1840 1841
	$(AM_V_GEN)cd java;$(MAKE) javalib;
	$(AM_V_at)rm -f ./java/target/$(ROCKSDBJNILIB)
	$(AM_V_at)$(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC -o ./java/target/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) $(java_libobjects) $(JAVA_LDFLAGS) $(COVERAGEFLAGS)
	$(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
1842 1843 1844 1845

jclean:
	cd java;$(MAKE) clean;

1846 1847 1848 1849 1850 1851
jtest_compile: rocksdbjava
	cd java;$(MAKE) java_test

jtest_run:
	cd java;$(MAKE) run_test

1852
jtest: rocksdbjava
1853
	cd java;$(MAKE) sample;$(MAKE) test;
1854

1855 1856 1857
jdb_bench:
	cd java;$(MAKE) db_bench;

1858 1859
commit_prereq: build_tools/rocksdb-lego-determinator \
               build_tools/precommit_checker.py
1860
	J=$(J) build_tools/precommit_checker.py unit unit_481 clang_unit release release_481 clang_release tsan asan ubsan lite unit_non_shm
1861
	$(MAKE) clean && $(MAKE) jclean && $(MAKE) rocksdbjava;
1862

1863 1864 1865
# ---------------------------------------------------------------------------
#  	Platform-specific compilation
# ---------------------------------------------------------------------------
J
Jim Paton 已提交
1866

1867 1868 1869
ifeq ($(PLATFORM), IOS)
# For iOS, create universal object files to be used on both the simulator and
# a device.
H
heyongqiang 已提交
1870 1871 1872
PLATFORMSROOT=/Applications/Xcode.app/Contents/Developer/Platforms
SIMULATORROOT=$(PLATFORMSROOT)/iPhoneSimulator.platform/Developer
DEVICEROOT=$(PLATFORMSROOT)/iPhoneOS.platform/Developer
I
Igor Canadi 已提交
1873
IOSVERSION=$(shell defaults read $(PLATFORMSROOT)/iPhoneOS.platform/version CFBundleShortVersionString)
1874

1875 1876
.cc.o:
	mkdir -p ios-x86/$(dir $@)
I
Igor Canadi 已提交
1877
	$(CXX) $(CXXFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@
1878
	mkdir -p ios-arm/$(dir $@)
I
Igor Canadi 已提交
1879
	xcrun -sdk iphoneos $(CXX) $(CXXFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -arch armv7s -arch arm64 -c $< -o ios-arm/$@
1880
	lipo ios-x86/$@ ios-arm/$@ -create -output $@
1881 1882 1883

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

1889
else
1890 1891 1892 1893 1894 1895 1896
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
1897
.cc.o:
1898
	$(AM_V_CC)$(CXX) $(CXXFLAGS) -c $< -o $@ $(COVERAGEFLAGS)
1899

1900
.c.o:
1901
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
1902
endif
1903 1904 1905 1906
# ---------------------------------------------------------------------------
#  	Source files dependencies detection
# ---------------------------------------------------------------------------

O
omegaga 已提交
1907
all_sources = $(LIB_SOURCES) $(MAIN_SOURCES) $(MOCK_LIB_SOURCES) $(TOOL_LIB_SOURCES) $(BENCH_LIB_SOURCES) $(TEST_LIB_SOURCES) $(EXP_LIB_SOURCES)
1908
DEPFILES = $(all_sources:.cc=.cc.d)
1909

1910 1911 1912 1913 1914
# 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.
1915
%.cc.d: %.cc
1916
	@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
1917
	  -MM -MT'$@' -MT'$(<:.cc=.o)' "$<" -o '$@'
1918

1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935
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
1936
depend: $(DEPFILES)
1937
endif
1938

1939 1940 1941 1942
# 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.
1943
ifneq ($(MAKECMDGOALS),clean)
1944
ifneq ($(MAKECMDGOALS),format)
1945 1946
ifneq ($(MAKECMDGOALS),jclean)
ifneq ($(MAKECMDGOALS),jtest)
1947
ifneq ($(MAKECMDGOALS),package)
1948
ifneq ($(MAKECMDGOALS),analyze)
1949 1950
-include $(DEPFILES)
endif
1951
endif
1952 1953
endif
endif
1954
endif
1955
endif