Makefile 57.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)
Y
Yueh-Hsuan Chiang 已提交
79
	DEBUG_LEVEL=0
80 81
endif

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

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

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

# if we're compiling for release, compile without debug code (-DNDEBUG) and
# don't treat warnings as errors
ifeq ($(DEBUG_LEVEL),0)
I
Igor Canadi 已提交
102
OPT += -DNDEBUG
103
DISABLE_WARNING_AS_ERROR=1
104 105
else
$(warning Warning: Compiling in debug mode. Don't use the resulting binary in production)
I
Igor Canadi 已提交
106 107
endif

108
#-----------------------------------------------
109
include src.mk
110

111 112 113 114 115 116
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 已提交
117 118 119 120
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
am__v_at_0 = @
am__v_at_1 =
121 122 123 124 125 126 127 128 129 130 131

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 已提交
132 133 134 135
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 =
136

137 138 139 140
ifdef ROCKSDB_USE_LIBRADOS
LIB_SOURCES += utilities/env_librados.cc
LDFLAGS += -lrados
endif
141

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

149 150 151 152 153 154 155 156 157
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 已提交
158 159 160
ifeq ($(PLATFORM), OS_AIX)
# no debug info
else ifneq ($(PLATFORM), IOS)
I
Igor Canadi 已提交
161 162 163 164 165 166 167
CFLAGS += -g
CXXFLAGS += -g
else
# no debug info for IOS, that will make our library big
OPT += -DNDEBUG
endif

T
Tomas Kolda 已提交
168 169 170 171 172
ifeq ($(PLATFORM), OS_AIX)
ARFLAGS = -X64 rs
STRIPFLAGS = -X64 -x
endif

D
David Bernard 已提交
173 174 175
ifeq ($(PLATFORM), OS_SOLARIS)
	PLATFORM_CXXFLAGS += -D _GLIBCXX_USE_C99
endif
176
ifneq ($(filter -DROCKSDB_LITE,$(OPT)),)
Y
Yueh-Hsuan Chiang 已提交
177 178 179
	# found
	CFLAGS += -fno-exceptions
	CXXFLAGS += -fno-exceptions
180 181
	# LUA is not supported under ROCKSDB_LITE
	LUA_PATH =
182 183
endif

I
Igor Canadi 已提交
184 185
# 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 已提交
186 187 188 189
	DISABLE_JEMALLOC=1
	EXEC_LDFLAGS += -fsanitize=address
	PLATFORM_CCFLAGS += -fsanitize=address
	PLATFORM_CXXFLAGS += -fsanitize=address
I
Igor Canadi 已提交
190 191 192 193
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 已提交
194
	DISABLE_JEMALLOC=1
S
Siying Dong 已提交
195
	EXEC_LDFLAGS += -fsanitize=thread
196 197
	PLATFORM_CCFLAGS += -fsanitize=thread -fPIC
	PLATFORM_CXXFLAGS += -fsanitize=thread -fPIC
198 199
        # Turn off -pg when enabling TSAN testing, because that induces
        # a link failure.  TODO: find the root cause
D
dx9 已提交
200
	PROFILING_FLAGS =
201 202
	# LUA is not supported under TSAN
	LUA_PATH =
I
Igor Canadi 已提交
203 204
endif

T
Tomas Kolda 已提交
205 206 207 208 209
# AIX doesn't work with -pg
ifeq ($(PLATFORM), OS_AIX)
	PROFILING_FLAGS =
endif

210 211 212 213
# 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
	EXEC_LDFLAGS += -fsanitize=undefined
214 215
	PLATFORM_CCFLAGS += -fsanitize=undefined -DROCKSDB_UBSAN_RUN
	PLATFORM_CXXFLAGS += -fsanitize=undefined -DROCKSDB_UBSAN_RUN
216 217
endif

I
Igor Canadi 已提交
218
ifndef DISABLE_JEMALLOC
219
	ifdef JEMALLOC
T
Tamir Duberstein 已提交
220 221
		PLATFORM_CXXFLAGS += -DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE
		PLATFORM_CCFLAGS  += -DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE
222
	endif
Y
Yueh-Hsuan Chiang 已提交
223 224 225
	EXEC_LDFLAGS := $(JEMALLOC_LIB) $(EXEC_LDFLAGS)
	PLATFORM_CXXFLAGS += $(JEMALLOC_INCLUDE)
	PLATFORM_CCFLAGS += $(JEMALLOC_INCLUDE)
I
Igor Canadi 已提交
226 227
endif

T
Tamir Duberstein 已提交
228 229
export GTEST_THROW_ON_FAILURE=1
export GTEST_HAS_EXCEPTIONS=1
I
Igor Sugak 已提交
230
GTEST_DIR = ./third-party/gtest-1.7.0/fused-src
T
Tomas Kolda 已提交
231 232 233 234 235 236 237 238
# 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 已提交
239

240 241 242
# This (the first rule) must depend on "all".
default: all

243
WARNING_FLAGS = -W -Wextra -Wall -Wsign-compare -Wshadow \
Y
Yueh-Hsuan Chiang 已提交
244
  -Wno-unused-parameter
245

246
ifndef DISABLE_WARNING_AS_ERROR
Y
Yueh-Hsuan Chiang 已提交
247
	WARNING_FLAGS += -Werror
248 249
endif

250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277

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


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

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

283 284 285
# 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
286
date := $(shell date +%F)
I
Igor Canadi 已提交
287
ifdef FORCE_GIT_SHA
Y
Yueh-Hsuan Chiang 已提交
288
	git_sha := $(FORCE_GIT_SHA)
I
Igor Canadi 已提交
289
else
Y
Yueh-Hsuan Chiang 已提交
290
	git_sha := $(shell git rev-parse HEAD 2>/dev/null)
I
Igor Canadi 已提交
291
endif
292
gen_build_version = sed -e s/@@GIT_SHA@@/$(git_sha)/ -e s/@@GIT_DATE_TIME@@/$(date)/ util/build_version.cc.in
293 294 295 296 297 298

# 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.
299 300
FORCE:
util/build_version.cc: FORCE
Y
Yueh-Hsuan Chiang 已提交
301 302 303 304 305
	$(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
306
endif
307

308
LIBOBJECTS = $(LIB_SOURCES:.cc=.o)
O
omegaga 已提交
309 310
LIBOBJECTS += $(TOOL_LIB_SOURCES:.cc=.o)
MOCKOBJECTS = $(MOCK_LIB_SOURCES:.cc=.o)
J
jorlow@chromium.org 已提交
311

I
Igor Sugak 已提交
312
GTEST = $(GTEST_DIR)/gtest/gtest-all.o
J
jorlow@chromium.org 已提交
313
TESTUTIL = ./util/testutil.o
I
Igor Sugak 已提交
314
TESTHARNESS = ./util/testharness.o $(TESTUTIL) $(MOCKOBJECTS) $(GTEST)
315
VALGRIND_ERROR = 2
316
VALGRIND_VER := $(join $(VALGRIND_VER),valgrind)
317

318
VALGRIND_OPTS = --error-exitcode=$(VALGRIND_ERROR) --leak-check=full
319

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

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

J
jorlow@chromium.org 已提交
324
TESTS = \
325
	db_basic_test \
E
Ewout Prangsma 已提交
326
	db_encryption_test \
327
	db_test2 \
S
Siying Dong 已提交
328
	external_sst_file_basic_test \
S
Siying Dong 已提交
329 330 331 332 333 334 335 336 337 338 339 340 341 342 343
	auto_roll_logger_test \
	bloom_test \
	dynamic_bloom_test \
	c_test \
	checkpoint_test \
	crc32c_test \
	coding_test \
	inlineskiplist_test \
	env_basic_test \
	env_test \
	thread_local_test \
	rate_limiter_test \
	perf_context_test \
	iostats_context_test \
	db_wal_test \
344
	db_block_cache_test \
345
	db_test \
Y
Yi Wu 已提交
346
	db_bloom_filter_test \
347 348 349
	db_iter_test \
	db_log_iter_test \
	db_compaction_filter_test \
350
	db_compaction_test \
351
	db_dynamic_level_test \
352
	db_flush_test \
353
	db_inplace_update_test \
Y
Yi Wu 已提交
354
	db_iterator_test \
355
	db_memtable_test \
356
	db_merge_operator_test \
357
	db_options_test \
358
	db_range_del_test \
Y
Yi Wu 已提交
359
	db_sst_test \
360 361
	db_tailing_iter_test \
	db_universal_compaction_test \
O
omegaga 已提交
362
	db_io_failure_test \
363
	db_properties_test \
364
	db_table_properties_test \
365
	db_statistics_test \
Y
Yi Wu 已提交
366
	db_write_test \
367
	autovector_test \
M
Maysam Yabandeh 已提交
368
	cleanable_test \
369 370 371 372 373 374 375 376 377 378 379
	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 \
380
	file_reader_writer_test \
381 382
	block_based_filter_block_test \
	full_filter_block_test \
M
Maysam Yabandeh 已提交
383
	partitioned_filter_block_test \
384
	hash_table_test \
385 386 387 388 389 390
	histogram_test \
	log_test \
	manual_compaction_test \
	mock_env_test \
	memtable_list_test \
	merge_helper_test \
391
	memory_test \
392 393
	merge_test \
	merger_test \
394
	util_merge_operators_test \
395
	options_file_test \
396 397 398 399
	redis_test \
	reduce_levels_test \
	plain_table_db_test \
	comparator_db_test \
400
	external_sst_file_test \
401 402
	prefix_test \
	skiplist_test \
403
	write_buffer_manager_test \
404
	stringappend_test \
405 406 407 408
	cassandra_format_test \
	cassandra_merge_test \
	cassandra_row_merge_test \
	cassandra_serialize_test \
409
	ttl_test \
O
omegaga 已提交
410
	date_tiered_test \
411 412 413
	backupable_db_test \
	document_db_test \
	json_document_test \
414
	sim_cache_test \
415 416 417 418 419 420 421 422 423 424 425 426
	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 \
	table_test \
	geodb_test \
I
Islam AbdelRahman 已提交
427
	delete_scheduler_test \
428
	options_test \
429
	options_settable_test \
430
	options_util_test \
431
	event_logger_test \
A
Anirban Rahut 已提交
432
	timer_queue_test \
433 434 435 436 437 438
	cuckoo_table_builder_test \
	cuckoo_table_reader_test \
	cuckoo_table_db_test \
	flush_job_test \
	wal_manager_test \
	listener_test \
A
Andres Noetzli 已提交
439
	compaction_iterator_test \
440 441 442
	compaction_job_test \
	thread_list_test \
	sst_dump_test \
O
omegaga 已提交
443
	column_aware_encoding_test \
444 445 446
	compact_files_test \
	optimistic_transaction_test \
	write_callback_test \
447 448
	heap_test \
	compact_on_deletion_collector_test \
A
agiardullo 已提交
449
	compaction_job_stats_test \
450
	option_change_migration_test \
451
	transaction_test \
452
	ldb_cmd_test \
453
	persistent_cache_test \
454
	statistics_test \
455
	lua_test \
A
Andrew Kryczka 已提交
456
	range_del_aggregator_test \
Y
Yi Wu 已提交
457
	lru_cache_test \
458
	object_registry_test \
A
Andrew Kryczka 已提交
459
	repair_test \
A
Andrew Kryczka 已提交
460
	env_timed_test \
461

Y
Yi Wu 已提交
462 463 464 465
PARALLEL_TEST = \
	backupable_db_test \
	db_compaction_filter_test \
	db_compaction_test \
466
	db_sst_test \
Y
Yi Wu 已提交
467 468
	db_test \
	db_universal_compaction_test \
469 470
	db_wal_test \
	external_sst_file_test \
Y
Yi Wu 已提交
471 472 473
	fault_injection_test \
	inlineskiplist_test \
	manual_compaction_test \
474 475 476
	persistent_cache_test \
	table_test \
	transaction_test
Y
Yi Wu 已提交
477

I
Islam AbdelRahman 已提交
478 479 480 481 482 483 484 485
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
486

487
TOOLS = \
Y
Yueh-Hsuan Chiang 已提交
488 489 490
	sst_dump \
	db_sanity_test \
	db_stress \
I
Igor Canadi 已提交
491
	write_stress \
Y
Yueh-Hsuan Chiang 已提交
492 493 494
	ldb \
	db_repl_stress \
	rocksdb_dump \
Y
Yi Wu 已提交
495 496
	rocksdb_undump \
	blob_dump \
J
jorlow@chromium.org 已提交
497

498 499 500
TEST_LIBS = \
	librocksdb_env_basic_test.a

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

504
# if user didn't config LIBNAME, set the default
505
ifeq ($(LIBNAME),)
506 507
# we should only run rocksdb in production with DEBUG_LEVEL 0
ifeq ($(DEBUG_LEVEL),0)
Y
Yueh-Hsuan Chiang 已提交
508
        LIBNAME=librocksdb
509 510 511
else
        LIBNAME=librocksdb_debug
endif
512
endif
513
LIBRARY = ${LIBNAME}.a
514
TOOLS_LIBRARY = ${LIBNAME}_tools.a
515

516 517 518
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)
519

520 521
default: all

522 523 524
#-----------------------------------------------
# Create platform independent shared libraries.
#-----------------------------------------------
525
ifneq ($(PLATFORM_SHARED_EXT),)
H
heyongqiang 已提交
526 527

ifneq ($(PLATFORM_SHARED_VERSIONED),true)
528
SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
H
heyongqiang 已提交
529 530
SHARED2 = $(SHARED1)
SHARED3 = $(SHARED1)
531
SHARED4 = $(SHARED1)
H
heyongqiang 已提交
532 533
SHARED = $(SHARED1)
else
534 535
SHARED_MAJOR = $(ROCKSDB_MAJOR)
SHARED_MINOR = $(ROCKSDB_MINOR)
536
SHARED_PATCH = $(ROCKSDB_PATCH)
537
SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
538 539 540 541 542 543
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
544 545
SHARED2 = $(SHARED1).$(SHARED_MAJOR)
SHARED3 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR)
546
SHARED4 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR).$(SHARED_PATCH)
547
endif
548 549
SHARED = $(SHARED1) $(SHARED2) $(SHARED3) $(SHARED4)
$(SHARED1): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
550
	ln -fs $(SHARED4) $(SHARED1)
551
$(SHARED2): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
552
	ln -fs $(SHARED4) $(SHARED2)
553
$(SHARED3): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
554
	ln -fs $(SHARED4) $(SHARED3)
555 556
endif

557 558 559 560 561 562 563 564
shared_libobjects = $(patsubst %,shared-objects/%,$(LIBOBJECTS))
CLEAN_FILES += shared-objects

$(shared_libobjects): shared-objects/%.o: %.cc
	$(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) -c $< -o $@

$(SHARED4): $(shared_libobjects)
	$(CXX) $(PLATFORM_SHARED_LDFLAGS)$(SHARED3) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) $(shared_libobjects) $(LDFLAGS) -o $@
H
heyongqiang 已提交
565 566 567

endif  # PLATFORM_SHARED_EXT

568
.PHONY: blackbox_crash_test check clean coverage crash_test ldb_tests package \
Y
Yueh-Hsuan Chiang 已提交
569 570
	release tags valgrind_check whitebox_crash_test format static_lib shared_lib all \
	dbg rocksdbjavastatic rocksdbjava install install-static install-shared uninstall \
571
	analyze tools tools_lib
572

M
maurice barnum 已提交
573

574
all: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(TESTS)
575

I
Igor Canadi 已提交
576 577 578 579
static_lib: $(LIBRARY)

shared_lib: $(SHARED)

M
maurice barnum 已提交
580 581
tools: $(TOOLS)

582 583
tools_lib: $(TOOLS_LIBRARY)

584 585
test_libs: $(TEST_LIBS)

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

588
# creates static library and programs
589
release:
Y
Yueh-Hsuan Chiang 已提交
590
	$(MAKE) clean
591
	DEBUG_LEVEL=0 $(MAKE) static_lib tools db_bench
K
Kai Liu 已提交
592 593

coverage:
Y
Yueh-Hsuan Chiang 已提交
594 595 596 597 598
	$(MAKE) clean
	COVERAGEFLAGS="-fprofile-arcs -ftest-coverage" LDFLAGS+="-lgcov" $(MAKE) J=1 all check
	cd coverage && ./coverage_test.sh
        # Delete intermediate files
	find . -type f -regex ".*\.\(\(gcda\)\|\(gcno\)\)" -exec rm {} \;
J
jorlow@chromium.org 已提交
599

Y
Yi Wu 已提交
600 601 602 603 604
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 已提交
605 606
TMPDIR := $(shell echo $${TMPDIR:-/tmp})
TMPD := $(shell f=/dev/shm; test -k $$f || f=$(TMPDIR);     \
Y
Yi Wu 已提交
607 608 609 610 611 612 613 614 615 616 617 618 619 620
  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.
621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638
# 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 已提交
639 640 641 642 643 644 645 646 647 648 649
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 \
650
		TEST_SCRIPT=t/run-$$TEST_BINARY-$${TEST_NAME//\//-}; \
Y
Yi Wu 已提交
651 652 653 654 655
		echo "  GEN     " $$TEST_SCRIPT; \
    printf '%s\n' \
      '#!/bin/sh' \
      "d=\$(TMPD)$$TEST_SCRIPT" \
      'mkdir -p $$d' \
656
      "TEST_TMPDIR=\$$d $(DRIVER) ./$$TEST_BINARY --gtest_filter=$$TEST_NAME" \
Y
Yi Wu 已提交
657 658 659 660 661 662 663 664
		> $$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)
665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682

# 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 = \
683
	^t/run-table_test-HarnessTest.Randomized$$|^t/run-db_test-.*(?:FileCreationRandomFailure|EncodeDecompressedBlockSizeTest)$$|^.*RecoverFromCorruptedWALWithoutFlush$$
684
prioritize_long_running_tests =						\
Y
Yueh-Hsuan Chiang 已提交
685 686 687
  perl -pe 's,($(slow_test_regexp)),100 $$1,'				\
    | sort -k1,1gr							\
    | sed 's/^[.0-9]* //'
688 689 690 691 692 693

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

V
Venkatesh Radhakrishnan 已提交
696 697 698
# Use this regexp to select the subset of tests whose names match.
tests-regexp = .

Y
Yi Wu 已提交
699
t_run = $(wildcard t/run-*)
700
.PHONY: check_0
Y
Yi Wu 已提交
701 702
check_0:
	$(AM_V_GEN)export TEST_TMPDIR=$(TMPD); \
Y
Yueh-Hsuan Chiang 已提交
703 704 705
	printf '%s\n' ''						\
	  'To monitor subtest <duration,pass/fail,name>,'		\
	  '  run "make watch-log" in a separate window' '';		\
Y
Yi Wu 已提交
706 707 708 709 710
	test -t 1 && eta=--eta || eta=; \
	{ \
		printf './%s\n' $(filter-out $(PARALLEL_TEST),$(TESTS)); \
		printf '%s\n' $(t_run); \
	} \
Y
Yueh-Hsuan Chiang 已提交
711 712
	  | $(prioritize_long_running_tests)				\
	  | grep -E '$(tests-regexp)'					\
713
	  | build_tools/gnu_parallel -j$(J) --plain --joblog=LOG $$eta --gnu '{} >& t/log-{/}'
S
sdong 已提交
714

715 716
valgrind-blacklist-regexp = InlineSkipTest.ConcurrentInsert|TransactionTest.DeadlockStress|DBCompactionTest.SuggestCompactRangeNoTwoLevel0Compactions|BackupableDBTest.RateLimiting|DBTest.CloseSpeedup|DBTest.ThreadStatusFlush|DBTest.RateLimitingTest|DBTest.EncodeDecompressedBlockSizeTest|FaultInjectionTest.UninstalledCompaction|HarnessTest.Randomized|ExternalSSTFileTest.CompactDuringAddFileRandom|ExternalSSTFileTest.IngestFileWithGlobalSeqnoRandomized

S
sdong 已提交
717
.PHONY: valgrind_check_0
Y
Yi Wu 已提交
718
valgrind_check_0:
S
sdong 已提交
719 720 721 722 723 724
	$(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 已提交
725
	  printf './%s\n' $(filter-out $(PARALLEL_TEST) %skiplist_test options_settable_test, $(TESTS));		\
S
sdong 已提交
726 727 728 729
	  printf '%s\n' $(t_run);					\
	}								\
	  | $(prioritize_long_running_tests)				\
	  | grep -E '$(tests-regexp)'					\
730
	  | grep -E -v '$(valgrind-blacklist-regexp)'					\
731
	  | build_tools/gnu_parallel -j$(J) --plain --joblog=LOG $$eta --gnu \
732 733
	  '(if [[ "{}" == "./"* ]] ; then $(DRIVER) {}; else {}; fi) ' \
	  '>& t/valgrind_log-{/}'
734 735

CLEAN_FILES += t LOG $(TMPD)
736

737 738 739 740 741 742 743 744
# 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:
Y
Yueh-Hsuan Chiang 已提交
745
	watch --interval=0 'sort -k7,7nr -k4,4gr LOG|$(quoted_perl_command)'
746

I
Igor Canadi 已提交
747
# If J != 1 and GNU parallel is installed, run the tests in parallel,
748 749
# via the check_0 rule above.  Otherwise, run them sequentially.
check: all
Y
Yi Wu 已提交
750
	$(MAKE) gen_parallel_tests
Y
Yueh-Hsuan Chiang 已提交
751
	$(AM_V_GEN)if test "$(J)" != 1                                  \
752
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |                    \
Y
Yueh-Hsuan Chiang 已提交
753 754 755 756 757 758 759 760
	        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 已提交
761
ifneq ($(PLATFORM), OS_AIX)
I
Islam AbdelRahman 已提交
762
ifeq ($(filter -DROCKSDB_LITE,$(OPT)),)
Y
Yueh-Hsuan Chiang 已提交
763 764
	python tools/ldb_test.py
	sh tools/rocksdb_dump_test.sh
I
Islam AbdelRahman 已提交
765
endif
T
Tomas Kolda 已提交
766
endif
767

S
Siying Dong 已提交
768 769
# TODO add ldb_tests
check_some: $(SUBSET)
Y
Yueh-Hsuan Chiang 已提交
770
	for t in $(SUBSET); do echo "===== Running $$t"; ./$$t || exit 1; done
771 772

.PHONY: ldb_tests
773
ldb_tests: ldb
Y
Yueh-Hsuan Chiang 已提交
774
	python tools/ldb_test.py
775

I
Igor Canadi 已提交
776
crash_test: whitebox_crash_test blackbox_crash_test
777 778

blackbox_crash_test: db_stress
779
	python -u tools/db_crashtest.py --simple blackbox
780
	python -u tools/db_crashtest.py blackbox
781

782 783 784 785
ifeq ($(CRASH_TEST_KILL_ODD),)
  CRASH_TEST_KILL_ODD=888887
endif

786
whitebox_crash_test: db_stress
787 788 789 790
	python -u tools/db_crashtest.py --simple whitebox --random_kill_odd \
      $(CRASH_TEST_KILL_ODD)
	python -u tools/db_crashtest.py whitebox  --random_kill_odd \
      $(CRASH_TEST_KILL_ODD)
791

I
Igor Canadi 已提交
792
asan_check:
Y
Yueh-Hsuan Chiang 已提交
793 794 795
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) check -j32
	$(MAKE) clean
796 797

asan_crash_test:
Y
Yueh-Hsuan Chiang 已提交
798 799 800
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) crash_test
	$(MAKE) clean
I
Igor Canadi 已提交
801

802 803 804 805 806 807 808 809 810 811
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

812 813 814
valgrind_test:
	DISABLE_JEMALLOC=1 $(MAKE) valgrind_check

I
Igor Canadi 已提交
815
valgrind_check: $(TESTS)
816
	$(MAKE) DRIVER="$(VALGRIND_VER) $(VALGRIND_OPTS)" gen_parallel_tests
S
sdong 已提交
817
	$(AM_V_GEN)if test "$(J)" != 1                                  \
818
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |                    \
S
sdong 已提交
819 820
	        grep -q 'GNU Parallel';                                 \
	then                                                            \
Y
Yi Wu 已提交
821
      $(MAKE) TMPD=$(TMPD)                                        \
S
sdong 已提交
822 823 824 825 826 827 828 829 830 831
      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
832

833 834 835 836 837 838 839

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 \
840
			seq $(J) | v="$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{};  export TEST_TMPDIR=$$s;' \
841 842
				'timeout 2m ./db_test --gtest_filter=$$v >> $$s/log-{} 2>1'; \
		else\
843
			seq $(J) | v="./$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{};' \
844 845 846 847 848 849 850 851 852 853 854
			     '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 已提交
855 856 857 858 859 860 861
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!'

862 863
parallel_check: $(TESTS)
	$(AM_V_GEN)if test "$(J)" > 1                                  \
864
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |                    \
865 866 867 868 869 870 871 872 873
	        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); \
874
        seq $(J) | build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{}; rm -rf $$s; mkdir $$s'; \
875
	$(MAKE)  PAR_TEST="$(shell $(test_names))" TMPD=$(TMPD) \
876 877 878 879
		J=$(J) db_test=1 parloop; \
	$(MAKE) PAR_TEST="$(filter-out db_test, $(TESTS))" \
		TMPD=$(TMPD) J=$(J) db_test=0 parloop;

880
analyze: clean
Y
Yueh-Hsuan Chiang 已提交
881 882 883 884
	$(CLANG_SCAN_BUILD) --use-analyzer=$(CLANG_ANALYZER) \
		--use-c++=$(CXX) --use-cc=$(CC) --status-bugs \
		-o $(CURDIR)/scan_build_report \
		$(MAKE) dbg
885

886 887
CLEAN_FILES += unity.cc
unity.cc: Makefile
Y
Yueh-Hsuan Chiang 已提交
888 889
	rm -f $@ $@-t
	for source_file in $(LIB_SOURCES); do \
E
Evan Shaw 已提交
890
		echo "#include \"$$source_file\"" >> $@-t; \
Y
Yueh-Hsuan Chiang 已提交
891 892 893
	done
	chmod a=r $@-t
	mv $@-t $@
M
miguelportilla 已提交
894

E
Evan Shaw 已提交
895 896 897 898
unity.a: unity.o
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ unity.o

I
Igor Canadi 已提交
899
# try compiling db_test with unity
900
unity_test: db/db_test.o db/db_test_util.o $(TESTHARNESS) unity.a
I
Igor Canadi 已提交
901 902 903
	$(AM_LINK)
	./unity_test

E
Evan Shaw 已提交
904 905
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 已提交
906

J
jorlow@chromium.org 已提交
907
clean:
Y
Yueh-Hsuan Chiang 已提交
908 909 910 911
	rm -f $(BENCHMARKS) $(TOOLS) $(TESTS) $(LIBRARY) $(SHARED)
	rm -rf $(CLEAN_FILES) ios-x86 ios-arm scan_build_report
	find . -name "*.[oda]" -exec rm -f {} \;
	find . -type f -regex ".*\.\(\(gcda\)\|\(gcno\)\)" -exec rm {} \;
S
Sagar Vemuri 已提交
912
	rm -rf bzip2* snappy* zlib* lz4* zstd*
Y
Yi Wu 已提交
913
	cd java; $(MAKE) clean
914

915
tags:
Y
Yueh-Hsuan Chiang 已提交
916
	ctags * -R
A
Andrew Kryczka 已提交
917
	cscope -b `find . -name '*.cc'` `find . -name '*.h'` `find . -name '*.c'`
L
Leonidas Galanis 已提交
918
	ctags -e -R -o etags *
919

920
format:
Y
Yueh-Hsuan Chiang 已提交
921
	build_tools/format-diff.sh
922

923
package:
Y
Yueh-Hsuan Chiang 已提交
924
	bash build_tools/make_package.sh $(SHARED_MAJOR).$(SHARED_MINOR)
925

926 927 928
# ---------------------------------------------------------------------------
# 	Unit tests and tools
# ---------------------------------------------------------------------------
929
$(LIBRARY): $(LIBOBJECTS)
Y
Yueh-Hsuan Chiang 已提交
930 931
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $(LIBOBJECTS)
J
jorlow@chromium.org 已提交
932

O
omegaga 已提交
933
$(TOOLS_LIBRARY): $(BENCH_LIB_SOURCES:.cc=.o) $(TOOL_LIB_SOURCES:.cc=.o) $(LIB_SOURCES:.cc=.o) $(TESTUTIL)
934 935 936
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $^

937
librocksdb_env_basic_test.a: env/env_basic_test.o $(LIBOBJECTS) $(TESTHARNESS)
938 939 940
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $^

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

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

947 948 949
persistent_cache_bench: utilities/persistent_cache/persistent_cache_bench.o $(LIBOBJECTS) $(TESTUTIL)
	$(AM_LINK)

950
memtablerep_bench: memtable/memtablerep_bench.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
951
	$(AM_LINK)
A
Ameya Gupte 已提交
952

953
db_stress: tools/db_stress.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
954
	$(AM_LINK)
955

I
Igor Canadi 已提交
956 957 958
write_stress: tools/write_stress.o $(LIBOBJECTS) $(TESTUTIL)
	$(AM_LINK)

I
Igor Canadi 已提交
959
db_sanity_test: tools/db_sanity_test.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
960
	$(AM_LINK)
961

962
db_repl_stress: tools/db_repl_stress.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
963
	$(AM_LINK)
964

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

K
kailiu 已提交
968
autovector_test: util/autovector_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
969
	$(AM_LINK)
K
kailiu 已提交
970

971
column_family_test: db/column_family_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
972
	$(AM_LINK)
973

K
kailiu 已提交
974
table_properties_collector_test: db/table_properties_collector_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
975
	$(AM_LINK)
976

S
Sanjay Ghemawat 已提交
977
bloom_test: util/bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
978
	$(AM_LINK)
S
Sanjay Ghemawat 已提交
979

980
dynamic_bloom_test: util/dynamic_bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
981
	$(AM_LINK)
982

983
c_test: db/c_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
984
	$(AM_LINK)
985

986
cache_test: cache/cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
987
	$(AM_LINK)
J
jorlow@chromium.org 已提交
988 989

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

992 993 994
option_change_migration_test: utilities/option_change_migration/option_change_migration_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

995
stringappend_test: utilities/merge_operators/string_append/stringappend_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
996
	$(AM_LINK)
997

998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009
cassandra_format_test: utilities/merge_operators/cassandra/format_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

cassandra_merge_test: utilities/merge_operators/cassandra/cassandra_merge_test.o utilities/merge_operators/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

cassandra_row_merge_test: utilities/merge_operators/cassandra/row_merge_test.o utilities/merge_operators/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

cassandra_serialize_test: utilities/merge_operators/cassandra/serialize_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1010
redis_test: utilities/redis/redis_lists_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1011
	$(AM_LINK)
1012

1013 1014 1015
hash_table_test: utilities/persistent_cache/hash_table_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1016
histogram_test: monitoring/histogram_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1017
	$(AM_LINK)
A
Abhishek Kona 已提交
1018

L
Lei Jin 已提交
1019
thread_local_test: util/thread_local_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1020
	$(AM_LINK)
L
Lei Jin 已提交
1021

J
jorlow@chromium.org 已提交
1022
corruption_test: db/corruption_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1023
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1024 1025

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

1028
slice_transform_test: util/slice_transform_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1029
	$(AM_LINK)
1030

1031
db_basic_test: db/db_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
E
Ewout Prangsma 已提交
1032 1033 1034
	$(AM_LINK)

db_encryption_test: db/db_encryption_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1035 1036
	$(AM_LINK)

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

1040 1041 1042
db_test2: db/db_test2.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1043 1044 1045
db_block_cache_test: db/db_block_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
1046 1047 1048
db_bloom_filter_test: db/db_bloom_filter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1049
db_log_iter_test: db/db_log_iter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1050
	$(AM_LINK)
1051

1052
db_compaction_filter_test: db/db_compaction_filter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1053 1054
	$(AM_LINK)

1055
db_compaction_test: db/db_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1056 1057
	$(AM_LINK)

1058
db_dynamic_level_test: db/db_dynamic_level_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1059 1060
	$(AM_LINK)

1061 1062 1063
db_flush_test: db/db_flush_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1064
db_inplace_update_test: db/db_inplace_update_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1065 1066
	$(AM_LINK)

Y
Yi Wu 已提交
1067 1068 1069
db_iterator_test: db/db_iterator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1070 1071 1072
db_memtable_test: db/db_memtable_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1073 1074 1075
db_merge_operator_test: db/db_merge_operator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1076 1077 1078
db_options_test: db/db_options_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1079 1080 1081
db_range_del_test: db/db_range_del_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
1082 1083 1084
db_sst_test: db/db_sst_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1085 1086 1087
db_statistics_test: db/db_statistics_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
1088 1089 1090
db_write_test: db/db_write_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

S
Siying Dong 已提交
1091 1092 1093
external_sst_file_basic_test: db/external_sst_file_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1094 1095 1096
external_sst_file_test: db/external_sst_file_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1097
db_tailing_iter_test: db/db_tailing_iter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1098 1099
	$(AM_LINK)

S
Stanislau Hlebik 已提交
1100
db_iter_test: db/db_iter_test.o $(LIBOBJECTS) $(TESTHARNESS)
1101
	$(AM_LINK)
S
Stanislau Hlebik 已提交
1102

1103
db_universal_compaction_test: db/db_universal_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1104 1105
	$(AM_LINK)

1106
db_wal_test: db/db_wal_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
S
sdong 已提交
1107 1108
	$(AM_LINK)

O
omegaga 已提交
1109 1110 1111
db_io_failure_test: db/db_io_failure_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1112 1113 1114
db_properties_test: db/db_properties_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1115 1116 1117
db_table_properties_test: db/db_table_properties_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1118
log_write_bench: util/log_write_bench.o $(LIBOBJECTS) $(TESTHARNESS)
D
dx9 已提交
1119
	$(AM_LINK) $(PROFILING_FLAGS)
1120

S
Siying Dong 已提交
1121
plain_table_db_test: db/plain_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1122
	$(AM_LINK)
S
Siying Dong 已提交
1123

1124
comparator_db_test: db/comparator_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1125
	$(AM_LINK)
1126

1127
table_reader_bench: table/table_reader_bench.o $(LIBOBJECTS) $(TESTHARNESS)
D
dx9 已提交
1128
	$(AM_LINK) $(PROFILING_FLAGS)
1129

1130
perf_context_test: db/perf_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
1131
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)
1132

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

I
Igor Canadi 已提交
1136
backupable_db_test: utilities/backupable/backupable_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1137
	$(AM_LINK)
I
Igor Canadi 已提交
1138

1139 1140 1141
checkpoint_test: utilities/checkpoint/checkpoint_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1142
document_db_test: utilities/document/document_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1143
	$(AM_LINK)
I
Igor Canadi 已提交
1144

I
Igor Canadi 已提交
1145
json_document_test: utilities/document/json_document_test.o $(LIBOBJECTS) $(TESTHARNESS)
1146
	$(AM_LINK)
I
Igor Canadi 已提交
1147

1148 1149 1150
sim_cache_test: utilities/simulator_cache/sim_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1151
spatial_db_test: utilities/spatialdb/spatial_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1152
	$(AM_LINK)
I
Igor Canadi 已提交
1153

S
Sage Weil 已提交
1154 1155 1156
env_mirror_test: utilities/env_mirror_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
Andrew Kryczka 已提交
1157 1158 1159
env_timed_test: utilities/env_timed_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1160 1161 1162 1163 1164
ifdef ROCKSDB_USE_LIBRADOS
env_librados_test: utilities/env_librados_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(COVERAGEFLAGS)
endif

1165
object_registry_test: utilities/object_registry_test.o $(LIBOBJECTS) $(TESTHARNESS)
1166 1167
	$(AM_LINK)

1168
ttl_test: utilities/ttl/ttl_test.o $(LIBOBJECTS) $(TESTHARNESS)
1169
	$(AM_LINK)
1170

O
omegaga 已提交
1171 1172 1173
date_tiered_test: utilities/date_tiered/date_tiered_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1174
write_batch_with_index_test: utilities/write_batch_with_index/write_batch_with_index_test.o $(LIBOBJECTS) $(TESTHARNESS)
1175
	$(AM_LINK)
1176

I
Igor Canadi 已提交
1177
flush_job_test: db/flush_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
1178
	$(AM_LINK)
A
Andres Noetzli 已提交
1179 1180 1181

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

I
Igor Canadi 已提交
1183
compaction_job_test: db/compaction_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
1184
	$(AM_LINK)
I
Igor Canadi 已提交
1185

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

1189 1190 1191
compact_on_deletion_collector_test: utilities/table_properties_collectors/compact_on_deletion_collector_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1192
wal_manager_test: db/wal_manager_test.o $(LIBOBJECTS) $(TESTHARNESS)
1193
	$(AM_LINK)
I
Igor Canadi 已提交
1194

J
jorlow@chromium.org 已提交
1195
dbformat_test: db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS)
1196
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1197

1198
env_basic_test: env/env_basic_test.o $(LIBOBJECTS) $(TESTHARNESS)
1199 1200
	$(AM_LINK)

1201
env_test: env/env_test.o $(LIBOBJECTS) $(TESTHARNESS)
1202
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1203

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

L
Lei Jin 已提交
1207
rate_limiter_test: util/rate_limiter_test.o $(LIBOBJECTS) $(TESTHARNESS)
1208
	$(AM_LINK)
L
Lei Jin 已提交
1209

I
Islam AbdelRahman 已提交
1210 1211 1212
delete_scheduler_test: util/delete_scheduler_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1213
filename_test: db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS)
1214
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1215

1216 1217 1218
file_reader_writer_test: util/file_reader_writer_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1219
block_based_filter_block_test: table/block_based_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1220
	$(AM_LINK)
1221 1222

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

M
Maysam Yabandeh 已提交
1225 1226 1227
partitioned_filter_block_test: table/partitioned_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1228
log_test: db/log_test.o $(LIBOBJECTS) $(TESTHARNESS)
M
Maysam Yabandeh 已提交
1229 1230 1231
	$(AM_LINK)

cleanable_test: table/cleanable_test.o $(LIBOBJECTS) $(TESTHARNESS)
1232
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1233 1234

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

D
Dhruba Borthakur 已提交
1237
block_test: table/block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1238
	$(AM_LINK)
D
Dhruba Borthakur 已提交
1239

1240
inlineskiplist_test: memtable/inlineskiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
N
Nathan Bronson 已提交
1241 1242
	$(AM_LINK)

1243
skiplist_test: memtable/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
1244
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1245

1246 1247 1248
write_buffer_manager_test: memtable/write_buffer_manager_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1249
version_edit_test: db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS)
1250
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1251

1252
version_set_test: db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS)
1253
	$(AM_LINK)
1254

S
sdong 已提交
1255
compaction_picker_test: db/compaction_picker_test.o $(LIBOBJECTS) $(TESTHARNESS)
1256
	$(AM_LINK)
S
sdong 已提交
1257

S
sdong 已提交
1258
version_builder_test: db/version_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
1259
	$(AM_LINK)
S
sdong 已提交
1260

1261
file_indexer_test: db/file_indexer_test.o $(LIBOBJECTS) $(TESTHARNESS)
1262
	$(AM_LINK)
1263

1264
reduce_levels_test: tools/reduce_levels_test.o $(LIBOBJECTS) $(TESTHARNESS)
1265
	$(AM_LINK)
1266

J
jorlow@chromium.org 已提交
1267
write_batch_test: db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS)
1268
	$(AM_LINK)
1269

1270
write_controller_test: db/write_controller_test.o $(LIBOBJECTS) $(TESTHARNESS)
1271
	$(AM_LINK)
1272

1273 1274 1275
merge_helper_test: db/merge_helper_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1276 1277 1278
memory_test: utilities/memory/memory_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
Jim Paton 已提交
1279
merge_test: db/merge_test.o $(LIBOBJECTS) $(TESTHARNESS)
1280
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1281

I
Igor Canadi 已提交
1282
merger_test: table/merger_test.o $(LIBOBJECTS) $(TESTHARNESS)
1283
	$(AM_LINK)
I
Igor Canadi 已提交
1284

1285 1286 1287
util_merge_operators_test: utilities/util_merge_operators_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1288 1289 1290
options_file_test: db/options_file_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1291
deletefile_test: db/deletefile_test.o $(LIBOBJECTS) $(TESTHARNESS)
1292
	$(AM_LINK)
1293

1294
geodb_test: utilities/geodb/geodb_test.o $(LIBOBJECTS) $(TESTHARNESS)
1295
	$(AM_LINK)
1296

1297 1298 1299 1300 1301 1302
rocksdb_dump: tools/dump/rocksdb_dump.o $(LIBOBJECTS)
	$(AM_LINK)

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

1303
cuckoo_table_builder_test: table/cuckoo_table_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
1304
	$(AM_LINK)
1305

I
Igor Canadi 已提交
1306
cuckoo_table_reader_test: table/cuckoo_table_reader_test.o $(LIBOBJECTS) $(TESTHARNESS)
1307
	$(AM_LINK)
1308

1309
cuckoo_table_db_test: db/cuckoo_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1310
	$(AM_LINK)
1311

1312
listener_test: db/listener_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1313
	$(AM_LINK)
1314

Y
Yueh-Hsuan Chiang 已提交
1315
thread_list_test: util/thread_list_test.o $(LIBOBJECTS) $(TESTHARNESS)
1316
	$(AM_LINK)
Y
Yueh-Hsuan Chiang 已提交
1317

1318 1319 1320
compact_files_test: db/compact_files_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1321
options_test: options/options_test.o $(LIBOBJECTS) $(TESTHARNESS)
1322 1323
	$(AM_LINK)

1324
options_settable_test: options/options_settable_test.o $(LIBOBJECTS) $(TESTHARNESS)
1325
	$(AM_LINK)
1326

1327 1328 1329
options_util_test: utilities/options/options_util_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1330 1331 1332
db_bench_tool_test: tools/db_bench_tool_test.o $(BENCHTOOLOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1333 1334 1335
event_logger_test: util/event_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
Anirban Rahut 已提交
1336 1337 1338
timer_queue_test: util/timer_queue_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1339
sst_dump_test: tools/sst_dump_test.o $(LIBOBJECTS) $(TESTHARNESS)
1340
	$(AM_LINK)
1341

O
omegaga 已提交
1342 1343 1344
column_aware_encoding_test: utilities/column_aware_encoding_test.o $(TESTHARNESS) $(EXPOBJECTS)
	$(AM_LINK)

A
agiardullo 已提交
1345 1346 1347
optimistic_transaction_test: utilities/transactions/optimistic_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1348
mock_env_test : env/mock_env_test.o $(LIBOBJECTS) $(TESTHARNESS)
1349
	$(AM_LINK)
1350

1351
manual_compaction_test: db/manual_compaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
1352
	$(AM_LINK)
1353

1354
filelock_test: util/filelock_test.o $(LIBOBJECTS) $(TESTHARNESS)
1355
	$(AM_LINK)
K
Kai Liu 已提交
1356

1357
auto_roll_logger_test: util/auto_roll_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
1358
	$(AM_LINK)
1359

A
agiardullo 已提交
1360 1361 1362
memtable_list_test: db/memtable_list_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
agiardullo 已提交
1363 1364 1365
write_callback_test: db/write_callback_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1366 1367 1368
heap_test: util/heap_test.o $(GTEST)
	$(AM_LINK)

A
agiardullo 已提交
1369 1370 1371
transaction_test: utilities/transactions/transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1372
sst_dump: tools/sst_dump.o $(LIBOBJECTS)
1373
	$(AM_LINK)
1374

Y
Yi Wu 已提交
1375 1376 1377
blob_dump: tools/blob_dump.o $(LIBOBJECTS)
	$(AM_LINK)

O
omegaga 已提交
1378 1379 1380
column_aware_encoding_exp: utilities/column_aware_encoding_exp.o $(EXPOBJECTS)
	$(AM_LINK)

A
Andrew Kryczka 已提交
1381 1382 1383
repair_test: db/repair_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1384
ldb_cmd_test: tools/ldb_cmd_test.o $(LIBOBJECTS) $(TESTHARNESS)
1385 1386
	$(AM_LINK)

1387
ldb: tools/ldb.o $(LIBOBJECTS)
1388
	$(AM_LINK)
1389

1390
iostats_context_test: monitoring/iostats_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
1391 1392
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)

1393 1394 1395
persistent_cache_test: utilities/persistent_cache/persistent_cache_test.o  db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1396
statistics_test: monitoring/statistics_test.o $(LIBOBJECTS) $(TESTHARNESS)
1397 1398
	$(AM_LINK)

1399
lru_cache_test: cache/lru_cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yi Wu 已提交
1400 1401
	$(AM_LINK)

1402 1403
lua_test: utilities/lua/rocks_lua_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)
Y
Yi Wu 已提交
1404

A
Andrew Kryczka 已提交
1405 1406 1407
range_del_aggregator_test: db/range_del_aggregator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
1408 1409 1410
blob_db_test: utilities/blob_db/blob_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442
#-------------------------------------------------
# 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
	for header_dir in `find "include/rocksdb" -type d`; do \
		install -d $(INSTALL_PATH)/$$header_dir; \
	done
	for header in `find "include/rocksdb" -type f -name *.h`; do \
		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 已提交
1443
	[ -e $(SHARED4) ] && $(MAKE) install-shared || :
I
Igor Canadi 已提交
1444 1445 1446 1447

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


1448 1449 1450 1451
# ---------------------------------------------------------------------------
# Jni stuff
# ---------------------------------------------------------------------------

1452
JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/linux
D
David Bernard 已提交
1453 1454 1455 1456 1457
ifeq ($(PLATFORM), OS_SOLARIS)
	ARCH := $(shell isainfo -b)
else
	ARCH := $(shell getconf LONG_BIT)
endif
1458 1459 1460 1461 1462 1463

ifeq (,$(findstring ppc,$(MACHINE)))
        ROCKSDBJNILIB = librocksdbjni-linux$(ARCH).so
else
        ROCKSDBJNILIB = librocksdbjni-linux-$(MACHINE).so
endif
1464
ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-linux$(ARCH).jar
1465
ROCKSDB_JAR_ALL = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH).jar
C
Chris Riccomini 已提交
1466
ROCKSDB_JAVADOCS_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-javadoc.jar
1467
ROCKSDB_SOURCES_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-sources.jar
1468 1469
SHA256_CMD = sha256sum

T
Tomas Kolda 已提交
1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481
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
SNAPPY_VER ?= 1.1.4
SNAPPY_SHA256 ?= 134bfe122fd25599bb807bb8130e7ba6d9bdb851e0b16efcb83ac4f5d0b70057
SNAPPY_DOWNLOAD_BASE ?= https://github.com/google/snappy/releases/download
LZ4_VER ?= 1.7.5
LZ4_SHA256 ?= 0190cacd63022ccb86f44fa5041dc6c3804407ad61550ca21c382827319e7e7e
LZ4_DOWNLOAD_BASE ?= https://github.com/lz4/lz4/archive
1482 1483 1484
ZSTD_VER ?= 1.2.0
ZSTD_SHA256 ?= 4a7e4593a3638276ca7f2a09dc4f38e674d8317bbea51626393ca73fc047cbfb
ZSTD_DOWNLOAD_BASE ?= https://github.com/facebook/zstd/archive
1485 1486

ifeq ($(PLATFORM), OS_MACOSX)
D
David Bernard 已提交
1487 1488
	ROCKSDBJNILIB = librocksdbjni-osx.jnilib
	ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-osx.jar
1489
	SHA256_CMD = openssl sha256 -r
1490 1491 1492 1493 1494
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
1495
endif
1496 1497 1498 1499 1500
ifeq ($(PLATFORM), OS_FREEBSD)
	JAVA_INCLUDE += -I$(JAVA_HOME)/include/freebsd
	ROCKSDBJNILIB = librocksdbjni-freebsd$(ARCH).so
	ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-freebsd$(ARCH).jar
endif
D
David Bernard 已提交
1501 1502 1503 1504
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
1505
	SHA256_CMD = digest -a sha256
D
David Bernard 已提交
1506
endif
T
Tomas Kolda 已提交
1507 1508 1509 1510 1511 1512
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
1513

N
Naveen 已提交
1514
libz.a:
1515
	-rm -rf zlib-$(ZLIB_VER)
T
Tomas Kolda 已提交
1516
	curl -O -L ${ZLIB_DOWNLOAD_BASE}/zlib-$(ZLIB_VER).tar.gz
1517 1518 1519 1520 1521 1522
	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
T
Tomas Kolda 已提交
1523
	cd zlib-$(ZLIB_VER) && CFLAGS='-fPIC ${EXTRA_CFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' ./configure --static && make
1524
	cp zlib-$(ZLIB_VER)/libz.a .
N
Naveen 已提交
1525 1526

libbz2.a:
1527
	-rm -rf bzip2-$(BZIP2_VER)
T
Tomas Kolda 已提交
1528
	curl -O -L ${BZIP2_DOWNLOAD_BASE}/$(BZIP2_VER)/bzip2-$(BZIP2_VER).tar.gz
1529 1530 1531 1532 1533 1534
	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
T
Tomas Kolda 已提交
1535
	cd bzip2-$(BZIP2_VER) && make CFLAGS='-fPIC -O2 -g -D_FILE_OFFSET_BITS=64 ${EXTRA_CFLAGS}' AR='ar ${EXTRA_ARFLAGS}'
1536
	cp bzip2-$(BZIP2_VER)/libbz2.a .
N
Naveen 已提交
1537

N
Naveen 已提交
1538
libsnappy.a:
1539
	-rm -rf snappy-$(SNAPPY_VER)
T
Tomas Kolda 已提交
1540
	curl -O -L ${SNAPPY_DOWNLOAD_BASE}/$(SNAPPY_VER)/snappy-$(SNAPPY_VER).tar.gz
1541 1542 1543 1544 1545 1546
	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 已提交
1547 1548
	cd snappy-$(SNAPPY_VER) && CFLAGS='${EXTRA_CFLAGS}' CXXFLAGS='${EXTRA_CXXFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' ./configure --with-pic --enable-static --disable-shared
	cd snappy-$(SNAPPY_VER) && make ${SNAPPY_MAKE_TARGET}
1549
	cp snappy-$(SNAPPY_VER)/.libs/libsnappy.a .
1550

1551
liblz4.a:
1552
	-rm -rf lz4-$(LZ4_VER)
T
Tomas Kolda 已提交
1553
	curl -O -L ${LZ4_DOWNLOAD_BASE}/v$(LZ4_VER).tar.gz
1554 1555 1556 1557 1558 1559 1560
	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
T
Tomas Kolda 已提交
1561
	cd lz4-$(LZ4_VER)/lib && make CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' all
1562
	cp lz4-$(LZ4_VER)/lib/liblz4.a .
N
Naveen 已提交
1563

1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576
libzstd.a:
	-rm -rf zstd-$(ZSTD_VER)
	curl -O -L ${ZSTD_DOWNLOAD_BASE}/v$(ZSTD_VER).tar.gz
	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
	cd zstd-$(ZSTD_VER)/lib && make CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' all
	cp zstd-$(ZSTD_VER)/lib/libzstd.a .

1577 1578 1579
# A version of each $(LIBOBJECTS) compiled with -fPIC and a fixed set of static compression libraries
java_static_libobjects = $(patsubst %,jls/%,$(LIBOBJECTS))
CLEAN_FILES += jls
1580

1581
ifneq ($(ROCKSDB_JAVA_NO_COMPRESSION), 1)
1582
JAVA_COMPRESSIONS = libz.a libbz2.a libsnappy.a liblz4.a libzstd.a
1583 1584
endif

1585 1586
JAVA_STATIC_FLAGS = -DZLIB -DBZIP2 -DSNAPPY -DLZ4 -DZSTD
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
1587

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

1591
rocksdbjavastatic: $(java_static_libobjects)
F
fyrz 已提交
1592
	cd java;$(MAKE) javalib;
1593
	rm -f ./java/target/$(ROCKSDBJNILIB)
1594 1595
	$(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC \
	  -o ./java/target/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) \
1596
	  $(java_static_libobjects) $(COVERAGEFLAGS) \
1597
	  $(JAVA_COMPRESSIONS) $(JAVA_STATIC_LDFLAGS)
T
Tomas Kolda 已提交
1598
	cd java/target;strip $(STRIPFLAGS) $(ROCKSDBJNILIB)
1599 1600 1601 1602 1603
	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 已提交
1604

1605
rocksdbjavastaticrelease: rocksdbjavastatic
1606
	cd java/crossbuild && vagrant destroy -f && vagrant up linux32 && vagrant halt linux32 && vagrant up linux64 && vagrant halt linux64
1607
	cd java;jar -cf target/$(ROCKSDB_JAR_ALL) HISTORY*.md
1608
	cd java/target;jar -uf $(ROCKSDB_JAR_ALL) librocksdbjni-*.so librocksdbjni-*.jnilib
1609
	cd java/target/classes;jar -uf ../$(ROCKSDB_JAR_ALL) org/rocksdb/*.class org/rocksdb/util/*.class
1610

1611 1612 1613
rocksdbjavastaticreleasedocker: rocksdbjavastatic
	DOCKER_LINUX_X64_CONTAINER=`docker ps -aqf name=rocksdb_linux_x64-be`; \
	if [ -z "$$DOCKER_LINUX_X64_CONTAINER" ]; then \
1614
		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; \
1615 1616 1617 1618
	fi
	docker start -a rocksdb_linux_x64-be
	DOCKER_LINUX_X86_CONTAINER=`docker ps -aqf name=rocksdb_linux_x86-be`; \
	if [ -z "$$DOCKER_LINUX_X86_CONTAINER" ]; then \
1619
		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; \
1620 1621 1622 1623 1624 1625
	fi
	docker start -a rocksdb_linux_x86-be
	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

1626 1627
rocksdbjavastaticpublish: rocksdbjavastaticrelease rocksdbjavastaticpublishcentral

1628 1629
rocksdbjavastaticpublishdocker: rocksdbjavastaticreleasedocker rocksdbjavastaticpublishcentral

1630
rocksdbjavastaticpublishcentral:
1631 1632 1633 1634 1635
	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
1636
	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
1637
	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
1638

1639 1640 1641 1642 1643 1644 1645
# A version of each $(LIBOBJECTS) compiled with -fPIC
java_libobjects = $(patsubst %,jl/%,$(LIBOBJECTS))
CLEAN_FILES += jl

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

1646
rocksdbjava: $(java_libobjects)
1647 1648 1649 1650 1651 1652
	$(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
1653 1654 1655 1656

jclean:
	cd java;$(MAKE) clean;

1657 1658 1659 1660 1661 1662
jtest_compile: rocksdbjava
	cd java;$(MAKE) java_test

jtest_run:
	cd java;$(MAKE) run_test

1663
jtest: rocksdbjava
1664
	cd java;$(MAKE) sample;$(MAKE) test;
1665

1666 1667 1668
jdb_bench:
	cd java;$(MAKE) db_bench;

1669 1670
commit_prereq: build_tools/rocksdb-lego-determinator \
               build_tools/precommit_checker.py
1671
	J=$(J) build_tools/precommit_checker.py unit unit_481 clang_unit release release_481 clang_release tsan asan ubsan lite unit_non_shm
1672
	$(MAKE) clean && $(MAKE) jclean && $(MAKE) rocksdbjava;
1673

1674 1675 1676
# ---------------------------------------------------------------------------
#  	Platform-specific compilation
# ---------------------------------------------------------------------------
J
Jim Paton 已提交
1677

1678 1679 1680
ifeq ($(PLATFORM), IOS)
# For iOS, create universal object files to be used on both the simulator and
# a device.
H
heyongqiang 已提交
1681 1682 1683
PLATFORMSROOT=/Applications/Xcode.app/Contents/Developer/Platforms
SIMULATORROOT=$(PLATFORMSROOT)/iPhoneSimulator.platform/Developer
DEVICEROOT=$(PLATFORMSROOT)/iPhoneOS.platform/Developer
I
Igor Canadi 已提交
1684
IOSVERSION=$(shell defaults read $(PLATFORMSROOT)/iPhoneOS.platform/version CFBundleShortVersionString)
1685

1686 1687
.cc.o:
	mkdir -p ios-x86/$(dir $@)
I
Igor Canadi 已提交
1688
	$(CXX) $(CXXFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@
1689
	mkdir -p ios-arm/$(dir $@)
I
Igor Canadi 已提交
1690
	xcrun -sdk iphoneos $(CXX) $(CXXFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -arch armv7s -arch arm64 -c $< -o ios-arm/$@
1691
	lipo ios-x86/$@ ios-arm/$@ -create -output $@
1692 1693 1694

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

1700
else
J
jorlow@chromium.org 已提交
1701
.cc.o:
1702
	$(AM_V_CC)$(CXX) $(CXXFLAGS) -c $< -o $@ $(COVERAGEFLAGS)
1703 1704

.c.o:
1705
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
1706
endif
1707

1708 1709 1710 1711
# ---------------------------------------------------------------------------
#  	Source files dependencies detection
# ---------------------------------------------------------------------------

O
omegaga 已提交
1712
all_sources = $(LIB_SOURCES) $(MAIN_SOURCES) $(MOCK_LIB_SOURCES) $(TOOL_LIB_SOURCES) $(BENCH_LIB_SOURCES) $(TEST_LIB_SOURCES) $(EXP_LIB_SOURCES)
1713 1714
DEPFILES = $(all_sources:.cc=.d)

1715 1716 1717 1718 1719
# 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.
1720
$(DEPFILES): %.d: %.cc
1721
	@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
1722
	  -MM -MT'$@' -MT'$(<:.cc=.o)' "$<" -o '$@'
1723 1724 1725

depend: $(DEPFILES)

1726 1727 1728 1729
# 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.
1730
ifneq ($(MAKECMDGOALS),clean)
1731
ifneq ($(MAKECMDGOALS),format)
1732 1733
ifneq ($(MAKECMDGOALS),jclean)
ifneq ($(MAKECMDGOALS),jtest)
1734
ifneq ($(MAKECMDGOALS),package)
1735
ifneq ($(MAKECMDGOALS),analyze)
1736 1737
-include $(DEPFILES)
endif
1738
endif
1739 1740
endif
endif
1741
endif
1742
endif