Makefile 49.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)
I
Igor Canadi 已提交
17
ARFLAGS = rs
18

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

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

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

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

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

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

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

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

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

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

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

77
ifeq ($(MAKECMDGOALS),rocksdbjavastatic)
Y
Yueh-Hsuan Chiang 已提交
78
	DEBUG_LEVEL=0
79 80
endif

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

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

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

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

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

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

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

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

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

148 149 150 151 152 153 154 155 156
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))

I
Igor Canadi 已提交
157 158 159 160 161 162 163 164
ifneq ($(PLATFORM), IOS)
CFLAGS += -g
CXXFLAGS += -g
else
# no debug info for IOS, that will make our library big
OPT += -DNDEBUG
endif

D
David Bernard 已提交
165 166 167
ifeq ($(PLATFORM), OS_SOLARIS)
	PLATFORM_CXXFLAGS += -D _GLIBCXX_USE_C99
endif
168
ifneq ($(filter -DROCKSDB_LITE,$(OPT)),)
Y
Yueh-Hsuan Chiang 已提交
169 170 171
	# found
	CFLAGS += -fno-exceptions
	CXXFLAGS += -fno-exceptions
172 173
	# LUA is not supported under ROCKSDB_LITE
	LUA_PATH =
174 175
endif

I
Igor Canadi 已提交
176 177
# 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 已提交
178 179 180 181
	DISABLE_JEMALLOC=1
	EXEC_LDFLAGS += -fsanitize=address
	PLATFORM_CCFLAGS += -fsanitize=address
	PLATFORM_CXXFLAGS += -fsanitize=address
I
Igor Canadi 已提交
182 183 184 185
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 已提交
186 187 188 189
	DISABLE_JEMALLOC=1
	EXEC_LDFLAGS += -fsanitize=thread -pie
	PLATFORM_CCFLAGS += -fsanitize=thread -fPIC -DROCKSDB_TSAN_RUN
	PLATFORM_CXXFLAGS += -fsanitize=thread -fPIC -DROCKSDB_TSAN_RUN
190 191
        # Turn off -pg when enabling TSAN testing, because that induces
        # a link failure.  TODO: find the root cause
D
dx9 已提交
192
	PROFILING_FLAGS =
193 194
	# LUA is not supported under TSAN
	LUA_PATH =
I
Igor Canadi 已提交
195 196
endif

197 198 199 200 201 202 203 204
# 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
	PLATFORM_CCFLAGS += -fsanitize=undefined
	PLATFORM_CXXFLAGS += -fsanitize=undefined
endif

I
Igor Canadi 已提交
205
ifndef DISABLE_JEMALLOC
206 207 208 209
	ifdef JEMALLOC
		PLATFORM_CXXFLAGS += "-DROCKSDB_JEMALLOC"
		PLATFORM_CCFLAGS +=  "-DROCKSDB_JEMALLOC"
	endif
Y
Yueh-Hsuan Chiang 已提交
210 211 212
	EXEC_LDFLAGS := $(JEMALLOC_LIB) $(EXEC_LDFLAGS)
	PLATFORM_CXXFLAGS += $(JEMALLOC_INCLUDE)
	PLATFORM_CCFLAGS += $(JEMALLOC_INCLUDE)
I
Igor Canadi 已提交
213 214
endif

I
Igor Sugak 已提交
215 216 217 218 219
export GTEST_THROW_ON_FAILURE=1 GTEST_HAS_EXCEPTIONS=1
GTEST_DIR = ./third-party/gtest-1.7.0/fused-src
PLATFORM_CCFLAGS += -isystem $(GTEST_DIR)
PLATFORM_CXXFLAGS += -isystem $(GTEST_DIR)

220 221 222
# This (the first rule) must depend on "all".
default: all

223
WARNING_FLAGS = -W -Wextra -Wall -Wsign-compare -Wshadow \
Y
Yueh-Hsuan Chiang 已提交
224
  -Wno-unused-parameter
225

226
ifndef DISABLE_WARNING_AS_ERROR
Y
Yueh-Hsuan Chiang 已提交
227
	WARNING_FLAGS += -Werror
228 229
endif

230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257

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

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

263
date := $(shell date +%F)
I
Igor Canadi 已提交
264
ifdef FORCE_GIT_SHA
Y
Yueh-Hsuan Chiang 已提交
265
	git_sha := $(FORCE_GIT_SHA)
I
Igor Canadi 已提交
266
else
Y
Yueh-Hsuan Chiang 已提交
267
	git_sha := $(shell git rev-parse HEAD 2>/dev/null)
I
Igor Canadi 已提交
268
endif
269
gen_build_version = sed -e s/@@GIT_SHA@@/$(git_sha)/ -e s/@@GIT_DATE_TIME@@/$(date)/ util/build_version.cc.in
270 271 272 273 274 275

# 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.
276
CLEAN_FILES += util/build_version.cc:
277 278
FORCE:
util/build_version.cc: FORCE
Y
Yueh-Hsuan Chiang 已提交
279 280 281 282 283
	$(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
284

285
LIBOBJECTS = $(LIB_SOURCES:.cc=.o)
O
omegaga 已提交
286 287
LIBOBJECTS += $(TOOL_LIB_SOURCES:.cc=.o)
MOCKOBJECTS = $(MOCK_LIB_SOURCES:.cc=.o)
J
jorlow@chromium.org 已提交
288

I
Igor Sugak 已提交
289
GTEST = $(GTEST_DIR)/gtest/gtest-all.o
J
jorlow@chromium.org 已提交
290
TESTUTIL = ./util/testutil.o
I
Igor Sugak 已提交
291
TESTHARNESS = ./util/testharness.o $(TESTUTIL) $(MOCKOBJECTS) $(GTEST)
292
VALGRIND_ERROR = 2
293
VALGRIND_VER := $(join $(VALGRIND_VER),valgrind)
294

295
VALGRIND_OPTS = --error-exitcode=$(VALGRIND_ERROR) --leak-check=full
296

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

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

J
jorlow@chromium.org 已提交
301
TESTS = \
302
	db_test \
303
	db_test2 \
304
	db_block_cache_test \
Y
Yi Wu 已提交
305
	db_bloom_filter_test \
306 307 308
	db_iter_test \
	db_log_iter_test \
	db_compaction_filter_test \
309
	db_compaction_test \
310
	db_dynamic_level_test \
311
	db_flush_test \
312
	db_inplace_update_test \
Y
Yi Wu 已提交
313
	db_iterator_test \
314
	db_memtable_test \
315
	db_options_test \
316
	db_range_del_test \
Y
Yi Wu 已提交
317
	db_sst_test \
318
	external_sst_file_test \
319 320
	db_tailing_iter_test \
	db_universal_compaction_test \
S
sdong 已提交
321
	db_wal_test \
O
omegaga 已提交
322
	db_io_failure_test \
323
	db_properties_test \
324
	db_table_properties_test \
325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340
	autovector_test \
	column_family_test \
	table_properties_collector_test \
	arena_test \
	auto_roll_logger_test \
	block_test \
	bloom_test \
	dynamic_bloom_test \
	c_test \
	cache_test \
	checkpoint_test \
	coding_test \
	corruption_test \
	crc32c_test \
	slice_transform_test \
	dbformat_test \
341
	env_basic_test \
342 343 344 345
	env_test \
	fault_injection_test \
	filelock_test \
	filename_test \
346
	file_reader_writer_test \
347 348
	block_based_filter_block_test \
	full_filter_block_test \
349
	hash_table_test \
350
	histogram_test \
N
Nathan Bronson 已提交
351
	inlineskiplist_test \
352 353 354 355 356
	log_test \
	manual_compaction_test \
	mock_env_test \
	memtable_list_test \
	merge_helper_test \
357
	memory_test \
358 359
	merge_test \
	merger_test \
360
	util_merge_operators_test \
361
	options_file_test \
362 363 364 365 366 367 368 369
	redis_test \
	reduce_levels_test \
	plain_table_db_test \
	comparator_db_test \
	prefix_test \
	skiplist_test \
	stringappend_test \
	ttl_test \
O
omegaga 已提交
370
	date_tiered_test \
371
	backupable_db_test \
372
	blob_db_test \
373 374
	document_db_test \
	json_document_test \
375
	sim_cache_test \
376 377 378 379 380 381 382 383 384 385 386 387 388 389
	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 \
	thread_local_test \
	geodb_test \
	rate_limiter_test \
I
Islam AbdelRahman 已提交
390
	delete_scheduler_test \
391
	options_test \
392
	options_settable_test \
393
	options_util_test \
394 395 396 397 398 399 400
	event_logger_test \
	cuckoo_table_builder_test \
	cuckoo_table_reader_test \
	cuckoo_table_db_test \
	flush_job_test \
	wal_manager_test \
	listener_test \
A
Andres Noetzli 已提交
401
	compaction_iterator_test \
402 403 404
	compaction_job_test \
	thread_list_test \
	sst_dump_test \
O
omegaga 已提交
405
	column_aware_encoding_test \
406 407 408 409
	compact_files_test \
	perf_context_test \
	optimistic_transaction_test \
	write_callback_test \
410 411
	heap_test \
	compact_on_deletion_collector_test \
A
agiardullo 已提交
412
	compaction_job_stats_test \
413
	option_change_migration_test \
414
	transaction_test \
415
	ldb_cmd_test \
416 417
	iostats_context_test \
	persistent_cache_test \
418
	statistics_test \
419
	lua_test \
Y
Yi Wu 已提交
420
	lru_cache_test \
421

Y
Yi Wu 已提交
422 423 424 425
PARALLEL_TEST = \
	backupable_db_test \
	db_compaction_filter_test \
	db_compaction_test \
426
	db_sst_test \
Y
Yi Wu 已提交
427 428
	db_test \
	db_universal_compaction_test \
429 430
	db_wal_test \
	external_sst_file_test \
Y
Yi Wu 已提交
431 432 433
	fault_injection_test \
	inlineskiplist_test \
	manual_compaction_test \
434 435 436
	persistent_cache_test \
	table_test \
	transaction_test
Y
Yi Wu 已提交
437

I
Islam AbdelRahman 已提交
438 439 440 441 442 443 444 445
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
446

447
TOOLS = \
Y
Yueh-Hsuan Chiang 已提交
448 449 450
	sst_dump \
	db_sanity_test \
	db_stress \
I
Igor Canadi 已提交
451
	write_stress \
Y
Yueh-Hsuan Chiang 已提交
452 453 454 455
	ldb \
	db_repl_stress \
	rocksdb_dump \
	rocksdb_undump
J
jorlow@chromium.org 已提交
456

457 458 459
TEST_LIBS = \
	librocksdb_env_basic_test.a

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

463
# if user didn't config LIBNAME, set the default
464
ifeq ($(LIBNAME),)
465 466
# we should only run rocksdb in production with DEBUG_LEVEL 0
ifeq ($(DEBUG_LEVEL),0)
Y
Yueh-Hsuan Chiang 已提交
467
        LIBNAME=librocksdb
468 469 470
else
        LIBNAME=librocksdb_debug
endif
471
endif
472
LIBRARY = ${LIBNAME}.a
473
TOOLS_LIBRARY = ${LIBNAME}_tools.a
474

475 476 477
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)
478

479 480
default: all

481 482 483
#-----------------------------------------------
# Create platform independent shared libraries.
#-----------------------------------------------
484
ifneq ($(PLATFORM_SHARED_EXT),)
H
heyongqiang 已提交
485 486

ifneq ($(PLATFORM_SHARED_VERSIONED),true)
487
SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
H
heyongqiang 已提交
488 489
SHARED2 = $(SHARED1)
SHARED3 = $(SHARED1)
490
SHARED4 = $(SHARED1)
H
heyongqiang 已提交
491 492
SHARED = $(SHARED1)
else
493 494
SHARED_MAJOR = $(ROCKSDB_MAJOR)
SHARED_MINOR = $(ROCKSDB_MINOR)
495
SHARED_PATCH = $(ROCKSDB_PATCH)
496
SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
497 498 499 500 501 502
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
503 504
SHARED2 = $(SHARED1).$(SHARED_MAJOR)
SHARED3 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR)
505
SHARED4 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR).$(SHARED_PATCH)
506
endif
507 508
SHARED = $(SHARED1) $(SHARED2) $(SHARED3) $(SHARED4)
$(SHARED1): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
509
	ln -fs $(SHARED4) $(SHARED1)
510
$(SHARED2): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
511
	ln -fs $(SHARED4) $(SHARED2)
512
$(SHARED3): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
513
	ln -fs $(SHARED4) $(SHARED3)
514 515
endif

516
$(SHARED4):
O
omegaga 已提交
517
	$(CXX) $(PLATFORM_SHARED_LDFLAGS)$(SHARED3) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) $(LIB_SOURCES) $(TOOL_LIB_SOURCES) \
Y
Yueh-Hsuan Chiang 已提交
518
		$(LDFLAGS) -o $@
H
heyongqiang 已提交
519 520 521

endif  # PLATFORM_SHARED_EXT

522
.PHONY: blackbox_crash_test check clean coverage crash_test ldb_tests package \
Y
Yueh-Hsuan Chiang 已提交
523 524
	release tags valgrind_check whitebox_crash_test format static_lib shared_lib all \
	dbg rocksdbjavastatic rocksdbjava install install-static install-shared uninstall \
525
	analyze tools tools_lib
526

M
maurice barnum 已提交
527

528
all: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(TESTS)
529

I
Igor Canadi 已提交
530 531 532 533
static_lib: $(LIBRARY)

shared_lib: $(SHARED)

M
maurice barnum 已提交
534 535
tools: $(TOOLS)

536 537
tools_lib: $(TOOLS_LIBRARY)

538 539
test_libs: $(TEST_LIBS)

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

542
# creates static library and programs
543
release:
Y
Yueh-Hsuan Chiang 已提交
544
	$(MAKE) clean
545
	DEBUG_LEVEL=0 $(MAKE) static_lib tools db_bench
K
Kai Liu 已提交
546 547

coverage:
Y
Yueh-Hsuan Chiang 已提交
548 549 550 551 552
	$(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 已提交
553

Y
Yi Wu 已提交
554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573
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),)
TMPD := $(shell f=/dev/shm; test -k $$f || f=/tmp;			\
  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.
574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591
# 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 已提交
592 593 594 595 596 597 598 599 600 601 602
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 \
603
		TEST_SCRIPT=t/run-$$TEST_BINARY-$${TEST_NAME//\//-}; \
Y
Yi Wu 已提交
604 605 606 607 608
		echo "  GEN     " $$TEST_SCRIPT; \
    printf '%s\n' \
      '#!/bin/sh' \
      "d=\$(TMPD)$$TEST_SCRIPT" \
      'mkdir -p $$d' \
609
      "TEST_TMPDIR=\$$d $(DRIVER) ./$$TEST_BINARY --gtest_filter=$$TEST_NAME" \
Y
Yi Wu 已提交
610 611 612 613 614 615 616 617
		> $$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)
618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635

# 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 = \
636
	^t/run-table_test-HarnessTest.Randomized$$|^t/run-db_test-.*(?:FileCreationRandomFailure|EncodeDecompressedBlockSizeTest)$$|^.*RecoverFromCorruptedWALWithoutFlush$$
637
prioritize_long_running_tests =						\
Y
Yueh-Hsuan Chiang 已提交
638 639 640
  perl -pe 's,($(slow_test_regexp)),100 $$1,'				\
    | sort -k1,1gr							\
    | sed 's/^[.0-9]* //'
641 642 643 644 645 646

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

V
Venkatesh Radhakrishnan 已提交
649 650 651
# Use this regexp to select the subset of tests whose names match.
tests-regexp = .

Y
Yi Wu 已提交
652
t_run = $(wildcard t/run-*)
653
.PHONY: check_0
Y
Yi Wu 已提交
654 655
check_0:
	$(AM_V_GEN)export TEST_TMPDIR=$(TMPD); \
Y
Yueh-Hsuan Chiang 已提交
656 657 658
	printf '%s\n' ''						\
	  'To monitor subtest <duration,pass/fail,name>,'		\
	  '  run "make watch-log" in a separate window' '';		\
Y
Yi Wu 已提交
659 660 661 662 663
	test -t 1 && eta=--eta || eta=; \
	{ \
		printf './%s\n' $(filter-out $(PARALLEL_TEST),$(TESTS)); \
		printf '%s\n' $(t_run); \
	} \
Y
Yueh-Hsuan Chiang 已提交
664 665
	  | $(prioritize_long_running_tests)				\
	  | grep -E '$(tests-regexp)'					\
666
	  | build_tools/gnu_parallel -j$(J) --plain --joblog=LOG $$eta --gnu '{} >& t/log-{/}'
S
sdong 已提交
667 668

.PHONY: valgrind_check_0
Y
Yi Wu 已提交
669
valgrind_check_0:
S
sdong 已提交
670 671 672 673 674 675
	$(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 已提交
676
	  printf './%s\n' $(filter-out $(PARALLEL_TEST) %skiplist_test options_settable_test, $(TESTS));		\
S
sdong 已提交
677 678 679 680
	  printf '%s\n' $(t_run);					\
	}								\
	  | $(prioritize_long_running_tests)				\
	  | grep -E '$(tests-regexp)'					\
681
	  | build_tools/gnu_parallel -j$(J) --plain --joblog=LOG $$eta --gnu \
682 683
	  '(if [[ "{}" == "./"* ]] ; then $(DRIVER) {}; else {}; fi) ' \
	  '>& t/valgrind_log-{/}'
684 685

CLEAN_FILES += t LOG $(TMPD)
686

687 688 689 690 691 692 693 694
# 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 已提交
695
	watch --interval=0 'sort -k7,7nr -k4,4gr LOG|$(quoted_perl_command)'
696

I
Igor Canadi 已提交
697
# If J != 1 and GNU parallel is installed, run the tests in parallel,
698 699
# via the check_0 rule above.  Otherwise, run them sequentially.
check: all
Y
Yi Wu 已提交
700
	$(MAKE) gen_parallel_tests
Y
Yueh-Hsuan Chiang 已提交
701
	$(AM_V_GEN)if test "$(J)" != 1                                  \
702
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |                    \
Y
Yueh-Hsuan Chiang 已提交
703 704 705 706 707 708 709 710
	        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)
I
Islam AbdelRahman 已提交
711
ifeq ($(filter -DROCKSDB_LITE,$(OPT)),)
Y
Yueh-Hsuan Chiang 已提交
712 713
	python tools/ldb_test.py
	sh tools/rocksdb_dump_test.sh
I
Islam AbdelRahman 已提交
714
endif
715

S
Siying Dong 已提交
716 717
# TODO add ldb_tests
check_some: $(SUBSET)
Y
Yueh-Hsuan Chiang 已提交
718
	for t in $(SUBSET); do echo "===== Running $$t"; ./$$t || exit 1; done
719 720

.PHONY: ldb_tests
721
ldb_tests: ldb
Y
Yueh-Hsuan Chiang 已提交
722
	python tools/ldb_test.py
723

I
Igor Canadi 已提交
724
crash_test: whitebox_crash_test blackbox_crash_test
725 726

blackbox_crash_test: db_stress
727
	python -u tools/db_crashtest.py --simple blackbox
728
	python -u tools/db_crashtest.py blackbox
729

730 731 732 733
ifeq ($(CRASH_TEST_KILL_ODD),)
  CRASH_TEST_KILL_ODD=888887
endif

734
whitebox_crash_test: db_stress
735 736 737 738
	python -u tools/db_crashtest.py --simple whitebox --random_kill_odd \
      $(CRASH_TEST_KILL_ODD)
	python -u tools/db_crashtest.py whitebox  --random_kill_odd \
      $(CRASH_TEST_KILL_ODD)
739

I
Igor Canadi 已提交
740
asan_check:
Y
Yueh-Hsuan Chiang 已提交
741 742 743
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) check -j32
	$(MAKE) clean
744 745

asan_crash_test:
Y
Yueh-Hsuan Chiang 已提交
746 747 748
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) crash_test
	$(MAKE) clean
I
Igor Canadi 已提交
749

750 751 752 753 754 755 756 757 758 759
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

760 761 762
valgrind_test:
	DISABLE_JEMALLOC=1 $(MAKE) valgrind_check

I
Igor Canadi 已提交
763
valgrind_check: $(TESTS)
764
	$(MAKE) DRIVER="$(VALGRIND_VER) $(VALGRIND_OPTS)" gen_parallel_tests
S
sdong 已提交
765
	$(AM_V_GEN)if test "$(J)" != 1                                  \
766
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |                    \
S
sdong 已提交
767 768
	        grep -q 'GNU Parallel';                                 \
	then                                                            \
Y
Yi Wu 已提交
769
      $(MAKE) TMPD=$(TMPD)                                        \
S
sdong 已提交
770 771 772 773 774 775 776 777 778 779
      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
780

781 782 783 784 785 786 787

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 \
788
			seq $(J) | v="$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{};  export TEST_TMPDIR=$$s;' \
789 790
				'timeout 2m ./db_test --gtest_filter=$$v >> $$s/log-{} 2>1'; \
		else\
791
			seq $(J) | v="./$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{};' \
792 793 794 795 796 797 798 799 800 801 802
			     '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 已提交
803 804 805 806 807 808 809
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!'

810 811
parallel_check: $(TESTS)
	$(AM_V_GEN)if test "$(J)" > 1                                  \
812
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |                    \
813 814 815 816 817 818 819 820 821
	        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); \
822
        seq $(J) | build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{}; rm -rf $$s; mkdir $$s'; \
823
	$(MAKE)  PAR_TEST="$(shell $(test_names))" TMPD=$(TMPD) \
824 825 826 827
		J=$(J) db_test=1 parloop; \
	$(MAKE) PAR_TEST="$(filter-out db_test, $(TESTS))" \
		TMPD=$(TMPD) J=$(J) db_test=0 parloop;

828
analyze: clean
Y
Yueh-Hsuan Chiang 已提交
829 830 831 832
	$(CLANG_SCAN_BUILD) --use-analyzer=$(CLANG_ANALYZER) \
		--use-c++=$(CXX) --use-cc=$(CC) --status-bugs \
		-o $(CURDIR)/scan_build_report \
		$(MAKE) dbg
833

834 835
CLEAN_FILES += unity.cc
unity.cc: Makefile
Y
Yueh-Hsuan Chiang 已提交
836 837
	rm -f $@ $@-t
	for source_file in $(LIB_SOURCES); do \
E
Evan Shaw 已提交
838
		echo "#include \"$$source_file\"" >> $@-t; \
Y
Yueh-Hsuan Chiang 已提交
839 840 841
	done
	chmod a=r $@-t
	mv $@-t $@
M
miguelportilla 已提交
842

E
Evan Shaw 已提交
843 844 845 846
unity.a: unity.o
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ unity.o

I
Igor Canadi 已提交
847
# try compiling db_test with unity
848
unity_test: db/db_test.o db/db_test_util.o $(TESTHARNESS) unity.a
I
Igor Canadi 已提交
849 850 851
	$(AM_LINK)
	./unity_test

E
Evan Shaw 已提交
852 853
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 已提交
854

J
jorlow@chromium.org 已提交
855
clean:
Y
Yueh-Hsuan Chiang 已提交
856 857 858 859 860
	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 {} \;
	rm -rf bzip2* snappy* zlib* lz4*
Y
Yi Wu 已提交
861
	cd java; $(MAKE) clean
862

863
tags:
Y
Yueh-Hsuan Chiang 已提交
864
	ctags * -R
A
Andrew Kryczka 已提交
865
	cscope -b `find . -name '*.cc'` `find . -name '*.h'` `find . -name '*.c'`
866

867
format:
Y
Yueh-Hsuan Chiang 已提交
868
	build_tools/format-diff.sh
869

870
package:
Y
Yueh-Hsuan Chiang 已提交
871
	bash build_tools/make_package.sh $(SHARED_MAJOR).$(SHARED_MINOR)
872

873 874 875
# ---------------------------------------------------------------------------
# 	Unit tests and tools
# ---------------------------------------------------------------------------
876
$(LIBRARY): $(LIBOBJECTS)
Y
Yueh-Hsuan Chiang 已提交
877 878
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $(LIBOBJECTS)
J
jorlow@chromium.org 已提交
879

O
omegaga 已提交
880
$(TOOLS_LIBRARY): $(BENCH_LIB_SOURCES:.cc=.o) $(TOOL_LIB_SOURCES:.cc=.o) $(LIB_SOURCES:.cc=.o) $(TESTUTIL)
881 882 883
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $^

884 885 886 887
librocksdb_env_basic_test.a: util/env_basic_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $^

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

F
Feng Zhu 已提交
891
cache_bench: util/cache_bench.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
892
	$(AM_LINK)
J
jorlow@chromium.org 已提交
893

894 895 896
persistent_cache_bench: utilities/persistent_cache/persistent_cache_bench.o $(LIBOBJECTS) $(TESTUTIL)
	$(AM_LINK)

A
Ameya Gupte 已提交
897
memtablerep_bench: db/memtablerep_bench.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
898
	$(AM_LINK)
A
Ameya Gupte 已提交
899

900
db_stress: tools/db_stress.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
901
	$(AM_LINK)
902

I
Igor Canadi 已提交
903 904 905
write_stress: tools/write_stress.o $(LIBOBJECTS) $(TESTUTIL)
	$(AM_LINK)

I
Igor Canadi 已提交
906
db_sanity_test: tools/db_sanity_test.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
907
	$(AM_LINK)
908

909
db_repl_stress: tools/db_repl_stress.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
910
	$(AM_LINK)
911

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

K
kailiu 已提交
915
autovector_test: util/autovector_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
916
	$(AM_LINK)
K
kailiu 已提交
917

918
column_family_test: db/column_family_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
919
	$(AM_LINK)
920

K
kailiu 已提交
921
table_properties_collector_test: db/table_properties_collector_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
922
	$(AM_LINK)
923

S
Sanjay Ghemawat 已提交
924
bloom_test: util/bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
925
	$(AM_LINK)
S
Sanjay Ghemawat 已提交
926

927
dynamic_bloom_test: util/dynamic_bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
928
	$(AM_LINK)
929

930
c_test: db/c_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
931
	$(AM_LINK)
932

J
jorlow@chromium.org 已提交
933
cache_test: util/cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
934
	$(AM_LINK)
J
jorlow@chromium.org 已提交
935 936

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

939 940 941
option_change_migration_test: utilities/option_change_migration/option_change_migration_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

942
stringappend_test: utilities/merge_operators/string_append/stringappend_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
943
	$(AM_LINK)
944

945
redis_test: utilities/redis/redis_lists_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
946
	$(AM_LINK)
947

948 949 950
hash_table_test: utilities/persistent_cache/hash_table_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
Abhishek Kona 已提交
951
histogram_test: util/histogram_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
952
	$(AM_LINK)
A
Abhishek Kona 已提交
953

L
Lei Jin 已提交
954
thread_local_test: util/thread_local_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
955
	$(AM_LINK)
L
Lei Jin 已提交
956

J
jorlow@chromium.org 已提交
957
corruption_test: db/corruption_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
958
	$(AM_LINK)
J
jorlow@chromium.org 已提交
959 960

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

963
slice_transform_test: util/slice_transform_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
964
	$(AM_LINK)
965

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

969 970 971
db_test2: db/db_test2.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

972 973 974
db_block_cache_test: db/db_block_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
975 976 977
db_bloom_filter_test: db/db_bloom_filter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

978
db_log_iter_test: db/db_log_iter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
979
	$(AM_LINK)
980

981
db_compaction_filter_test: db/db_compaction_filter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
982 983
	$(AM_LINK)

984
db_compaction_test: db/db_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
985 986
	$(AM_LINK)

987
db_dynamic_level_test: db/db_dynamic_level_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
988 989
	$(AM_LINK)

990 991 992
db_flush_test: db/db_flush_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

993
db_inplace_update_test: db/db_inplace_update_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
994 995
	$(AM_LINK)

Y
Yi Wu 已提交
996 997 998
db_iterator_test: db/db_iterator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

999 1000 1001
db_memtable_test: db/db_memtable_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1002 1003 1004
db_options_test: db/db_options_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1005 1006 1007
db_range_del_test: db/db_range_del_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
1008 1009 1010
db_sst_test: db/db_sst_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1011 1012 1013
external_sst_file_test: db/external_sst_file_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1014
db_tailing_iter_test: db/db_tailing_iter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1015 1016
	$(AM_LINK)

S
Stanislau Hlebik 已提交
1017
db_iter_test: db/db_iter_test.o $(LIBOBJECTS) $(TESTHARNESS)
1018
	$(AM_LINK)
S
Stanislau Hlebik 已提交
1019

1020
db_universal_compaction_test: db/db_universal_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1021 1022
	$(AM_LINK)

1023
db_wal_test: db/db_wal_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
S
sdong 已提交
1024 1025
	$(AM_LINK)

O
omegaga 已提交
1026 1027 1028
db_io_failure_test: db/db_io_failure_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1029 1030 1031
db_properties_test: db/db_properties_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1032 1033 1034
db_table_properties_test: db/db_table_properties_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1035
log_write_bench: util/log_write_bench.o $(LIBOBJECTS) $(TESTHARNESS)
D
dx9 已提交
1036
	$(AM_LINK) $(PROFILING_FLAGS)
1037

S
Siying Dong 已提交
1038
plain_table_db_test: db/plain_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1039
	$(AM_LINK)
S
Siying Dong 已提交
1040

1041
comparator_db_test: db/comparator_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1042
	$(AM_LINK)
1043

1044
table_reader_bench: table/table_reader_bench.o $(LIBOBJECTS) $(TESTHARNESS)
D
dx9 已提交
1045
	$(AM_LINK) $(PROFILING_FLAGS)
1046

1047
perf_context_test: db/perf_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
1048
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)
1049

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

I
Igor Canadi 已提交
1053
backupable_db_test: utilities/backupable/backupable_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1054
	$(AM_LINK)
I
Igor Canadi 已提交
1055

1056 1057 1058
blob_db_test: utilities/blob_db/blob_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1059 1060 1061
checkpoint_test: utilities/checkpoint/checkpoint_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1062
document_db_test: utilities/document/document_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1063
	$(AM_LINK)
I
Igor Canadi 已提交
1064

I
Igor Canadi 已提交
1065
json_document_test: utilities/document/json_document_test.o $(LIBOBJECTS) $(TESTHARNESS)
1066
	$(AM_LINK)
I
Igor Canadi 已提交
1067

1068 1069 1070
sim_cache_test: utilities/simulator_cache/sim_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1071
spatial_db_test: utilities/spatialdb/spatial_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1072
	$(AM_LINK)
I
Igor Canadi 已提交
1073

S
Sage Weil 已提交
1074 1075 1076
env_mirror_test: utilities/env_mirror_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1077 1078 1079 1080 1081
ifdef ROCKSDB_USE_LIBRADOS
env_librados_test: utilities/env_librados_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(COVERAGEFLAGS)
endif

1082 1083 1084
env_registry_test: utilities/env_registry_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1085
ttl_test: utilities/ttl/ttl_test.o $(LIBOBJECTS) $(TESTHARNESS)
1086
	$(AM_LINK)
1087

O
omegaga 已提交
1088 1089 1090
date_tiered_test: utilities/date_tiered/date_tiered_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1091
write_batch_with_index_test: utilities/write_batch_with_index/write_batch_with_index_test.o $(LIBOBJECTS) $(TESTHARNESS)
1092
	$(AM_LINK)
1093

I
Igor Canadi 已提交
1094
flush_job_test: db/flush_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
1095
	$(AM_LINK)
A
Andres Noetzli 已提交
1096 1097 1098

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

I
Igor Canadi 已提交
1100
compaction_job_test: db/compaction_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
1101
	$(AM_LINK)
I
Igor Canadi 已提交
1102

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

1106 1107 1108
compact_on_deletion_collector_test: utilities/table_properties_collectors/compact_on_deletion_collector_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1109
wal_manager_test: db/wal_manager_test.o $(LIBOBJECTS) $(TESTHARNESS)
1110
	$(AM_LINK)
I
Igor Canadi 已提交
1111

J
jorlow@chromium.org 已提交
1112
dbformat_test: db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS)
1113
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1114

1115 1116 1117
env_basic_test: util/env_basic_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1118
env_test: util/env_test.o $(LIBOBJECTS) $(TESTHARNESS)
1119
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1120

1121
fault_injection_test: db/fault_injection_test.o $(LIBOBJECTS) $(TESTHARNESS)
1122
	$(AM_LINK)
1123

L
Lei Jin 已提交
1124
rate_limiter_test: util/rate_limiter_test.o $(LIBOBJECTS) $(TESTHARNESS)
1125
	$(AM_LINK)
L
Lei Jin 已提交
1126

I
Islam AbdelRahman 已提交
1127 1128 1129
delete_scheduler_test: util/delete_scheduler_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1130
filename_test: db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS)
1131
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1132

1133 1134 1135
file_reader_writer_test: util/file_reader_writer_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1136
block_based_filter_block_test: table/block_based_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1137
	$(AM_LINK)
1138 1139

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

J
jorlow@chromium.org 已提交
1142
log_test: db/log_test.o $(LIBOBJECTS) $(TESTHARNESS)
1143
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1144 1145

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

D
Dhruba Borthakur 已提交
1148
block_test: table/block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1149
	$(AM_LINK)
D
Dhruba Borthakur 已提交
1150

N
Nathan Bronson 已提交
1151 1152 1153
inlineskiplist_test: db/inlineskiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1154
skiplist_test: db/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
1155
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1156 1157

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

1160
version_set_test: db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS)
1161
	$(AM_LINK)
1162

S
sdong 已提交
1163
compaction_picker_test: db/compaction_picker_test.o $(LIBOBJECTS) $(TESTHARNESS)
1164
	$(AM_LINK)
S
sdong 已提交
1165

S
sdong 已提交
1166
version_builder_test: db/version_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
1167
	$(AM_LINK)
S
sdong 已提交
1168

1169
file_indexer_test: db/file_indexer_test.o $(LIBOBJECTS) $(TESTHARNESS)
1170
	$(AM_LINK)
1171

1172
reduce_levels_test: tools/reduce_levels_test.o $(LIBOBJECTS) $(TESTHARNESS)
1173
	$(AM_LINK)
1174

J
jorlow@chromium.org 已提交
1175
write_batch_test: db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS)
1176
	$(AM_LINK)
1177

1178
write_controller_test: db/write_controller_test.o $(LIBOBJECTS) $(TESTHARNESS)
1179
	$(AM_LINK)
1180

1181 1182 1183
merge_helper_test: db/merge_helper_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1184 1185 1186
memory_test: utilities/memory/memory_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
Jim Paton 已提交
1187
merge_test: db/merge_test.o $(LIBOBJECTS) $(TESTHARNESS)
1188
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1189

I
Igor Canadi 已提交
1190
merger_test: table/merger_test.o $(LIBOBJECTS) $(TESTHARNESS)
1191
	$(AM_LINK)
I
Igor Canadi 已提交
1192

1193 1194 1195
util_merge_operators_test: utilities/util_merge_operators_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1196 1197 1198
options_file_test: db/options_file_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1199
deletefile_test: db/deletefile_test.o $(LIBOBJECTS) $(TESTHARNESS)
1200
	$(AM_LINK)
1201

1202
geodb_test: utilities/geodb/geodb_test.o $(LIBOBJECTS) $(TESTHARNESS)
1203
	$(AM_LINK)
1204

1205 1206 1207 1208 1209 1210
rocksdb_dump: tools/dump/rocksdb_dump.o $(LIBOBJECTS)
	$(AM_LINK)

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

1211
cuckoo_table_builder_test: table/cuckoo_table_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
1212
	$(AM_LINK)
1213

I
Igor Canadi 已提交
1214
cuckoo_table_reader_test: table/cuckoo_table_reader_test.o $(LIBOBJECTS) $(TESTHARNESS)
1215
	$(AM_LINK)
1216

1217
cuckoo_table_db_test: db/cuckoo_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1218
	$(AM_LINK)
1219

1220
listener_test: db/listener_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1221
	$(AM_LINK)
1222

Y
Yueh-Hsuan Chiang 已提交
1223
thread_list_test: util/thread_list_test.o $(LIBOBJECTS) $(TESTHARNESS)
1224
	$(AM_LINK)
Y
Yueh-Hsuan Chiang 已提交
1225

1226 1227 1228
compact_files_test: db/compact_files_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1229
options_test: util/options_test.o $(LIBOBJECTS) $(TESTHARNESS)
1230 1231 1232
	$(AM_LINK)

options_settable_test: util/options_settable_test.o $(LIBOBJECTS) $(TESTHARNESS)
1233
	$(AM_LINK)
1234

1235 1236 1237
options_util_test: utilities/options/options_util_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1238 1239 1240
db_bench_tool_test: tools/db_bench_tool_test.o $(BENCHTOOLOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1241 1242 1243
event_logger_test: util/event_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1244
sst_dump_test: tools/sst_dump_test.o $(LIBOBJECTS) $(TESTHARNESS)
1245
	$(AM_LINK)
1246

O
omegaga 已提交
1247 1248 1249
column_aware_encoding_test: utilities/column_aware_encoding_test.o $(TESTHARNESS) $(EXPOBJECTS)
	$(AM_LINK)

A
agiardullo 已提交
1250 1251 1252
optimistic_transaction_test: utilities/transactions/optimistic_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1253
mock_env_test : util/mock_env_test.o $(LIBOBJECTS) $(TESTHARNESS)
1254
	$(AM_LINK)
1255

1256
manual_compaction_test: db/manual_compaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
1257
	$(AM_LINK)
1258

1259
filelock_test: util/filelock_test.o $(LIBOBJECTS) $(TESTHARNESS)
1260
	$(AM_LINK)
K
Kai Liu 已提交
1261

1262
auto_roll_logger_test: db/auto_roll_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
1263
	$(AM_LINK)
1264

A
agiardullo 已提交
1265 1266 1267
memtable_list_test: db/memtable_list_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
agiardullo 已提交
1268 1269 1270
write_callback_test: db/write_callback_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1271 1272 1273
heap_test: util/heap_test.o $(GTEST)
	$(AM_LINK)

A
agiardullo 已提交
1274 1275 1276
transaction_test: utilities/transactions/transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1277
sst_dump: tools/sst_dump.o $(LIBOBJECTS)
1278
	$(AM_LINK)
1279

O
omegaga 已提交
1280 1281 1282
column_aware_encoding_exp: utilities/column_aware_encoding_exp.o $(EXPOBJECTS)
	$(AM_LINK)

A
Andrew Kryczka 已提交
1283 1284 1285
repair_test: db/repair_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1286
ldb_cmd_test: tools/ldb_cmd_test.o $(LIBOBJECTS) $(TESTHARNESS)
1287 1288
	$(AM_LINK)

1289
ldb: tools/ldb.o $(LIBOBJECTS)
1290
	$(AM_LINK)
1291

1292 1293 1294
iostats_context_test: util/iostats_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)

1295 1296 1297
persistent_cache_test: utilities/persistent_cache/persistent_cache_test.o  db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1298 1299 1300
statistics_test: util/statistics_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
1301 1302 1303
lru_cache_test: util/lru_cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1304 1305
lua_test: utilities/lua/rocks_lua_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)
Y
Yi Wu 已提交
1306

I
Igor Canadi 已提交
1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338
#-------------------------------------------------
# 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 已提交
1339
	[ -e $(SHARED4) ] && $(MAKE) install-shared || :
I
Igor Canadi 已提交
1340 1341 1342 1343

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


1344 1345 1346 1347
# ---------------------------------------------------------------------------
# Jni stuff
# ---------------------------------------------------------------------------

1348
JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/linux
D
David Bernard 已提交
1349 1350 1351 1352 1353
ifeq ($(PLATFORM), OS_SOLARIS)
	ARCH := $(shell isainfo -b)
else
	ARCH := $(shell getconf LONG_BIT)
endif
1354
ROCKSDBJNILIB = librocksdbjni-linux$(ARCH).so
1355
ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-linux$(ARCH).jar
1356
ROCKSDB_JAR_ALL = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH).jar
C
Chris Riccomini 已提交
1357
ROCKSDB_JAVADOCS_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-javadoc.jar
1358
ROCKSDB_SOURCES_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-sources.jar
1359 1360

ifeq ($(PLATFORM), OS_MACOSX)
D
David Bernard 已提交
1361 1362
	ROCKSDBJNILIB = librocksdbjni-osx.jnilib
	ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-osx.jar
1363 1364 1365 1366 1367
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
1368
endif
1369 1370 1371 1372 1373
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 已提交
1374 1375 1376 1377 1378
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
endif
1379

N
Naveen 已提交
1380 1381
libz.a:
	-rm -rf zlib-1.2.8
1382
	curl -O -L http://zlib.net/zlib-1.2.8.tar.gz
N
Naveen 已提交
1383 1384
	tar xvzf zlib-1.2.8.tar.gz
	cd zlib-1.2.8 && CFLAGS='-fPIC' ./configure --static && make
1385
	cp zlib-1.2.8/libz.a .
N
Naveen 已提交
1386 1387 1388

libbz2.a:
	-rm -rf bzip2-1.0.6
1389
	curl -O -L http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
N
Naveen 已提交
1390
	tar xvzf bzip2-1.0.6.tar.gz
1391
	cd bzip2-1.0.6 && make CFLAGS='-fPIC -O2 -g -D_FILE_OFFSET_BITS=64'
N
Naveen 已提交
1392 1393
	cp bzip2-1.0.6/libbz2.a .

N
Naveen 已提交
1394
libsnappy.a:
1395 1396 1397 1398 1399 1400
	-rm -rf snappy-1.1.3
	curl -O -L https://github.com/google/snappy/releases/download/1.1.3/snappy-1.1.3.tar.gz
	tar xvzf snappy-1.1.3.tar.gz
	cd snappy-1.1.3 && ./configure --with-pic --enable-static
	cd snappy-1.1.3 && make
	cp snappy-1.1.3/.libs/libsnappy.a .
1401

1402 1403
liblz4.a:
	   -rm -rf lz4-r127
1404
	   curl -O -L https://codeload.github.com/Cyan4973/lz4/tar.gz/r127
1405 1406 1407 1408
	   mv r127 lz4-r127.tar.gz
	   tar xvzf lz4-r127.tar.gz
	   cd lz4-r127/lib && make CFLAGS='-fPIC' all
	   cp lz4-r127/lib/liblz4.a .
N
Naveen 已提交
1409

1410 1411 1412
# 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
1413

1414
JAVA_STATIC_FLAGS = -DZLIB -DBZIP2 -DSNAPPY -DLZ4
1415
JAVA_STATIC_INCLUDES = -I./zlib-1.2.8 -I./bzip2-1.0.6 -I./snappy-1.1.3 -I./lz4-r127/lib
1416 1417 1418

$(java_static_libobjects): jls/%.o: %.cc libz.a libbz2.a libsnappy.a liblz4.a
	$(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) $(JAVA_STATIC_FLAGS) $(JAVA_STATIC_INCLUDES) -fPIC -c $< -o $@ $(COVERAGEFLAGS)
1419

1420
rocksdbjavastatic: $(java_static_libobjects)
F
fyrz 已提交
1421
	cd java;$(MAKE) javalib;
1422
	rm -f ./java/target/$(ROCKSDBJNILIB)
1423 1424
	$(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC \
	  -o ./java/target/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) \
1425
	  $(java_static_libobjects) $(COVERAGEFLAGS) \
1426
	  libz.a libbz2.a libsnappy.a liblz4.a $(JAVA_STATIC_LDFLAGS)
1427 1428 1429 1430 1431 1432
	cd java/target;strip -S -x $(ROCKSDBJNILIB)
	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 已提交
1433

1434
rocksdbjavastaticrelease: rocksdbjavastatic
1435
	cd java/crossbuild && vagrant destroy -f && vagrant up linux32 && vagrant halt linux32 && vagrant up linux64 && vagrant halt linux64
1436
	cd java;jar -cf target/$(ROCKSDB_JAR_ALL) HISTORY*.md
1437
	cd java/target;jar -uf $(ROCKSDB_JAR_ALL) librocksdbjni-*.so librocksdbjni-*.jnilib
1438
	cd java/target/classes;jar -uf ../$(ROCKSDB_JAR_ALL) org/rocksdb/*.class org/rocksdb/util/*.class
1439

1440 1441 1442
rocksdbjavastaticpublish: rocksdbjavastaticrelease rocksdbjavastaticpublishcentral

rocksdbjavastaticpublishcentral:
1443 1444 1445 1446 1447
	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
1448
	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
1449
	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
1450

1451 1452 1453 1454 1455 1456 1457
# A version of each $(LIBOBJECTS) compiled with -fPIC
java_libobjects = $(patsubst %,jl/%,$(LIBOBJECTS))
CLEAN_FILES += jl

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

1458
rocksdbjava: $(java_libobjects)
1459 1460 1461 1462 1463 1464
	$(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
1465 1466 1467 1468

jclean:
	cd java;$(MAKE) clean;

1469 1470 1471 1472 1473 1474
jtest_compile: rocksdbjava
	cd java;$(MAKE) java_test

jtest_run:
	cd java;$(MAKE) run_test

1475
jtest: rocksdbjava
1476
	cd java;$(MAKE) sample;$(MAKE) test;
1477

1478 1479 1480
jdb_bench:
	cd java;$(MAKE) db_bench;

1481 1482
commit_prereq: build_tools/rocksdb-lego-determinator \
               build_tools/precommit_checker.py
1483
	J=$(J) build_tools/precommit_checker.py unit unit_481 clang_unit release release_481 clang_release tsan asan ubsan lite unit_non_shm
1484
	$(MAKE) clean && $(MAKE) jclean && $(MAKE) rocksdbjava;
1485

V
Venkatesh Radhakrishnan 已提交
1486 1487 1488 1489 1490 1491 1492
xfunc:
	for xftest in $(XFUNC_TESTS); do \
		echo "===== Running xftest $$xftest"; \
		make check ROCKSDB_XFUNC_TEST="$$xftest" tests-regexp="DBTest" ;\
	done


1493 1494 1495
# ---------------------------------------------------------------------------
#  	Platform-specific compilation
# ---------------------------------------------------------------------------
J
Jim Paton 已提交
1496

1497 1498 1499
ifeq ($(PLATFORM), IOS)
# For iOS, create universal object files to be used on both the simulator and
# a device.
H
heyongqiang 已提交
1500 1501 1502
PLATFORMSROOT=/Applications/Xcode.app/Contents/Developer/Platforms
SIMULATORROOT=$(PLATFORMSROOT)/iPhoneSimulator.platform/Developer
DEVICEROOT=$(PLATFORMSROOT)/iPhoneOS.platform/Developer
I
Igor Canadi 已提交
1503
IOSVERSION=$(shell defaults read $(PLATFORMSROOT)/iPhoneOS.platform/version CFBundleShortVersionString)
1504

1505 1506
.cc.o:
	mkdir -p ios-x86/$(dir $@)
I
Igor Canadi 已提交
1507
	$(CXX) $(CXXFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@
1508
	mkdir -p ios-arm/$(dir $@)
I
Igor Canadi 已提交
1509
	xcrun -sdk iphoneos $(CXX) $(CXXFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -arch armv7s -arch arm64 -c $< -o ios-arm/$@
1510
	lipo ios-x86/$@ ios-arm/$@ -create -output $@
1511 1512 1513

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

1519
else
J
jorlow@chromium.org 已提交
1520
.cc.o:
1521
	$(AM_V_CC)$(CXX) $(CXXFLAGS) -c $< -o $@ $(COVERAGEFLAGS)
1522 1523

.c.o:
1524
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
1525
endif
1526

1527 1528 1529 1530
# ---------------------------------------------------------------------------
#  	Source files dependencies detection
# ---------------------------------------------------------------------------

O
omegaga 已提交
1531
all_sources = $(LIB_SOURCES) $(MAIN_SOURCES) $(MOCK_LIB_SOURCES) $(TOOL_LIB_SOURCES) $(BENCH_LIB_SOURCES) $(TEST_LIB_SOURCES) $(EXP_LIB_SOURCES)
1532 1533
DEPFILES = $(all_sources:.cc=.d)

1534 1535 1536 1537 1538
# 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.
1539
$(DEPFILES): %.d: %.cc
1540
	@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
1541
	  -MM -MT'$@' -MT'$(<:.cc=.o)' "$<" -o '$@'
1542 1543 1544

depend: $(DEPFILES)

1545 1546 1547 1548
# 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.
1549
ifneq ($(MAKECMDGOALS),clean)
1550
ifneq ($(MAKECMDGOALS),format)
1551 1552
ifneq ($(MAKECMDGOALS),jclean)
ifneq ($(MAKECMDGOALS),jtest)
1553
ifneq ($(MAKECMDGOALS),package)
1554
ifneq ($(MAKECMDGOALS),analyze)
1555 1556
-include $(DEPFILES)
endif
1557
endif
1558 1559
endif
endif
1560
endif
1561
endif