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

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

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

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

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

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

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

500 501 502
TEST_LIBS = \
	librocksdb_env_basic_test.a

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

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

518 519 520
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)
521

522 523
default: all

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

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

559 560 561 562 563 564 565 566
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 已提交
567 568 569

endif  # PLATFORM_SHARED_EXT

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

M
maurice barnum 已提交
575

576
all: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(TESTS)
577

I
Igor Canadi 已提交
578 579 580 581
static_lib: $(LIBRARY)

shared_lib: $(SHARED)

M
maurice barnum 已提交
582 583
tools: $(TOOLS)

584 585
tools_lib: $(TOOLS_LIBRARY)

586 587
test_libs: $(TEST_LIBS)

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

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

coverage:
Y
Yueh-Hsuan Chiang 已提交
596 597 598 599 600
	$(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 已提交
601

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

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

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

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

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

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

CLEAN_FILES += t LOG $(TMPD)
738

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

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

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

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

I
Igor Canadi 已提交
778
crash_test: whitebox_crash_test blackbox_crash_test
779 780

blackbox_crash_test: db_stress
781
	python -u tools/db_crashtest.py --simple blackbox
782
	python -u tools/db_crashtest.py blackbox
783

784 785 786 787
ifeq ($(CRASH_TEST_KILL_ODD),)
  CRASH_TEST_KILL_ODD=888887
endif

788
whitebox_crash_test: db_stress
789 790 791 792
	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)
793

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

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

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

814 815 816
valgrind_test:
	DISABLE_JEMALLOC=1 $(MAKE) valgrind_check

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

835 836 837 838 839 840 841

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

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

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

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

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

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

E
Evan Shaw 已提交
906 907
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 已提交
908

J
jorlow@chromium.org 已提交
909
clean:
Y
Yueh-Hsuan Chiang 已提交
910 911 912 913
	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 已提交
914
	rm -rf bzip2* snappy* zlib* lz4* zstd*
Y
Yi Wu 已提交
915
	cd java; $(MAKE) clean
916

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

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

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

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

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

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

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

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

949 950 951
persistent_cache_bench: utilities/persistent_cache/persistent_cache_bench.o $(LIBOBJECTS) $(TESTUTIL)
	$(AM_LINK)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

994 995 996
hash_test: util/hash_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

997 998 999
option_change_migration_test: utilities/option_change_migration/option_change_migration_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1000
stringappend_test: utilities/merge_operators/string_append/stringappend_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1001
	$(AM_LINK)
1002

Y
Yi Wu 已提交
1003
cassandra_format_test: utilities/merge_operators/cassandra/cassandra_format_test.o $(LIBOBJECTS) $(TESTHARNESS)
1004 1005 1006 1007 1008
	$(AM_LINK)

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

Y
Yi Wu 已提交
1009
cassandra_row_merge_test: utilities/merge_operators/cassandra/cassandra_row_merge_test.o utilities/merge_operators/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
1010 1011
	$(AM_LINK)

Y
Yi Wu 已提交
1012
cassandra_serialize_test: utilities/merge_operators/cassandra/cassandra_serialize_test.o $(LIBOBJECTS) $(TESTHARNESS)
1013 1014
	$(AM_LINK)

1015
redis_test: utilities/redis/redis_lists_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1016
	$(AM_LINK)
1017

1018 1019 1020
hash_table_test: utilities/persistent_cache/hash_table_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1021
histogram_test: monitoring/histogram_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1022
	$(AM_LINK)
A
Abhishek Kona 已提交
1023

L
Lei Jin 已提交
1024
thread_local_test: util/thread_local_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1025
	$(AM_LINK)
L
Lei Jin 已提交
1026

J
jorlow@chromium.org 已提交
1027
corruption_test: db/corruption_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1028
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1029 1030

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

1033
slice_transform_test: util/slice_transform_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1034
	$(AM_LINK)
1035

1036
db_basic_test: db/db_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
E
Ewout Prangsma 已提交
1037 1038 1039
	$(AM_LINK)

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

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

1045 1046 1047
db_test2: db/db_test2.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1048 1049 1050
db_block_cache_test: db/db_block_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
1051 1052 1053
db_bloom_filter_test: db/db_bloom_filter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1054
db_log_iter_test: db/db_log_iter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1055
	$(AM_LINK)
1056

1057
db_compaction_filter_test: db/db_compaction_filter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1058 1059
	$(AM_LINK)

1060
db_compaction_test: db/db_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1061 1062
	$(AM_LINK)

1063
db_dynamic_level_test: db/db_dynamic_level_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1064 1065
	$(AM_LINK)

1066 1067 1068
db_flush_test: db/db_flush_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1069
db_inplace_update_test: db/db_inplace_update_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1070 1071
	$(AM_LINK)

Y
Yi Wu 已提交
1072 1073 1074
db_iterator_test: db/db_iterator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1075 1076 1077
db_memtable_test: db/db_memtable_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1078 1079 1080
db_merge_operator_test: db/db_merge_operator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1081 1082 1083
db_options_test: db/db_options_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1084 1085 1086
db_range_del_test: db/db_range_del_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

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

1090 1091 1092
db_statistics_test: db/db_statistics_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
1093 1094 1095
db_write_test: db/db_write_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

S
Siying Dong 已提交
1096 1097 1098
external_sst_file_basic_test: db/external_sst_file_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1099 1100 1101
external_sst_file_test: db/external_sst_file_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1102
db_tailing_iter_test: db/db_tailing_iter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1103 1104
	$(AM_LINK)

S
Stanislau Hlebik 已提交
1105
db_iter_test: db/db_iter_test.o $(LIBOBJECTS) $(TESTHARNESS)
1106
	$(AM_LINK)
S
Stanislau Hlebik 已提交
1107

1108
db_universal_compaction_test: db/db_universal_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1109 1110
	$(AM_LINK)

1111
db_wal_test: db/db_wal_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
S
sdong 已提交
1112 1113
	$(AM_LINK)

O
omegaga 已提交
1114 1115 1116
db_io_failure_test: db/db_io_failure_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1117 1118 1119
db_properties_test: db/db_properties_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1120 1121 1122
db_table_properties_test: db/db_table_properties_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1123
log_write_bench: util/log_write_bench.o $(LIBOBJECTS) $(TESTHARNESS)
D
dx9 已提交
1124
	$(AM_LINK) $(PROFILING_FLAGS)
1125

S
Siying Dong 已提交
1126
plain_table_db_test: db/plain_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1127
	$(AM_LINK)
S
Siying Dong 已提交
1128

1129
comparator_db_test: db/comparator_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1130
	$(AM_LINK)
1131

1132
table_reader_bench: table/table_reader_bench.o $(LIBOBJECTS) $(TESTHARNESS)
D
dx9 已提交
1133
	$(AM_LINK) $(PROFILING_FLAGS)
1134

1135
perf_context_test: db/perf_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
1136
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)
1137

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

I
Igor Canadi 已提交
1141
backupable_db_test: utilities/backupable/backupable_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1142
	$(AM_LINK)
I
Igor Canadi 已提交
1143

1144 1145 1146
checkpoint_test: utilities/checkpoint/checkpoint_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1147
document_db_test: utilities/document/document_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1148
	$(AM_LINK)
I
Igor Canadi 已提交
1149

I
Igor Canadi 已提交
1150
json_document_test: utilities/document/json_document_test.o $(LIBOBJECTS) $(TESTHARNESS)
1151
	$(AM_LINK)
I
Igor Canadi 已提交
1152

1153 1154 1155
sim_cache_test: utilities/simulator_cache/sim_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1156
spatial_db_test: utilities/spatialdb/spatial_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1157
	$(AM_LINK)
I
Igor Canadi 已提交
1158

S
Sage Weil 已提交
1159 1160 1161
env_mirror_test: utilities/env_mirror_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
Andrew Kryczka 已提交
1162 1163 1164
env_timed_test: utilities/env_timed_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1165 1166 1167 1168 1169
ifdef ROCKSDB_USE_LIBRADOS
env_librados_test: utilities/env_librados_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(COVERAGEFLAGS)
endif

1170
object_registry_test: utilities/object_registry_test.o $(LIBOBJECTS) $(TESTHARNESS)
1171 1172
	$(AM_LINK)

1173
ttl_test: utilities/ttl/ttl_test.o $(LIBOBJECTS) $(TESTHARNESS)
1174
	$(AM_LINK)
1175

O
omegaga 已提交
1176 1177 1178
date_tiered_test: utilities/date_tiered/date_tiered_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1179
write_batch_with_index_test: utilities/write_batch_with_index/write_batch_with_index_test.o $(LIBOBJECTS) $(TESTHARNESS)
1180
	$(AM_LINK)
1181

I
Igor Canadi 已提交
1182
flush_job_test: db/flush_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
1183
	$(AM_LINK)
A
Andres Noetzli 已提交
1184 1185 1186

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

I
Igor Canadi 已提交
1188
compaction_job_test: db/compaction_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
1189
	$(AM_LINK)
I
Igor Canadi 已提交
1190

1191 1192 1193
compaction_job_stats_test: db/compaction_job_stats_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1194 1195 1196
compact_on_deletion_collector_test: utilities/table_properties_collectors/compact_on_deletion_collector_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1197
wal_manager_test: db/wal_manager_test.o $(LIBOBJECTS) $(TESTHARNESS)
1198
	$(AM_LINK)
I
Igor Canadi 已提交
1199

J
jorlow@chromium.org 已提交
1200
dbformat_test: db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS)
1201
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1202

1203
env_basic_test: env/env_basic_test.o $(LIBOBJECTS) $(TESTHARNESS)
1204 1205
	$(AM_LINK)

1206
env_test: env/env_test.o $(LIBOBJECTS) $(TESTHARNESS)
1207
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1208

1209
fault_injection_test: db/fault_injection_test.o $(LIBOBJECTS) $(TESTHARNESS)
1210
	$(AM_LINK)
1211

L
Lei Jin 已提交
1212
rate_limiter_test: util/rate_limiter_test.o $(LIBOBJECTS) $(TESTHARNESS)
1213
	$(AM_LINK)
L
Lei Jin 已提交
1214

I
Islam AbdelRahman 已提交
1215 1216 1217
delete_scheduler_test: util/delete_scheduler_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1218
filename_test: db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS)
1219
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1220

1221 1222 1223
file_reader_writer_test: util/file_reader_writer_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1224
block_based_filter_block_test: table/block_based_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1225
	$(AM_LINK)
1226 1227

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

M
Maysam Yabandeh 已提交
1230 1231 1232
partitioned_filter_block_test: table/partitioned_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1233
log_test: db/log_test.o $(LIBOBJECTS) $(TESTHARNESS)
M
Maysam Yabandeh 已提交
1234 1235 1236
	$(AM_LINK)

cleanable_test: table/cleanable_test.o $(LIBOBJECTS) $(TESTHARNESS)
1237
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1238 1239

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

D
Dhruba Borthakur 已提交
1242
block_test: table/block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1243
	$(AM_LINK)
D
Dhruba Borthakur 已提交
1244

1245
inlineskiplist_test: memtable/inlineskiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
N
Nathan Bronson 已提交
1246 1247
	$(AM_LINK)

1248
skiplist_test: memtable/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
1249
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1250

1251 1252 1253
write_buffer_manager_test: memtable/write_buffer_manager_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1254
version_edit_test: db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS)
1255
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1256

1257
version_set_test: db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS)
1258
	$(AM_LINK)
1259

S
sdong 已提交
1260
compaction_picker_test: db/compaction_picker_test.o $(LIBOBJECTS) $(TESTHARNESS)
1261
	$(AM_LINK)
S
sdong 已提交
1262

S
sdong 已提交
1263
version_builder_test: db/version_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
1264
	$(AM_LINK)
S
sdong 已提交
1265

1266
file_indexer_test: db/file_indexer_test.o $(LIBOBJECTS) $(TESTHARNESS)
1267
	$(AM_LINK)
1268

1269
reduce_levels_test: tools/reduce_levels_test.o $(LIBOBJECTS) $(TESTHARNESS)
1270
	$(AM_LINK)
1271

J
jorlow@chromium.org 已提交
1272
write_batch_test: db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS)
1273
	$(AM_LINK)
1274

1275
write_controller_test: db/write_controller_test.o $(LIBOBJECTS) $(TESTHARNESS)
1276
	$(AM_LINK)
1277

1278 1279 1280
merge_helper_test: db/merge_helper_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1281 1282 1283
memory_test: utilities/memory/memory_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
Jim Paton 已提交
1284
merge_test: db/merge_test.o $(LIBOBJECTS) $(TESTHARNESS)
1285
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1286

I
Igor Canadi 已提交
1287
merger_test: table/merger_test.o $(LIBOBJECTS) $(TESTHARNESS)
1288
	$(AM_LINK)
I
Igor Canadi 已提交
1289

1290 1291 1292
util_merge_operators_test: utilities/util_merge_operators_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1293 1294 1295
options_file_test: db/options_file_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1296
deletefile_test: db/deletefile_test.o $(LIBOBJECTS) $(TESTHARNESS)
1297
	$(AM_LINK)
1298

1299
geodb_test: utilities/geodb/geodb_test.o $(LIBOBJECTS) $(TESTHARNESS)
1300
	$(AM_LINK)
1301

1302 1303 1304 1305 1306 1307
rocksdb_dump: tools/dump/rocksdb_dump.o $(LIBOBJECTS)
	$(AM_LINK)

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

1308
cuckoo_table_builder_test: table/cuckoo_table_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
1309
	$(AM_LINK)
1310

I
Igor Canadi 已提交
1311
cuckoo_table_reader_test: table/cuckoo_table_reader_test.o $(LIBOBJECTS) $(TESTHARNESS)
1312
	$(AM_LINK)
1313

1314
cuckoo_table_db_test: db/cuckoo_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1315
	$(AM_LINK)
1316

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

Y
Yueh-Hsuan Chiang 已提交
1320
thread_list_test: util/thread_list_test.o $(LIBOBJECTS) $(TESTHARNESS)
1321
	$(AM_LINK)
Y
Yueh-Hsuan Chiang 已提交
1322

1323 1324 1325
compact_files_test: db/compact_files_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1326
options_test: options/options_test.o $(LIBOBJECTS) $(TESTHARNESS)
1327 1328
	$(AM_LINK)

1329
options_settable_test: options/options_settable_test.o $(LIBOBJECTS) $(TESTHARNESS)
1330
	$(AM_LINK)
1331

1332 1333 1334
options_util_test: utilities/options/options_util_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1335 1336 1337
db_bench_tool_test: tools/db_bench_tool_test.o $(BENCHTOOLOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1338 1339 1340
event_logger_test: util/event_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
Anirban Rahut 已提交
1341 1342 1343
timer_queue_test: util/timer_queue_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1344
sst_dump_test: tools/sst_dump_test.o $(LIBOBJECTS) $(TESTHARNESS)
1345
	$(AM_LINK)
1346

O
omegaga 已提交
1347 1348 1349
column_aware_encoding_test: utilities/column_aware_encoding_test.o $(TESTHARNESS) $(EXPOBJECTS)
	$(AM_LINK)

A
agiardullo 已提交
1350 1351 1352
optimistic_transaction_test: utilities/transactions/optimistic_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1353
mock_env_test : env/mock_env_test.o $(LIBOBJECTS) $(TESTHARNESS)
1354
	$(AM_LINK)
1355

1356
manual_compaction_test: db/manual_compaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
1357
	$(AM_LINK)
1358

1359
filelock_test: util/filelock_test.o $(LIBOBJECTS) $(TESTHARNESS)
1360
	$(AM_LINK)
K
Kai Liu 已提交
1361

1362
auto_roll_logger_test: util/auto_roll_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
1363
	$(AM_LINK)
1364

A
agiardullo 已提交
1365 1366 1367
memtable_list_test: db/memtable_list_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
agiardullo 已提交
1368 1369 1370
write_callback_test: db/write_callback_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1371 1372 1373
heap_test: util/heap_test.o $(GTEST)
	$(AM_LINK)

A
agiardullo 已提交
1374 1375 1376
transaction_test: utilities/transactions/transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

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

Y
Yi Wu 已提交
1380 1381 1382
blob_dump: tools/blob_dump.o $(LIBOBJECTS)
	$(AM_LINK)

O
omegaga 已提交
1383 1384 1385
column_aware_encoding_exp: utilities/column_aware_encoding_exp.o $(EXPOBJECTS)
	$(AM_LINK)

A
Andrew Kryczka 已提交
1386 1387 1388
repair_test: db/repair_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1389
ldb_cmd_test: tools/ldb_cmd_test.o $(LIBOBJECTS) $(TESTHARNESS)
1390 1391
	$(AM_LINK)

1392
ldb: tools/ldb.o $(LIBOBJECTS)
1393
	$(AM_LINK)
1394

1395
iostats_context_test: monitoring/iostats_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
1396 1397
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)

1398 1399 1400
persistent_cache_test: utilities/persistent_cache/persistent_cache_test.o  db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1401
statistics_test: monitoring/statistics_test.o $(LIBOBJECTS) $(TESTHARNESS)
1402 1403
	$(AM_LINK)

1404
lru_cache_test: cache/lru_cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yi Wu 已提交
1405 1406
	$(AM_LINK)

1407 1408
lua_test: utilities/lua/rocks_lua_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)
Y
Yi Wu 已提交
1409

A
Andrew Kryczka 已提交
1410 1411 1412
range_del_aggregator_test: db/range_del_aggregator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
1413 1414 1415
blob_db_test: utilities/blob_db/blob_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
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 1443 1444 1445 1446 1447
#-------------------------------------------------
# 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 已提交
1448
	[ -e $(SHARED4) ] && $(MAKE) install-shared || :
I
Igor Canadi 已提交
1449 1450 1451 1452

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


1453 1454 1455 1456
# ---------------------------------------------------------------------------
# Jni stuff
# ---------------------------------------------------------------------------

1457
JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/linux
D
David Bernard 已提交
1458 1459 1460 1461 1462
ifeq ($(PLATFORM), OS_SOLARIS)
	ARCH := $(shell isainfo -b)
else
	ARCH := $(shell getconf LONG_BIT)
endif
1463 1464 1465 1466 1467 1468

ifeq (,$(findstring ppc,$(MACHINE)))
        ROCKSDBJNILIB = librocksdbjni-linux$(ARCH).so
else
        ROCKSDBJNILIB = librocksdbjni-linux-$(MACHINE).so
endif
1469
ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-linux$(ARCH).jar
1470
ROCKSDB_JAR_ALL = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH).jar
C
Chris Riccomini 已提交
1471
ROCKSDB_JAVADOCS_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-javadoc.jar
1472
ROCKSDB_SOURCES_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-sources.jar
1473 1474
SHA256_CMD = sha256sum

T
Tomas Kolda 已提交
1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486
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
1487 1488 1489
ZSTD_VER ?= 1.2.0
ZSTD_SHA256 ?= 4a7e4593a3638276ca7f2a09dc4f38e674d8317bbea51626393ca73fc047cbfb
ZSTD_DOWNLOAD_BASE ?= https://github.com/facebook/zstd/archive
1490 1491

ifeq ($(PLATFORM), OS_MACOSX)
D
David Bernard 已提交
1492 1493
	ROCKSDBJNILIB = librocksdbjni-osx.jnilib
	ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-osx.jar
1494
	SHA256_CMD = openssl sha256 -r
1495 1496 1497 1498 1499
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
1500
endif
1501 1502 1503 1504 1505
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 已提交
1506 1507 1508 1509
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
1510
	SHA256_CMD = digest -a sha256
D
David Bernard 已提交
1511
endif
T
Tomas Kolda 已提交
1512 1513 1514 1515 1516 1517
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
1518

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

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

N
Naveen 已提交
1543
libsnappy.a:
1544
	-rm -rf snappy-$(SNAPPY_VER)
T
Tomas Kolda 已提交
1545
	curl -O -L ${SNAPPY_DOWNLOAD_BASE}/$(SNAPPY_VER)/snappy-$(SNAPPY_VER).tar.gz
1546 1547 1548 1549 1550 1551
	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 已提交
1552 1553
	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}
1554
	cp snappy-$(SNAPPY_VER)/.libs/libsnappy.a .
1555

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

1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581
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 .

1582 1583 1584
# 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
1585

1586
ifneq ($(ROCKSDB_JAVA_NO_COMPRESSION), 1)
1587
JAVA_COMPRESSIONS = libz.a libbz2.a libsnappy.a liblz4.a libzstd.a
1588 1589
endif

1590 1591
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
1592

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

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

1610
rocksdbjavastaticrelease: rocksdbjavastatic
1611
	cd java/crossbuild && vagrant destroy -f && vagrant up linux32 && vagrant halt linux32 && vagrant up linux64 && vagrant halt linux64
1612
	cd java;jar -cf target/$(ROCKSDB_JAR_ALL) HISTORY*.md
1613
	cd java/target;jar -uf $(ROCKSDB_JAR_ALL) librocksdbjni-*.so librocksdbjni-*.jnilib
1614
	cd java/target/classes;jar -uf ../$(ROCKSDB_JAR_ALL) org/rocksdb/*.class org/rocksdb/util/*.class
1615

1616 1617 1618
rocksdbjavastaticreleasedocker: rocksdbjavastatic
	DOCKER_LINUX_X64_CONTAINER=`docker ps -aqf name=rocksdb_linux_x64-be`; \
	if [ -z "$$DOCKER_LINUX_X64_CONTAINER" ]; then \
1619
		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; \
1620 1621 1622 1623
	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 \
1624
		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; \
1625 1626 1627 1628 1629 1630
	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

1631 1632
rocksdbjavastaticpublish: rocksdbjavastaticrelease rocksdbjavastaticpublishcentral

1633 1634
rocksdbjavastaticpublishdocker: rocksdbjavastaticreleasedocker rocksdbjavastaticpublishcentral

1635
rocksdbjavastaticpublishcentral:
1636 1637 1638 1639 1640
	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
1641
	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
1642
	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
1643

1644 1645 1646 1647 1648 1649 1650
# 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)

1651
rocksdbjava: $(java_libobjects)
1652 1653 1654 1655 1656 1657
	$(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
1658 1659 1660 1661

jclean:
	cd java;$(MAKE) clean;

1662 1663 1664 1665 1666 1667
jtest_compile: rocksdbjava
	cd java;$(MAKE) java_test

jtest_run:
	cd java;$(MAKE) run_test

1668
jtest: rocksdbjava
1669
	cd java;$(MAKE) sample;$(MAKE) test;
1670

1671 1672 1673
jdb_bench:
	cd java;$(MAKE) db_bench;

1674 1675
commit_prereq: build_tools/rocksdb-lego-determinator \
               build_tools/precommit_checker.py
1676
	J=$(J) build_tools/precommit_checker.py unit unit_481 clang_unit release release_481 clang_release tsan asan ubsan lite unit_non_shm
1677
	$(MAKE) clean && $(MAKE) jclean && $(MAKE) rocksdbjava;
1678

1679 1680 1681
# ---------------------------------------------------------------------------
#  	Platform-specific compilation
# ---------------------------------------------------------------------------
J
Jim Paton 已提交
1682

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

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

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

1705
else
J
jorlow@chromium.org 已提交
1706
.cc.o:
1707
	$(AM_V_CC)$(CXX) $(CXXFLAGS) -c $< -o $@ $(COVERAGEFLAGS)
1708 1709

.c.o:
1710
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
1711
endif
1712

1713 1714 1715 1716
# ---------------------------------------------------------------------------
#  	Source files dependencies detection
# ---------------------------------------------------------------------------

O
omegaga 已提交
1717
all_sources = $(LIB_SOURCES) $(MAIN_SOURCES) $(MOCK_LIB_SOURCES) $(TOOL_LIB_SOURCES) $(BENCH_LIB_SOURCES) $(TEST_LIB_SOURCES) $(EXP_LIB_SOURCES)
1718 1719
DEPFILES = $(all_sources:.cc=.d)

1720 1721 1722 1723 1724
# 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.
1725
$(DEPFILES): %.d: %.cc
1726
	@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
1727
	  -MM -MT'$@' -MT'$(<:.cc=.o)' "$<" -o '$@'
1728 1729 1730

depend: $(DEPFILES)

1731 1732 1733 1734
# 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.
1735
ifneq ($(MAKECMDGOALS),clean)
1736
ifneq ($(MAKECMDGOALS),format)
1737 1738
ifneq ($(MAKECMDGOALS),jclean)
ifneq ($(MAKECMDGOALS),jtest)
1739
ifneq ($(MAKECMDGOALS),package)
1740
ifneq ($(MAKECMDGOALS),analyze)
1741 1742
-include $(DEPFILES)
endif
1743
endif
1744 1745
endif
endif
1746
endif
1747
endif