Makefile 44.5 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

9
CLEAN_FILES = # deliberately empty, so we can append below.
10 11 12 13
CFLAGS += ${EXTRA_CFLAGS}
CXXFLAGS += ${EXTRA_CXXFLAGS}
LDFLAGS += $(EXTRA_LDFLAGS)
MACHINE ?= $(shell uname -m)
I
Igor Canadi 已提交
14
ARFLAGS = rs
15

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

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

# Set the default DEBUG_LEVEL to 1
DEBUG_LEVEL?=1
41 42

ifeq ($(MAKECMDGOALS),dbg)
Y
Yueh-Hsuan Chiang 已提交
43
	DEBUG_LEVEL=2
44
endif
45

46 47 48 49 50 51 52 53
ifeq ($(MAKECMDGOALS),clean)
	DEBUG_LEVEL=0
endif

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

54
ifeq ($(MAKECMDGOALS),shared_lib)
Y
Yueh-Hsuan Chiang 已提交
55
	DEBUG_LEVEL=0
I
Igor Canadi 已提交
56
endif
I
Igor Canadi 已提交
57

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

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

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

ifeq ($(MAKECMDGOALS),install)
Y
Yueh-Hsuan Chiang 已提交
71
	DEBUG_LEVEL=0
72 73
endif

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

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

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

86 87 88
# compile with -O2 if debug level is not 2
ifneq ($(DEBUG_LEVEL), 2)
OPT += -O2 -fno-omit-frame-pointer
89 90
# 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))
91 92 93 94 95 96 97
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 已提交
98
OPT += -DNDEBUG
99
DISABLE_WARNING_AS_ERROR=1
100 101
else
$(warning Warning: Compiling in debug mode. Don't use the resulting binary in production)
I
Igor Canadi 已提交
102 103
endif

104
#-----------------------------------------------
105
include src.mk
106

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

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 已提交
128 129 130 131
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 =
132

133 134
AM_LINK = $(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(COVERAGEFLAGS)

135
# detect what platform we're building on
136
dummy := $(shell (export ROCKSDB_ROOT="$(CURDIR)"; "$(CURDIR)/build_tools/build_detect_platform" "$(CURDIR)/make_config.mk"))
S
Sanjay Ghemawat 已提交
137
# this file is generated by the previous line to set build flags and sources
I
Igor Canadi 已提交
138
include make_config.mk
139
CLEAN_FILES += make_config.mk
J
jorlow@chromium.org 已提交
140

I
Igor Canadi 已提交
141 142 143 144 145 146 147 148
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 已提交
149 150 151
ifeq ($(PLATFORM), OS_SOLARIS)
	PLATFORM_CXXFLAGS += -D _GLIBCXX_USE_C99
endif
152
ifneq ($(filter -DROCKSDB_LITE,$(OPT)),)
Y
Yueh-Hsuan Chiang 已提交
153 154 155
	# found
	CFLAGS += -fno-exceptions
	CXXFLAGS += -fno-exceptions
156 157
endif

I
Igor Canadi 已提交
158 159
# 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 已提交
160 161 162 163
	DISABLE_JEMALLOC=1
	EXEC_LDFLAGS += -fsanitize=address
	PLATFORM_CCFLAGS += -fsanitize=address
	PLATFORM_CXXFLAGS += -fsanitize=address
I
Igor Canadi 已提交
164 165 166 167
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 已提交
168 169 170 171
	DISABLE_JEMALLOC=1
	EXEC_LDFLAGS += -fsanitize=thread -pie
	PLATFORM_CCFLAGS += -fsanitize=thread -fPIC -DROCKSDB_TSAN_RUN
	PLATFORM_CXXFLAGS += -fsanitize=thread -fPIC -DROCKSDB_TSAN_RUN
172 173
        # Turn off -pg when enabling TSAN testing, because that induces
        # a link failure.  TODO: find the root cause
D
dx9 已提交
174
	PROFILING_FLAGS =
I
Igor Canadi 已提交
175 176
endif

177 178 179 180 181 182 183 184
# 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 已提交
185
ifndef DISABLE_JEMALLOC
186 187 188 189
	ifdef JEMALLOC
		PLATFORM_CXXFLAGS += "-DROCKSDB_JEMALLOC"
		PLATFORM_CCFLAGS +=  "-DROCKSDB_JEMALLOC"
	endif
Y
Yueh-Hsuan Chiang 已提交
190 191 192
	EXEC_LDFLAGS := $(JEMALLOC_LIB) $(EXEC_LDFLAGS)
	PLATFORM_CXXFLAGS += $(JEMALLOC_INCLUDE)
	PLATFORM_CCFLAGS += $(JEMALLOC_INCLUDE)
I
Igor Canadi 已提交
193 194
endif

I
Igor Sugak 已提交
195 196 197 198 199
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)

200 201 202
# This (the first rule) must depend on "all".
default: all

203
WARNING_FLAGS = -W -Wextra -Wall -Wsign-compare -Wshadow \
Y
Yueh-Hsuan Chiang 已提交
204
  -Wno-unused-parameter
205

206
ifndef DISABLE_WARNING_AS_ERROR
Y
Yueh-Hsuan Chiang 已提交
207
	WARNING_FLAGS += -Werror
208 209
endif

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

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

215
date := $(shell date +%F)
I
Igor Canadi 已提交
216
ifdef FORCE_GIT_SHA
Y
Yueh-Hsuan Chiang 已提交
217
	git_sha := $(FORCE_GIT_SHA)
I
Igor Canadi 已提交
218
else
Y
Yueh-Hsuan Chiang 已提交
219
	git_sha := $(shell git rev-parse HEAD 2>/dev/null)
I
Igor Canadi 已提交
220
endif
221
gen_build_version =							\
Y
Yueh-Hsuan Chiang 已提交
222 223 224 225 226 227 228
  printf '%s\n'								\
    '\#include "build_version.h"'					\
    'const char* rocksdb_build_git_sha =				\
      "rocksdb_build_git_sha:$(git_sha)";'			\
    'const char* rocksdb_build_git_date =				\
      "rocksdb_build_git_date:$(date)";'				\
    'const char* rocksdb_build_compile_date = __DATE__;'
229 230 231 232 233 234

# 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.
235
CLEAN_FILES += util/build_version.cc:
236 237
FORCE:
util/build_version.cc: FORCE
Y
Yueh-Hsuan Chiang 已提交
238 239 240 241 242
	$(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
243

244
LIBOBJECTS = $(LIB_SOURCES:.cc=.o)
E
Evan Shaw 已提交
245
LIBOBJECTS += $(TOOL_SOURCES:.cc=.o)
246
MOCKOBJECTS = $(MOCK_SOURCES:.cc=.o)
J
jorlow@chromium.org 已提交
247

I
Igor Sugak 已提交
248
GTEST = $(GTEST_DIR)/gtest/gtest-all.o
J
jorlow@chromium.org 已提交
249
TESTUTIL = ./util/testutil.o
I
Igor Sugak 已提交
250
TESTHARNESS = ./util/testharness.o $(TESTUTIL) $(MOCKOBJECTS) $(GTEST)
251
VALGRIND_ERROR = 2
252
VALGRIND_VER := $(join $(VALGRIND_VER),valgrind)
253

254
VALGRIND_OPTS = --error-exitcode=$(VALGRIND_ERROR) --leak-check=full
255

256 257
BENCHTOOLOBJECTS = $(BENCH_SOURCES:.cc=.o) $(LIBOBJECTS) $(TESTUTIL)

J
jorlow@chromium.org 已提交
258
TESTS = \
259
	db_test \
260
	db_test2 \
261
	db_block_cache_test \
Y
Yi Wu 已提交
262
	db_bloom_filter_test \
263 264 265
	db_iter_test \
	db_log_iter_test \
	db_compaction_filter_test \
266
	db_compaction_test \
267
	db_dynamic_level_test \
268
	db_inplace_update_test \
Y
Yi Wu 已提交
269 270
	db_iterator_test \
	db_sst_test \
271 272
	db_tailing_iter_test \
	db_universal_compaction_test \
S
sdong 已提交
273
	db_wal_test \
274
	db_properties_test \
275
	db_table_properties_test \
276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296
	block_hash_index_test \
	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 \
	env_test \
	fault_injection_test \
	filelock_test \
	filename_test \
297
	file_reader_writer_test \
298 299 300
	block_based_filter_block_test \
	full_filter_block_test \
	histogram_test \
N
Nathan Bronson 已提交
301
	inlineskiplist_test \
302 303 304 305 306 307
	log_test \
	manual_compaction_test \
	memenv_test \
	mock_env_test \
	memtable_list_test \
	merge_helper_test \
308
	memory_test \
309 310
	merge_test \
	merger_test \
311
	options_file_test \
312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336
	redis_test \
	reduce_levels_test \
	plain_table_db_test \
	comparator_db_test \
	prefix_test \
	skiplist_test \
	stringappend_test \
	ttl_test \
	backupable_db_test \
	document_db_test \
	json_document_test \
	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 已提交
337
	delete_scheduler_test \
338
	options_test \
339
	options_settable_test \
340
	options_util_test \
341 342 343 344 345 346 347
	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 已提交
348
	compaction_iterator_test \
349 350 351 352 353 354 355
	compaction_job_test \
	thread_list_test \
	sst_dump_test \
	compact_files_test \
	perf_context_test \
	optimistic_transaction_test \
	write_callback_test \
356 357
	heap_test \
	compact_on_deletion_collector_test \
A
agiardullo 已提交
358
	compaction_job_stats_test \
359
	transaction_test \
360 361
	ldb_cmd_test \
	iostats_context_test
362

Y
Yi Wu 已提交
363 364 365 366 367 368 369 370 371 372 373 374
PARALLEL_TEST = \
	backupable_db_test \
	compact_on_deletion_collector_test \
	db_compaction_filter_test \
	db_compaction_test \
	db_test \
	db_universal_compaction_test \
	fault_injection_test \
	inlineskiplist_test \
	manual_compaction_test \
	table_test

I
Islam AbdelRahman 已提交
375 376 377 378 379 380 381 382
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
383

384
TOOLS = \
Y
Yueh-Hsuan Chiang 已提交
385 386 387
	sst_dump \
	db_sanity_test \
	db_stress \
I
Igor Canadi 已提交
388
	write_stress \
Y
Yueh-Hsuan Chiang 已提交
389 390 391 392
	ldb \
	db_repl_stress \
	rocksdb_dump \
	rocksdb_undump
J
jorlow@chromium.org 已提交
393

S
sdong 已提交
394 395
# TODO: add back forward_iterator_bench, after making it build in all environemnts.
BENCHMARKS = db_bench table_reader_bench cache_bench memtablerep_bench
J
jorlow@chromium.org 已提交
396

397
# if user didn't config LIBNAME, set the default
398
ifeq ($(LIBNAME),)
399 400
# we should only run rocksdb in production with DEBUG_LEVEL 0
ifeq ($(DEBUG_LEVEL),0)
Y
Yueh-Hsuan Chiang 已提交
401
        LIBNAME=librocksdb
402 403 404
else
        LIBNAME=librocksdb_debug
endif
405
endif
406
LIBRARY = ${LIBNAME}.a
407

408 409 410
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)
411

412 413
default: all

414 415 416
#-----------------------------------------------
# Create platform independent shared libraries.
#-----------------------------------------------
417
ifneq ($(PLATFORM_SHARED_EXT),)
H
heyongqiang 已提交
418 419

ifneq ($(PLATFORM_SHARED_VERSIONED),true)
420
SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
H
heyongqiang 已提交
421 422
SHARED2 = $(SHARED1)
SHARED3 = $(SHARED1)
423
SHARED4 = $(SHARED1)
H
heyongqiang 已提交
424 425
SHARED = $(SHARED1)
else
426 427
SHARED_MAJOR = $(ROCKSDB_MAJOR)
SHARED_MINOR = $(ROCKSDB_MINOR)
428
SHARED_PATCH = $(ROCKSDB_PATCH)
429
SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
430 431 432 433 434 435
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
436 437
SHARED2 = $(SHARED1).$(SHARED_MAJOR)
SHARED3 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR)
438
SHARED4 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR).$(SHARED_PATCH)
439
endif
440 441
SHARED = $(SHARED1) $(SHARED2) $(SHARED3) $(SHARED4)
$(SHARED1): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
442
	ln -fs $(SHARED4) $(SHARED1)
443
$(SHARED2): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
444
	ln -fs $(SHARED4) $(SHARED2)
445
$(SHARED3): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
446
	ln -fs $(SHARED4) $(SHARED3)
447 448
endif

449
$(SHARED4):
450
	$(CXX) $(PLATFORM_SHARED_LDFLAGS)$(SHARED3) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) $(LIB_SOURCES) $(TOOL_SOURCES) \
Y
Yueh-Hsuan Chiang 已提交
451
		$(LDFLAGS) -o $@
H
heyongqiang 已提交
452 453 454

endif  # PLATFORM_SHARED_EXT

455
.PHONY: blackbox_crash_test check clean coverage crash_test ldb_tests package \
Y
Yueh-Hsuan Chiang 已提交
456 457
	release tags valgrind_check whitebox_crash_test format static_lib shared_lib all \
	dbg rocksdbjavastatic rocksdbjava install install-static install-shared uninstall \
M
maurice barnum 已提交
458
	analyze tools
459

M
maurice barnum 已提交
460 461

all: $(LIBRARY) $(BENCHMARKS) tools $(TESTS)
462

I
Igor Canadi 已提交
463 464 465 466
static_lib: $(LIBRARY)

shared_lib: $(SHARED)

M
maurice barnum 已提交
467 468 469
tools: $(TOOLS)

dbg: $(LIBRARY) $(BENCHMARKS) tools $(TESTS)
K
Kai Liu 已提交
470

471
# creates static library and programs
472
release:
Y
Yueh-Hsuan Chiang 已提交
473
	$(MAKE) clean
474
	DEBUG_LEVEL=0 $(MAKE) static_lib tools db_bench
K
Kai Liu 已提交
475 476

coverage:
Y
Yueh-Hsuan Chiang 已提交
477 478 479 480 481
	$(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 已提交
482

Y
Yi Wu 已提交
483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502
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.
503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520
# 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 已提交
521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546
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 \
		TEST_SCRIPT=t/run-$$TEST_BINARY-$${TEST_NAME//\//-}; \
		echo "  GEN     " $$TEST_SCRIPT; \
    printf '%s\n' \
      '#!/bin/sh' \
      "d=\$(TMPD)$$TEST_SCRIPT" \
      'mkdir -p $$d' \
			"TEST_TMPDIR=\$$d ./$$TEST_BINARY --gtest_filter=$$TEST_NAME" \
		> $$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)
547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564

# 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 已提交
565
	^t/run-table_test-HarnessTest.Randomized$$|^t/run-db_test-.*(?:FileCreationRandomFailure|EncodeDecompressedBlockSizeTest)$$
566
prioritize_long_running_tests =						\
Y
Yueh-Hsuan Chiang 已提交
567 568 569
  perl -pe 's,($(slow_test_regexp)),100 $$1,'				\
    | sort -k1,1gr							\
    | sed 's/^[.0-9]* //'
570 571 572 573 574 575

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

V
Venkatesh Radhakrishnan 已提交
578 579 580
# Use this regexp to select the subset of tests whose names match.
tests-regexp = .

Y
Yi Wu 已提交
581
t_run = $(wildcard t/run-*)
582
.PHONY: check_0
Y
Yi Wu 已提交
583 584
check_0:
	$(AM_V_GEN)export TEST_TMPDIR=$(TMPD); \
Y
Yueh-Hsuan Chiang 已提交
585 586 587
	printf '%s\n' ''						\
	  'To monitor subtest <duration,pass/fail,name>,'		\
	  '  run "make watch-log" in a separate window' '';		\
Y
Yi Wu 已提交
588 589 590 591 592
	test -t 1 && eta=--eta || eta=; \
	{ \
		printf './%s\n' $(filter-out $(PARALLEL_TEST),$(TESTS)); \
		printf '%s\n' $(t_run); \
	} \
Y
Yueh-Hsuan Chiang 已提交
593 594 595
	  | $(prioritize_long_running_tests)				\
	  | grep -E '$(tests-regexp)'					\
	  | parallel -j$(J) --joblog=LOG $$eta --gnu '{} >& t/log-{/}'
S
sdong 已提交
596 597

.PHONY: valgrind_check_0
Y
Yi Wu 已提交
598
valgrind_check_0:
S
sdong 已提交
599 600 601 602 603 604
	$(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 已提交
605
	  printf './%s\n' $(filter-out $(PARALLEL_TEST) %skiplist_test options_settable_test, $(TESTS));		\
S
sdong 已提交
606 607 608 609 610 611 612
	  printf '%s\n' $(t_run);					\
	}								\
	  | $(prioritize_long_running_tests)				\
	  | grep -E '$(tests-regexp)'					\
	  | parallel -j$(J) --joblog=LOG $$eta --gnu \
      'if [[ "{}" == "./"* ]] ; then $(DRIVER) {} >& t/valgrind_log-{/}; ' \
      'else {} >& t/valgrind_log-{/}; fi'
613 614

CLEAN_FILES += t LOG $(TMPD)
615

616 617 618 619 620 621 622 623
# 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 已提交
624
	watch --interval=0 'sort -k7,7nr -k4,4gr LOG|$(quoted_perl_command)'
625

I
Igor Canadi 已提交
626
# If J != 1 and GNU parallel is installed, run the tests in parallel,
627 628
# via the check_0 rule above.  Otherwise, run them sequentially.
check: all
Y
Yi Wu 已提交
629
	$(MAKE) gen_parallel_tests
Y
Yueh-Hsuan Chiang 已提交
630 631 632 633 634 635 636 637 638 639
	$(AM_V_GEN)if test "$(J)" != 1                                  \
	    && (parallel --gnu --help 2>/dev/null) |                    \
	        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 已提交
640
ifeq ($(filter -DROCKSDB_LITE,$(OPT)),)
Y
Yueh-Hsuan Chiang 已提交
641 642
	python tools/ldb_test.py
	sh tools/rocksdb_dump_test.sh
I
Islam AbdelRahman 已提交
643
endif
644 645

check_some: $(SUBSET) ldb_tests
Y
Yueh-Hsuan Chiang 已提交
646
	for t in $(SUBSET); do echo "===== Running $$t"; ./$$t || exit 1; done
647 648

.PHONY: ldb_tests
649
ldb_tests: ldb
Y
Yueh-Hsuan Chiang 已提交
650
	python tools/ldb_test.py
651

I
Igor Canadi 已提交
652
crash_test: whitebox_crash_test blackbox_crash_test
653 654

blackbox_crash_test: db_stress
655
	python -u tools/db_crashtest.py --simple blackbox
656
	python -u tools/db_crashtest.py blackbox
657 658

whitebox_crash_test: db_stress
659 660
	python -u tools/db_crashtest.py --simple whitebox
	python -u tools/db_crashtest.py whitebox
661

I
Igor Canadi 已提交
662
asan_check:
Y
Yueh-Hsuan Chiang 已提交
663 664 665
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) check -j32
	$(MAKE) clean
666 667

asan_crash_test:
Y
Yueh-Hsuan Chiang 已提交
668 669 670
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) crash_test
	$(MAKE) clean
I
Igor Canadi 已提交
671

672 673 674 675 676 677 678 679 680 681
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

I
Igor Canadi 已提交
682
valgrind_check: $(TESTS)
Y
Yi Wu 已提交
683
	$(MAKE) gen_parallel_tests
S
sdong 已提交
684 685 686 687
	$(AM_V_GEN)if test "$(J)" != 1                                  \
	    && (parallel --gnu --help 2>/dev/null) |                    \
	        grep -q 'GNU Parallel';                                 \
	then                                                            \
Y
Yi Wu 已提交
688
      $(MAKE) TMPD=$(TMPD)                                        \
S
sdong 已提交
689 690 691 692 693 694 695 696 697 698
      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
699

700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721

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 \
			seq $(J) | v="$$t" parallel --gnu 's=$(TMPD)/rdb-{};  export TEST_TMPDIR=$$s;' \
				'timeout 2m ./db_test --gtest_filter=$$v >> $$s/log-{} 2>1'; \
		else\
			seq $(J) | v="./$$t" parallel --gnu 's=$(TMPD)/rdb-{};' \
			     '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 已提交
722 723 724 725 726 727 728
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!'

729 730 731 732 733 734 735 736 737 738 739 740 741
parallel_check: $(TESTS)
	$(AM_V_GEN)if test "$(J)" > 1                                  \
	    && (parallel --gnu --help 2>/dev/null) |                    \
	        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); \
        seq $(J) | parallel --gnu 's=$(TMPD)/rdb-{}; rm -rf $$s; mkdir $$s'; \
742
	$(MAKE)  PAR_TEST="$(shell $(test_names))" TMPD=$(TMPD) \
743 744 745 746
		J=$(J) db_test=1 parloop; \
	$(MAKE) PAR_TEST="$(filter-out db_test, $(TESTS))" \
		TMPD=$(TMPD) J=$(J) db_test=0 parloop;

747
analyze: clean
Y
Yueh-Hsuan Chiang 已提交
748 749 750 751
	$(CLANG_SCAN_BUILD) --use-analyzer=$(CLANG_ANALYZER) \
		--use-c++=$(CXX) --use-cc=$(CC) --status-bugs \
		-o $(CURDIR)/scan_build_report \
		$(MAKE) dbg
752

753 754
CLEAN_FILES += unity.cc
unity.cc: Makefile
Y
Yueh-Hsuan Chiang 已提交
755 756
	rm -f $@ $@-t
	for source_file in $(LIB_SOURCES); do \
E
Evan Shaw 已提交
757
		echo "#include \"$$source_file\"" >> $@-t; \
Y
Yueh-Hsuan Chiang 已提交
758 759 760
	done
	chmod a=r $@-t
	mv $@-t $@
M
miguelportilla 已提交
761

E
Evan Shaw 已提交
762 763 764 765
unity.a: unity.o
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ unity.o

I
Igor Canadi 已提交
766
# try compiling db_test with unity
767
unity_test: db/db_test.o db/db_test_util.o $(TESTHARNESS) unity.a
I
Igor Canadi 已提交
768 769 770
	$(AM_LINK)
	./unity_test

E
Evan Shaw 已提交
771 772
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 已提交
773

J
jorlow@chromium.org 已提交
774
clean:
Y
Yueh-Hsuan Chiang 已提交
775 776 777 778 779
	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*
780

781
tags:
Y
Yueh-Hsuan Chiang 已提交
782
	ctags * -R
A
Andrew Kryczka 已提交
783
	cscope -b `find . -name '*.cc'` `find . -name '*.h'` `find . -name '*.c'`
784

785
format:
Y
Yueh-Hsuan Chiang 已提交
786
	build_tools/format-diff.sh
787

788
package:
Y
Yueh-Hsuan Chiang 已提交
789
	bash build_tools/make_package.sh $(SHARED_MAJOR).$(SHARED_MINOR)
790

791 792 793
# ---------------------------------------------------------------------------
# 	Unit tests and tools
# ---------------------------------------------------------------------------
794
$(LIBRARY): $(LIBOBJECTS)
Y
Yueh-Hsuan Chiang 已提交
795 796
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $(LIBOBJECTS)
J
jorlow@chromium.org 已提交
797

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

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

A
Ameya Gupte 已提交
804
memtablerep_bench: db/memtablerep_bench.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
805
	$(AM_LINK)
A
Ameya Gupte 已提交
806

K
kailiu 已提交
807
block_hash_index_test: table/block_hash_index_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
808
	$(AM_LINK)
K
kailiu 已提交
809

810
db_stress: tools/db_stress.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
811
	$(AM_LINK)
812

I
Igor Canadi 已提交
813 814 815
write_stress: tools/write_stress.o $(LIBOBJECTS) $(TESTUTIL)
	$(AM_LINK)

I
Igor Canadi 已提交
816
db_sanity_test: tools/db_sanity_test.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
817
	$(AM_LINK)
818

819
db_repl_stress: tools/db_repl_stress.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
820
	$(AM_LINK)
821

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

K
kailiu 已提交
825
autovector_test: util/autovector_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
826
	$(AM_LINK)
K
kailiu 已提交
827

828
column_family_test: db/column_family_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
829
	$(AM_LINK)
830

K
kailiu 已提交
831
table_properties_collector_test: db/table_properties_collector_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
832
	$(AM_LINK)
833

S
Sanjay Ghemawat 已提交
834
bloom_test: util/bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
835
	$(AM_LINK)
S
Sanjay Ghemawat 已提交
836

837
dynamic_bloom_test: util/dynamic_bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
838
	$(AM_LINK)
839

840
c_test: db/c_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
841
	$(AM_LINK)
842

J
jorlow@chromium.org 已提交
843
cache_test: util/cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
844
	$(AM_LINK)
J
jorlow@chromium.org 已提交
845 846

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

849
stringappend_test: utilities/merge_operators/string_append/stringappend_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
850
	$(AM_LINK)
851

852
redis_test: utilities/redis/redis_lists_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
853
	$(AM_LINK)
854

A
Abhishek Kona 已提交
855
histogram_test: util/histogram_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
856
	$(AM_LINK)
A
Abhishek Kona 已提交
857

L
Lei Jin 已提交
858
thread_local_test: util/thread_local_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
859
	$(AM_LINK)
L
Lei Jin 已提交
860

J
jorlow@chromium.org 已提交
861
corruption_test: db/corruption_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
862
	$(AM_LINK)
J
jorlow@chromium.org 已提交
863 864

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

867
slice_transform_test: util/slice_transform_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
868
	$(AM_LINK)
869

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

873 874 875
db_test2: db/db_test2.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

876 877 878
db_block_cache_test: db/db_block_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
879 880 881
db_bloom_filter_test: db/db_bloom_filter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

882
db_log_iter_test: db/db_log_iter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
883
	$(AM_LINK)
884

885
db_compaction_filter_test: db/db_compaction_filter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
886 887
	$(AM_LINK)

888
db_compaction_test: db/db_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
889 890
	$(AM_LINK)

891
db_dynamic_level_test: db/db_dynamic_level_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
892 893
	$(AM_LINK)

894
db_inplace_update_test: db/db_inplace_update_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
895 896
	$(AM_LINK)

Y
Yi Wu 已提交
897 898 899 900 901 902
db_iterator_test: db/db_iterator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

db_sst_test: db/db_sst_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

903
db_tailing_iter_test: db/db_tailing_iter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
904 905
	$(AM_LINK)

S
Stanislau Hlebik 已提交
906
db_iter_test: db/db_iter_test.o $(LIBOBJECTS) $(TESTHARNESS)
907
	$(AM_LINK)
S
Stanislau Hlebik 已提交
908

909
db_universal_compaction_test: db/db_universal_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
910 911
	$(AM_LINK)

912
db_wal_test: db/db_wal_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
S
sdong 已提交
913 914
	$(AM_LINK)

915 916 917
db_properties_test: db/db_properties_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

918 919 920
db_table_properties_test: db/db_table_properties_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

921
log_write_bench: util/log_write_bench.o $(LIBOBJECTS) $(TESTHARNESS)
D
dx9 已提交
922
	$(AM_LINK) $(PROFILING_FLAGS)
923

S
Siying Dong 已提交
924
plain_table_db_test: db/plain_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
925
	$(AM_LINK)
S
Siying Dong 已提交
926

927
comparator_db_test: db/comparator_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
928
	$(AM_LINK)
929

930
table_reader_bench: table/table_reader_bench.o $(LIBOBJECTS) $(TESTHARNESS)
D
dx9 已提交
931
	$(AM_LINK) $(PROFILING_FLAGS)
932

933
perf_context_test: db/perf_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
934
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)
935

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

I
Igor Canadi 已提交
939
backupable_db_test: utilities/backupable/backupable_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
940
	$(AM_LINK)
I
Igor Canadi 已提交
941

942 943 944
checkpoint_test: utilities/checkpoint/checkpoint_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
945
document_db_test: utilities/document/document_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
946
	$(AM_LINK)
I
Igor Canadi 已提交
947

I
Igor Canadi 已提交
948
json_document_test: utilities/document/json_document_test.o $(LIBOBJECTS) $(TESTHARNESS)
949
	$(AM_LINK)
I
Igor Canadi 已提交
950

I
Igor Canadi 已提交
951
spatial_db_test: utilities/spatialdb/spatial_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
952
	$(AM_LINK)
I
Igor Canadi 已提交
953

S
Sage Weil 已提交
954 955 956
env_mirror_test: utilities/env_mirror_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

957
ttl_test: utilities/ttl/ttl_test.o $(LIBOBJECTS) $(TESTHARNESS)
958
	$(AM_LINK)
959

960
write_batch_with_index_test: utilities/write_batch_with_index/write_batch_with_index_test.o $(LIBOBJECTS) $(TESTHARNESS)
961
	$(AM_LINK)
962

I
Igor Canadi 已提交
963
flush_job_test: db/flush_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
964
	$(AM_LINK)
A
Andres Noetzli 已提交
965 966 967

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

I
Igor Canadi 已提交
969
compaction_job_test: db/compaction_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
970
	$(AM_LINK)
I
Igor Canadi 已提交
971

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

975 976 977
compact_on_deletion_collector_test: utilities/table_properties_collectors/compact_on_deletion_collector_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
978
wal_manager_test: db/wal_manager_test.o $(LIBOBJECTS) $(TESTHARNESS)
979
	$(AM_LINK)
I
Igor Canadi 已提交
980

J
jorlow@chromium.org 已提交
981
dbformat_test: db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS)
982
	$(AM_LINK)
J
jorlow@chromium.org 已提交
983 984

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

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

L
Lei Jin 已提交
990
rate_limiter_test: util/rate_limiter_test.o $(LIBOBJECTS) $(TESTHARNESS)
991
	$(AM_LINK)
L
Lei Jin 已提交
992

I
Islam AbdelRahman 已提交
993 994 995
delete_scheduler_test: util/delete_scheduler_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
jorlow@chromium.org 已提交
996
filename_test: db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS)
997
	$(AM_LINK)
J
jorlow@chromium.org 已提交
998

999 1000 1001
file_reader_writer_test: util/file_reader_writer_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1002
block_based_filter_block_test: table/block_based_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1003
	$(AM_LINK)
1004 1005

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

J
jorlow@chromium.org 已提交
1008
log_test: db/log_test.o $(LIBOBJECTS) $(TESTHARNESS)
1009
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1010 1011

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

D
Dhruba Borthakur 已提交
1014
block_test: table/block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1015
	$(AM_LINK)
D
Dhruba Borthakur 已提交
1016

N
Nathan Bronson 已提交
1017 1018 1019
inlineskiplist_test: db/inlineskiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1020
skiplist_test: db/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
1021
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1022 1023

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

1026
version_set_test: db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS)
1027
	$(AM_LINK)
1028

S
sdong 已提交
1029
compaction_picker_test: db/compaction_picker_test.o $(LIBOBJECTS) $(TESTHARNESS)
1030
	$(AM_LINK)
S
sdong 已提交
1031

S
sdong 已提交
1032
version_builder_test: db/version_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
1033
	$(AM_LINK)
S
sdong 已提交
1034

1035
file_indexer_test: db/file_indexer_test.o $(LIBOBJECTS) $(TESTHARNESS)
1036
	$(AM_LINK)
1037

1038
reduce_levels_test: tools/reduce_levels_test.o $(LIBOBJECTS) $(TESTHARNESS)
1039
	$(AM_LINK)
1040

J
jorlow@chromium.org 已提交
1041
write_batch_test: db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS)
1042
	$(AM_LINK)
1043

1044
write_controller_test: db/write_controller_test.o $(LIBOBJECTS) $(TESTHARNESS)
1045
	$(AM_LINK)
1046

1047 1048 1049
merge_helper_test: db/merge_helper_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1050 1051 1052
memory_test: utilities/memory/memory_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
Jim Paton 已提交
1053
merge_test: db/merge_test.o $(LIBOBJECTS) $(TESTHARNESS)
1054
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1055

I
Igor Canadi 已提交
1056
merger_test: table/merger_test.o $(LIBOBJECTS) $(TESTHARNESS)
1057
	$(AM_LINK)
I
Igor Canadi 已提交
1058

1059 1060 1061
options_file_test: db/options_file_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1062
deletefile_test: db/deletefile_test.o $(LIBOBJECTS) $(TESTHARNESS)
1063
	$(AM_LINK)
1064

1065
geodb_test: utilities/geodb/geodb_test.o $(LIBOBJECTS) $(TESTHARNESS)
1066
	$(AM_LINK)
1067

1068 1069 1070 1071 1072 1073
rocksdb_dump: tools/dump/rocksdb_dump.o $(LIBOBJECTS)
	$(AM_LINK)

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

1074
cuckoo_table_builder_test: table/cuckoo_table_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
1075
	$(AM_LINK)
1076

I
Igor Canadi 已提交
1077
cuckoo_table_reader_test: table/cuckoo_table_reader_test.o $(LIBOBJECTS) $(TESTHARNESS)
1078
	$(AM_LINK)
1079

1080
cuckoo_table_db_test: db/cuckoo_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1081
	$(AM_LINK)
1082

1083
listener_test: db/listener_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1084
	$(AM_LINK)
1085

Y
Yueh-Hsuan Chiang 已提交
1086
thread_list_test: util/thread_list_test.o $(LIBOBJECTS) $(TESTHARNESS)
1087
	$(AM_LINK)
Y
Yueh-Hsuan Chiang 已提交
1088

1089 1090 1091
compact_files_test: db/compact_files_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1092
options_test: util/options_test.o $(LIBOBJECTS) $(TESTHARNESS)
1093 1094 1095
	$(AM_LINK)

options_settable_test: util/options_settable_test.o $(LIBOBJECTS) $(TESTHARNESS)
1096
	$(AM_LINK)
1097

1098 1099 1100
options_util_test: utilities/options/options_util_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1101 1102 1103
event_logger_test: util/event_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1104
sst_dump_test: tools/sst_dump_test.o $(LIBOBJECTS) $(TESTHARNESS)
1105
	$(AM_LINK)
1106

1107
memenv_test : util/memenv_test.o $(LIBOBJECTS) $(TESTHARNESS)
1108
	$(AM_LINK)
H
Hans Wennborg 已提交
1109

A
agiardullo 已提交
1110 1111 1112
optimistic_transaction_test: utilities/transactions/optimistic_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1113
mock_env_test : util/mock_env_test.o $(LIBOBJECTS) $(TESTHARNESS)
1114
	$(AM_LINK)
1115

1116
manual_compaction_test: db/manual_compaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
1117
	$(AM_LINK)
1118

1119
filelock_test: util/filelock_test.o $(LIBOBJECTS) $(TESTHARNESS)
1120
	$(AM_LINK)
K
Kai Liu 已提交
1121

1122
auto_roll_logger_test: db/auto_roll_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
1123
	$(AM_LINK)
1124

A
agiardullo 已提交
1125 1126 1127
memtable_list_test: db/memtable_list_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
agiardullo 已提交
1128 1129 1130
write_callback_test: db/write_callback_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1131 1132 1133
heap_test: util/heap_test.o $(GTEST)
	$(AM_LINK)

A
agiardullo 已提交
1134 1135 1136
transaction_test: utilities/transactions/transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1137
sst_dump: tools/sst_dump.o $(LIBOBJECTS)
1138
	$(AM_LINK)
1139

A
Andrew Kryczka 已提交
1140 1141 1142
repair_test: db/repair_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1143
ldb_cmd_test: tools/ldb_cmd_test.o $(LIBOBJECTS) $(TESTHARNESS)
1144 1145
	$(AM_LINK)

1146
ldb: tools/ldb.o $(LIBOBJECTS)
1147
	$(AM_LINK)
1148

1149 1150 1151
iostats_context_test: util/iostats_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)

I
Igor Canadi 已提交
1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183
#-------------------------------------------------
# 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 已提交
1184
	[ -e $(SHARED4) ] && $(MAKE) install-shared || :
I
Igor Canadi 已提交
1185 1186 1187 1188

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


1189 1190 1191 1192
# ---------------------------------------------------------------------------
# Jni stuff
# ---------------------------------------------------------------------------

1193
JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/linux
D
David Bernard 已提交
1194 1195 1196 1197 1198
ifeq ($(PLATFORM), OS_SOLARIS)
	ARCH := $(shell isainfo -b)
else
	ARCH := $(shell getconf LONG_BIT)
endif
1199
ROCKSDBJNILIB = librocksdbjni-linux$(ARCH).so
1200
ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-linux$(ARCH).jar
1201
ROCKSDB_JAR_ALL = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH).jar
C
Chris Riccomini 已提交
1202
ROCKSDB_JAVADOCS_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-javadoc.jar
1203
ROCKSDB_SOURCES_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-sources.jar
1204 1205

ifeq ($(PLATFORM), OS_MACOSX)
D
David Bernard 已提交
1206 1207
	ROCKSDBJNILIB = librocksdbjni-osx.jnilib
	ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-osx.jar
1208 1209 1210 1211 1212
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
1213
endif
D
David Bernard 已提交
1214 1215 1216 1217 1218
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
1219

N
Naveen 已提交
1220 1221
libz.a:
	-rm -rf zlib-1.2.8
N
Naveen 已提交
1222 1223 1224
	curl -O http://zlib.net/zlib-1.2.8.tar.gz
	tar xvzf zlib-1.2.8.tar.gz
	cd zlib-1.2.8 && CFLAGS='-fPIC' ./configure --static && make
1225
	cp zlib-1.2.8/libz.a .
N
Naveen 已提交
1226 1227 1228

libbz2.a:
	-rm -rf bzip2-1.0.6
1229
	curl -O  http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
N
Naveen 已提交
1230
	tar xvzf bzip2-1.0.6.tar.gz
1231
	cd bzip2-1.0.6 && make CFLAGS='-fPIC -O2 -g -D_FILE_OFFSET_BITS=64'
N
Naveen 已提交
1232 1233
	cp bzip2-1.0.6/libbz2.a .

N
Naveen 已提交
1234 1235
libsnappy.a:
	-rm -rf snappy-1.1.1
N
Naveen 已提交
1236 1237
	curl -O https://snappy.googlecode.com/files/snappy-1.1.1.tar.gz
	tar xvzf snappy-1.1.1.tar.gz
N
Naveen 已提交
1238
	cd snappy-1.1.1 && ./configure --with-pic --enable-static
N
Naveen 已提交
1239 1240
	cd snappy-1.1.1 && make
	cp snappy-1.1.1/.libs/libsnappy.a .
1241

1242 1243 1244 1245 1246 1247 1248
liblz4.a:
	   -rm -rf lz4-r127
	   curl -O https://codeload.github.com/Cyan4973/lz4/tar.gz/r127
	   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 已提交
1249

1250 1251 1252
# 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
1253

1254 1255 1256 1257 1258
JAVA_STATIC_FLAGS = -DZLIB -DBZIP2 -DSNAPPY -DLZ4
JAVA_STATIC_INCLUDES = -I./zlib-1.2.8 -I./bzip2-1.0.6 -I./snappy-1.1.1 -I./lz4-r127/lib

$(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)
1259

1260
rocksdbjavastatic: $(java_static_libobjects)
F
fyrz 已提交
1261
	cd java;$(MAKE) javalib;
1262
	rm -f ./java/target/$(ROCKSDBJNILIB)
1263 1264
	$(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC \
	  -o ./java/target/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) \
1265
	  $(java_static_libobjects) $(COVERAGEFLAGS) \
1266
	  libz.a libbz2.a libsnappy.a liblz4.a $(JAVA_STATIC_LDFLAGS)
1267 1268 1269 1270 1271 1272
	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 已提交
1273

1274
rocksdbjavastaticrelease: rocksdbjavastatic
1275
	cd java/crossbuild && vagrant destroy -f && vagrant up linux32 && vagrant halt linux32 && vagrant up linux64 && vagrant halt linux64
1276
	cd java;jar -cf target/$(ROCKSDB_JAR_ALL) HISTORY*.md
1277
	cd java/target;jar -uf $(ROCKSDB_JAR_ALL) librocksdbjni-*.so librocksdbjni-*.jnilib
1278
	cd java/target/classes;jar -uf ../$(ROCKSDB_JAR_ALL) org/rocksdb/*.class org/rocksdb/util/*.class
1279

1280
rocksdbjavastaticpublish: rocksdbjavastaticrelease
1281 1282 1283 1284 1285 1286
	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
	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
1287

1288 1289 1290 1291 1292 1293 1294
# 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)

1295
rocksdbjava: $(java_libobjects)
1296 1297 1298 1299 1300 1301
	$(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
1302 1303 1304 1305

jclean:
	cd java;$(MAKE) clean;

1306
jtest: rocksdbjava
1307
	cd java;$(MAKE) sample;$(MAKE) test;
1308

1309 1310 1311
jdb_bench:
	cd java;$(MAKE) db_bench;

1312 1313
commit_prereq: build_tools/rocksdb-lego-determinator \
               build_tools/precommit_checker.py
1314
	J=$(J) build_tools/precommit_checker.py unit unit_481 clang_unit tsan asan ubsan lite
1315
	$(MAKE) clean && $(MAKE) jclean && $(MAKE) rocksdbjava;
1316

V
Venkatesh Radhakrishnan 已提交
1317 1318 1319 1320 1321 1322 1323
xfunc:
	for xftest in $(XFUNC_TESTS); do \
		echo "===== Running xftest $$xftest"; \
		make check ROCKSDB_XFUNC_TEST="$$xftest" tests-regexp="DBTest" ;\
	done


1324 1325 1326
# ---------------------------------------------------------------------------
#  	Platform-specific compilation
# ---------------------------------------------------------------------------
J
Jim Paton 已提交
1327

1328 1329 1330
ifeq ($(PLATFORM), IOS)
# For iOS, create universal object files to be used on both the simulator and
# a device.
H
heyongqiang 已提交
1331 1332 1333
PLATFORMSROOT=/Applications/Xcode.app/Contents/Developer/Platforms
SIMULATORROOT=$(PLATFORMSROOT)/iPhoneSimulator.platform/Developer
DEVICEROOT=$(PLATFORMSROOT)/iPhoneOS.platform/Developer
I
Igor Canadi 已提交
1334
IOSVERSION=$(shell defaults read $(PLATFORMSROOT)/iPhoneOS.platform/version CFBundleShortVersionString)
1335

1336 1337
.cc.o:
	mkdir -p ios-x86/$(dir $@)
I
Igor Canadi 已提交
1338
	$(CXX) $(CXXFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@
1339
	mkdir -p ios-arm/$(dir $@)
I
Igor Canadi 已提交
1340
	xcrun -sdk iphoneos $(CXX) $(CXXFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -arch armv7s -arch arm64 -c $< -o ios-arm/$@
1341
	lipo ios-x86/$@ ios-arm/$@ -create -output $@
1342 1343 1344

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

1350
else
J
jorlow@chromium.org 已提交
1351
.cc.o:
1352
	$(AM_V_CC)$(CXX) $(CXXFLAGS) -c $< -o $@ $(COVERAGEFLAGS)
1353 1354

.c.o:
1355
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
1356
endif
1357

1358 1359 1360 1361
# ---------------------------------------------------------------------------
#  	Source files dependencies detection
# ---------------------------------------------------------------------------

1362 1363 1364
all_sources = $(LIB_SOURCES) $(TEST_BENCH_SOURCES) $(MOCK_SOURCES)
DEPFILES = $(all_sources:.cc=.d)

1365 1366 1367 1368 1369
# 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.
1370
$(DEPFILES): %.d: %.cc
1371
	@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
1372
	  -MM -MT'$@' -MT'$(<:.cc=.o)' "$<" -o '$@'
1373 1374 1375

depend: $(DEPFILES)

1376 1377 1378 1379
# 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.
1380
ifneq ($(MAKECMDGOALS),clean)
1381
ifneq ($(MAKECMDGOALS),format)
1382 1383
ifneq ($(MAKECMDGOALS),jclean)
ifneq ($(MAKECMDGOALS),jtest)
1384
ifneq ($(MAKECMDGOALS),package)
1385
ifneq ($(MAKECMDGOALS),analyze)
1386 1387
-include $(DEPFILES)
endif
1388
endif
1389 1390
endif
endif
1391
endif
1392
endif