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

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

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

J
Jonathan Lee 已提交
9 10 11
BASH_EXISTS := $(shell which bash)
SHELL := $(shell which bash)

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

20 21
# Transform parallel LOG output into something more readable.
perl_command = perl -n \
22 23 24
  -e '@a=split("\t",$$_,-1); $$t=$$a[8];'				\
  -e '$$t =~ /.*if\s\[\[\s"(.*?\.[\w\/]+)/ and $$t=$$1;'		\
  -e '$$t =~ s,^\./,,;'							\
Y
Yueh-Hsuan Chiang 已提交
25 26 27
  -e '$$t =~ s, >.*,,; chomp $$t;'					\
  -e '$$t =~ /.*--gtest_filter=(.*?\.[\w\/]+)/ and $$t=$$1;'		\
  -e 'printf "%7.3f %s %s\n", $$a[3], $$a[6] == 0 ? "PASS" : "FAIL", $$t'
28 29
quoted_perl_command = $(subst ','\'',$(perl_command))

30 31 32 33 34 35 36 37 38
# DEBUG_LEVEL can have three values:
# * DEBUG_LEVEL=2; this is the ultimate debug mode. It will compile rocksdb
# without any optimizations. To compile with level 2, issue `make dbg`
# * DEBUG_LEVEL=1; debug level 1 enables all assertions and debug code, but
# compiles rocksdb with -O2 optimizations. this is the default debug level.
# `make all` or `make <binary_target>` compile RocksDB with debug level 1.
# We use this debug level when developing RocksDB.
# * DEBUG_LEVEL=0; this is the debug level we use for release. If you're
# running rocksdb in production you most definitely want to compile RocksDB
A
agiardullo 已提交
39
# with debug level 0. To compile with level 0, run `make shared_lib`,
40 41
# `make install-shared`, `make static_lib`, `make install-static` or
# `make install`
42 43 44

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

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

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

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

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

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

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

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

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

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

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

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

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

101 102 103 104 105 106 107 108 109 110 111 112
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

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

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

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

132
#-----------------------------------------------
133
include src.mk
134

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

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 已提交
156 157 158 159
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 =
160

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

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

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

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

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

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

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

234 235 236
# USAN doesn't work well with jemalloc. If we're compiling with USAN, we should use regular malloc.
ifdef COMPILE_WITH_UBSAN
	DISABLE_JEMALLOC=1
S
Siying Dong 已提交
237 238 239 240
	# Suppress alignment warning because murmurhash relies on casting unaligned
	# memory to integer. Fixing it may cause performance regression. 3-way crc32
	# relies on it too, although it can be rewritten to eliminate with minimal
	# performance regression.
241 242 243
	EXEC_LDFLAGS += -fsanitize=undefined -fno-sanitize-recover=all
	PLATFORM_CCFLAGS += -fsanitize=undefined -fno-sanitize-recover=all -DROCKSDB_UBSAN_RUN
	PLATFORM_CXXFLAGS += -fsanitize=undefined -fno-sanitize-recover=all -DROCKSDB_UBSAN_RUN
244 245
endif

246 247 248 249 250
ifdef ROCKSDB_VALGRIND_RUN
	PLATFORM_CCFLAGS += -DROCKSDB_VALGRIND_RUN
	PLATFORM_CXXFLAGS += -DROCKSDB_VALGRIND_RUN
endif

I
Igor Canadi 已提交
251
ifndef DISABLE_JEMALLOC
252
	ifdef JEMALLOC
T
Tamir Duberstein 已提交
253 254
		PLATFORM_CXXFLAGS += -DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE
		PLATFORM_CCFLAGS  += -DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE
255
	endif
256 257 258 259
	ifdef WITH_JEMALLOC_FLAG
		PLATFORM_LDFLAGS += -ljemalloc
		JAVA_LDFLAGS += -ljemalloc
	endif
Y
Yueh-Hsuan Chiang 已提交
260 261 262
	EXEC_LDFLAGS := $(JEMALLOC_LIB) $(EXEC_LDFLAGS)
	PLATFORM_CXXFLAGS += $(JEMALLOC_INCLUDE)
	PLATFORM_CCFLAGS += $(JEMALLOC_INCLUDE)
I
Igor Canadi 已提交
263 264
endif

T
Tamir Duberstein 已提交
265 266
export GTEST_THROW_ON_FAILURE=1
export GTEST_HAS_EXCEPTIONS=1
I
Igor Sugak 已提交
267
GTEST_DIR = ./third-party/gtest-1.7.0/fused-src
T
Tomas Kolda 已提交
268 269 270 271 272 273 274 275
# 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 已提交
276

277 278 279
# This (the first rule) must depend on "all".
default: all

280
WARNING_FLAGS = -W -Wextra -Wall -Wsign-compare -Wshadow \
Y
Yueh-Hsuan Chiang 已提交
281
  -Wno-unused-parameter
282

283 284 285 286
ifeq ($(PLATFORM), OS_OPENBSD)
	WARNING_FLAGS += -Wno-unused-lambda-capture
endif

287
ifndef DISABLE_WARNING_AS_ERROR
Y
Yueh-Hsuan Chiang 已提交
288
	WARNING_FLAGS += -Werror
289 290
endif

291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317

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

318 319 320
ifeq ($(NO_THREEWAY_CRC32C), 1)
	CXXFLAGS += -DNO_THREEWAY_CRC32C
endif
321

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

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

327 328 329
# 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
330
date := $(shell date +%F)
I
Igor Canadi 已提交
331
ifdef FORCE_GIT_SHA
Y
Yueh-Hsuan Chiang 已提交
332
	git_sha := $(FORCE_GIT_SHA)
I
Igor Canadi 已提交
333
else
Y
Yueh-Hsuan Chiang 已提交
334
	git_sha := $(shell git rev-parse HEAD 2>/dev/null)
I
Igor Canadi 已提交
335
endif
336
gen_build_version = sed -e s/@@GIT_SHA@@/$(git_sha)/ -e s/@@GIT_DATE_TIME@@/$(date)/ util/build_version.cc.in
337 338 339 340 341 342

# 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.
343 344
FORCE:
util/build_version.cc: FORCE
Y
Yueh-Hsuan Chiang 已提交
345 346 347 348 349
	$(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
350
endif
351

352
LIBOBJECTS = $(LIB_SOURCES:.cc=.o)
353 354 355 356
ifeq ($(HAVE_POWER8),1)
LIB_CC_OBJECTS = $(LIB_SOURCES:.cc=.o)
LIBOBJECTS += $(LIB_SOURCES_C:.c=.o)
LIBOBJECTS += $(LIB_SOURCES_ASM:.S=.o)
A
Andrew Kryczka 已提交
357 358
else
LIB_CC_OBJECTS = $(LIB_SOURCES:.cc=.o)
359 360
endif

361 362
LIBOBJECTS += $(TOOL_LIB_SOURCES:.cc=.o)
MOCKOBJECTS = $(MOCK_LIB_SOURCES:.cc=.o)
J
jorlow@chromium.org 已提交
363

I
Igor Sugak 已提交
364
GTEST = $(GTEST_DIR)/gtest/gtest-all.o
J
jorlow@chromium.org 已提交
365
TESTUTIL = ./util/testutil.o
I
Igor Sugak 已提交
366
TESTHARNESS = ./util/testharness.o $(TESTUTIL) $(MOCKOBJECTS) $(GTEST)
367
VALGRIND_ERROR = 2
368
VALGRIND_VER := $(join $(VALGRIND_VER),valgrind)
369

370
VALGRIND_OPTS = --error-exitcode=$(VALGRIND_ERROR) --leak-check=full
371

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

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

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

Y
Yi Wu 已提交
519 520 521 522
PARALLEL_TEST = \
	backupable_db_test \
	db_compaction_filter_test \
	db_compaction_test \
523
	db_merge_operator_test \
524
	db_sst_test \
Y
Yi Wu 已提交
525 526
	db_test \
	db_universal_compaction_test \
527 528
	db_wal_test \
	external_sst_file_test \
Y
Yi Wu 已提交
529 530 531
	fault_injection_test \
	inlineskiplist_test \
	manual_compaction_test \
532 533
	persistent_cache_test \
	table_test \
534
	transaction_test \
535
	write_prepared_transaction_test \
Y
Yi Wu 已提交
536

537 538 539 540
# options_settable_test doesn't pass with UBSAN as we use hack in the test
ifdef COMPILE_WITH_UBSAN
        TESTS := $(shell echo $(TESTS) | sed 's/\boptions_settable_test\b//g')
endif
I
Islam AbdelRahman 已提交
541 542 543 544 545 546 547 548
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
549

550
TOOLS = \
Y
Yueh-Hsuan Chiang 已提交
551 552 553
	sst_dump \
	db_sanity_test \
	db_stress \
I
Igor Canadi 已提交
554
	write_stress \
Y
Yueh-Hsuan Chiang 已提交
555 556 557
	ldb \
	db_repl_stress \
	rocksdb_dump \
Y
Yi Wu 已提交
558 559
	rocksdb_undump \
	blob_dump \
J
jorlow@chromium.org 已提交
560

561 562 563
TEST_LIBS = \
	librocksdb_env_basic_test.a

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

567
# if user didn't config LIBNAME, set the default
568
ifeq ($(LIBNAME),)
569 570
# we should only run rocksdb in production with DEBUG_LEVEL 0
ifeq ($(DEBUG_LEVEL),0)
Y
Yueh-Hsuan Chiang 已提交
571
        LIBNAME=librocksdb
572 573 574
else
        LIBNAME=librocksdb_debug
endif
575
endif
576
LIBRARY = ${LIBNAME}.a
577
TOOLS_LIBRARY = ${LIBNAME}_tools.a
578

579 580 581
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)
582

583 584
default: all

585 586 587
#-----------------------------------------------
# Create platform independent shared libraries.
#-----------------------------------------------
588
ifneq ($(PLATFORM_SHARED_EXT),)
H
heyongqiang 已提交
589 590

ifneq ($(PLATFORM_SHARED_VERSIONED),true)
591
SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
H
heyongqiang 已提交
592 593
SHARED2 = $(SHARED1)
SHARED3 = $(SHARED1)
594
SHARED4 = $(SHARED1)
H
heyongqiang 已提交
595 596
SHARED = $(SHARED1)
else
597 598
SHARED_MAJOR = $(ROCKSDB_MAJOR)
SHARED_MINOR = $(ROCKSDB_MINOR)
599
SHARED_PATCH = $(ROCKSDB_PATCH)
600
SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
601 602 603 604 605 606
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
607 608
SHARED2 = $(SHARED1).$(SHARED_MAJOR)
SHARED3 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR)
609
SHARED4 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR).$(SHARED_PATCH)
610
endif
611 612
SHARED = $(SHARED1) $(SHARED2) $(SHARED3) $(SHARED4)
$(SHARED1): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
613
	ln -fs $(SHARED4) $(SHARED1)
614
$(SHARED2): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
615
	ln -fs $(SHARED4) $(SHARED2)
616
$(SHARED3): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
617
	ln -fs $(SHARED4) $(SHARED3)
618
endif
619 620 621 622 623 624 625
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
626
shared_libobjects = $(patsubst %,shared-objects/%,$(LIBOBJECTS))
627 628
endif

629
CLEAN_FILES += shared-objects
630
shared_all_libobjects = $(shared_libobjects)
631

632 633 634 635 636 637 638 639 640
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
641
$(shared_libobjects): shared-objects/%.o: %.cc
642 643
	$(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) -c $< -o $@

644 645 646 647
ifeq ($(HAVE_POWER8),1)
shared_all_libobjects = $(shared_libobjects) $(shared-ppc-objects)
endif
$(SHARED4): $(shared_all_libobjects)
648
	$(CXX) $(PLATFORM_SHARED_LDFLAGS)$(SHARED3) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) $(shared_libobjects) $(LDFLAGS) -o $@
H
heyongqiang 已提交
649 650 651

endif  # PLATFORM_SHARED_EXT

652
.PHONY: blackbox_crash_test check clean coverage crash_test ldb_tests package \
Y
Yueh-Hsuan Chiang 已提交
653 654
	release tags valgrind_check whitebox_crash_test format static_lib shared_lib all \
	dbg rocksdbjavastatic rocksdbjava install install-static install-shared uninstall \
655
	analyze tools tools_lib
656

M
maurice barnum 已提交
657

658
all: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(TESTS)
659

660 661
all_but_some_tests: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(SUBSET)

I
Igor Canadi 已提交
662 663 664 665
static_lib: $(LIBRARY)

shared_lib: $(SHARED)

M
maurice barnum 已提交
666 667
tools: $(TOOLS)

668 669
tools_lib: $(TOOLS_LIBRARY)

670 671
test_libs: $(TEST_LIBS)

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

674
# creates static library and programs
675
release:
Y
Yueh-Hsuan Chiang 已提交
676
	$(MAKE) clean
677
	DEBUG_LEVEL=0 $(MAKE) static_lib tools db_bench
K
Kai Liu 已提交
678 679

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

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

# 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 已提交
769
	^.*SnapshotConcurrentAccessTest.*$$|^t/run-table_test-HarnessTest.Randomized$$|^t/run-db_test-.*(?:FileCreationRandomFailure|EncodeDecompressedBlockSizeTest)$$|^.*RecoverFromCorruptedWALWithoutFlush$$
770
prioritize_long_running_tests =						\
Y
Yueh-Hsuan Chiang 已提交
771 772 773
  perl -pe 's,($(slow_test_regexp)),100 $$1,'				\
    | sort -k1,1gr							\
    | sed 's/^[.0-9]* //'
774 775 776 777 778 779

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

V
Venkatesh Radhakrishnan 已提交
782 783 784
# Use this regexp to select the subset of tests whose names match.
tests-regexp = .

Y
Yi Wu 已提交
785
t_run = $(wildcard t/run-*)
786
.PHONY: check_0
Y
Yi Wu 已提交
787 788
check_0:
	$(AM_V_GEN)export TEST_TMPDIR=$(TMPD); \
Y
Yueh-Hsuan Chiang 已提交
789 790 791
	printf '%s\n' ''						\
	  'To monitor subtest <duration,pass/fail,name>,'		\
	  '  run "make watch-log" in a separate window' '';		\
Y
Yi Wu 已提交
792 793 794 795 796
	test -t 1 && eta=--eta || eta=; \
	{ \
		printf './%s\n' $(filter-out $(PARALLEL_TEST),$(TESTS)); \
		printf '%s\n' $(t_run); \
	} \
Y
Yueh-Hsuan Chiang 已提交
797 798
	  | $(prioritize_long_running_tests)				\
	  | grep -E '$(tests-regexp)'					\
799
	  | build_tools/gnu_parallel -j$(J) --plain --joblog=LOG $$eta --gnu '{} >& t/log-{/}'
S
sdong 已提交
800

801
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|MySQLStyleTransactionTest.TransactionStressTest
802

S
sdong 已提交
803
.PHONY: valgrind_check_0
Y
Yi Wu 已提交
804
valgrind_check_0:
S
sdong 已提交
805 806 807 808 809 810
	$(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 已提交
811
	  printf './%s\n' $(filter-out $(PARALLEL_TEST) %skiplist_test options_settable_test, $(TESTS));		\
S
sdong 已提交
812 813 814 815
	  printf '%s\n' $(t_run);					\
	}								\
	  | $(prioritize_long_running_tests)				\
	  | grep -E '$(tests-regexp)'					\
816
	  | grep -E -v '$(valgrind-blacklist-regexp)'					\
817
	  | build_tools/gnu_parallel -j$(J) --plain --joblog=LOG $$eta --gnu \
818 819
	  '(if [[ "{}" == "./"* ]] ; then $(DRIVER) {}; else {}; fi) ' \
	  '>& t/valgrind_log-{/}'
820 821

CLEAN_FILES += t LOG $(TMPD)
822

823 824 825 826 827 828 829 830
# 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:
831
	$(WATCH) --interval=0 'sort -k7,7nr -k4,4gr LOG|$(quoted_perl_command)'
832

I
Igor Canadi 已提交
833
# If J != 1 and GNU parallel is installed, run the tests in parallel,
834 835
# via the check_0 rule above.  Otherwise, run them sequentially.
check: all
Y
Yi Wu 已提交
836
	$(MAKE) gen_parallel_tests
Y
Yueh-Hsuan Chiang 已提交
837
	$(AM_V_GEN)if test "$(J)" != 1                                  \
838
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |                    \
Y
Yueh-Hsuan Chiang 已提交
839 840 841 842 843 844 845 846
	        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 已提交
847
ifneq ($(PLATFORM), OS_AIX)
I
Islam AbdelRahman 已提交
848
ifeq ($(filter -DROCKSDB_LITE,$(OPT)),)
Y
Yueh-Hsuan Chiang 已提交
849 850
	python tools/ldb_test.py
	sh tools/rocksdb_dump_test.sh
I
Islam AbdelRahman 已提交
851
endif
T
Tomas Kolda 已提交
852
endif
853

S
Siying Dong 已提交
854 855
# TODO add ldb_tests
check_some: $(SUBSET)
Y
Yueh-Hsuan Chiang 已提交
856
	for t in $(SUBSET); do echo "===== Running $$t"; ./$$t || exit 1; done
857 858

.PHONY: ldb_tests
859
ldb_tests: ldb
Y
Yueh-Hsuan Chiang 已提交
860
	python tools/ldb_test.py
861

I
Igor Canadi 已提交
862
crash_test: whitebox_crash_test blackbox_crash_test
863 864

blackbox_crash_test: db_stress
865 866
	python -u tools/db_crashtest.py --simple blackbox $(CRASH_TEST_EXT_ARGS)
	python -u tools/db_crashtest.py blackbox $(CRASH_TEST_EXT_ARGS)
867

868 869 870 871
ifeq ($(CRASH_TEST_KILL_ODD),)
  CRASH_TEST_KILL_ODD=888887
endif

872
whitebox_crash_test: db_stress
873
	python -u tools/db_crashtest.py --simple whitebox --random_kill_odd \
874
      $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
875
	python -u tools/db_crashtest.py whitebox  --random_kill_odd \
876
      $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
877

I
Igor Canadi 已提交
878
asan_check:
Y
Yueh-Hsuan Chiang 已提交
879 880 881
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) check -j32
	$(MAKE) clean
882 883

asan_crash_test:
Y
Yueh-Hsuan Chiang 已提交
884 885 886
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) crash_test
	$(MAKE) clean
I
Igor Canadi 已提交
887

888 889 890 891 892 893 894 895 896 897
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

898
valgrind_test:
899
	ROCKSDB_VALGRIND_RUN=1 DISABLE_JEMALLOC=1 $(MAKE) valgrind_check
900

I
Igor Canadi 已提交
901
valgrind_check: $(TESTS)
902
	$(MAKE) DRIVER="$(VALGRIND_VER) $(VALGRIND_OPTS)" gen_parallel_tests
S
sdong 已提交
903
	$(AM_V_GEN)if test "$(J)" != 1                                  \
904
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |                    \
S
sdong 已提交
905 906
	        grep -q 'GNU Parallel';                                 \
	then                                                            \
Y
Yi Wu 已提交
907
      $(MAKE) TMPD=$(TMPD)                                        \
S
sdong 已提交
908 909 910 911 912 913 914 915 916 917
      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
918

919 920 921 922 923 924 925

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 \
926
			seq $(J) | v="$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{};  export TEST_TMPDIR=$$s;' \
927 928
				'timeout 2m ./db_test --gtest_filter=$$v >> $$s/log-{} 2>1'; \
		else\
929
			seq $(J) | v="./$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{};' \
930 931 932 933 934 935 936 937 938 939 940
			     '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 已提交
941 942 943 944 945 946 947
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!'

948 949
parallel_check: $(TESTS)
	$(AM_V_GEN)if test "$(J)" > 1                                  \
950
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |                    \
951 952 953 954 955 956 957 958 959
	        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); \
960
        seq $(J) | build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{}; rm -rf $$s; mkdir $$s'; \
961
	$(MAKE)  PAR_TEST="$(shell $(test_names))" TMPD=$(TMPD) \
962 963 964 965
		J=$(J) db_test=1 parloop; \
	$(MAKE) PAR_TEST="$(filter-out db_test, $(TESTS))" \
		TMPD=$(TMPD) J=$(J) db_test=0 parloop;

966
analyze: clean
Y
Yueh-Hsuan Chiang 已提交
967 968 969 970
	$(CLANG_SCAN_BUILD) --use-analyzer=$(CLANG_ANALYZER) \
		--use-c++=$(CXX) --use-cc=$(CC) --status-bugs \
		-o $(CURDIR)/scan_build_report \
		$(MAKE) dbg
971

972 973
CLEAN_FILES += unity.cc
unity.cc: Makefile
Y
Yueh-Hsuan Chiang 已提交
974 975
	rm -f $@ $@-t
	for source_file in $(LIB_SOURCES); do \
E
Evan Shaw 已提交
976
		echo "#include \"$$source_file\"" >> $@-t; \
Y
Yueh-Hsuan Chiang 已提交
977 978 979
	done
	chmod a=r $@-t
	mv $@-t $@
M
miguelportilla 已提交
980

E
Evan Shaw 已提交
981 982 983 984
unity.a: unity.o
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ unity.o

I
Igor Canadi 已提交
985
# try compiling db_test with unity
986
unity_test: db/db_test.o db/db_test_util.o $(TESTHARNESS) unity.a
I
Igor Canadi 已提交
987 988 989
	$(AM_LINK)
	./unity_test

E
Evan Shaw 已提交
990 991
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 已提交
992

J
jorlow@chromium.org 已提交
993
clean:
Y
Yueh-Hsuan Chiang 已提交
994 995
	rm -f $(BENCHMARKS) $(TOOLS) $(TESTS) $(LIBRARY) $(SHARED)
	rm -rf $(CLEAN_FILES) ios-x86 ios-arm scan_build_report
996 997
	$(FIND) . -name "*.[oda]" -exec rm -f {} \;
	$(FIND) . -type f -regex ".*\.\(\(gcda\)\|\(gcno\)\)" -exec rm {} \;
S
Sagar Vemuri 已提交
998
	rm -rf bzip2* snappy* zlib* lz4* zstd*
Y
Yi Wu 已提交
999
	cd java; $(MAKE) clean
1000

1001
tags:
1002
	ctags -R .
1003
	cscope -b `$(FIND) . -name '*.cc'` `$(FIND) . -name '*.h'` `$(FIND) . -name '*.c'`
L
Leonidas Galanis 已提交
1004
	ctags -e -R -o etags *
1005

1006
format:
Y
Yueh-Hsuan Chiang 已提交
1007
	build_tools/format-diff.sh
1008

1009
package:
Y
Yueh-Hsuan Chiang 已提交
1010
	bash build_tools/make_package.sh $(SHARED_MAJOR).$(SHARED_MINOR)
1011

1012 1013 1014
# ---------------------------------------------------------------------------
# 	Unit tests and tools
# ---------------------------------------------------------------------------
1015
$(LIBRARY): $(LIBOBJECTS)
Y
Yueh-Hsuan Chiang 已提交
1016 1017
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $(LIBOBJECTS)
J
jorlow@chromium.org 已提交
1018

O
omegaga 已提交
1019
$(TOOLS_LIBRARY): $(BENCH_LIB_SOURCES:.cc=.o) $(TOOL_LIB_SOURCES:.cc=.o) $(LIB_SOURCES:.cc=.o) $(TESTUTIL)
1020 1021 1022
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $^

1023
librocksdb_env_basic_test.a: env/env_basic_test.o $(LIBOBJECTS) $(TESTHARNESS)
1024 1025 1026
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $^

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

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

1033 1034 1035
persistent_cache_bench: utilities/persistent_cache/persistent_cache_bench.o $(LIBOBJECTS) $(TESTUTIL)
	$(AM_LINK)

1036
memtablerep_bench: memtable/memtablerep_bench.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
1037
	$(AM_LINK)
A
Ameya Gupte 已提交
1038

1039
db_stress: tools/db_stress.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
1040
	$(AM_LINK)
1041

I
Igor Canadi 已提交
1042 1043 1044
write_stress: tools/write_stress.o $(LIBOBJECTS) $(TESTUTIL)
	$(AM_LINK)

I
Igor Canadi 已提交
1045
db_sanity_test: tools/db_sanity_test.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
1046
	$(AM_LINK)
1047

1048
db_repl_stress: tools/db_repl_stress.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
1049
	$(AM_LINK)
1050

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

K
kailiu 已提交
1054
autovector_test: util/autovector_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1055
	$(AM_LINK)
K
kailiu 已提交
1056

1057
column_family_test: db/column_family_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1058
	$(AM_LINK)
1059

K
kailiu 已提交
1060
table_properties_collector_test: db/table_properties_collector_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1061
	$(AM_LINK)
1062

S
Sanjay Ghemawat 已提交
1063
bloom_test: util/bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1064
	$(AM_LINK)
S
Sanjay Ghemawat 已提交
1065

1066
dynamic_bloom_test: util/dynamic_bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1067
	$(AM_LINK)
1068

1069
c_test: db/c_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1070
	$(AM_LINK)
1071

1072
cache_test: cache/cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1073
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1074 1075

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

1078 1079 1080
hash_test: util/hash_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1081 1082 1083
option_change_migration_test: utilities/option_change_migration/option_change_migration_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1084
stringappend_test: utilities/merge_operators/string_append/stringappend_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1085
	$(AM_LINK)
1086

1087
cassandra_format_test: utilities/cassandra/cassandra_format_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
1088 1089
	$(AM_LINK)

1090
cassandra_functional_test: utilities/cassandra/cassandra_functional_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
1091 1092
	$(AM_LINK)

1093
cassandra_row_merge_test: utilities/cassandra/cassandra_row_merge_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
1094 1095
	$(AM_LINK)

1096
cassandra_serialize_test: utilities/cassandra/cassandra_serialize_test.o $(LIBOBJECTS) $(TESTHARNESS)
1097 1098
	$(AM_LINK)

1099
redis_test: utilities/redis/redis_lists_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1100
	$(AM_LINK)
1101

1102 1103 1104
hash_table_test: utilities/persistent_cache/hash_table_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1105
histogram_test: monitoring/histogram_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1106
	$(AM_LINK)
A
Abhishek Kona 已提交
1107

L
Lei Jin 已提交
1108
thread_local_test: util/thread_local_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1109
	$(AM_LINK)
L
Lei Jin 已提交
1110

J
jorlow@chromium.org 已提交
1111
corruption_test: db/corruption_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1112
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1113 1114

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

1117
slice_transform_test: util/slice_transform_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1118
	$(AM_LINK)
1119

1120
db_basic_test: db/db_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
E
Ewout Prangsma 已提交
1121 1122 1123
	$(AM_LINK)

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

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

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

Y
Yi Wu 已提交
1132 1133 1134
db_blob_index_test: db/db_blob_index_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

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

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

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

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

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

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

1153 1154 1155
db_flush_test: db/db_flush_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

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

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

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

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

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

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

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

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

Y
Yi Wu 已提交
1180 1181 1182
db_write_test: db/db_write_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

S
Siying Dong 已提交
1183 1184 1185
external_sst_file_basic_test: db/external_sst_file_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

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

1189
db_tailing_iter_test: db/db_tailing_iter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1190 1191
	$(AM_LINK)

S
Stanislau Hlebik 已提交
1192
db_iter_test: db/db_iter_test.o $(LIBOBJECTS) $(TESTHARNESS)
1193
	$(AM_LINK)
S
Stanislau Hlebik 已提交
1194

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

1198
db_wal_test: db/db_wal_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
S
sdong 已提交
1199 1200
	$(AM_LINK)

O
omegaga 已提交
1201 1202 1203
db_io_failure_test: db/db_io_failure_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

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

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

1210
log_write_bench: util/log_write_bench.o $(LIBOBJECTS) $(TESTHARNESS)
D
dx9 已提交
1211
	$(AM_LINK) $(PROFILING_FLAGS)
1212

S
Siying Dong 已提交
1213
plain_table_db_test: db/plain_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1214
	$(AM_LINK)
S
Siying Dong 已提交
1215

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

1219
table_reader_bench: table/table_reader_bench.o $(LIBOBJECTS) $(TESTHARNESS)
D
dx9 已提交
1220
	$(AM_LINK) $(PROFILING_FLAGS)
1221

1222
perf_context_test: db/perf_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
1223
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)
1224

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

I
Igor Canadi 已提交
1228
backupable_db_test: utilities/backupable/backupable_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1229
	$(AM_LINK)
I
Igor Canadi 已提交
1230

1231 1232 1233
checkpoint_test: utilities/checkpoint/checkpoint_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1234
document_db_test: utilities/document/document_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1235
	$(AM_LINK)
I
Igor Canadi 已提交
1236

I
Igor Canadi 已提交
1237
json_document_test: utilities/document/json_document_test.o $(LIBOBJECTS) $(TESTHARNESS)
1238
	$(AM_LINK)
I
Igor Canadi 已提交
1239

1240 1241 1242
sim_cache_test: utilities/simulator_cache/sim_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1243
spatial_db_test: utilities/spatialdb/spatial_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1244
	$(AM_LINK)
I
Igor Canadi 已提交
1245

S
Sage Weil 已提交
1246 1247 1248
env_mirror_test: utilities/env_mirror_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
Andrew Kryczka 已提交
1249 1250 1251
env_timed_test: utilities/env_timed_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1252 1253 1254 1255 1256
ifdef ROCKSDB_USE_LIBRADOS
env_librados_test: utilities/env_librados_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(COVERAGEFLAGS)
endif

1257
object_registry_test: utilities/object_registry_test.o $(LIBOBJECTS) $(TESTHARNESS)
1258 1259
	$(AM_LINK)

1260
ttl_test: utilities/ttl/ttl_test.o $(LIBOBJECTS) $(TESTHARNESS)
1261
	$(AM_LINK)
1262

O
omegaga 已提交
1263 1264 1265
date_tiered_test: utilities/date_tiered/date_tiered_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1266
write_batch_with_index_test: utilities/write_batch_with_index/write_batch_with_index_test.o $(LIBOBJECTS) $(TESTHARNESS)
1267
	$(AM_LINK)
1268

I
Igor Canadi 已提交
1269
flush_job_test: db/flush_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
1270
	$(AM_LINK)
A
Andres Noetzli 已提交
1271 1272 1273

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

I
Igor Canadi 已提交
1275
compaction_job_test: db/compaction_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
1276
	$(AM_LINK)
I
Igor Canadi 已提交
1277

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

1281 1282 1283
compact_on_deletion_collector_test: utilities/table_properties_collectors/compact_on_deletion_collector_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1284
wal_manager_test: db/wal_manager_test.o $(LIBOBJECTS) $(TESTHARNESS)
1285
	$(AM_LINK)
I
Igor Canadi 已提交
1286

J
jorlow@chromium.org 已提交
1287
dbformat_test: db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS)
1288
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1289

1290
env_basic_test: env/env_basic_test.o $(LIBOBJECTS) $(TESTHARNESS)
1291 1292
	$(AM_LINK)

1293
env_test: env/env_test.o $(LIBOBJECTS) $(TESTHARNESS)
1294
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1295

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

A
Andrew Kryczka 已提交
1299
rate_limiter_test: util/rate_limiter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1300
	$(AM_LINK)
L
Lei Jin 已提交
1301

I
Islam AbdelRahman 已提交
1302 1303 1304
delete_scheduler_test: util/delete_scheduler_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

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

1308 1309 1310
file_reader_writer_test: util/file_reader_writer_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1311
block_based_filter_block_test: table/block_based_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1312
	$(AM_LINK)
1313 1314

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

M
Maysam Yabandeh 已提交
1317 1318 1319
partitioned_filter_block_test: table/partitioned_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1320
log_test: db/log_test.o $(LIBOBJECTS) $(TESTHARNESS)
M
Maysam Yabandeh 已提交
1321 1322 1323
	$(AM_LINK)

cleanable_test: table/cleanable_test.o $(LIBOBJECTS) $(TESTHARNESS)
1324
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1325 1326

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

D
Dhruba Borthakur 已提交
1329
block_test: table/block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1330
	$(AM_LINK)
D
Dhruba Borthakur 已提交
1331

1332
inlineskiplist_test: memtable/inlineskiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
N
Nathan Bronson 已提交
1333 1334
	$(AM_LINK)

1335
skiplist_test: memtable/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
1336
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1337

1338 1339 1340
write_buffer_manager_test: memtable/write_buffer_manager_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1341
version_edit_test: db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS)
1342
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1343

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

S
sdong 已提交
1347
compaction_picker_test: db/compaction_picker_test.o $(LIBOBJECTS) $(TESTHARNESS)
1348
	$(AM_LINK)
S
sdong 已提交
1349

S
sdong 已提交
1350
version_builder_test: db/version_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
1351
	$(AM_LINK)
S
sdong 已提交
1352

1353
file_indexer_test: db/file_indexer_test.o $(LIBOBJECTS) $(TESTHARNESS)
1354
	$(AM_LINK)
1355

1356
reduce_levels_test: tools/reduce_levels_test.o $(LIBOBJECTS) $(TESTHARNESS)
1357
	$(AM_LINK)
1358

J
jorlow@chromium.org 已提交
1359
write_batch_test: db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS)
1360
	$(AM_LINK)
1361

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

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

1368 1369 1370
memory_test: utilities/memory/memory_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
Jim Paton 已提交
1371
merge_test: db/merge_test.o $(LIBOBJECTS) $(TESTHARNESS)
1372
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1373

I
Igor Canadi 已提交
1374
merger_test: table/merger_test.o $(LIBOBJECTS) $(TESTHARNESS)
1375
	$(AM_LINK)
I
Igor Canadi 已提交
1376

1377 1378 1379
util_merge_operators_test: utilities/util_merge_operators_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

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

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

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

1389
geodb_test: utilities/geodb/geodb_test.o $(LIBOBJECTS) $(TESTHARNESS)
1390
	$(AM_LINK)
1391

1392 1393 1394 1395 1396 1397
rocksdb_dump: tools/dump/rocksdb_dump.o $(LIBOBJECTS)
	$(AM_LINK)

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

1398
cuckoo_table_builder_test: table/cuckoo_table_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
1399
	$(AM_LINK)
1400

I
Igor Canadi 已提交
1401
cuckoo_table_reader_test: table/cuckoo_table_reader_test.o $(LIBOBJECTS) $(TESTHARNESS)
1402
	$(AM_LINK)
1403

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

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

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

1413 1414 1415
compact_files_test: db/compact_files_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1416
options_test: options/options_test.o $(LIBOBJECTS) $(TESTHARNESS)
1417 1418
	$(AM_LINK)

1419
options_settable_test: options/options_settable_test.o $(LIBOBJECTS) $(TESTHARNESS)
1420
	$(AM_LINK)
1421

1422 1423 1424
options_util_test: utilities/options/options_util_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1425 1426 1427
db_bench_tool_test: tools/db_bench_tool_test.o $(BENCHTOOLOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1428 1429 1430
event_logger_test: util/event_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
Anirban Rahut 已提交
1431 1432 1433
timer_queue_test: util/timer_queue_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1434
sst_dump_test: tools/sst_dump_test.o $(LIBOBJECTS) $(TESTHARNESS)
1435
	$(AM_LINK)
1436

O
omegaga 已提交
1437 1438 1439
column_aware_encoding_test: utilities/column_aware_encoding_test.o $(TESTHARNESS) $(EXPOBJECTS)
	$(AM_LINK)

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

1443
mock_env_test : env/mock_env_test.o $(LIBOBJECTS) $(TESTHARNESS)
1444
	$(AM_LINK)
1445

1446
manual_compaction_test: db/manual_compaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
1447
	$(AM_LINK)
1448

1449
filelock_test: util/filelock_test.o $(LIBOBJECTS) $(TESTHARNESS)
1450
	$(AM_LINK)
K
Kai Liu 已提交
1451

1452
auto_roll_logger_test: util/auto_roll_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
1453
	$(AM_LINK)
1454

A
agiardullo 已提交
1455 1456 1457
memtable_list_test: db/memtable_list_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
agiardullo 已提交
1458 1459 1460
write_callback_test: db/write_callback_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1461 1462 1463
heap_test: util/heap_test.o $(GTEST)
	$(AM_LINK)

A
agiardullo 已提交
1464 1465 1466
transaction_test: utilities/transactions/transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1467 1468 1469
write_prepared_transaction_test: utilities/transactions/write_prepared_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1470
sst_dump: tools/sst_dump.o $(LIBOBJECTS)
1471
	$(AM_LINK)
1472

Y
Yi Wu 已提交
1473 1474 1475
blob_dump: tools/blob_dump.o $(LIBOBJECTS)
	$(AM_LINK)

O
omegaga 已提交
1476 1477 1478
column_aware_encoding_exp: utilities/column_aware_encoding_exp.o $(EXPOBJECTS)
	$(AM_LINK)

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

1482
ldb_cmd_test: tools/ldb_cmd_test.o $(LIBOBJECTS) $(TESTHARNESS)
1483 1484
	$(AM_LINK)

1485
ldb: tools/ldb.o $(LIBOBJECTS)
1486
	$(AM_LINK)
1487

1488
iostats_context_test: monitoring/iostats_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
1489 1490
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)

1491 1492 1493
persistent_cache_test: utilities/persistent_cache/persistent_cache_test.o  db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1494
statistics_test: monitoring/statistics_test.o $(LIBOBJECTS) $(TESTHARNESS)
1495 1496
	$(AM_LINK)

1497
lru_cache_test: cache/lru_cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yi Wu 已提交
1498 1499
	$(AM_LINK)

1500 1501
lua_test: utilities/lua/rocks_lua_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)
Y
Yi Wu 已提交
1502

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

Y
Yi Wu 已提交
1506 1507 1508
blob_db_test: utilities/blob_db/blob_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522
#-------------------------------------------------
# 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
1523
	for header_dir in `$(FIND) "include/rocksdb" -type d`; do \
I
Igor Canadi 已提交
1524 1525
		install -d $(INSTALL_PATH)/$$header_dir; \
	done
1526
	for header in `$(FIND) "include/rocksdb" -type f -name *.h`; do \
I
Igor Canadi 已提交
1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540
		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 已提交
1541
	[ -e $(SHARED4) ] && $(MAKE) install-shared || :
I
Igor Canadi 已提交
1542 1543 1544 1545

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


1546 1547 1548 1549
# ---------------------------------------------------------------------------
# Jni stuff
# ---------------------------------------------------------------------------

1550
JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/linux
D
David Bernard 已提交
1551 1552
ifeq ($(PLATFORM), OS_SOLARIS)
	ARCH := $(shell isainfo -b)
1553 1554 1555 1556 1557 1558
else ifeq ($(PLATFORM), OS_OPENBSD)
	ifneq (,$(filter $(MACHINE), amd64 arm64 sparc64))
		ARCH := 64
	else
		ARCH := 32
	endif
D
David Bernard 已提交
1559 1560 1561
else
	ARCH := $(shell getconf LONG_BIT)
endif
1562 1563 1564 1565 1566 1567

ifeq (,$(findstring ppc,$(MACHINE)))
        ROCKSDBJNILIB = librocksdbjni-linux$(ARCH).so
else
        ROCKSDBJNILIB = librocksdbjni-linux-$(MACHINE).so
endif
1568
ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-linux$(ARCH).jar
1569
ROCKSDB_JAR_ALL = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH).jar
C
Chris Riccomini 已提交
1570
ROCKSDB_JAVADOCS_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-javadoc.jar
1571
ROCKSDB_SOURCES_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-sources.jar
1572 1573
SHA256_CMD = sha256sum

T
Tomas Kolda 已提交
1574 1575 1576 1577 1578 1579
ZLIB_VER ?= 1.2.11
ZLIB_SHA256 ?= c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1
ZLIB_DOWNLOAD_BASE ?= http://zlib.net
BZIP2_VER ?= 1.0.6
BZIP2_SHA256 ?= a2848f34fcd5d6cf47def00461fcb528a0484d8edef8208d6d2e2909dc61d9cd
BZIP2_DOWNLOAD_BASE ?= http://www.bzip.org
S
Sagar Vemuri 已提交
1580 1581
SNAPPY_VER ?= 1.1.4
SNAPPY_SHA256 ?= 134bfe122fd25599bb807bb8130e7ba6d9bdb851e0b16efcb83ac4f5d0b70057
T
Tomas Kolda 已提交
1582
SNAPPY_DOWNLOAD_BASE ?= https://github.com/google/snappy/releases/download
A
Adam Retter 已提交
1583 1584
LZ4_VER ?= 1.8.0
LZ4_SHA256 ?= 2ca482ea7a9bb103603108b5a7510b7592b90158c151ff50a28f1ca8389fccf6
T
Tomas Kolda 已提交
1585
LZ4_DOWNLOAD_BASE ?= https://github.com/lz4/lz4/archive
A
Adam Retter 已提交
1586 1587
ZSTD_VER ?= 1.3.3
ZSTD_SHA256 ?= a77c47153ee7de02626c5b2a097005786b71688be61e9fb81806a011f90b297b
1588
ZSTD_DOWNLOAD_BASE ?= https://github.com/facebook/zstd/archive
P
Pengchao Wang 已提交
1589
CURL_SSL_OPTS ?= --tlsv1
1590 1591

ifeq ($(PLATFORM), OS_MACOSX)
D
David Bernard 已提交
1592 1593
	ROCKSDBJNILIB = librocksdbjni-osx.jnilib
	ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-osx.jar
1594
	SHA256_CMD = openssl sha256 -r
1595 1596 1597 1598 1599
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
1600
endif
1601
ifeq ($(PLATFORM), OS_FREEBSD)
1602
	JAVA_INCLUDE = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/freebsd
1603 1604 1605
	ROCKSDBJNILIB = librocksdbjni-freebsd$(ARCH).so
	ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-freebsd$(ARCH).jar
endif
D
David Bernard 已提交
1606 1607 1608 1609
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
1610
	SHA256_CMD = digest -a sha256
D
David Bernard 已提交
1611
endif
T
Tomas Kolda 已提交
1612 1613 1614 1615 1616 1617
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
1618 1619 1620 1621 1622
ifeq ($(PLATFORM), OS_OPENBSD)
        JAVA_INCLUDE = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/openbsd
	ROCKSDBJNILIB = librocksdbjni-openbsd$(ARCH).so
        ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-openbsd$(ARCH).jar
endif
1623

N
Naveen 已提交
1624
libz.a:
1625
	-rm -rf zlib-$(ZLIB_VER)
T
Tomas Kolda 已提交
1626
	curl -O -L ${ZLIB_DOWNLOAD_BASE}/zlib-$(ZLIB_VER).tar.gz
1627 1628 1629 1630 1631 1632
	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
1633
	cd zlib-$(ZLIB_VER) && CFLAGS='-fPIC ${EXTRA_CFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' ./configure --static && $(MAKE)
1634
	cp zlib-$(ZLIB_VER)/libz.a .
N
Naveen 已提交
1635 1636

libbz2.a:
1637
	-rm -rf bzip2-$(BZIP2_VER)
T
Tomas Kolda 已提交
1638
	curl -O -L ${BZIP2_DOWNLOAD_BASE}/$(BZIP2_VER)/bzip2-$(BZIP2_VER).tar.gz
1639 1640 1641 1642 1643 1644
	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
1645
	cd bzip2-$(BZIP2_VER) && $(MAKE) CFLAGS='-fPIC -O2 -g -D_FILE_OFFSET_BITS=64 ${EXTRA_CFLAGS}' AR='ar ${EXTRA_ARFLAGS}'
1646
	cp bzip2-$(BZIP2_VER)/libbz2.a .
N
Naveen 已提交
1647

N
Naveen 已提交
1648
libsnappy.a:
1649
	-rm -rf snappy-$(SNAPPY_VER)
P
Pengchao Wang 已提交
1650
	curl -O -L ${CURL_SSL_OPTS} ${SNAPPY_DOWNLOAD_BASE}/$(SNAPPY_VER)/snappy-$(SNAPPY_VER).tar.gz
1651 1652 1653 1654 1655 1656
	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 已提交
1657
	cd snappy-$(SNAPPY_VER) && CFLAGS='${EXTRA_CFLAGS}' CXXFLAGS='${EXTRA_CXXFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' ./configure --with-pic --enable-static --disable-shared
1658
	cd snappy-$(SNAPPY_VER) && $(MAKE) ${SNAPPY_MAKE_TARGET}
1659
	cp snappy-$(SNAPPY_VER)/.libs/libsnappy.a .
1660

1661
liblz4.a:
1662
	-rm -rf lz4-$(LZ4_VER)
P
Pengchao Wang 已提交
1663
	curl -O -L ${CURL_SSL_OPTS} ${LZ4_DOWNLOAD_BASE}/v$(LZ4_VER).tar.gz
1664 1665 1666 1667 1668 1669 1670
	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
1671
	cd lz4-$(LZ4_VER)/lib && $(MAKE) CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' all
1672
	cp lz4-$(LZ4_VER)/lib/liblz4.a .
N
Naveen 已提交
1673

1674 1675
libzstd.a:
	-rm -rf zstd-$(ZSTD_VER)
P
Pengchao Wang 已提交
1676
	curl -O -L ${CURL_SSL_OPTS} ${ZSTD_DOWNLOAD_BASE}/v$(ZSTD_VER).tar.gz
1677 1678 1679 1680 1681 1682 1683
	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
1684
	cd zstd-$(ZSTD_VER)/lib && DESTDIR=. PREFIX= $(MAKE) CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' install
1685 1686
	cp zstd-$(ZSTD_VER)/lib/libzstd.a .

1687
# A version of each $(LIBOBJECTS) compiled with -fPIC and a fixed set of static compression libraries
A
Andrew Kryczka 已提交
1688
java_static_libobjects = $(patsubst %,jls/%,$(LIB_CC_OBJECTS))
1689
CLEAN_FILES += jls
A
Andrew Kryczka 已提交
1690
java_static_all_libobjects = $(java_static_libobjects)
1691

1692
ifneq ($(ROCKSDB_JAVA_NO_COMPRESSION), 1)
1693
JAVA_COMPRESSIONS = libz.a libbz2.a libsnappy.a liblz4.a libzstd.a
1694 1695
endif

1696
JAVA_STATIC_FLAGS = -DZLIB -DBZIP2 -DSNAPPY -DLZ4 -DZSTD
1697
JAVA_STATIC_INCLUDES = -I./zlib-$(ZLIB_VER) -I./bzip2-$(BZIP2_VER) -I./snappy-$(SNAPPY_VER) -I./lz4-$(LZ4_VER)/lib -I./zstd-$(ZSTD_VER)/lib/include
1698

A
Andrew Kryczka 已提交
1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713
ifeq ($(HAVE_POWER8),1)
JAVA_STATIC_C_LIBOBJECTS = $(patsubst %.c.o,jls/%.c.o,$(LIB_SOURCES_C:.c=.o))
JAVA_STATIC_ASM_LIBOBJECTS = $(patsubst %.S.o,jls/%.S.o,$(LIB_SOURCES_ASM:.S=.o))

java_static_ppc_libobjects = $(JAVA_STATIC_C_LIBOBJECTS) $(JAVA_STATIC_ASM_LIBOBJECTS)

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

jls/util/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S
	$(AM_V_CC)$(CC) $(CFLAGS) $(JAVA_STATIC_FLAGS) $(JAVA_STATIC_INCLUDES) -c $< -o $@

java_static_all_libobjects += $(java_static_ppc_libobjects)
endif

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

A
Andrew Kryczka 已提交
1717
rocksdbjavastatic: $(java_static_all_libobjects)
F
fyrz 已提交
1718
	cd java;$(MAKE) javalib;
1719
	rm -f ./java/target/$(ROCKSDBJNILIB)
1720 1721
	$(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC \
	  -o ./java/target/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) \
A
Andrew Kryczka 已提交
1722
	  $(java_static_all_libobjects) $(COVERAGEFLAGS) \
1723
	  $(JAVA_COMPRESSIONS) $(JAVA_STATIC_LDFLAGS)
1724 1725 1726
	cd java/target;if [ "$(DEBUG_LEVEL)" == "0" ]; then \
		strip $(STRIPFLAGS) $(ROCKSDBJNILIB); \
	fi
1727 1728 1729 1730 1731
	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 已提交
1732

1733
rocksdbjavastaticrelease: rocksdbjavastatic
1734
	cd java/crossbuild && vagrant destroy -f && vagrant up linux32 && vagrant halt linux32 && vagrant up linux64 && vagrant halt linux64
1735
	cd java;jar -cf target/$(ROCKSDB_JAR_ALL) HISTORY*.md
1736
	cd java/target;jar -uf $(ROCKSDB_JAR_ALL) librocksdbjni-*.so librocksdbjni-*.jnilib
1737
	cd java/target/classes;jar -uf ../$(ROCKSDB_JAR_ALL) org/rocksdb/*.class org/rocksdb/util/*.class
1738

1739 1740 1741
rocksdbjavastaticreleasedocker: rocksdbjavastatic
	DOCKER_LINUX_X64_CONTAINER=`docker ps -aqf name=rocksdb_linux_x64-be`; \
	if [ -z "$$DOCKER_LINUX_X64_CONTAINER" ]; then \
1742
		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; \
1743 1744 1745 1746
	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 \
1747
		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; \
1748 1749 1750 1751 1752 1753
	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

1754 1755 1756 1757 1758 1759 1760 1761
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

1762 1763
rocksdbjavastaticpublish: rocksdbjavastaticrelease rocksdbjavastaticpublishcentral

1764 1765
rocksdbjavastaticpublishdocker: rocksdbjavastaticreleasedocker rocksdbjavastaticpublishcentral

1766
rocksdbjavastaticpublishcentral:
1767 1768 1769 1770 1771
	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
1772
	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
1773
	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
1774

1775
# A version of each $(LIBOBJECTS) compiled with -fPIC
1776 1777 1778 1779 1780 1781 1782 1783 1784
ifeq ($(HAVE_POWER8),1)
JAVA_CC_OBJECTS = $(SHARED_CC_OBJECTS)
JAVA_C_OBJECTS = $(SHARED_C_OBJECTS)
JAVA_ASM_OBJECTS = $(SHARED_ASM_OBJECTS)

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

S
Sagar Vemuri 已提交
1785
java_libobjects = $(patsubst %,jl/%,$(LIB_CC_OBJECTS))
1786
CLEAN_FILES += jl
1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798
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
1799

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

1803 1804 1805


rocksdbjava: $(java_all_libobjects)
1806 1807 1808 1809 1810 1811
	$(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
1812 1813 1814 1815

jclean:
	cd java;$(MAKE) clean;

1816 1817 1818 1819 1820 1821
jtest_compile: rocksdbjava
	cd java;$(MAKE) java_test

jtest_run:
	cd java;$(MAKE) run_test

1822
jtest: rocksdbjava
1823
	cd java;$(MAKE) sample;$(MAKE) test;
1824

1825 1826 1827
jdb_bench:
	cd java;$(MAKE) db_bench;

1828 1829
commit_prereq: build_tools/rocksdb-lego-determinator \
               build_tools/precommit_checker.py
1830
	J=$(J) build_tools/precommit_checker.py unit unit_481 clang_unit release release_481 clang_release tsan asan ubsan lite unit_non_shm
1831
	$(MAKE) clean && $(MAKE) jclean && $(MAKE) rocksdbjava;
1832

1833 1834 1835
# ---------------------------------------------------------------------------
#  	Platform-specific compilation
# ---------------------------------------------------------------------------
J
Jim Paton 已提交
1836

1837 1838 1839
ifeq ($(PLATFORM), IOS)
# For iOS, create universal object files to be used on both the simulator and
# a device.
H
heyongqiang 已提交
1840 1841 1842
PLATFORMSROOT=/Applications/Xcode.app/Contents/Developer/Platforms
SIMULATORROOT=$(PLATFORMSROOT)/iPhoneSimulator.platform/Developer
DEVICEROOT=$(PLATFORMSROOT)/iPhoneOS.platform/Developer
I
Igor Canadi 已提交
1843
IOSVERSION=$(shell defaults read $(PLATFORMSROOT)/iPhoneOS.platform/version CFBundleShortVersionString)
1844

1845 1846
.cc.o:
	mkdir -p ios-x86/$(dir $@)
I
Igor Canadi 已提交
1847
	$(CXX) $(CXXFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@
1848
	mkdir -p ios-arm/$(dir $@)
I
Igor Canadi 已提交
1849
	xcrun -sdk iphoneos $(CXX) $(CXXFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -arch armv7s -arch arm64 -c $< -o ios-arm/$@
1850
	lipo ios-x86/$@ ios-arm/$@ -create -output $@
1851 1852 1853

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

1859
else
1860 1861 1862 1863 1864 1865 1866
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
1867
.cc.o:
1868
	$(AM_V_CC)$(CXX) $(CXXFLAGS) -c $< -o $@ $(COVERAGEFLAGS)
1869

1870
.c.o:
1871
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
1872
endif
1873 1874 1875 1876
# ---------------------------------------------------------------------------
#  	Source files dependencies detection
# ---------------------------------------------------------------------------

O
omegaga 已提交
1877
all_sources = $(LIB_SOURCES) $(MAIN_SOURCES) $(MOCK_LIB_SOURCES) $(TOOL_LIB_SOURCES) $(BENCH_LIB_SOURCES) $(TEST_LIB_SOURCES) $(EXP_LIB_SOURCES)
1878
DEPFILES = $(all_sources:.cc=.cc.d)
1879

1880 1881 1882 1883 1884
# 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.
1885
%.cc.d: %.cc
1886
	@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
1887
	  -MM -MT'$@' -MT'$(<:.cc=.o)' "$<" -o '$@'
1888

1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905
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
1906
depend: $(DEPFILES)
1907
endif
1908

1909 1910 1911 1912
# 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.
1913
ifneq ($(MAKECMDGOALS),clean)
1914
ifneq ($(MAKECMDGOALS),format)
1915 1916
ifneq ($(MAKECMDGOALS),jclean)
ifneq ($(MAKECMDGOALS),jtest)
1917
ifneq ($(MAKECMDGOALS),package)
1918
ifneq ($(MAKECMDGOALS),analyze)
1919 1920
-include $(DEPFILES)
endif
1921
endif
1922 1923
endif
endif
1924
endif
1925
endif