Makefile 61.7 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
OPT += -momit-leaf-frame-pointer
endif
endif

99 100 101 102 103 104 105 106 107 108 109 110
ifeq (,$(shell $(CXX) -fsyntax-only -maltivec -xc /dev/null 2>&1))
CXXFLAGS += -DHAS_ALTIVEC
CFLAGS += -DHAS_ALTIVEC
HAS_ALTIVEC=1
endif

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

111
# if we're compiling for release, compile without debug code (-DNDEBUG)
112
ifeq ($(DEBUG_LEVEL),0)
I
Igor Canadi 已提交
113
OPT += -DNDEBUG
S
Siying Dong 已提交
114 115 116 117 118 119

ifneq ($(USE_RTTI), 1)
	CXXFLAGS += -fno-rtti
else
	CXXFLAGS += -DROCKSDB_USE_RTTI
endif
120
else
S
Siying Dong 已提交
121 122 123 124 125 126
ifneq ($(USE_RTTI), 0)
	CXXFLAGS += -DROCKSDB_USE_RTTI
else
	CXXFLAGS += -fno-rtti
endif

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

130
#-----------------------------------------------
131
include src.mk
132

133 134 135 136 137 138
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 已提交
139 140 141 142
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
am__v_at_0 = @
am__v_at_1 =
143 144 145 146 147 148 149 150 151 152 153

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 已提交
154 155 156 157
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 =
158

159 160 161 162
ifdef ROCKSDB_USE_LIBRADOS
LIB_SOURCES += utilities/env_librados.cc
LDFLAGS += -lrados
endif
163

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

171 172 173 174 175 176 177 178 179
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 已提交
180 181 182
ifeq ($(PLATFORM), OS_AIX)
# no debug info
else ifneq ($(PLATFORM), IOS)
I
Igor Canadi 已提交
183 184 185 186 187 188 189
CFLAGS += -g
CXXFLAGS += -g
else
# no debug info for IOS, that will make our library big
OPT += -DNDEBUG
endif

T
Tomas Kolda 已提交
190 191 192 193 194
ifeq ($(PLATFORM), OS_AIX)
ARFLAGS = -X64 rs
STRIPFLAGS = -X64 -x
endif

D
David Bernard 已提交
195 196 197
ifeq ($(PLATFORM), OS_SOLARIS)
	PLATFORM_CXXFLAGS += -D _GLIBCXX_USE_C99
endif
198
ifneq ($(filter -DROCKSDB_LITE,$(OPT)),)
Y
Yueh-Hsuan Chiang 已提交
199 200 201
	# found
	CFLAGS += -fno-exceptions
	CXXFLAGS += -fno-exceptions
202 203
	# LUA is not supported under ROCKSDB_LITE
	LUA_PATH =
204 205
endif

I
Igor Canadi 已提交
206 207
# 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 已提交
208 209 210 211
	DISABLE_JEMALLOC=1
	EXEC_LDFLAGS += -fsanitize=address
	PLATFORM_CCFLAGS += -fsanitize=address
	PLATFORM_CXXFLAGS += -fsanitize=address
I
Igor Canadi 已提交
212 213 214 215
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 已提交
216
	DISABLE_JEMALLOC=1
S
Siying Dong 已提交
217
	EXEC_LDFLAGS += -fsanitize=thread
218 219
	PLATFORM_CCFLAGS += -fsanitize=thread -fPIC
	PLATFORM_CXXFLAGS += -fsanitize=thread -fPIC
220 221
        # Turn off -pg when enabling TSAN testing, because that induces
        # a link failure.  TODO: find the root cause
D
dx9 已提交
222
	PROFILING_FLAGS =
223 224
	# LUA is not supported under TSAN
	LUA_PATH =
I
Igor Canadi 已提交
225 226
endif

T
Tomas Kolda 已提交
227 228 229 230 231
# AIX doesn't work with -pg
ifeq ($(PLATFORM), OS_AIX)
	PROFILING_FLAGS =
endif

232 233 234 235
# 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
236 237
	PLATFORM_CCFLAGS += -fsanitize=undefined -DROCKSDB_UBSAN_RUN
	PLATFORM_CXXFLAGS += -fsanitize=undefined -DROCKSDB_UBSAN_RUN
238 239
endif

240 241 242 243 244
ifdef ROCKSDB_VALGRIND_RUN
	PLATFORM_CCFLAGS += -DROCKSDB_VALGRIND_RUN
	PLATFORM_CXXFLAGS += -DROCKSDB_VALGRIND_RUN
endif

I
Igor Canadi 已提交
245
ifndef DISABLE_JEMALLOC
246
	ifdef JEMALLOC
T
Tamir Duberstein 已提交
247 248
		PLATFORM_CXXFLAGS += -DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE
		PLATFORM_CCFLAGS  += -DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE
249
	endif
250 251 252 253
	ifdef WITH_JEMALLOC_FLAG
		PLATFORM_LDFLAGS += -ljemalloc
		JAVA_LDFLAGS += -ljemalloc
	endif
Y
Yueh-Hsuan Chiang 已提交
254 255 256
	EXEC_LDFLAGS := $(JEMALLOC_LIB) $(EXEC_LDFLAGS)
	PLATFORM_CXXFLAGS += $(JEMALLOC_INCLUDE)
	PLATFORM_CCFLAGS += $(JEMALLOC_INCLUDE)
I
Igor Canadi 已提交
257 258
endif

T
Tamir Duberstein 已提交
259 260
export GTEST_THROW_ON_FAILURE=1
export GTEST_HAS_EXCEPTIONS=1
I
Igor Sugak 已提交
261
GTEST_DIR = ./third-party/gtest-1.7.0/fused-src
T
Tomas Kolda 已提交
262 263 264 265 266 267 268 269
# 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 已提交
270

271 272 273
# This (the first rule) must depend on "all".
default: all

274
WARNING_FLAGS = -W -Wextra -Wall -Wsign-compare -Wshadow \
Y
Yueh-Hsuan Chiang 已提交
275
  -Wno-unused-parameter
276

277
ifndef DISABLE_WARNING_AS_ERROR
Y
Yueh-Hsuan Chiang 已提交
278
	WARNING_FLAGS += -Werror
279 280
endif

281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308

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 已提交
309
CFLAGS += $(WARNING_FLAGS) -I. -I./include $(PLATFORM_CCFLAGS) $(OPT)
I
Islam AbdelRahman 已提交
310
CXXFLAGS += $(WARNING_FLAGS) -I. -I./include $(PLATFORM_CXXFLAGS) $(OPT) -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers
311

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

314 315 316
# 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
317
date := $(shell date +%F)
I
Igor Canadi 已提交
318
ifdef FORCE_GIT_SHA
Y
Yueh-Hsuan Chiang 已提交
319
	git_sha := $(FORCE_GIT_SHA)
I
Igor Canadi 已提交
320
else
Y
Yueh-Hsuan Chiang 已提交
321
	git_sha := $(shell git rev-parse HEAD 2>/dev/null)
I
Igor Canadi 已提交
322
endif
323
gen_build_version = sed -e s/@@GIT_SHA@@/$(git_sha)/ -e s/@@GIT_DATE_TIME@@/$(date)/ util/build_version.cc.in
324 325 326 327 328 329

# 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.
330 331
FORCE:
util/build_version.cc: FORCE
Y
Yueh-Hsuan Chiang 已提交
332 333 334 335 336
	$(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
337
endif
338

339
LIBOBJECTS = $(LIB_SOURCES:.cc=.o)
340 341 342 343 344 345
ifeq ($(HAVE_POWER8),1)
LIB_CC_OBJECTS = $(LIB_SOURCES:.cc=.o)
LIBOBJECTS += $(LIB_SOURCES_C:.c=.o)
LIBOBJECTS += $(LIB_SOURCES_ASM:.S=.o)
endif

346 347
LIBOBJECTS += $(TOOL_LIB_SOURCES:.cc=.o)
MOCKOBJECTS = $(MOCK_LIB_SOURCES:.cc=.o)
J
jorlow@chromium.org 已提交
348

I
Igor Sugak 已提交
349
GTEST = $(GTEST_DIR)/gtest/gtest-all.o
J
jorlow@chromium.org 已提交
350
TESTUTIL = ./util/testutil.o
I
Igor Sugak 已提交
351
TESTHARNESS = ./util/testharness.o $(TESTUTIL) $(MOCKOBJECTS) $(GTEST)
352
VALGRIND_ERROR = 2
353
VALGRIND_VER := $(join $(VALGRIND_VER),valgrind)
354

355
VALGRIND_OPTS = --error-exitcode=$(VALGRIND_ERROR) --leak-check=full
356

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

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

J
jorlow@chromium.org 已提交
361
TESTS = \
362
	db_basic_test \
E
Ewout Prangsma 已提交
363
	db_encryption_test \
364
	db_test2 \
S
Siying Dong 已提交
365
	external_sst_file_basic_test \
S
Siying Dong 已提交
366 367 368 369 370 371 372 373 374 375
	auto_roll_logger_test \
	bloom_test \
	dynamic_bloom_test \
	c_test \
	checkpoint_test \
	crc32c_test \
	coding_test \
	inlineskiplist_test \
	env_basic_test \
	env_test \
376
	hash_test \
S
Siying Dong 已提交
377 378 379 380 381
	thread_local_test \
	rate_limiter_test \
	perf_context_test \
	iostats_context_test \
	db_wal_test \
382
	db_block_cache_test \
383
	db_test \
Y
Yi Wu 已提交
384
	db_blob_index_test \
Y
Yi Wu 已提交
385
	db_bloom_filter_test \
386 387 388
	db_iter_test \
	db_log_iter_test \
	db_compaction_filter_test \
389
	db_compaction_test \
390
	db_dynamic_level_test \
391
	db_flush_test \
392
	db_inplace_update_test \
Y
Yi Wu 已提交
393
	db_iterator_test \
394
	db_memtable_test \
395
	db_merge_operator_test \
396
	db_options_test \
397
	db_range_del_test \
Y
Yi Wu 已提交
398
	db_sst_test \
399 400
	db_tailing_iter_test \
	db_universal_compaction_test \
O
omegaga 已提交
401
	db_io_failure_test \
402
	db_properties_test \
403
	db_table_properties_test \
404
	db_statistics_test \
Y
Yi Wu 已提交
405
	db_write_test \
406
	autovector_test \
Y
Yi Wu 已提交
407
	blob_db_test \
M
Maysam Yabandeh 已提交
408
	cleanable_test \
409 410 411 412 413 414 415 416 417 418 419
	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 \
420
	file_reader_writer_test \
421 422
	block_based_filter_block_test \
	full_filter_block_test \
M
Maysam Yabandeh 已提交
423
	partitioned_filter_block_test \
424
	hash_table_test \
425 426 427 428 429 430
	histogram_test \
	log_test \
	manual_compaction_test \
	mock_env_test \
	memtable_list_test \
	merge_helper_test \
431
	memory_test \
432 433
	merge_test \
	merger_test \
434
	util_merge_operators_test \
435
	options_file_test \
436 437 438 439
	redis_test \
	reduce_levels_test \
	plain_table_db_test \
	comparator_db_test \
440
	external_sst_file_test \
441 442
	prefix_test \
	skiplist_test \
443
	write_buffer_manager_test \
444
	stringappend_test \
445
	cassandra_format_test \
446
	cassandra_functional_test \
447 448
	cassandra_row_merge_test \
	cassandra_serialize_test \
449
	ttl_test \
O
omegaga 已提交
450
	date_tiered_test \
451 452 453
	backupable_db_test \
	document_db_test \
	json_document_test \
454
	sim_cache_test \
455 456 457 458 459 460 461 462 463 464 465 466
	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 已提交
467
	delete_scheduler_test \
468
	options_test \
469
	options_settable_test \
470
	options_util_test \
471
	event_logger_test \
A
Anirban Rahut 已提交
472
	timer_queue_test \
473 474 475 476 477 478
	cuckoo_table_builder_test \
	cuckoo_table_reader_test \
	cuckoo_table_db_test \
	flush_job_test \
	wal_manager_test \
	listener_test \
A
Andres Noetzli 已提交
479
	compaction_iterator_test \
480 481 482
	compaction_job_test \
	thread_list_test \
	sst_dump_test \
O
omegaga 已提交
483
	column_aware_encoding_test \
484 485 486
	compact_files_test \
	optimistic_transaction_test \
	write_callback_test \
487 488
	heap_test \
	compact_on_deletion_collector_test \
A
agiardullo 已提交
489
	compaction_job_stats_test \
490
	option_change_migration_test \
491
	transaction_test \
492
	ldb_cmd_test \
493
	persistent_cache_test \
494
	statistics_test \
495
	lua_test \
A
Andrew Kryczka 已提交
496
	range_del_aggregator_test \
Y
Yi Wu 已提交
497
	lru_cache_test \
498
	object_registry_test \
A
Andrew Kryczka 已提交
499
	repair_test \
A
Andrew Kryczka 已提交
500
	env_timed_test \
501
	write_prepared_transaction_test \
502

Y
Yi Wu 已提交
503 504 505 506
PARALLEL_TEST = \
	backupable_db_test \
	db_compaction_filter_test \
	db_compaction_test \
507
	db_sst_test \
Y
Yi Wu 已提交
508 509
	db_test \
	db_universal_compaction_test \
510 511
	db_wal_test \
	external_sst_file_test \
Y
Yi Wu 已提交
512 513 514
	fault_injection_test \
	inlineskiplist_test \
	manual_compaction_test \
515 516
	persistent_cache_test \
	table_test \
517 518
	transaction_test \
	write_prepared_transaction_test
Y
Yi Wu 已提交
519

I
Islam AbdelRahman 已提交
520 521 522 523 524 525 526 527
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
528

529
TOOLS = \
Y
Yueh-Hsuan Chiang 已提交
530 531 532
	sst_dump \
	db_sanity_test \
	db_stress \
I
Igor Canadi 已提交
533
	write_stress \
Y
Yueh-Hsuan Chiang 已提交
534 535 536
	ldb \
	db_repl_stress \
	rocksdb_dump \
Y
Yi Wu 已提交
537 538
	rocksdb_undump \
	blob_dump \
J
jorlow@chromium.org 已提交
539

540 541 542
TEST_LIBS = \
	librocksdb_env_basic_test.a

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

546
# if user didn't config LIBNAME, set the default
547
ifeq ($(LIBNAME),)
548 549
# we should only run rocksdb in production with DEBUG_LEVEL 0
ifeq ($(DEBUG_LEVEL),0)
Y
Yueh-Hsuan Chiang 已提交
550
        LIBNAME=librocksdb
551 552 553
else
        LIBNAME=librocksdb_debug
endif
554
endif
555
LIBRARY = ${LIBNAME}.a
556
TOOLS_LIBRARY = ${LIBNAME}_tools.a
557

558 559 560
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)
561

562 563
default: all

564 565 566
#-----------------------------------------------
# Create platform independent shared libraries.
#-----------------------------------------------
567
ifneq ($(PLATFORM_SHARED_EXT),)
H
heyongqiang 已提交
568 569

ifneq ($(PLATFORM_SHARED_VERSIONED),true)
570
SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
H
heyongqiang 已提交
571 572
SHARED2 = $(SHARED1)
SHARED3 = $(SHARED1)
573
SHARED4 = $(SHARED1)
H
heyongqiang 已提交
574 575
SHARED = $(SHARED1)
else
576 577
SHARED_MAJOR = $(ROCKSDB_MAJOR)
SHARED_MINOR = $(ROCKSDB_MINOR)
578
SHARED_PATCH = $(ROCKSDB_PATCH)
579
SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
580 581 582 583 584 585
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
586 587
SHARED2 = $(SHARED1).$(SHARED_MAJOR)
SHARED3 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR)
588
SHARED4 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR).$(SHARED_PATCH)
589
endif
590 591
SHARED = $(SHARED1) $(SHARED2) $(SHARED3) $(SHARED4)
$(SHARED1): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
592
	ln -fs $(SHARED4) $(SHARED1)
593
$(SHARED2): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
594
	ln -fs $(SHARED4) $(SHARED2)
595
$(SHARED3): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
596
	ln -fs $(SHARED4) $(SHARED3)
597
endif
598 599 600 601 602 603 604
ifeq ($(HAVE_POWER8),1)
SHARED_C_OBJECTS = $(LIB_SOURCES_C:.c=.o)
SHARED_ASM_OBJECTS = $(LIB_SOURCES_ASM:.S=.o)
SHARED_C_LIBOBJECTS = $(patsubst %.o,shared-objects/%.o,$(SHARED_C_OBJECTS))
SHARED_ASM_LIBOBJECTS = $(patsubst %.o,shared-objects/%.o,$(SHARED_ASM_OBJECTS))
shared_libobjects = $(patsubst %,shared-objects/%,$(LIB_CC_OBJECTS))
else
605
shared_libobjects = $(patsubst %,shared-objects/%,$(LIBOBJECTS))
606 607
endif

608
CLEAN_FILES += shared-objects
609
shared_all_libobjects = $(shared_libobjects)
610

611 612 613 614 615 616 617 618 619
ifeq ($(HAVE_POWER8),1)
shared-ppc-objects = $(SHARED_C_LIBOBJECTS) $(SHARED_ASM_LIBOBJECTS)

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

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

623 624 625 626
ifeq ($(HAVE_POWER8),1)
shared_all_libobjects = $(shared_libobjects) $(shared-ppc-objects)
endif
$(SHARED4): $(shared_all_libobjects)
627
	$(CXX) $(PLATFORM_SHARED_LDFLAGS)$(SHARED3) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) $(shared_libobjects) $(LDFLAGS) -o $@
H
heyongqiang 已提交
628 629 630

endif  # PLATFORM_SHARED_EXT

631
.PHONY: blackbox_crash_test check clean coverage crash_test ldb_tests package \
Y
Yueh-Hsuan Chiang 已提交
632 633
	release tags valgrind_check whitebox_crash_test format static_lib shared_lib all \
	dbg rocksdbjavastatic rocksdbjava install install-static install-shared uninstall \
634
	analyze tools tools_lib
635

M
maurice barnum 已提交
636

637
all: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(TESTS)
638

639 640
all_but_some_tests: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(SUBSET)

I
Igor Canadi 已提交
641 642 643 644
static_lib: $(LIBRARY)

shared_lib: $(SHARED)

M
maurice barnum 已提交
645 646
tools: $(TOOLS)

647 648
tools_lib: $(TOOLS_LIBRARY)

649 650
test_libs: $(TEST_LIBS)

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

653
# creates static library and programs
654
release:
Y
Yueh-Hsuan Chiang 已提交
655
	$(MAKE) clean
656
	DEBUG_LEVEL=0 $(MAKE) static_lib tools db_bench
K
Kai Liu 已提交
657 658

coverage:
Y
Yueh-Hsuan Chiang 已提交
659 660 661 662 663
	$(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 已提交
664

Y
Yi Wu 已提交
665 666 667 668 669
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 已提交
670 671
TMPDIR := $(shell echo $${TMPDIR:-/tmp})
TMPD := $(shell f=/dev/shm; test -k $$f || f=$(TMPDIR);     \
Y
Yi Wu 已提交
672 673 674 675 676 677 678 679 680 681 682 683 684 685
  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.
686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703
# 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 已提交
704 705 706 707 708 709 710 711 712 713 714
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 \
715
		TEST_SCRIPT=t/run-$$TEST_BINARY-$${TEST_NAME//\//-}; \
Y
Yi Wu 已提交
716 717 718 719 720
		echo "  GEN     " $$TEST_SCRIPT; \
    printf '%s\n' \
      '#!/bin/sh' \
      "d=\$(TMPD)$$TEST_SCRIPT" \
      'mkdir -p $$d' \
721
      "TEST_TMPDIR=\$$d $(DRIVER) ./$$TEST_BINARY --gtest_filter=$$TEST_NAME" \
Y
Yi Wu 已提交
722 723 724 725 726 727 728 729
		> $$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)
730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747

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

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

V
Venkatesh Radhakrishnan 已提交
761 762 763
# Use this regexp to select the subset of tests whose names match.
tests-regexp = .

Y
Yi Wu 已提交
764
t_run = $(wildcard t/run-*)
765
.PHONY: check_0
Y
Yi Wu 已提交
766 767
check_0:
	$(AM_V_GEN)export TEST_TMPDIR=$(TMPD); \
Y
Yueh-Hsuan Chiang 已提交
768 769 770
	printf '%s\n' ''						\
	  'To monitor subtest <duration,pass/fail,name>,'		\
	  '  run "make watch-log" in a separate window' '';		\
Y
Yi Wu 已提交
771 772 773 774 775
	test -t 1 && eta=--eta || eta=; \
	{ \
		printf './%s\n' $(filter-out $(PARALLEL_TEST),$(TESTS)); \
		printf '%s\n' $(t_run); \
	} \
Y
Yueh-Hsuan Chiang 已提交
776 777
	  | $(prioritize_long_running_tests)				\
	  | grep -E '$(tests-regexp)'					\
778
	  | build_tools/gnu_parallel -j$(J) --plain --joblog=LOG $$eta --gnu '{} >& t/log-{/}'
S
sdong 已提交
779

780 781
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 已提交
782
.PHONY: valgrind_check_0
Y
Yi Wu 已提交
783
valgrind_check_0:
S
sdong 已提交
784 785 786 787 788 789
	$(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 已提交
790
	  printf './%s\n' $(filter-out $(PARALLEL_TEST) %skiplist_test options_settable_test, $(TESTS));		\
S
sdong 已提交
791 792 793 794
	  printf '%s\n' $(t_run);					\
	}								\
	  | $(prioritize_long_running_tests)				\
	  | grep -E '$(tests-regexp)'					\
795
	  | grep -E -v '$(valgrind-blacklist-regexp)'					\
796
	  | build_tools/gnu_parallel -j$(J) --plain --joblog=LOG $$eta --gnu \
797 798
	  '(if [[ "{}" == "./"* ]] ; then $(DRIVER) {}; else {}; fi) ' \
	  '>& t/valgrind_log-{/}'
799 800

CLEAN_FILES += t LOG $(TMPD)
801

802 803 804 805 806 807 808 809
# 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 已提交
810
	watch --interval=0 'sort -k7,7nr -k4,4gr LOG|$(quoted_perl_command)'
811

I
Igor Canadi 已提交
812
# If J != 1 and GNU parallel is installed, run the tests in parallel,
813 814
# via the check_0 rule above.  Otherwise, run them sequentially.
check: all
Y
Yi Wu 已提交
815
	$(MAKE) gen_parallel_tests
Y
Yueh-Hsuan Chiang 已提交
816
	$(AM_V_GEN)if test "$(J)" != 1                                  \
817
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |                    \
Y
Yueh-Hsuan Chiang 已提交
818 819 820 821 822 823 824 825
	        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 已提交
826
ifneq ($(PLATFORM), OS_AIX)
I
Islam AbdelRahman 已提交
827
ifeq ($(filter -DROCKSDB_LITE,$(OPT)),)
Y
Yueh-Hsuan Chiang 已提交
828 829
	python tools/ldb_test.py
	sh tools/rocksdb_dump_test.sh
I
Islam AbdelRahman 已提交
830
endif
T
Tomas Kolda 已提交
831
endif
832

S
Siying Dong 已提交
833 834
# TODO add ldb_tests
check_some: $(SUBSET)
Y
Yueh-Hsuan Chiang 已提交
835
	for t in $(SUBSET); do echo "===== Running $$t"; ./$$t || exit 1; done
836 837

.PHONY: ldb_tests
838
ldb_tests: ldb
Y
Yueh-Hsuan Chiang 已提交
839
	python tools/ldb_test.py
840

I
Igor Canadi 已提交
841
crash_test: whitebox_crash_test blackbox_crash_test
842 843

blackbox_crash_test: db_stress
844 845
	python -u tools/db_crashtest.py --simple blackbox $(CRASH_TEST_EXT_ARGS)
	python -u tools/db_crashtest.py blackbox $(CRASH_TEST_EXT_ARGS)
846

847 848 849 850
ifeq ($(CRASH_TEST_KILL_ODD),)
  CRASH_TEST_KILL_ODD=888887
endif

851
whitebox_crash_test: db_stress
852
	python -u tools/db_crashtest.py --simple whitebox --random_kill_odd \
853
      $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
854
	python -u tools/db_crashtest.py whitebox  --random_kill_odd \
855
      $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
856

I
Igor Canadi 已提交
857
asan_check:
Y
Yueh-Hsuan Chiang 已提交
858 859 860
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) check -j32
	$(MAKE) clean
861 862

asan_crash_test:
Y
Yueh-Hsuan Chiang 已提交
863 864 865
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) crash_test
	$(MAKE) clean
I
Igor Canadi 已提交
866

867 868 869 870 871 872 873 874 875 876
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

877
valgrind_test:
878
	ROCKSDB_VALGRIND_RUN=1 DISABLE_JEMALLOC=1 $(MAKE) valgrind_check
879

I
Igor Canadi 已提交
880
valgrind_check: $(TESTS)
881
	$(MAKE) DRIVER="$(VALGRIND_VER) $(VALGRIND_OPTS)" gen_parallel_tests
S
sdong 已提交
882
	$(AM_V_GEN)if test "$(J)" != 1                                  \
883
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |                    \
S
sdong 已提交
884 885
	        grep -q 'GNU Parallel';                                 \
	then                                                            \
Y
Yi Wu 已提交
886
      $(MAKE) TMPD=$(TMPD)                                        \
S
sdong 已提交
887 888 889 890 891 892 893 894 895 896
      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
897

898 899 900 901 902 903 904

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 \
905
			seq $(J) | v="$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{};  export TEST_TMPDIR=$$s;' \
906 907
				'timeout 2m ./db_test --gtest_filter=$$v >> $$s/log-{} 2>1'; \
		else\
908
			seq $(J) | v="./$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{};' \
909 910 911 912 913 914 915 916 917 918 919
			     '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 已提交
920 921 922 923 924 925 926
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!'

927 928
parallel_check: $(TESTS)
	$(AM_V_GEN)if test "$(J)" > 1                                  \
929
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |                    \
930 931 932 933 934 935 936 937 938
	        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); \
939
        seq $(J) | build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{}; rm -rf $$s; mkdir $$s'; \
940
	$(MAKE)  PAR_TEST="$(shell $(test_names))" TMPD=$(TMPD) \
941 942 943 944
		J=$(J) db_test=1 parloop; \
	$(MAKE) PAR_TEST="$(filter-out db_test, $(TESTS))" \
		TMPD=$(TMPD) J=$(J) db_test=0 parloop;

945
analyze: clean
Y
Yueh-Hsuan Chiang 已提交
946 947 948 949
	$(CLANG_SCAN_BUILD) --use-analyzer=$(CLANG_ANALYZER) \
		--use-c++=$(CXX) --use-cc=$(CC) --status-bugs \
		-o $(CURDIR)/scan_build_report \
		$(MAKE) dbg
950

951 952
CLEAN_FILES += unity.cc
unity.cc: Makefile
Y
Yueh-Hsuan Chiang 已提交
953 954
	rm -f $@ $@-t
	for source_file in $(LIB_SOURCES); do \
E
Evan Shaw 已提交
955
		echo "#include \"$$source_file\"" >> $@-t; \
Y
Yueh-Hsuan Chiang 已提交
956 957 958
	done
	chmod a=r $@-t
	mv $@-t $@
M
miguelportilla 已提交
959

E
Evan Shaw 已提交
960 961 962 963
unity.a: unity.o
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ unity.o

I
Igor Canadi 已提交
964
# try compiling db_test with unity
965
unity_test: db/db_test.o db/db_test_util.o $(TESTHARNESS) unity.a
I
Igor Canadi 已提交
966 967 968
	$(AM_LINK)
	./unity_test

E
Evan Shaw 已提交
969 970
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 已提交
971

J
jorlow@chromium.org 已提交
972
clean:
Y
Yueh-Hsuan Chiang 已提交
973 974 975 976
	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 已提交
977
	rm -rf bzip2* snappy* zlib* lz4* zstd*
Y
Yi Wu 已提交
978
	cd java; $(MAKE) clean
979

980
tags:
Y
Yueh-Hsuan Chiang 已提交
981
	ctags * -R
A
Andrew Kryczka 已提交
982
	cscope -b `find . -name '*.cc'` `find . -name '*.h'` `find . -name '*.c'`
L
Leonidas Galanis 已提交
983
	ctags -e -R -o etags *
984

985
format:
Y
Yueh-Hsuan Chiang 已提交
986
	build_tools/format-diff.sh
987

988
package:
Y
Yueh-Hsuan Chiang 已提交
989
	bash build_tools/make_package.sh $(SHARED_MAJOR).$(SHARED_MINOR)
990

991 992 993
# ---------------------------------------------------------------------------
# 	Unit tests and tools
# ---------------------------------------------------------------------------
994
$(LIBRARY): $(LIBOBJECTS)
Y
Yueh-Hsuan Chiang 已提交
995 996
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $(LIBOBJECTS)
J
jorlow@chromium.org 已提交
997

O
omegaga 已提交
998
$(TOOLS_LIBRARY): $(BENCH_LIB_SOURCES:.cc=.o) $(TOOL_LIB_SOURCES:.cc=.o) $(LIB_SOURCES:.cc=.o) $(TESTUTIL)
999 1000 1001
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $^

1002
librocksdb_env_basic_test.a: env/env_basic_test.o $(LIBOBJECTS) $(TESTHARNESS)
1003 1004 1005
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $^

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

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

1012 1013 1014
persistent_cache_bench: utilities/persistent_cache/persistent_cache_bench.o $(LIBOBJECTS) $(TESTUTIL)
	$(AM_LINK)

1015
memtablerep_bench: memtable/memtablerep_bench.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
1016
	$(AM_LINK)
A
Ameya Gupte 已提交
1017

1018
db_stress: tools/db_stress.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
1019
	$(AM_LINK)
1020

I
Igor Canadi 已提交
1021 1022 1023
write_stress: tools/write_stress.o $(LIBOBJECTS) $(TESTUTIL)
	$(AM_LINK)

I
Igor Canadi 已提交
1024
db_sanity_test: tools/db_sanity_test.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
1025
	$(AM_LINK)
1026

1027
db_repl_stress: tools/db_repl_stress.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
1028
	$(AM_LINK)
1029

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

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

1036
column_family_test: db/column_family_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1037
	$(AM_LINK)
1038

K
kailiu 已提交
1039
table_properties_collector_test: db/table_properties_collector_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1040
	$(AM_LINK)
1041

S
Sanjay Ghemawat 已提交
1042
bloom_test: util/bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1043
	$(AM_LINK)
S
Sanjay Ghemawat 已提交
1044

1045
dynamic_bloom_test: util/dynamic_bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1046
	$(AM_LINK)
1047

1048
c_test: db/c_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1049
	$(AM_LINK)
1050

1051
cache_test: cache/cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1052
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1053 1054

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

1057 1058 1059
hash_test: util/hash_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1060 1061 1062
option_change_migration_test: utilities/option_change_migration/option_change_migration_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1063
stringappend_test: utilities/merge_operators/string_append/stringappend_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1064
	$(AM_LINK)
1065

1066
cassandra_format_test: utilities/cassandra/cassandra_format_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
1067 1068
	$(AM_LINK)

1069
cassandra_functional_test: utilities/cassandra/cassandra_functional_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
1070 1071
	$(AM_LINK)

1072
cassandra_row_merge_test: utilities/cassandra/cassandra_row_merge_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
1073 1074
	$(AM_LINK)

1075
cassandra_serialize_test: utilities/cassandra/cassandra_serialize_test.o $(LIBOBJECTS) $(TESTHARNESS)
1076 1077
	$(AM_LINK)

1078
redis_test: utilities/redis/redis_lists_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1079
	$(AM_LINK)
1080

1081 1082 1083
hash_table_test: utilities/persistent_cache/hash_table_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1084
histogram_test: monitoring/histogram_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1085
	$(AM_LINK)
A
Abhishek Kona 已提交
1086

L
Lei Jin 已提交
1087
thread_local_test: util/thread_local_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1088
	$(AM_LINK)
L
Lei Jin 已提交
1089

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

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

1096
slice_transform_test: util/slice_transform_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1097
	$(AM_LINK)
1098

1099
db_basic_test: db/db_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
E
Ewout Prangsma 已提交
1100 1101 1102
	$(AM_LINK)

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

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

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

Y
Yi Wu 已提交
1111 1112 1113
db_blob_index_test: db/db_blob_index_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1114 1115 1116
db_block_cache_test: db/db_block_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
1117 1118 1119
db_bloom_filter_test: db/db_bloom_filter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

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

1123
db_compaction_filter_test: db/db_compaction_filter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1124 1125
	$(AM_LINK)

1126
db_compaction_test: db/db_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1127 1128
	$(AM_LINK)

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

1132 1133 1134
db_flush_test: db/db_flush_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1135
db_inplace_update_test: db/db_inplace_update_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1136 1137
	$(AM_LINK)

Y
Yi Wu 已提交
1138 1139 1140
db_iterator_test: db/db_iterator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1141 1142 1143
db_memtable_test: db/db_memtable_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

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

1147 1148 1149
db_options_test: db/db_options_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

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

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

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

Y
Yi Wu 已提交
1159 1160 1161
db_write_test: db/db_write_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

S
Siying Dong 已提交
1162 1163 1164
external_sst_file_basic_test: db/external_sst_file_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

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

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

S
Stanislau Hlebik 已提交
1171
db_iter_test: db/db_iter_test.o $(LIBOBJECTS) $(TESTHARNESS)
1172
	$(AM_LINK)
S
Stanislau Hlebik 已提交
1173

1174
db_universal_compaction_test: db/db_universal_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1175 1176
	$(AM_LINK)

1177
db_wal_test: db/db_wal_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
S
sdong 已提交
1178 1179
	$(AM_LINK)

O
omegaga 已提交
1180 1181 1182
db_io_failure_test: db/db_io_failure_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

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

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

1189
log_write_bench: util/log_write_bench.o $(LIBOBJECTS) $(TESTHARNESS)
D
dx9 已提交
1190
	$(AM_LINK) $(PROFILING_FLAGS)
1191

S
Siying Dong 已提交
1192
plain_table_db_test: db/plain_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1193
	$(AM_LINK)
S
Siying Dong 已提交
1194

1195
comparator_db_test: db/comparator_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1196
	$(AM_LINK)
1197

1198
table_reader_bench: table/table_reader_bench.o $(LIBOBJECTS) $(TESTHARNESS)
D
dx9 已提交
1199
	$(AM_LINK) $(PROFILING_FLAGS)
1200

1201
perf_context_test: db/perf_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
1202
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)
1203

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

I
Igor Canadi 已提交
1207
backupable_db_test: utilities/backupable/backupable_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1208
	$(AM_LINK)
I
Igor Canadi 已提交
1209

1210 1211 1212
checkpoint_test: utilities/checkpoint/checkpoint_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1213
document_db_test: utilities/document/document_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1214
	$(AM_LINK)
I
Igor Canadi 已提交
1215

I
Igor Canadi 已提交
1216
json_document_test: utilities/document/json_document_test.o $(LIBOBJECTS) $(TESTHARNESS)
1217
	$(AM_LINK)
I
Igor Canadi 已提交
1218

1219 1220 1221
sim_cache_test: utilities/simulator_cache/sim_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1222
spatial_db_test: utilities/spatialdb/spatial_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1223
	$(AM_LINK)
I
Igor Canadi 已提交
1224

S
Sage Weil 已提交
1225 1226 1227
env_mirror_test: utilities/env_mirror_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
Andrew Kryczka 已提交
1228 1229 1230
env_timed_test: utilities/env_timed_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1231 1232 1233 1234 1235
ifdef ROCKSDB_USE_LIBRADOS
env_librados_test: utilities/env_librados_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(COVERAGEFLAGS)
endif

1236
object_registry_test: utilities/object_registry_test.o $(LIBOBJECTS) $(TESTHARNESS)
1237 1238
	$(AM_LINK)

1239
ttl_test: utilities/ttl/ttl_test.o $(LIBOBJECTS) $(TESTHARNESS)
1240
	$(AM_LINK)
1241

O
omegaga 已提交
1242 1243 1244
date_tiered_test: utilities/date_tiered/date_tiered_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1245
write_batch_with_index_test: utilities/write_batch_with_index/write_batch_with_index_test.o $(LIBOBJECTS) $(TESTHARNESS)
1246
	$(AM_LINK)
1247

I
Igor Canadi 已提交
1248
flush_job_test: db/flush_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
1249
	$(AM_LINK)
A
Andres Noetzli 已提交
1250 1251 1252

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

I
Igor Canadi 已提交
1254
compaction_job_test: db/compaction_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
1255
	$(AM_LINK)
I
Igor Canadi 已提交
1256

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

1260 1261 1262
compact_on_deletion_collector_test: utilities/table_properties_collectors/compact_on_deletion_collector_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1263
wal_manager_test: db/wal_manager_test.o $(LIBOBJECTS) $(TESTHARNESS)
1264
	$(AM_LINK)
I
Igor Canadi 已提交
1265

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

1269
env_basic_test: env/env_basic_test.o $(LIBOBJECTS) $(TESTHARNESS)
1270 1271
	$(AM_LINK)

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

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

A
Andrew Kryczka 已提交
1278
rate_limiter_test: util/rate_limiter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1279
	$(AM_LINK)
L
Lei Jin 已提交
1280

I
Islam AbdelRahman 已提交
1281 1282 1283
delete_scheduler_test: util/delete_scheduler_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

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

1287 1288 1289
file_reader_writer_test: util/file_reader_writer_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1290
block_based_filter_block_test: table/block_based_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1291
	$(AM_LINK)
1292 1293

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

M
Maysam Yabandeh 已提交
1296 1297 1298
partitioned_filter_block_test: table/partitioned_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1299
log_test: db/log_test.o $(LIBOBJECTS) $(TESTHARNESS)
M
Maysam Yabandeh 已提交
1300 1301 1302
	$(AM_LINK)

cleanable_test: table/cleanable_test.o $(LIBOBJECTS) $(TESTHARNESS)
1303
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1304 1305

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

D
Dhruba Borthakur 已提交
1308
block_test: table/block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1309
	$(AM_LINK)
D
Dhruba Borthakur 已提交
1310

1311
inlineskiplist_test: memtable/inlineskiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
N
Nathan Bronson 已提交
1312 1313
	$(AM_LINK)

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

1317 1318 1319
write_buffer_manager_test: memtable/write_buffer_manager_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1320
version_edit_test: db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS)
1321
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1322

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

S
sdong 已提交
1326
compaction_picker_test: db/compaction_picker_test.o $(LIBOBJECTS) $(TESTHARNESS)
1327
	$(AM_LINK)
S
sdong 已提交
1328

S
sdong 已提交
1329
version_builder_test: db/version_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
1330
	$(AM_LINK)
S
sdong 已提交
1331

1332
file_indexer_test: db/file_indexer_test.o $(LIBOBJECTS) $(TESTHARNESS)
1333
	$(AM_LINK)
1334

1335
reduce_levels_test: tools/reduce_levels_test.o $(LIBOBJECTS) $(TESTHARNESS)
1336
	$(AM_LINK)
1337

J
jorlow@chromium.org 已提交
1338
write_batch_test: db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS)
1339
	$(AM_LINK)
1340

1341
write_controller_test: db/write_controller_test.o $(LIBOBJECTS) $(TESTHARNESS)
1342
	$(AM_LINK)
1343

1344 1345 1346
merge_helper_test: db/merge_helper_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1347 1348 1349
memory_test: utilities/memory/memory_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
Jim Paton 已提交
1350
merge_test: db/merge_test.o $(LIBOBJECTS) $(TESTHARNESS)
1351
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1352

I
Igor Canadi 已提交
1353
merger_test: table/merger_test.o $(LIBOBJECTS) $(TESTHARNESS)
1354
	$(AM_LINK)
I
Igor Canadi 已提交
1355

1356 1357 1358
util_merge_operators_test: utilities/util_merge_operators_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1359 1360 1361
options_file_test: db/options_file_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1362
deletefile_test: db/deletefile_test.o $(LIBOBJECTS) $(TESTHARNESS)
1363
	$(AM_LINK)
1364

1365
geodb_test: utilities/geodb/geodb_test.o $(LIBOBJECTS) $(TESTHARNESS)
1366
	$(AM_LINK)
1367

1368 1369 1370 1371 1372 1373
rocksdb_dump: tools/dump/rocksdb_dump.o $(LIBOBJECTS)
	$(AM_LINK)

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

1374
cuckoo_table_builder_test: table/cuckoo_table_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
1375
	$(AM_LINK)
1376

I
Igor Canadi 已提交
1377
cuckoo_table_reader_test: table/cuckoo_table_reader_test.o $(LIBOBJECTS) $(TESTHARNESS)
1378
	$(AM_LINK)
1379

1380
cuckoo_table_db_test: db/cuckoo_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1381
	$(AM_LINK)
1382

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

Y
Yueh-Hsuan Chiang 已提交
1386
thread_list_test: util/thread_list_test.o $(LIBOBJECTS) $(TESTHARNESS)
1387
	$(AM_LINK)
Y
Yueh-Hsuan Chiang 已提交
1388

1389 1390 1391
compact_files_test: db/compact_files_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1392
options_test: options/options_test.o $(LIBOBJECTS) $(TESTHARNESS)
1393 1394
	$(AM_LINK)

1395
options_settable_test: options/options_settable_test.o $(LIBOBJECTS) $(TESTHARNESS)
1396
	$(AM_LINK)
1397

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

1401 1402 1403
db_bench_tool_test: tools/db_bench_tool_test.o $(BENCHTOOLOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1404 1405 1406
event_logger_test: util/event_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
Anirban Rahut 已提交
1407 1408 1409
timer_queue_test: util/timer_queue_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1410
sst_dump_test: tools/sst_dump_test.o $(LIBOBJECTS) $(TESTHARNESS)
1411
	$(AM_LINK)
1412

O
omegaga 已提交
1413 1414 1415
column_aware_encoding_test: utilities/column_aware_encoding_test.o $(TESTHARNESS) $(EXPOBJECTS)
	$(AM_LINK)

A
agiardullo 已提交
1416 1417 1418
optimistic_transaction_test: utilities/transactions/optimistic_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1419
mock_env_test : env/mock_env_test.o $(LIBOBJECTS) $(TESTHARNESS)
1420
	$(AM_LINK)
1421

1422
manual_compaction_test: db/manual_compaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
1423
	$(AM_LINK)
1424

1425
filelock_test: util/filelock_test.o $(LIBOBJECTS) $(TESTHARNESS)
1426
	$(AM_LINK)
K
Kai Liu 已提交
1427

1428
auto_roll_logger_test: util/auto_roll_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
1429
	$(AM_LINK)
1430

A
agiardullo 已提交
1431 1432 1433
memtable_list_test: db/memtable_list_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
agiardullo 已提交
1434 1435 1436
write_callback_test: db/write_callback_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1437 1438 1439
heap_test: util/heap_test.o $(GTEST)
	$(AM_LINK)

A
agiardullo 已提交
1440 1441 1442
transaction_test: utilities/transactions/transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1443 1444 1445
write_prepared_transaction_test: utilities/transactions/write_prepared_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1446
sst_dump: tools/sst_dump.o $(LIBOBJECTS)
1447
	$(AM_LINK)
1448

Y
Yi Wu 已提交
1449 1450 1451
blob_dump: tools/blob_dump.o $(LIBOBJECTS)
	$(AM_LINK)

O
omegaga 已提交
1452 1453 1454
column_aware_encoding_exp: utilities/column_aware_encoding_exp.o $(EXPOBJECTS)
	$(AM_LINK)

A
Andrew Kryczka 已提交
1455 1456 1457
repair_test: db/repair_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1458
ldb_cmd_test: tools/ldb_cmd_test.o $(LIBOBJECTS) $(TESTHARNESS)
1459 1460
	$(AM_LINK)

1461
ldb: tools/ldb.o $(LIBOBJECTS)
1462
	$(AM_LINK)
1463

1464
iostats_context_test: monitoring/iostats_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
1465 1466
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)

1467 1468 1469
persistent_cache_test: utilities/persistent_cache/persistent_cache_test.o  db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1470
statistics_test: monitoring/statistics_test.o $(LIBOBJECTS) $(TESTHARNESS)
1471 1472
	$(AM_LINK)

1473
lru_cache_test: cache/lru_cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yi Wu 已提交
1474 1475
	$(AM_LINK)

1476 1477
lua_test: utilities/lua/rocks_lua_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)
Y
Yi Wu 已提交
1478

A
Andrew Kryczka 已提交
1479 1480 1481
range_del_aggregator_test: db/range_del_aggregator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
1482 1483 1484
blob_db_test: utilities/blob_db/blob_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516
#-------------------------------------------------
# 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 已提交
1517
	[ -e $(SHARED4) ] && $(MAKE) install-shared || :
I
Igor Canadi 已提交
1518 1519 1520 1521

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


1522 1523 1524 1525
# ---------------------------------------------------------------------------
# Jni stuff
# ---------------------------------------------------------------------------

1526
JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/linux
D
David Bernard 已提交
1527 1528 1529 1530 1531
ifeq ($(PLATFORM), OS_SOLARIS)
	ARCH := $(shell isainfo -b)
else
	ARCH := $(shell getconf LONG_BIT)
endif
1532 1533 1534 1535 1536 1537

ifeq (,$(findstring ppc,$(MACHINE)))
        ROCKSDBJNILIB = librocksdbjni-linux$(ARCH).so
else
        ROCKSDBJNILIB = librocksdbjni-linux-$(MACHINE).so
endif
1538
ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-linux$(ARCH).jar
1539
ROCKSDB_JAR_ALL = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH).jar
C
Chris Riccomini 已提交
1540
ROCKSDB_JAVADOCS_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-javadoc.jar
1541
ROCKSDB_SOURCES_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-sources.jar
1542 1543
SHA256_CMD = sha256sum

T
Tomas Kolda 已提交
1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555
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
1556 1557 1558
ZSTD_VER ?= 1.2.0
ZSTD_SHA256 ?= 4a7e4593a3638276ca7f2a09dc4f38e674d8317bbea51626393ca73fc047cbfb
ZSTD_DOWNLOAD_BASE ?= https://github.com/facebook/zstd/archive
1559 1560

ifeq ($(PLATFORM), OS_MACOSX)
D
David Bernard 已提交
1561 1562
	ROCKSDBJNILIB = librocksdbjni-osx.jnilib
	ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-osx.jar
1563
	SHA256_CMD = openssl sha256 -r
1564 1565 1566 1567 1568
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
1569
endif
1570 1571 1572 1573 1574
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 已提交
1575 1576 1577 1578
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
1579
	SHA256_CMD = digest -a sha256
D
David Bernard 已提交
1580
endif
T
Tomas Kolda 已提交
1581 1582 1583 1584 1585 1586
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
1587

N
Naveen 已提交
1588
libz.a:
1589
	-rm -rf zlib-$(ZLIB_VER)
T
Tomas Kolda 已提交
1590
	curl -O -L ${ZLIB_DOWNLOAD_BASE}/zlib-$(ZLIB_VER).tar.gz
1591 1592 1593 1594 1595 1596
	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 已提交
1597
	cd zlib-$(ZLIB_VER) && CFLAGS='-fPIC ${EXTRA_CFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' ./configure --static && make
1598
	cp zlib-$(ZLIB_VER)/libz.a .
N
Naveen 已提交
1599 1600

libbz2.a:
1601
	-rm -rf bzip2-$(BZIP2_VER)
T
Tomas Kolda 已提交
1602
	curl -O -L ${BZIP2_DOWNLOAD_BASE}/$(BZIP2_VER)/bzip2-$(BZIP2_VER).tar.gz
1603 1604 1605 1606 1607 1608
	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 已提交
1609
	cd bzip2-$(BZIP2_VER) && make CFLAGS='-fPIC -O2 -g -D_FILE_OFFSET_BITS=64 ${EXTRA_CFLAGS}' AR='ar ${EXTRA_ARFLAGS}'
1610
	cp bzip2-$(BZIP2_VER)/libbz2.a .
N
Naveen 已提交
1611

N
Naveen 已提交
1612
libsnappy.a:
1613
	-rm -rf snappy-$(SNAPPY_VER)
T
Tomas Kolda 已提交
1614
	curl -O -L ${SNAPPY_DOWNLOAD_BASE}/$(SNAPPY_VER)/snappy-$(SNAPPY_VER).tar.gz
1615 1616 1617 1618 1619 1620
	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 已提交
1621 1622
	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}
1623
	cp snappy-$(SNAPPY_VER)/.libs/libsnappy.a .
1624

1625
liblz4.a:
1626
	-rm -rf lz4-$(LZ4_VER)
T
Tomas Kolda 已提交
1627
	curl -O -L ${LZ4_DOWNLOAD_BASE}/v$(LZ4_VER).tar.gz
1628 1629 1630 1631 1632 1633 1634
	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 已提交
1635
	cd lz4-$(LZ4_VER)/lib && make CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' all
1636
	cp lz4-$(LZ4_VER)/lib/liblz4.a .
N
Naveen 已提交
1637

1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650
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 .

1651 1652 1653
# 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
1654

1655
ifneq ($(ROCKSDB_JAVA_NO_COMPRESSION), 1)
1656
JAVA_COMPRESSIONS = libz.a libbz2.a libsnappy.a liblz4.a libzstd.a
1657 1658
endif

1659 1660
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
1661

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

1665
rocksdbjavastatic: $(java_static_libobjects)
F
fyrz 已提交
1666
	cd java;$(MAKE) javalib;
1667
	rm -f ./java/target/$(ROCKSDBJNILIB)
1668 1669
	$(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC \
	  -o ./java/target/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) \
1670
	  $(java_static_libobjects) $(COVERAGEFLAGS) \
1671
	  $(JAVA_COMPRESSIONS) $(JAVA_STATIC_LDFLAGS)
T
Tomas Kolda 已提交
1672
	cd java/target;strip $(STRIPFLAGS) $(ROCKSDBJNILIB)
1673 1674 1675 1676 1677
	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 已提交
1678

1679
rocksdbjavastaticrelease: rocksdbjavastatic
1680
	cd java/crossbuild && vagrant destroy -f && vagrant up linux32 && vagrant halt linux32 && vagrant up linux64 && vagrant halt linux64
1681
	cd java;jar -cf target/$(ROCKSDB_JAR_ALL) HISTORY*.md
1682
	cd java/target;jar -uf $(ROCKSDB_JAR_ALL) librocksdbjni-*.so librocksdbjni-*.jnilib
1683
	cd java/target/classes;jar -uf ../$(ROCKSDB_JAR_ALL) org/rocksdb/*.class org/rocksdb/util/*.class
1684

1685 1686 1687
rocksdbjavastaticreleasedocker: rocksdbjavastatic
	DOCKER_LINUX_X64_CONTAINER=`docker ps -aqf name=rocksdb_linux_x64-be`; \
	if [ -z "$$DOCKER_LINUX_X64_CONTAINER" ]; then \
1688
		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; \
1689 1690 1691 1692
	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 \
1693
		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; \
1694 1695 1696 1697 1698 1699
	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

1700 1701 1702 1703 1704 1705 1706 1707
rocksdbjavastaticdockerppc64le:
	mkdir -p java/target
	DOCKER_LINUX_PPC64LE_CONTAINER=`docker ps -aqf name=rocksdb_linux_ppc64le-be`; \
	if [ -z "$$DOCKER_LINUX_PPC64LE_CONTAINER" ]; then \
		docker container create --attach stdin --attach stdout --attach stderr --volume `pwd`:/rocksdb-host --name rocksdb_linux_ppc64le-be evolvedbinary/rocksjava:centos7_ppc64le-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh; \
	fi
	docker start -a rocksdb_linux_ppc64le-be

1708 1709
rocksdbjavastaticpublish: rocksdbjavastaticrelease rocksdbjavastaticpublishcentral

1710 1711
rocksdbjavastaticpublishdocker: rocksdbjavastaticreleasedocker rocksdbjavastaticpublishcentral

1712
rocksdbjavastaticpublishcentral:
1713 1714 1715 1716 1717
	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
1718
	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
1719
	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
1720

1721
# A version of each $(LIBOBJECTS) compiled with -fPIC
1722 1723 1724 1725 1726 1727 1728 1729 1730
ifeq ($(HAVE_POWER8),1)
JAVA_CC_OBJECTS = $(SHARED_CC_OBJECTS)
JAVA_C_OBJECTS = $(SHARED_C_OBJECTS)
JAVA_ASM_OBJECTS = $(SHARED_ASM_OBJECTS)

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

1731
java_libobjects = $(patsubst %,jl/%,$(LIBOBJECTS))
1732
CLEAN_FILES += jl
1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744
java_all_libobjects = $(java_libobjects)

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

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

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

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

1749 1750 1751


rocksdbjava: $(java_all_libobjects)
1752 1753 1754 1755 1756 1757
	$(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
1758 1759 1760 1761

jclean:
	cd java;$(MAKE) clean;

1762 1763 1764 1765 1766 1767
jtest_compile: rocksdbjava
	cd java;$(MAKE) java_test

jtest_run:
	cd java;$(MAKE) run_test

1768
jtest: rocksdbjava
1769
	cd java;$(MAKE) sample;$(MAKE) test;
1770

1771 1772 1773
jdb_bench:
	cd java;$(MAKE) db_bench;

1774 1775
commit_prereq: build_tools/rocksdb-lego-determinator \
               build_tools/precommit_checker.py
1776
	J=$(J) build_tools/precommit_checker.py unit unit_481 clang_unit release release_481 clang_release tsan asan ubsan lite unit_non_shm
1777
	$(MAKE) clean && $(MAKE) jclean && $(MAKE) rocksdbjava;
1778

1779 1780 1781
# ---------------------------------------------------------------------------
#  	Platform-specific compilation
# ---------------------------------------------------------------------------
J
Jim Paton 已提交
1782

1783 1784 1785
ifeq ($(PLATFORM), IOS)
# For iOS, create universal object files to be used on both the simulator and
# a device.
H
heyongqiang 已提交
1786 1787 1788
PLATFORMSROOT=/Applications/Xcode.app/Contents/Developer/Platforms
SIMULATORROOT=$(PLATFORMSROOT)/iPhoneSimulator.platform/Developer
DEVICEROOT=$(PLATFORMSROOT)/iPhoneOS.platform/Developer
I
Igor Canadi 已提交
1789
IOSVERSION=$(shell defaults read $(PLATFORMSROOT)/iPhoneOS.platform/version CFBundleShortVersionString)
1790

1791 1792
.cc.o:
	mkdir -p ios-x86/$(dir $@)
I
Igor Canadi 已提交
1793
	$(CXX) $(CXXFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@
1794
	mkdir -p ios-arm/$(dir $@)
I
Igor Canadi 已提交
1795
	xcrun -sdk iphoneos $(CXX) $(CXXFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -arch armv7s -arch arm64 -c $< -o ios-arm/$@
1796
	lipo ios-x86/$@ ios-arm/$@ -create -output $@
1797 1798 1799

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

1805
else
1806 1807 1808 1809 1810 1811 1812
ifeq ($(HAVE_POWER8),1)
util/crc32c_ppc.o: util/crc32c_ppc.c
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@

util/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
endif
1813
.cc.o:
1814
	$(AM_V_CC)$(CXX) $(CXXFLAGS) -c $< -o $@ $(COVERAGEFLAGS)
1815

1816
.c.o:
1817
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
1818
endif
1819 1820 1821 1822
# ---------------------------------------------------------------------------
#  	Source files dependencies detection
# ---------------------------------------------------------------------------

O
omegaga 已提交
1823
all_sources = $(LIB_SOURCES) $(MAIN_SOURCES) $(MOCK_LIB_SOURCES) $(TOOL_LIB_SOURCES) $(BENCH_LIB_SOURCES) $(TEST_LIB_SOURCES) $(EXP_LIB_SOURCES)
1824
DEPFILES = $(all_sources:.cc=.cc.d)
1825

1826 1827 1828 1829 1830
# 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.
1831
%.cc.d: %.cc
1832
	@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
1833
	  -MM -MT'$@' -MT'$(<:.cc=.o)' "$<" -o '$@'
1834

1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851
ifeq ($(HAVE_POWER8),1)
DEPFILES_C = $(LIB_SOURCES_C:.c=.c.d)
DEPFILES_ASM = $(LIB_SOURCES_ASM:.S=.S.d)

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

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

$(DEPFILES_C): %.c.d

$(DEPFILES_ASM): %.S.d
depend: $(DEPFILES) $(DEPFILES_C) $(DEPFILES_ASM)
else
1852
depend: $(DEPFILES)
1853
endif
1854

1855 1856 1857 1858
# 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.
1859
ifneq ($(MAKECMDGOALS),clean)
1860
ifneq ($(MAKECMDGOALS),format)
1861 1862
ifneq ($(MAKECMDGOALS),jclean)
ifneq ($(MAKECMDGOALS),jtest)
1863
ifneq ($(MAKECMDGOALS),package)
1864
ifneq ($(MAKECMDGOALS),analyze)
1865 1866
-include $(DEPFILES)
endif
1867
endif
1868 1869
endif
endif
1870
endif
1871
endif