Makefile 75.8 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
USE_RTTI = 1

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

L
leipeng 已提交
13
COMPRESSION_CXXFLAGS ?= -DSNAPPY=1 -DZLIB=1 -DLZ4=1 -DLZ4_DISABLE_DEPRECATE_WARNINGS -DZSTD=1 -Isnappy-1.1.4 -Ilz4-1.8.0/lib -Izstd-1.3.3/lib/include -Izlib-1.2.11
L
leipeng 已提交
14
COMPRESSION_LDFLAGS  ?= -L. -lsnappy -lz -llz4
15

16
CLEAN_FILES = # deliberately empty, so we can append below.
17
CFLAGS += ${EXTRA_CFLAGS}
L
leipeng 已提交
18 19
CXXFLAGS += ${EXTRA_CXXFLAGS} ${COMPRESSION_CXXFLAGS}
LDFLAGS += $(EXTRA_LDFLAGS) ${COMPRESSION_LDFLAGS}
20
MACHINE ?= $(shell uname -m)
T
Tomas Kolda 已提交
21 22
ARFLAGS = ${EXTRA_ARFLAGS} rs
STRIPFLAGS = -S -x
23

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

35 36 37 38 39 40 41 42 43
# 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 已提交
44
# with debug level 0. To compile with level 0, run `make shared_lib`,
45 46
# `make install-shared`, `make static_lib`, `make install-static` or
# `make install`
47 48 49

# Set the default DEBUG_LEVEL to 1
DEBUG_LEVEL?=1
50 51

ifeq ($(MAKECMDGOALS),dbg)
Y
Yueh-Hsuan Chiang 已提交
52
	DEBUG_LEVEL=2
53
endif
54

55 56 57 58 59 60 61 62
ifeq ($(MAKECMDGOALS),clean)
	DEBUG_LEVEL=0
endif

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

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

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

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

I
Igor Canadi 已提交
75
ifeq ($(MAKECMDGOALS),install-static)
Y
Yueh-Hsuan Chiang 已提交
76
	DEBUG_LEVEL=0
I
Igor Canadi 已提交
77 78 79
endif

ifeq ($(MAKECMDGOALS),install)
Y
Yueh-Hsuan Chiang 已提交
80
	DEBUG_LEVEL=0
81 82
endif

83
ifeq ($(MAKECMDGOALS),rocksdbjavastatic)
84 85 86
	ifneq ($(DEBUG_LEVEL),2)
		DEBUG_LEVEL=0
	endif
87 88
endif

Y
Yueh-Hsuan Chiang 已提交
89 90 91 92
ifeq ($(MAKECMDGOALS),rocksdbjavastaticrelease)
	DEBUG_LEVEL=0
endif

93 94 95 96
ifeq ($(MAKECMDGOALS),rocksdbjavastaticreleasedocker)
        DEBUG_LEVEL=0
endif

Y
Yueh-Hsuan Chiang 已提交
97 98 99 100
ifeq ($(MAKECMDGOALS),rocksdbjavastaticpublish)
	DEBUG_LEVEL=0
endif

雷鹏 已提交
101 102
###############################################################################
## Terark specific
L
leipeng 已提交
103

104
ifeq (${DEBUG_LEVEL},0)
奏之章 已提交
105
  DBG_OR_RLS=r
106 107 108 109 110
endif
ifeq (${DEBUG_LEVEL},1)
  DBG_OR_RLS=a
endif
ifeq (${DEBUG_LEVEL},2)
奏之章 已提交
111 112 113
  DBG_OR_RLS=d
endif

雷鹏 已提交
114
BMI2 ?= $(shell bash cpu_has_bmi2.sh)
雷鹏 已提交
115 116 117 118
BUILD_NAME := $(shell bash get_terark_build_name.sh ${CXX} ${BMI2})
BUILD_ROOT := build/${BUILD_NAME}
xdir:=${BUILD_ROOT}/dbg-${DEBUG_LEVEL}

L
leipeng 已提交
119 120 121 122 123
ifdef TERARK_CORE_BRANCH
  TERARK_CORE_HOME := terark-core
else
  TERARK_CORE_HOME ?= ../terark-core
endif
124 125
TERARK_CORE_PKG_DIR := ${TERARK_CORE_HOME}/output

L
leipeng 已提交
126
CXXFLAGS += -march=haswell
127
CXXFLAGS += -I${TERARK_CORE_HOME}/src -I${TERARK_CORE_HOME}/boost-include -I${TERARK_CORE_HOME}/output/include
L
leipeng 已提交
128 129

# BUNDLE_TERARK_ZIP_ROCKSDB can use precompiled terark-core
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
# ifdef BUNDLE_TERARK_ZIP_ROCKSDB
#   CXXFLAGS += -Iterark-zip-rocksdb/src

# # do not use wildcard, to kill dependency to terark-zip-rocksdb.got
#   TERARK_ZIP_SRC := \
#       terark-zip-rocksdb/src/table/terark_zip_common.cc         \
#       terark-zip-rocksdb/src/table/terark_zip_config.cc         \
#       terark-zip-rocksdb/src/table/terark_zip_entry_index.cc    \
#       terark-zip-rocksdb/src/table/terark_zip_index.cc          \
#       terark-zip-rocksdb/src/table/terark_zip_memtable.cc       \
#       terark-zip-rocksdb/src/table/terark_zip_table.cc          \
#       terark-zip-rocksdb/src/table/terark_zip_table_builder.cc  \
#       terark-zip-rocksdb/src/table/terark_zip_table_reader.cc   \
#       terark-zip-rocksdb/${BUILD_ROOT}/git-version-terark_zip_rocksdb.cc

#   TERARK_ZIP_OBJ := $(addprefix ${xdir}/,${TERARK_ZIP_SRC:.cc=.o}) \
#      $(addprefix shared-objects/${xdir}/,${TERARK_ZIP_SRC:.cc=.o})

#   SRC_NEEDS_TERARK_ZIP := ${TERARK_ZIP_SRC}               \
#                           db/compacted_db_impl.cc         \
#                           db/db_impl.cc                   \
#                           db/db_impl_compaction_flush.cc  \
#                           db/db_impl_debug.cc             \
#                           db/db_impl_experimental.cc      \
#                           db/db_impl_files.cc             \
#                           db/db_impl_open.cc              \
#                           db/db_impl_readonly.cc          \
#                           db/db_impl_write.cc             \
#                           tools/sst_dump_tool.cc

#   SRC_NEEDS_BOOST := util/thread_local.cc \
#                      ${TERARK_ZIP_SRC}
L
leipeng 已提交
162

L
leipeng 已提交
163
#------------------------------------------------------------------------------
L
leipeng 已提交
164
ifeq (${TERARK_CORE_HOME},terark-core)
L
leipeng 已提交
165 166
terark-core.got:
	rm -rf terark-core
167
	git clone git@code.byted.org:storage/terark-core.git
168
	cd terark-core && git submodule update --init
L
leipeng 已提交
169
ifdef TERARK_CORE_BRANCH
170 171
	cd terark-core && git checkout ${TERARK_CORE_BRANCH}
endif
L
leipeng 已提交
172
	+$(MAKE) -C terark-core pkg PKG_WITH_DBG=1 PKG_WITH_STATIC=1 WITH_BMI2=${BMI2}
L
leipeng 已提交
173
	touch $@
L
leipeng 已提交
174
${SRC_NEEDS_BOOST} ${SRC_NEEDS_BOOST:.o=.cc.d}: terark-core.got
175
# ${TERARK_ZIP_OBJ} ${TERARK_ZIP_OBJ:.o=.cc.d}: terark-core.got
L
leipeng 已提交
176 177
endif

178
# ${TERARK_ZIP_OBJ} ${TERARK_ZIP_OBJ:.o=.cc.d}: CXXFLAGS += -Wno-unused-parameter -I${TERARK_CORE_HOME}/3rdparty/zstd{,/zstd}
L
leipeng 已提交
179

180 181 182 183 184 185 186
# terark-zip-rocksdb.got:
# 	rm -rf terark-zip-rocksdb
# 	git clone git@code.byted.org:storage/terark-zip-rocksdb.git
# ifdef TERARK_ZIP_ROCKSDB_BRANCH
# 	cd terark-zip-rocksdb && git checkout ${TERARK_ZIP_ROCKSDB_BRANCH}
# endif
# 	touch $@
L
leipeng 已提交
187

188 189 190 191 192
# terark-zip-rocksdb/${BUILD_ROOT}/git-version-terark_zip_rocksdb.cc: terark-zip-rocksdb.got
# 	make -C terark-zip-rocksdb  ${BUILD_ROOT}/git-version-terark_zip_rocksdb.cpp SKIP_DEP_GEN=1
# 	mv ${@:.cc=.cpp} $@

# ${SRC_NEEDS_TERARK_ZIP} : terark-zip-rocksdb.got
L
leipeng 已提交
193

L
leipeng 已提交
194 195
#------------------------------------------------------------------------------

雷鹏 已提交
196
# just use terark-core libs, set TERARK_ZIP_PKG_DIR as core
197 198 199 200 201 202 203 204 205 206 207 208
#   TERARK_ZIP_PKG_DIR = ${TERARK_CORE_PKG_DIR}
#   LIB_TERARK_ZIP_STATIC =
#   LIB_TERARK_ZIP_SHARED = -L${TERARK_CORE_PKG_DIR}/lib
#   export LD_LIBRARY_PATH:=${TERARK_CORE_PKG_DIR}/lib:${LD_LIBRARY_PATH}
# else # not BUNDLE_TERARK_ZIP_ROCKSDB, ${TERARK_CORE_HOME} must be compiled
#   # TERARK_ZIP_PKG_DIR is precomipled terark-zip-rocksdb pkg
#   TERARK_ZIP_PKG_DIR ?= ../terark-zip-rocksdb/pkg/terark-zip-rocksdb-${BUILD_NAME}
#   LIB_TERARK_ZIP_STATIC =   ${TERARK_ZIP_PKG_DIR}/lib_static/libterark-zip-rocksdb-${DBG_OR_RLS}.a
#   LIB_TERARK_ZIP_SHARED = -L${TERARK_ZIP_PKG_DIR}/lib         -lterark-zip-rocksdb-${DBG_OR_RLS}
#   CXXFLAGS += -I${TERARK_ZIP_PKG_DIR}/include
#   export LD_LIBRARY_PATH:=${TERARK_ZIP_PKG_DIR}/lib:${LD_LIBRARY_PATH}
# endif # BUNDLE_TERARK_ZIP_ROCKSDB
L
leipeng 已提交
209 210

LINK_TERARK ?= static
雷鹏 已提交
211

L
leipeng 已提交
212 213 214 215
ifeq ($(shell uname),Darwin)
  LIB_GOMP :=
else
  LIB_GOMP := -lgomp
雷鹏 已提交
216 217 218
endif

ifeq ($(LINK_TERARK),shared)
219 220
  export LD_LIBRARY_PATH:=${TERARK_CORE_PKG_DIR}/lib:${LD_LIBRARY_PATH}
  TerarkLDFLAGS += 	-lterark-idx-${DBG_OR_RLS} \
奏之章 已提交
221 222
                    -lterark-zbs-${DBG_OR_RLS} \
                    -lterark-fsa-${DBG_OR_RLS} \
L
leipeng 已提交
223
                    -lterark-core-${DBG_OR_RLS} -ldl ${LIB_GOMP}
奏之章 已提交
224
endif
雷鹏 已提交
225
ifeq ($(LINK_TERARK),static)
226 227 228 229 230
  override LINK_STATIC_TERARK := -L${TERARK_CORE_PKG_DIR}/lib_static \
    ${TERARK_CORE_PKG_DIR}/lib_static/libterark-idx-${DBG_OR_RLS}.a \
    ${TERARK_CORE_PKG_DIR}/lib_static/libterark-zbs-${DBG_OR_RLS}.a \
    ${TERARK_CORE_PKG_DIR}/lib_static/libterark-fsa-${DBG_OR_RLS}.a \
    ${TERARK_CORE_PKG_DIR}/lib_static/libterark-core-${DBG_OR_RLS}.a
L
leipeng 已提交
231
  ifeq ($(shell uname),Darwin)
L
leipeng 已提交
232 233 234 235 236
    override LINK_STATIC_TERARK := \
      -Wl,-all_load ${LINK_STATIC_TERARK} -Wl,-noall_load
  else
    override LINK_STATIC_TERARK := \
      -Wl,--whole-archive ${LINK_STATIC_TERARK} -Wl,--no-whole-archive
L
leipeng 已提交
237
  endif
L
leipeng 已提交
238
  override LINK_STATIC_TERARK += ${LIB_GOMP}
L
leipeng 已提交
239

240 241 242 243 244
#   ifdef BUNDLE_TERARK_ZIP_ROCKSDB
#     ifneq ($(shell uname),Darwin)
#       BUNDLE_ALL_TERARK_STATIC = 1
#     endif
#   endif
奏之章 已提交
245
endif
L
leipeng 已提交
246

雷鹏 已提交
247
###############################################################################
奏之章 已提交
248

Y
Yi Wu 已提交
249 250
# Lite build flag.
LITE ?= 0
251 252 253 254 255 256 257 258
ifeq ($(LITE), 0)
ifneq ($(filter -DROCKSDB_LITE,$(OPT)),)
  # Be backward compatible and support older format where OPT=-DROCKSDB_LITE is
  # specified instead of LITE=1 on the command line.
  LITE=1
endif
else ifeq ($(LITE), 1)
ifeq ($(filter -DROCKSDB_LITE,$(OPT)),)
Y
Yi Wu 已提交
259 260
	OPT += -DROCKSDB_LITE
endif
261
endif
Y
Yi Wu 已提交
262 263 264 265 266 267 268 269 270 271

# Figure out optimize level.
ifneq ($(DEBUG_LEVEL), 2)
ifeq ($(LITE), 0)
	OPT += -O2
else
	OPT += -Os
endif
endif

272 273
# compile with -O2 if debug level is not 2
ifneq ($(DEBUG_LEVEL), 2)
Y
Yi Wu 已提交
274
OPT += -fno-omit-frame-pointer
275 276
# 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))
277 278 279 280
OPT += -momit-leaf-frame-pointer
endif
endif

281 282 283 284 285 286 287 288 289 290 291 292
ifeq (,$(shell $(CXX) -fsyntax-only -maltivec -xc /dev/null 2>&1))
CXXFLAGS += -DHAS_ALTIVEC
CFLAGS += -DHAS_ALTIVEC
HAS_ALTIVEC=1
endif

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

293
# if we're compiling for release, compile without debug code (-DNDEBUG)
294
ifeq ($(DEBUG_LEVEL),0)
L
leipeng 已提交
295
OPT += -DNDEBUG -DBOOST_DISABLE_ASSERTS
S
Siying Dong 已提交
296 297 298 299 300 301

ifneq ($(USE_RTTI), 0)
	CXXFLAGS += -DROCKSDB_USE_RTTI
else
	CXXFLAGS += -fno-rtti
endif
雷鹏 已提交
302
else
303
$(warning Warning: Compiling in debug mode. Don't use the resulting binary in production)
I
Igor Canadi 已提交
304 305
endif

306
#-----------------------------------------------
307
include src.mk
308

奏之章 已提交
309
AM_DEFAULT_VERBOSITY = 1
310 311 312 313 314

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 已提交
315 316 317 318
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
am__v_at_0 = @
am__v_at_1 =
319 320 321 322 323 324 325 326 327 328 329

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 已提交
330 331 332 333
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 =
334

335 336 337 338
ifdef ROCKSDB_USE_LIBRADOS
LIB_SOURCES += utilities/env_librados.cc
LDFLAGS += -lrados
endif
339

雷鹏 已提交
340 341
LIB_SOURCES += ${TERARK_ZIP_SRC}

奏之章 已提交
342
AM_LINK = $(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ ${TerarkLDFLAGS} $(LDFLAGS) $(COVERAGEFLAGS)
343
# detect what platform we're building on
奏之章 已提交
344 345 346 347
dummy := $(shell (export ROCKSDB_ROOT="$(CURDIR)"; export PORTABLE="$(PORTABLE)"; "$(CURDIR)/build_tools/build_detect_platform" "$(CURDIR)/make_config.mk"; echo $$?))
ifneq ("${dummy}","0")
  $(error "$(CURDIR)/build_tools/build_detect_platform failed")
endif
S
Sanjay Ghemawat 已提交
348
# this file is generated by the previous line to set build flags and sources
I
Igor Canadi 已提交
349
include make_config.mk
350
CLEAN_FILES += make_config.mk
J
jorlow@chromium.org 已提交
351

352 353 354 355 356 357 358 359 360
missing_make_config_paths := $(shell				\
	grep "\/\S*" -o $(CURDIR)/make_config.mk | 		\
	while read path;					\
		do [ -e $$path ] || echo $$path; 		\
	done | sort | uniq)

$(foreach path, $(missing_make_config_paths), \
	$(warning Warning: $(path) dont exist))

T
Tomas Kolda 已提交
361 362 363
ifeq ($(PLATFORM), OS_AIX)
# no debug info
else ifneq ($(PLATFORM), IOS)
I
Igor Canadi 已提交
364 365 366 367
CFLAGS += -g
CXXFLAGS += -g
else
# no debug info for IOS, that will make our library big
L
leipeng 已提交
368
OPT += -DNDEBUG -DBOOST_DISABLE_ASSERTS
I
Igor Canadi 已提交
369 370
endif

T
Tomas Kolda 已提交
371 372 373 374 375
ifeq ($(PLATFORM), OS_AIX)
ARFLAGS = -X64 rs
STRIPFLAGS = -X64 -x
endif

D
David Bernard 已提交
376 377 378
ifeq ($(PLATFORM), OS_SOLARIS)
	PLATFORM_CXXFLAGS += -D _GLIBCXX_USE_C99
endif
379
ifneq ($(filter -DROCKSDB_LITE,$(OPT)),)
Y
Yueh-Hsuan Chiang 已提交
380 381 382
	# found
	CFLAGS += -fno-exceptions
	CXXFLAGS += -fno-exceptions
383 384
	# LUA is not supported under ROCKSDB_LITE
	LUA_PATH =
385 386
endif

I
Igor Canadi 已提交
387 388
# 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 已提交
389 390 391 392
	DISABLE_JEMALLOC=1
	EXEC_LDFLAGS += -fsanitize=address
	PLATFORM_CCFLAGS += -fsanitize=address
	PLATFORM_CXXFLAGS += -fsanitize=address
I
Igor Canadi 已提交
393 394 395 396
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 已提交
397
	DISABLE_JEMALLOC=1
S
Siying Dong 已提交
398
	EXEC_LDFLAGS += -fsanitize=thread
399 400
	PLATFORM_CCFLAGS += -fsanitize=thread -fPIC
	PLATFORM_CXXFLAGS += -fsanitize=thread -fPIC
401 402
        # Turn off -pg when enabling TSAN testing, because that induces
        # a link failure.  TODO: find the root cause
D
dx9 已提交
403
	PROFILING_FLAGS =
404 405
	# LUA is not supported under TSAN
	LUA_PATH =
406 407 408
	# Limit keys for crash test under TSAN to avoid error:
	# "ThreadSanitizer: DenseSlabAllocator overflow. Dying."
	CRASH_TEST_EXT_ARGS += --max_key=1000000
I
Igor Canadi 已提交
409 410
endif

T
Tomas Kolda 已提交
411 412 413 414 415
# AIX doesn't work with -pg
ifeq ($(PLATFORM), OS_AIX)
	PROFILING_FLAGS =
endif

416 417 418
# USAN doesn't work well with jemalloc. If we're compiling with USAN, we should use regular malloc.
ifdef COMPILE_WITH_UBSAN
	DISABLE_JEMALLOC=1
S
Siying Dong 已提交
419 420 421 422
	# Suppress alignment warning because murmurhash relies on casting unaligned
	# memory to integer. Fixing it may cause performance regression. 3-way crc32
	# relies on it too, although it can be rewritten to eliminate with minimal
	# performance regression.
423 424 425
	EXEC_LDFLAGS += -fsanitize=undefined -fno-sanitize-recover=all
	PLATFORM_CCFLAGS += -fsanitize=undefined -fno-sanitize-recover=all -DROCKSDB_UBSAN_RUN
	PLATFORM_CXXFLAGS += -fsanitize=undefined -fno-sanitize-recover=all -DROCKSDB_UBSAN_RUN
426 427
endif

428 429 430 431 432
ifdef ROCKSDB_VALGRIND_RUN
	PLATFORM_CCFLAGS += -DROCKSDB_VALGRIND_RUN
	PLATFORM_CXXFLAGS += -DROCKSDB_VALGRIND_RUN
endif

I
Igor Canadi 已提交
433
ifndef DISABLE_JEMALLOC
434
	ifdef JEMALLOC
T
Tamir Duberstein 已提交
435 436
		PLATFORM_CXXFLAGS += -DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE
		PLATFORM_CCFLAGS  += -DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE
437
	endif
438 439 440 441
	ifdef WITH_JEMALLOC_FLAG
		PLATFORM_LDFLAGS += -ljemalloc
		JAVA_LDFLAGS += -ljemalloc
	endif
Y
Yueh-Hsuan Chiang 已提交
442 443 444
	EXEC_LDFLAGS := $(JEMALLOC_LIB) $(EXEC_LDFLAGS)
	PLATFORM_CXXFLAGS += $(JEMALLOC_INCLUDE)
	PLATFORM_CCFLAGS += $(JEMALLOC_INCLUDE)
I
Igor Canadi 已提交
445 446
endif

T
Tamir Duberstein 已提交
447 448
export GTEST_THROW_ON_FAILURE=1
export GTEST_HAS_EXCEPTIONS=1
I
Igor Sugak 已提交
449
GTEST_DIR = ./third-party/gtest-1.7.0/fused-src
T
Tomas Kolda 已提交
450 451 452 453 454 455 456 457
# AIX: pre-defined system headers are surrounded by an extern "C" block
ifeq ($(PLATFORM), OS_AIX)
	PLATFORM_CCFLAGS += -I$(GTEST_DIR)
	PLATFORM_CXXFLAGS += -I$(GTEST_DIR)
else
	PLATFORM_CCFLAGS += -isystem $(GTEST_DIR)
	PLATFORM_CXXFLAGS += -isystem $(GTEST_DIR)
endif
I
Igor Sugak 已提交
458

459 460 461
# This (the first rule) must depend on "all".
default: all

462
WARNING_FLAGS = -W -Wextra -Wall -Wsign-compare \
463
  -Wunused-parameter
464

465 466 467 468
ifdef Wshadow_local
    WARNING_FLAGS += -Wshadow=local
endif

469 470 471 472
ifeq ($(PLATFORM), OS_OPENBSD)
	WARNING_FLAGS += -Wno-unused-lambda-capture
endif

473
ifndef DISABLE_WARNING_AS_ERROR
Y
Yueh-Hsuan Chiang 已提交
474
	WARNING_FLAGS += -Werror
475 476
endif

477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499

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
500
EXEC_LDFLAGS += $(LUA_LIB)
501 502 503

endif

504 505 506
ifeq ($(NO_THREEWAY_CRC32C), 1)
	CXXFLAGS += -DNO_THREEWAY_CRC32C
endif
507

I
Igor Canadi 已提交
508
CFLAGS += $(WARNING_FLAGS) -I. -I./include $(PLATFORM_CCFLAGS) $(OPT)
雷鹏 已提交
509
CXXFLAGS += $(WARNING_FLAGS) -I. -I./include $(PLATFORM_CXXFLAGS) $(OPT) -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers
510

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

513 514 515
# If NO_UPDATE_BUILD_VERSION is set we don't update util/build_version.cc, but
# the file needs to already exist or else the build will fail
ifndef NO_UPDATE_BUILD_VERSION
516
date := $(shell date +%F)
I
Igor Canadi 已提交
517
ifdef FORCE_GIT_SHA
Y
Yueh-Hsuan Chiang 已提交
518
	git_sha := $(FORCE_GIT_SHA)
I
Igor Canadi 已提交
519
else
Y
Yueh-Hsuan Chiang 已提交
520
	git_sha := $(shell git rev-parse HEAD 2>/dev/null)
I
Igor Canadi 已提交
521
endif
522
gen_build_version = sed -e s/@@GIT_SHA@@/$(git_sha)/ -e s/@@GIT_DATE_TIME@@/$(date)/ util/build_version.cc.in
523 524 525 526 527 528

# 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.
529 530
FORCE:
util/build_version.cc: FORCE
Y
Yueh-Hsuan Chiang 已提交
531 532 533 534 535
	$(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
536
endif
537

雷鹏 已提交
538 539
LIBOBJECTS = $(addprefix ${xdir}/, $(LIB_SOURCES:.cc=.o))
LIB_CC_OBJECTS = $(LIBOBJECTS)
L
leipeng 已提交
540

541
ifeq ($(HAVE_POWER8),1)
雷鹏 已提交
542 543
LIBOBJECTS += $(addprefix ${xdir}/, $(LIB_SOURCES_C:.c=.o))
LIBOBJECTS += $(addprefix ${xdir}/, $(LIB_SOURCES_ASM:.S=.o))
544 545
endif

雷鹏 已提交
546 547
LIBOBJECTS += $(addprefix ${xdir}/, $(TOOL_LIB_SOURCES:.cc=.o))
MOCKOBJECTS = $(addprefix ${xdir}/, $(MOCK_LIB_SOURCES:.cc=.o))
J
jorlow@chromium.org 已提交
548

雷鹏 已提交
549 550 551
GTEST = ${xdir}/$(GTEST_DIR)/gtest/gtest-all.o
TESTUTIL = ${xdir}/util/testutil.o
TESTHARNESS = ${xdir}/util/testharness.o $(TESTUTIL) $(MOCKOBJECTS) $(GTEST)
552
VALGRIND_ERROR = 2
553
VALGRIND_VER := $(join $(VALGRIND_VER),valgrind)
554

555
VALGRIND_OPTS = --error-exitcode=$(VALGRIND_ERROR) --leak-check=full
556

雷鹏 已提交
557
BENCHTOOLOBJECTS = $(addprefix ${xdir}/, $(BENCH_LIB_SOURCES:.cc=.o) $(LIBNAME).so) $(TESTUTIL)
558

雷鹏 已提交
559
EXPOBJECTS = $(addprefix ${xdir}/, $(EXP_LIB_SOURCES:.cc=.o)) $(LIBOBJECTS) $(TESTUTIL)
O
omegaga 已提交
560

J
jorlow@chromium.org 已提交
561
TESTS = \
562
	db_basic_test \
E
Ewout Prangsma 已提交
563
	db_encryption_test \
564
	db_test2 \
S
Siying Dong 已提交
565
	external_sst_file_basic_test \
S
Siying Dong 已提交
566 567 568 569 570 571 572 573 574 575
	auto_roll_logger_test \
	bloom_test \
	dynamic_bloom_test \
	c_test \
	checkpoint_test \
	crc32c_test \
	coding_test \
	inlineskiplist_test \
	env_basic_test \
	env_test \
576
	hash_test \
S
Siying Dong 已提交
577 578 579 580 581
	thread_local_test \
	rate_limiter_test \
	perf_context_test \
	iostats_context_test \
	db_wal_test \
582
	db_block_cache_test \
583
	db_test \
Y
Yi Wu 已提交
584
	db_bloom_filter_test \
585
	db_iter_test \
586
	db_iter_stress_test \
587 588
	db_log_iter_test \
	db_compaction_filter_test \
589
	db_compaction_test \
590
	db_dynamic_level_test \
591
	db_flush_test \
592
	db_inplace_update_test \
Y
Yi Wu 已提交
593
	db_iterator_test \
594
	db_memtable_test \
595
	db_merge_operator_test \
596
	db_options_test \
597
	db_range_del_test \
Y
Yi Wu 已提交
598
	db_sst_test \
599
	db_tailing_iter_test \
O
omegaga 已提交
600
	db_io_failure_test \
601
	db_properties_test \
602
	db_table_properties_test \
603
	db_statistics_test \
Y
Yi Wu 已提交
604
	db_write_test \
605
	error_handler_test \
606
	autovector_test \
M
Maysam Yabandeh 已提交
607
	cleanable_test \
608 609 610 611
	column_family_test \
	table_properties_collector_test \
	arena_test \
	block_test \
612
	data_block_hash_index_test \
613 614 615 616 617 618 619
	cache_test \
	corruption_test \
	slice_transform_test \
	dbformat_test \
	fault_injection_test \
	filelock_test \
	filename_test \
620
	file_reader_writer_test \
621 622
	block_based_filter_block_test \
	full_filter_block_test \
M
Maysam Yabandeh 已提交
623
	partitioned_filter_block_test \
624
	hash_table_test \
625 626 627 628 629 630
	histogram_test \
	log_test \
	manual_compaction_test \
	mock_env_test \
	memtable_list_test \
	merge_helper_test \
631
	memory_test \
632 633
	merge_test \
	merger_test \
634
	util_merge_operators_test \
635
	options_file_test \
636 637 638 639
	redis_test \
	reduce_levels_test \
	plain_table_db_test \
	comparator_db_test \
640
	external_sst_file_test \
641 642
	prefix_test \
	skiplist_test \
643
	write_buffer_manager_test \
644
	stringappend_test \
645
	cassandra_format_test \
646
	cassandra_functional_test \
647 648
	cassandra_row_merge_test \
	cassandra_serialize_test \
649
	ttl_test \
O
omegaga 已提交
650
	date_tiered_test \
651 652 653
	backupable_db_test \
	document_db_test \
	json_document_test \
654
	sim_cache_test \
655 656 657 658 659 660 661 662 663 664
	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 \
665
	obsolete_files_test \
666 667
	table_test \
	geodb_test \
I
Islam AbdelRahman 已提交
668
	delete_scheduler_test \
669
	options_test \
670
	options_settable_test \
671
	options_util_test \
672
	event_logger_test \
A
Anirban Rahut 已提交
673
	timer_queue_test \
674 675 676 677 678 679
	cuckoo_table_builder_test \
	cuckoo_table_reader_test \
	cuckoo_table_db_test \
	flush_job_test \
	wal_manager_test \
	listener_test \
A
Andres Noetzli 已提交
680
	compaction_iterator_test \
681 682 683
	compaction_job_test \
	thread_list_test \
	sst_dump_test \
O
omegaga 已提交
684
	column_aware_encoding_test \
685 686 687
	compact_files_test \
	optimistic_transaction_test \
	write_callback_test \
688 689
	heap_test \
	compact_on_deletion_collector_test \
A
agiardullo 已提交
690
	compaction_job_stats_test \
691
	option_change_migration_test \
692
	transaction_test \
693
	ldb_cmd_test \
694
	persistent_cache_test \
695
	statistics_test \
696
	lua_test \
Y
Yi Wu 已提交
697
	lru_cache_test \
698
	object_registry_test \
A
Andrew Kryczka 已提交
699
	repair_test \
A
Andrew Kryczka 已提交
700
	env_timed_test \
701
	write_prepared_transaction_test \
702
	write_unprepared_transaction_test \
Z
Zhongyi Xie 已提交
703
	db_universal_compaction_test \
Z
Zhichao Cao 已提交
704
	trace_analyzer_test \
705
	repeatable_thread_test \
奏之章 已提交
706 707
	terark_zip_table_db_test \
	terark_zip_table_reader_test \
708
	range_tombstone_fragmenter_test \
709
	range_del_aggregator_test \
710
	sst_file_reader_test \
711

Y
Yi Wu 已提交
712 713 714 715
PARALLEL_TEST = \
	backupable_db_test \
	db_compaction_filter_test \
	db_compaction_test \
716
	db_merge_operator_test \
717
	db_sst_test \
Y
Yi Wu 已提交
718 719
	db_test \
	db_universal_compaction_test \
720 721
	db_wal_test \
	external_sst_file_test \
Y
Yi Wu 已提交
722 723 724
	fault_injection_test \
	inlineskiplist_test \
	manual_compaction_test \
725 726
	persistent_cache_test \
	table_test \
727
	transaction_test \
728
	write_prepared_transaction_test \
729
	write_unprepared_transaction_test \
Y
Yi Wu 已提交
730

731 732 733 734
# options_settable_test doesn't pass with UBSAN as we use hack in the test
ifdef COMPILE_WITH_UBSAN
        TESTS := $(shell echo $(TESTS) | sed 's/\boptions_settable_test\b//g')
endif
I
Islam AbdelRahman 已提交
735 736 737 738 739 740 741 742
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
743

744
TOOLS = \
Y
Yueh-Hsuan Chiang 已提交
745 746 747
	sst_dump \
	db_sanity_test \
	db_stress \
I
Igor Canadi 已提交
748
	write_stress \
Y
Yueh-Hsuan Chiang 已提交
749
	ldb \
L
leipeng 已提交
750
	kvpipe \
751
	remote_compaction_worker_101.cc \
Y
Yueh-Hsuan Chiang 已提交
752 753
	db_repl_stress \
	rocksdb_dump \
Y
Yi Wu 已提交
754 755
	rocksdb_undump \
	blob_dump \
Z
Zhichao Cao 已提交
756
	trace_analyzer \
J
jorlow@chromium.org 已提交
757

758 759 760
TEST_LIBS = \
	librocksdb_env_basic_test.a

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

764
# if user didn't config LIBNAME, set the default
765
ifeq ($(LIBNAME),)
766 767
# we should only run rocksdb in production with DEBUG_LEVEL 0
ifeq ($(DEBUG_LEVEL),0)
Y
Yueh-Hsuan Chiang 已提交
768
        LIBNAME=librocksdb
L
leipeng 已提交
769 770 771 772 773
endif
ifeq ($(DEBUG_LEVEL),1)
        LIBNAME=librocksdb_assert
endif
ifeq ($(DEBUG_LEVEL),2)
774 775
        LIBNAME=librocksdb_debug
endif
776
endif
777
LIBRARY = ${LIBNAME}.a
778
TOOLS_LIBRARY = ${LIBNAME}_tools.a
779

780 781 782
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)
783

784 785
default: all

786 787 788
#-----------------------------------------------
# Create platform independent shared libraries.
#-----------------------------------------------
789
ifneq ($(PLATFORM_SHARED_EXT),)
H
heyongqiang 已提交
790 791

ifneq ($(PLATFORM_SHARED_VERSIONED),true)
792
SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
H
heyongqiang 已提交
793 794
SHARED2 = $(SHARED1)
SHARED3 = $(SHARED1)
795
SHARED4 = $(SHARED1)
H
heyongqiang 已提交
796 797
SHARED = $(SHARED1)
else
798 799
SHARED_MAJOR = $(ROCKSDB_MAJOR)
SHARED_MINOR = $(ROCKSDB_MINOR)
800
SHARED_PATCH = $(ROCKSDB_PATCH)
801
SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
802 803 804 805 806 807
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
808 809
SHARED2 = $(SHARED1).$(SHARED_MAJOR)
SHARED3 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR)
810
SHARED4 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR).$(SHARED_PATCH)
811
endif
812
SHARED = $(SHARED1) $(SHARED2) $(SHARED3) $(SHARED4)
奏之章 已提交
813

L
leipeng 已提交
814 815 816 817 818
$(SHARED1): $(SHARED2)
	ln -fs $(SHARED2) $(SHARED1)
$(SHARED2): $(SHARED3)
	ln -fs $(SHARED3) $(SHARED2)
$(SHARED3): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
819
	ln -fs $(SHARED4) $(SHARED3)
雷鹏 已提交
820 821
$(SHARED4): shared-objects/${xdir}/${SHARED4}
	ln -sf $< $@
奏之章 已提交
822

823
ifeq ($(HAVE_POWER8),1)
雷鹏 已提交
824 825
SHARED_C_OBJECTS = $(addprefix ${xdir}/, $(LIB_SOURCES_C:.c=.o))
SHARED_ASM_OBJECTS = $(addprefix ${xdir}/, $(LIB_SOURCES_ASM:.S=.o))
826 827 828 829
SHARED_C_LIBOBJECTS = $(patsubst %.o,shared-objects/%.o,$(SHARED_C_OBJECTS))
SHARED_ASM_LIBOBJECTS = $(patsubst %.o,shared-objects/%.o,$(SHARED_ASM_OBJECTS))
shared_libobjects = $(patsubst %,shared-objects/%,$(LIB_CC_OBJECTS))
else
830
shared_libobjects = $(patsubst %,shared-objects/%,$(LIBOBJECTS))
831 832
endif

833
CLEAN_FILES += shared-objects
834
shared_all_libobjects = $(shared_libobjects)
835

836 837 838
ifeq ($(HAVE_POWER8),1)
shared-ppc-objects = $(SHARED_C_LIBOBJECTS) $(SHARED_ASM_LIBOBJECTS)

雷鹏 已提交
839
shared-objects/${xdir}/util/crc32c_ppc.o: util/crc32c_ppc.c
840 841
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@

雷鹏 已提交
842
shared-objects/${xdir}/util/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S
843 844
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
endif
雷鹏 已提交
845
shared-objects/${xdir}/%.o: %.cc
846 847
	$(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) -c $< -o $@

848 849 850
ifeq ($(HAVE_POWER8),1)
shared_all_libobjects = $(shared_libobjects) $(shared-ppc-objects)
endif
奏之章 已提交
851

雷鹏 已提交
852
shared-objects/${xdir}/$(SHARED1): shared-objects/${xdir}/$(SHARED4)
奏之章 已提交
853
	cd  $(dir $@) ; ln -fs $(notdir $<) $(notdir $@)
雷鹏 已提交
854
shared-objects/${xdir}/$(SHARED2): shared-objects/${xdir}/$(SHARED4)
奏之章 已提交
855
	cd  $(dir $@) ; ln -fs $(notdir $<) $(notdir $@)
雷鹏 已提交
856
shared-objects/${xdir}/$(SHARED3): shared-objects/${xdir}/$(SHARED4)
奏之章 已提交
857 858 859 860
	cd  $(dir $@) ; ln -fs $(notdir $<) $(notdir $@)

endif # PLATFORM_SHARED_VERSIONED

雷鹏 已提交
861
shared-objects/${xdir}/$(SHARED4): $(shared_all_libobjects)
奏之章 已提交
862
	$(CXX) $^ $(PLATFORM_SHARED_LDFLAGS)$(SHARED3) \
雷鹏 已提交
863
		      $(PLATFORM_SHARED_CFLAGS) $(LDFLAGS) $(LINK_STATIC_TERARK) $(TerarkLDFLAGS) -o $@
奏之章 已提交
864 865 866

${xdir}/%.o: %.cc
	@mkdir -p $(dir $@)
867
	$(CXX) -c $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) -o $@ $<
H
heyongqiang 已提交
868 869 870

endif  # PLATFORM_SHARED_EXT

871
.PHONY: blackbox_crash_test check clean coverage crash_test ldb_tests package \
872
	release tags tags0 valgrind_check whitebox_crash_test format static_lib shared_lib all \
Y
Yueh-Hsuan Chiang 已提交
873
	dbg rocksdbjavastatic rocksdbjava install install-static install-shared uninstall \
874
	analyze tools tools_lib
875

876
all: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(TESTS)
877

878 879
all_but_some_tests: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(SUBSET)

I
Igor Canadi 已提交
880 881 882 883
static_lib: $(LIBRARY)

shared_lib: $(SHARED)

M
maurice barnum 已提交
884 885
tools: $(TOOLS)

886 887
tools_lib: $(TOOLS_LIBRARY)

888 889
test_libs: $(TEST_LIBS)

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

892
# creates static library and programs
893
release:
Y
Yueh-Hsuan Chiang 已提交
894
	$(MAKE) clean
895
	DEBUG_LEVEL=0 $(MAKE) static_lib tools db_bench
K
Kai Liu 已提交
896 897

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

Y
Yi Wu 已提交
904 905 906 907 908
ifneq (,$(filter check parallel_check,$(MAKECMDGOALS)),)
# Use /dev/shm if it has the sticky bit set (otherwise, /tmp),
# and create a randomly-named rocksdb.XXXX directory therein.
# We'll use that directory in the "make check" rules.
ifeq ($(TMPD),)
T
Tomas Kolda 已提交
909 910
TMPDIR := $(shell echo $${TMPDIR:-/tmp})
TMPD := $(shell f=/dev/shm; test -k $$f || f=$(TMPDIR);     \
Y
Yi Wu 已提交
911 912 913 914 915 916 917 918 919 920 921 922 923 924
  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.
925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942
# 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 已提交
943 944 945 946 947 948 949 950 951 952 953
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 \
954
		TEST_SCRIPT=t/run-$$TEST_BINARY-$${TEST_NAME//\//-}; \
Y
Yi Wu 已提交
955 956 957 958 959
		echo "  GEN     " $$TEST_SCRIPT; \
    printf '%s\n' \
      '#!/bin/sh' \
      "d=\$(TMPD)$$TEST_SCRIPT" \
      'mkdir -p $$d' \
960
      "TEST_TMPDIR=\$$d $(DRIVER) ./$$TEST_BINARY --gtest_filter=$$TEST_NAME" \
Y
Yi Wu 已提交
961 962 963 964 965 966 967 968
		> $$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)
969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986

# 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 已提交
987
	^.*SnapshotConcurrentAccessTest.*$$|^t/run-table_test-HarnessTest.Randomized$$|^t/run-db_test-.*(?:FileCreationRandomFailure|EncodeDecompressedBlockSizeTest)$$|^.*RecoverFromCorruptedWALWithoutFlush$$
988
prioritize_long_running_tests =						\
Y
Yueh-Hsuan Chiang 已提交
989 990 991
  perl -pe 's,($(slow_test_regexp)),100 $$1,'				\
    | sort -k1,1gr							\
    | sed 's/^[.0-9]* //'
992 993 994 995 996 997

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

V
Venkatesh Radhakrishnan 已提交
1000 1001 1002
# Use this regexp to select the subset of tests whose names match.
tests-regexp = .

Y
Yi Wu 已提交
1003
t_run = $(wildcard t/run-*)
1004
.PHONY: check_0
Y
Yi Wu 已提交
1005 1006
check_0:
	$(AM_V_GEN)export TEST_TMPDIR=$(TMPD); \
Y
Yueh-Hsuan Chiang 已提交
1007 1008 1009
	printf '%s\n' ''						\
	  'To monitor subtest <duration,pass/fail,name>,'		\
	  '  run "make watch-log" in a separate window' '';		\
Y
Yi Wu 已提交
1010 1011 1012 1013 1014
	test -t 1 && eta=--eta || eta=; \
	{ \
		printf './%s\n' $(filter-out $(PARALLEL_TEST),$(TESTS)); \
		printf '%s\n' $(t_run); \
	} \
Y
Yueh-Hsuan Chiang 已提交
1015 1016
	  | $(prioritize_long_running_tests)				\
	  | grep -E '$(tests-regexp)'					\
1017
	  | build_tools/gnu_parallel -j$(J) --plain --joblog=LOG $$eta --gnu '{} >& t/log-{/}'
S
sdong 已提交
1018

1019
valgrind-blacklist-regexp = InlineSkipTest.ConcurrentInsert|TransactionStressTest.DeadlockStress|DBCompactionTest.SuggestCompactRangeNoTwoLevel0Compactions|BackupableDBTest.RateLimiting|DBTest.CloseSpeedup|DBTest.ThreadStatusFlush|DBTest.RateLimitingTest|DBTest.EncodeDecompressedBlockSizeTest|FaultInjectionTest.UninstalledCompaction|HarnessTest.Randomized|ExternalSSTFileTest.CompactDuringAddFileRandom|ExternalSSTFileTest.IngestFileWithGlobalSeqnoRandomized|MySQLStyleTransactionTest.TransactionStressTest
1020

S
sdong 已提交
1021
.PHONY: valgrind_check_0
Y
Yi Wu 已提交
1022
valgrind_check_0:
S
sdong 已提交
1023 1024 1025 1026 1027 1028
	$(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 已提交
1029
	  printf './%s\n' $(filter-out $(PARALLEL_TEST) %skiplist_test options_settable_test, $(TESTS));		\
S
sdong 已提交
1030 1031 1032 1033
	  printf '%s\n' $(t_run);					\
	}								\
	  | $(prioritize_long_running_tests)				\
	  | grep -E '$(tests-regexp)'					\
1034
	  | grep -E -v '$(valgrind-blacklist-regexp)'					\
1035
	  | build_tools/gnu_parallel -j$(J) --plain --joblog=LOG $$eta --gnu \
1036 1037
	  '(if [[ "{}" == "./"* ]] ; then $(DRIVER) {}; else {}; fi) ' \
	  '>& t/valgrind_log-{/}'
1038 1039

CLEAN_FILES += t LOG $(TMPD)
1040

1041 1042 1043 1044 1045 1046 1047 1048
# 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:
1049
	$(WATCH) --interval=0 'sort -k7,7nr -k4,4gr LOG|$(quoted_perl_command)'
1050

I
Igor Canadi 已提交
1051
# If J != 1 and GNU parallel is installed, run the tests in parallel,
1052 1053
# via the check_0 rule above.  Otherwise, run them sequentially.
check: all
Y
Yi Wu 已提交
1054
	$(MAKE) gen_parallel_tests
Y
Yueh-Hsuan Chiang 已提交
1055
	$(AM_V_GEN)if test "$(J)" != 1                                  \
1056
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |                    \
Y
Yueh-Hsuan Chiang 已提交
1057 1058 1059 1060 1061 1062 1063 1064
	        grep -q 'GNU Parallel';                                 \
	then                                                            \
	    $(MAKE) T="$$t" TMPD=$(TMPD) check_0;                       \
	else                                                            \
	    for t in $(TESTS); do                                       \
	      echo "===== Running $$t"; ./$$t || exit 1; done;          \
	fi
	rm -rf $(TMPD)
T
Tomas Kolda 已提交
1065
ifneq ($(PLATFORM), OS_AIX)
I
Islam AbdelRahman 已提交
1066
ifeq ($(filter -DROCKSDB_LITE,$(OPT)),)
Y
Yueh-Hsuan Chiang 已提交
1067 1068
	python tools/ldb_test.py
	sh tools/rocksdb_dump_test.sh
I
Islam AbdelRahman 已提交
1069
endif
T
Tomas Kolda 已提交
1070
endif
1071

S
Siying Dong 已提交
1072 1073
# TODO add ldb_tests
check_some: $(SUBSET)
Y
Yueh-Hsuan Chiang 已提交
1074
	for t in $(SUBSET); do echo "===== Running $$t"; ./$$t || exit 1; done
1075 1076

.PHONY: ldb_tests
1077
ldb_tests: ldb
Y
Yueh-Hsuan Chiang 已提交
1078
	python tools/ldb_test.py
1079

I
Igor Canadi 已提交
1080
crash_test: whitebox_crash_test blackbox_crash_test
1081 1082

blackbox_crash_test: db_stress
1083
	python -u tools/db_crashtest.py --simple blackbox $(CRASH_TEST_EXT_ARGS)
1084
	python -u tools/db_crashtest.py --enable_atomic_flush blackbox $(CRASH_TEST_EXT_ARGS)
1085
	python -u tools/db_crashtest.py blackbox $(CRASH_TEST_EXT_ARGS)
1086

1087 1088 1089 1090
ifeq ($(CRASH_TEST_KILL_ODD),)
  CRASH_TEST_KILL_ODD=888887
endif

1091
whitebox_crash_test: db_stress
1092
	python -u tools/db_crashtest.py --simple whitebox --random_kill_odd \
1093 1094
      $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
	python -u tools/db_crashtest.py --enable_atomic_flush whitebox  --random_kill_odd \
1095
      $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
1096
	python -u tools/db_crashtest.py whitebox  --random_kill_odd \
1097
      $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
1098

I
Igor Canadi 已提交
1099
asan_check:
Y
Yueh-Hsuan Chiang 已提交
1100 1101 1102
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) check -j32
	$(MAKE) clean
1103 1104

asan_crash_test:
Y
Yueh-Hsuan Chiang 已提交
1105 1106 1107
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) crash_test
	$(MAKE) clean
I
Igor Canadi 已提交
1108

1109 1110 1111 1112 1113 1114 1115 1116 1117 1118
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

1119
valgrind_test:
1120
	ROCKSDB_VALGRIND_RUN=1 DISABLE_JEMALLOC=1 $(MAKE) valgrind_check
1121

I
Igor Canadi 已提交
1122
valgrind_check: $(TESTS)
1123
	$(MAKE) DRIVER="$(VALGRIND_VER) $(VALGRIND_OPTS)" gen_parallel_tests
S
sdong 已提交
1124
	$(AM_V_GEN)if test "$(J)" != 1                                  \
1125
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |                    \
S
sdong 已提交
1126 1127
	        grep -q 'GNU Parallel';                                 \
	then                                                            \
Y
Yi Wu 已提交
1128
      $(MAKE) TMPD=$(TMPD)                                        \
S
sdong 已提交
1129 1130 1131 1132 1133 1134 1135 1136 1137 1138
      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
1139

1140 1141 1142 1143 1144 1145 1146

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 \
1147
			seq $(J) | v="$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{};  export TEST_TMPDIR=$$s;' \
1148 1149
				'timeout 2m ./db_test --gtest_filter=$$v >> $$s/log-{} 2>1'; \
		else\
1150
			seq $(J) | v="./$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{};' \
1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161
			     '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 已提交
1162 1163 1164 1165 1166 1167 1168
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!'

1169 1170
parallel_check: $(TESTS)
	$(AM_V_GEN)if test "$(J)" > 1                                  \
1171
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |                    \
1172 1173 1174 1175 1176 1177 1178 1179 1180
	        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); \
1181
        seq $(J) | build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{}; rm -rf $$s; mkdir $$s'; \
1182
	$(MAKE)  PAR_TEST="$(shell $(test_names))" TMPD=$(TMPD) \
1183 1184 1185 1186
		J=$(J) db_test=1 parloop; \
	$(MAKE) PAR_TEST="$(filter-out db_test, $(TESTS))" \
		TMPD=$(TMPD) J=$(J) db_test=0 parloop;

1187
analyze: clean
Y
Yueh-Hsuan Chiang 已提交
1188 1189 1190 1191
	$(CLANG_SCAN_BUILD) --use-analyzer=$(CLANG_ANALYZER) \
		--use-c++=$(CXX) --use-cc=$(CC) --status-bugs \
		-o $(CURDIR)/scan_build_report \
		$(MAKE) dbg
1192

1193 1194
CLEAN_FILES += unity.cc
unity.cc: Makefile
Y
Yueh-Hsuan Chiang 已提交
1195 1196
	rm -f $@ $@-t
	for source_file in $(LIB_SOURCES); do \
E
Evan Shaw 已提交
1197
		echo "#include \"$$source_file\"" >> $@-t; \
Y
Yueh-Hsuan Chiang 已提交
1198 1199 1200
	done
	chmod a=r $@-t
	mv $@-t $@
M
miguelportilla 已提交
1201

E
Evan Shaw 已提交
1202 1203 1204 1205
unity.a: unity.o
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ unity.o

1206 1207

TOOLLIBOBJECTS = $(TOOL_LIB_SOURCES:.cc=.o)
I
Igor Canadi 已提交
1208
# try compiling db_test with unity
1209
unity_test: db/db_test.o db/db_test_util.o $(TESTHARNESS) $(TOOLLIBOBJECTS) unity.a
I
Igor Canadi 已提交
1210 1211 1212
	$(AM_LINK)
	./unity_test

E
Evan Shaw 已提交
1213 1214
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 已提交
1215

J
jorlow@chromium.org 已提交
1216
clean:
Y
Yueh-Hsuan Chiang 已提交
1217 1218
	rm -f $(BENCHMARKS) $(TOOLS) $(TESTS) $(LIBRARY) $(SHARED)
	rm -rf $(CLEAN_FILES) ios-x86 ios-arm scan_build_report
1219 1220
	$(FIND) . -name "*.[oda]" -exec rm -f {} \;
	$(FIND) . -type f -regex ".*\.\(\(gcda\)\|\(gcno\)\)" -exec rm {} \;
S
Sagar Vemuri 已提交
1221
	rm -rf bzip2* snappy* zlib* lz4* zstd*
L
leipeng 已提交
1222
	rm -rf librocksdb*
Y
Yi Wu 已提交
1223
	cd java; $(MAKE) clean
1224

1225
tags:
1226
	ctags -R .
1227
	cscope -b `$(FIND) . -name '*.cc'` `$(FIND) . -name '*.h'` `$(FIND) . -name '*.c'`
L
Leonidas Galanis 已提交
1228
	ctags -e -R -o etags *
1229

1230 1231 1232 1233 1234 1235 1236
tags0:
	ctags -R .
	cscope -b `$(FIND) . -name '*.cc' -and ! -name '*_test.cc'` \
		  `$(FIND) . -name '*.c' -and ! -name '*_test.c'` \
		  `$(FIND) . -name '*.h' -and ! -name '*_test.h'`
	ctags -e -R -o etags *

1237
format:
Y
Yueh-Hsuan Chiang 已提交
1238
	build_tools/format-diff.sh
1239

1240
package:
Y
Yueh-Hsuan Chiang 已提交
1241
	bash build_tools/make_package.sh $(SHARED_MAJOR).$(SHARED_MINOR)
1242

1243 1244 1245
# ---------------------------------------------------------------------------
# 	Unit tests and tools
# ---------------------------------------------------------------------------
1246
$(LIBRARY): $(LIBOBJECTS)
Y
Yueh-Hsuan Chiang 已提交
1247 1248
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $(LIBOBJECTS)
雷鹏 已提交
1249 1250
ifeq (${BUNDLE_ALL_TERARK_STATIC},1)
	mv $@ orgin-$@
1251
	ln -s ${TERARK_CORE_PKG_DIR}/lib_static/libterark-{idx,zbs,fsa,core}-${DBG_OR_RLS}.a .
雷鹏 已提交
1252 1253
	(\
	echo create $@; \
1254
	echo addlib libterark-idx-${DBG_OR_RLS}.a; \
雷鹏 已提交
1255 1256 1257 1258 1259 1260 1261
	echo addlib libterark-zbs-${DBG_OR_RLS}.a; \
	echo addlib libterark-fsa-${DBG_OR_RLS}.a; \
	echo addlib libterark-core-${DBG_OR_RLS}.a; \
	echo addlib orgin-$@; \
	echo save; \
	echo end; \
	) | ar -M
1262
	rm -f libterark-{idx,zbs,fsa,core}-${DBG_OR_RLS}.a
雷鹏 已提交
1263
endif
J
jorlow@chromium.org 已提交
1264

1265
$(TOOLS_LIBRARY): $(BENCH_LIB_SOURCES:.cc=.o) $(TOOL_LIB_SOURCES:.cc=.o) $(LIB_SOURCES:.cc=.o) $(TESTUTIL) $(ANALYZER_LIB_SOURCES:.cc=.o)
1266 1267 1268
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $^

1269
librocksdb_env_basic_test.a: env/env_basic_test.o $(LIBOBJECTS) $(TESTHARNESS)
1270 1271 1272
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $^

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

1276 1277 1278
trace_analyzer: tools/trace_analyzer.o $(ANALYZETOOLOBJECTS) $(LIBOBJECTS)
	$(AM_LINK)

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

1282 1283 1284
persistent_cache_bench: utilities/persistent_cache/persistent_cache_bench.o $(LIBOBJECTS) $(TESTUTIL)
	$(AM_LINK)

1285
memtablerep_bench: memtable/memtablerep_bench.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
1286
	$(AM_LINK)
A
Ameya Gupte 已提交
1287

1288
db_stress: tools/db_stress.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
1289
	$(AM_LINK)
1290

I
Igor Canadi 已提交
1291 1292 1293
write_stress: tools/write_stress.o $(LIBOBJECTS) $(TESTUTIL)
	$(AM_LINK)

I
Igor Canadi 已提交
1294
db_sanity_test: tools/db_sanity_test.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
1295
	$(AM_LINK)
1296

1297
db_repl_stress: tools/db_repl_stress.o $(LIBOBJECTS) $(TESTUTIL)
Y
Yueh-Hsuan Chiang 已提交
1298
	$(AM_LINK)
1299

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

K
kailiu 已提交
1303
autovector_test: util/autovector_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1304
	$(AM_LINK)
K
kailiu 已提交
1305

1306
column_family_test: db/column_family_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1307
	$(AM_LINK)
1308

K
kailiu 已提交
1309
table_properties_collector_test: db/table_properties_collector_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1310
	$(AM_LINK)
1311

S
Sanjay Ghemawat 已提交
1312
bloom_test: util/bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1313
	$(AM_LINK)
S
Sanjay Ghemawat 已提交
1314

1315
dynamic_bloom_test: util/dynamic_bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1316
	$(AM_LINK)
1317

1318
c_test: db/c_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1319
	$(AM_LINK)
1320

1321
cache_test: cache/cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1322
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1323 1324

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

1327 1328 1329
hash_test: util/hash_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1330 1331 1332
option_change_migration_test: utilities/option_change_migration/option_change_migration_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1333
stringappend_test: utilities/merge_operators/string_append/stringappend_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1334
	$(AM_LINK)
1335

1336
cassandra_format_test: utilities/cassandra/cassandra_format_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
1337 1338
	$(AM_LINK)

1339
cassandra_functional_test: utilities/cassandra/cassandra_functional_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
1340 1341
	$(AM_LINK)

1342
cassandra_row_merge_test: utilities/cassandra/cassandra_row_merge_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
1343 1344
	$(AM_LINK)

1345
cassandra_serialize_test: utilities/cassandra/cassandra_serialize_test.o $(LIBOBJECTS) $(TESTHARNESS)
1346 1347
	$(AM_LINK)

1348
redis_test: utilities/redis/redis_lists_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1349
	$(AM_LINK)
1350

1351 1352 1353
hash_table_test: utilities/persistent_cache/hash_table_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1354
histogram_test: monitoring/histogram_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1355
	$(AM_LINK)
A
Abhishek Kona 已提交
1356

雷鹏 已提交
1357
thread_local_test: util/thread_local_test.o $(SHARED1) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1358
	$(AM_LINK)
L
Lei Jin 已提交
1359

J
jorlow@chromium.org 已提交
1360
corruption_test: db/corruption_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1361
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1362 1363

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

1366
slice_transform_test: util/slice_transform_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yueh-Hsuan Chiang 已提交
1367
	$(AM_LINK)
1368

1369
db_basic_test: db/db_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
E
Ewout Prangsma 已提交
1370 1371 1372
	$(AM_LINK)

db_encryption_test: db/db_encryption_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1373 1374
	$(AM_LINK)

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

1378 1379 1380
db_test2: db/db_test2.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1381 1382 1383
db_block_cache_test: db/db_block_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
1384 1385 1386
db_bloom_filter_test: db/db_bloom_filter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1387
db_log_iter_test: db/db_log_iter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1388
	$(AM_LINK)
1389

1390
db_compaction_filter_test: db/db_compaction_filter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1391 1392
	$(AM_LINK)

1393
db_compaction_test: db/db_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1394 1395
	$(AM_LINK)

1396
db_dynamic_level_test: db/db_dynamic_level_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1397 1398
	$(AM_LINK)

1399 1400 1401
db_flush_test: db/db_flush_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1402
db_inplace_update_test: db/db_inplace_update_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1403 1404
	$(AM_LINK)

Y
Yi Wu 已提交
1405 1406 1407
db_iterator_test: db/db_iterator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1408 1409 1410
db_memtable_test: db/db_memtable_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1411 1412 1413
db_merge_operator_test: db/db_merge_operator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1414 1415 1416
db_options_test: db/db_options_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1417 1418 1419
db_range_del_test: db/db_range_del_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
1420 1421 1422
db_sst_test: db/db_sst_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1423 1424 1425
db_statistics_test: db/db_statistics_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

Y
Yi Wu 已提交
1426 1427 1428
db_write_test: db/db_write_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1429 1430 1431
error_handler_test: db/error_handler_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

S
Siying Dong 已提交
1432 1433 1434
external_sst_file_basic_test: db/external_sst_file_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1435 1436 1437
external_sst_file_test: db/external_sst_file_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1438
db_tailing_iter_test: db/db_tailing_iter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1439 1440
	$(AM_LINK)

S
Stanislau Hlebik 已提交
1441
db_iter_test: db/db_iter_test.o $(LIBOBJECTS) $(TESTHARNESS)
1442
	$(AM_LINK)
S
Stanislau Hlebik 已提交
1443

1444
db_universal_compaction_test: db/db_universal_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1445 1446
	$(AM_LINK)

1447
db_wal_test: db/db_wal_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
S
sdong 已提交
1448 1449
	$(AM_LINK)

O
omegaga 已提交
1450 1451 1452
db_io_failure_test: db/db_io_failure_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1453 1454 1455
db_properties_test: db/db_properties_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1456 1457 1458
db_table_properties_test: db/db_table_properties_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1459
log_write_bench: util/log_write_bench.o $(LIBOBJECTS) $(TESTHARNESS)
D
dx9 已提交
1460
	$(AM_LINK) $(PROFILING_FLAGS)
1461

S
Siying Dong 已提交
1462
plain_table_db_test: db/plain_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1463
	$(AM_LINK)
S
Siying Dong 已提交
1464

1465
comparator_db_test: db/comparator_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1466
	$(AM_LINK)
1467

1468
table_reader_bench: table/table_reader_bench.o $(LIBOBJECTS) $(TESTHARNESS)
D
dx9 已提交
1469
	$(AM_LINK) $(PROFILING_FLAGS)
1470

1471
perf_context_test: db/perf_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
奏之章 已提交
1472
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(TerarkLDFLAGS)
1473

H
Haobo Xu 已提交
1474
prefix_test: db/prefix_test.o $(LIBOBJECTS) $(TESTHARNESS)
奏之章 已提交
1475
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(TerarkLDFLAGS)
H
Haobo Xu 已提交
1476

I
Igor Canadi 已提交
1477
backupable_db_test: utilities/backupable/backupable_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1478
	$(AM_LINK)
I
Igor Canadi 已提交
1479

1480 1481 1482
checkpoint_test: utilities/checkpoint/checkpoint_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1483
document_db_test: utilities/document/document_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1484
	$(AM_LINK)
I
Igor Canadi 已提交
1485

I
Igor Canadi 已提交
1486
json_document_test: utilities/document/json_document_test.o $(LIBOBJECTS) $(TESTHARNESS)
1487
	$(AM_LINK)
I
Igor Canadi 已提交
1488

1489 1490 1491
sim_cache_test: utilities/simulator_cache/sim_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1492
spatial_db_test: utilities/spatialdb/spatial_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1493
	$(AM_LINK)
I
Igor Canadi 已提交
1494

S
Sage Weil 已提交
1495 1496 1497
env_mirror_test: utilities/env_mirror_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
Andrew Kryczka 已提交
1498 1499 1500
env_timed_test: utilities/env_timed_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1501 1502 1503 1504 1505
ifdef ROCKSDB_USE_LIBRADOS
env_librados_test: utilities/env_librados_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(COVERAGEFLAGS)
endif

1506
object_registry_test: utilities/object_registry_test.o $(LIBOBJECTS) $(TESTHARNESS)
1507 1508
	$(AM_LINK)

1509
ttl_test: utilities/ttl/ttl_test.o $(LIBOBJECTS) $(TESTHARNESS)
1510
	$(AM_LINK)
1511

O
omegaga 已提交
1512 1513 1514
date_tiered_test: utilities/date_tiered/date_tiered_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1515
write_batch_with_index_test: utilities/write_batch_with_index/write_batch_with_index_test.o $(LIBOBJECTS) $(TESTHARNESS)
1516
	$(AM_LINK)
1517

I
Igor Canadi 已提交
1518
flush_job_test: db/flush_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
1519
	$(AM_LINK)
A
Andres Noetzli 已提交
1520 1521 1522

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

I
Igor Canadi 已提交
1524
compaction_job_test: db/compaction_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
1525
	$(AM_LINK)
I
Igor Canadi 已提交
1526

1527 1528 1529
compaction_job_stats_test: db/compaction_job_stats_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1530 1531 1532
compact_on_deletion_collector_test: utilities/table_properties_collectors/compact_on_deletion_collector_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

I
Igor Canadi 已提交
1533
wal_manager_test: db/wal_manager_test.o $(LIBOBJECTS) $(TESTHARNESS)
1534
	$(AM_LINK)
I
Igor Canadi 已提交
1535

J
jorlow@chromium.org 已提交
1536
dbformat_test: db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS)
1537
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1538

1539
env_basic_test: env/env_basic_test.o $(LIBOBJECTS) $(TESTHARNESS)
1540 1541
	$(AM_LINK)

1542
env_test: env/env_test.o $(LIBOBJECTS) $(TESTHARNESS)
1543
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1544

1545
fault_injection_test: db/fault_injection_test.o $(LIBOBJECTS) $(TESTHARNESS)
1546
	$(AM_LINK)
1547

A
Andrew Kryczka 已提交
1548
rate_limiter_test: util/rate_limiter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1549
	$(AM_LINK)
L
Lei Jin 已提交
1550

I
Islam AbdelRahman 已提交
1551 1552 1553
delete_scheduler_test: util/delete_scheduler_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1554
filename_test: db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS)
1555
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1556

1557 1558 1559
file_reader_writer_test: util/file_reader_writer_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1560
block_based_filter_block_test: table/block_based_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1561
	$(AM_LINK)
1562 1563

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

M
Maysam Yabandeh 已提交
1566 1567 1568
partitioned_filter_block_test: table/partitioned_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
jorlow@chromium.org 已提交
1569
log_test: db/log_test.o $(LIBOBJECTS) $(TESTHARNESS)
M
Maysam Yabandeh 已提交
1570 1571 1572
	$(AM_LINK)

cleanable_test: table/cleanable_test.o $(LIBOBJECTS) $(TESTHARNESS)
1573
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1574 1575

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

D
Dhruba Borthakur 已提交
1578
block_test: table/block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1579
	$(AM_LINK)
D
Dhruba Borthakur 已提交
1580

1581 1582 1583
data_block_hash_index_test: table/data_block_hash_index_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1584
inlineskiplist_test: memtable/inlineskiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
N
Nathan Bronson 已提交
1585 1586
	$(AM_LINK)

1587
skiplist_test: memtable/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
1588
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1589

1590 1591 1592
write_buffer_manager_test: memtable/write_buffer_manager_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

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

1596
version_set_test: db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS)
1597
	$(AM_LINK)
1598

S
sdong 已提交
1599
compaction_picker_test: db/compaction_picker_test.o $(LIBOBJECTS) $(TESTHARNESS)
1600
	$(AM_LINK)
S
sdong 已提交
1601

S
sdong 已提交
1602
version_builder_test: db/version_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
1603
	$(AM_LINK)
S
sdong 已提交
1604

1605
file_indexer_test: db/file_indexer_test.o $(LIBOBJECTS) $(TESTHARNESS)
1606
	$(AM_LINK)
1607

1608
reduce_levels_test: tools/reduce_levels_test.o $(LIBOBJECTS) $(TESTHARNESS)
1609
	$(AM_LINK)
1610

J
jorlow@chromium.org 已提交
1611
write_batch_test: db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS)
1612
	$(AM_LINK)
1613

1614
write_controller_test: db/write_controller_test.o $(LIBOBJECTS) $(TESTHARNESS)
1615
	$(AM_LINK)
1616

1617 1618 1619
merge_helper_test: db/merge_helper_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1620 1621 1622
memory_test: utilities/memory/memory_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

J
Jim Paton 已提交
1623
merge_test: db/merge_test.o $(LIBOBJECTS) $(TESTHARNESS)
1624
	$(AM_LINK)
J
jorlow@chromium.org 已提交
1625

I
Igor Canadi 已提交
1626
merger_test: table/merger_test.o $(LIBOBJECTS) $(TESTHARNESS)
1627
	$(AM_LINK)
I
Igor Canadi 已提交
1628

1629 1630 1631
util_merge_operators_test: utilities/util_merge_operators_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1632 1633 1634
options_file_test: db/options_file_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1635
deletefile_test: db/deletefile_test.o $(LIBOBJECTS) $(TESTHARNESS)
1636
	$(AM_LINK)
1637

1638 1639 1640
obsolete_files_test: db/obsolete_files_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1641
geodb_test: utilities/geodb/geodb_test.o $(LIBOBJECTS) $(TESTHARNESS)
1642
	$(AM_LINK)
1643

1644 1645 1646 1647 1648 1649
rocksdb_dump: tools/dump/rocksdb_dump.o $(LIBOBJECTS)
	$(AM_LINK)

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

1650
cuckoo_table_builder_test: table/cuckoo_table_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
1651
	$(AM_LINK)
1652

I
Igor Canadi 已提交
1653
cuckoo_table_reader_test: table/cuckoo_table_reader_test.o $(LIBOBJECTS) $(TESTHARNESS)
1654
	$(AM_LINK)
1655

1656
cuckoo_table_db_test: db/cuckoo_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1657
	$(AM_LINK)
1658

1659
listener_test: db/listener_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1660
	$(AM_LINK)
1661

Y
Yueh-Hsuan Chiang 已提交
1662
thread_list_test: util/thread_list_test.o $(LIBOBJECTS) $(TESTHARNESS)
1663
	$(AM_LINK)
Y
Yueh-Hsuan Chiang 已提交
1664

1665 1666 1667
compact_files_test: db/compact_files_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1668
options_test: options/options_test.o $(LIBOBJECTS) $(TESTHARNESS)
1669 1670
	$(AM_LINK)

1671
options_settable_test: options/options_settable_test.o $(LIBOBJECTS) $(TESTHARNESS)
1672
	$(AM_LINK)
1673

1674 1675 1676
options_util_test: utilities/options/options_util_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1677 1678 1679
db_bench_tool_test: tools/db_bench_tool_test.o $(BENCHTOOLOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1680
trace_analyzer_test: tools/trace_analyzer_test.o $(LIBOBJECTS) $(ANALYZETOOLOBJECTS) $(TESTHARNESS)
Z
Zhichao Cao 已提交
1681 1682
	$(AM_LINK)

I
Igor Canadi 已提交
1683 1684 1685
event_logger_test: util/event_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
Anirban Rahut 已提交
1686 1687 1688
timer_queue_test: util/timer_queue_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1689
sst_dump_test: tools/sst_dump_test.o $(LIBOBJECTS) $(TESTHARNESS)
1690
	$(AM_LINK)
1691

O
omegaga 已提交
1692 1693 1694
column_aware_encoding_test: utilities/column_aware_encoding_test.o $(TESTHARNESS) $(EXPOBJECTS)
	$(AM_LINK)

A
agiardullo 已提交
1695 1696 1697
optimistic_transaction_test: utilities/transactions/optimistic_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1698
mock_env_test : env/mock_env_test.o $(LIBOBJECTS) $(TESTHARNESS)
1699
	$(AM_LINK)
1700

1701
manual_compaction_test: db/manual_compaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
1702
	$(AM_LINK)
1703

1704
filelock_test: util/filelock_test.o $(LIBOBJECTS) $(TESTHARNESS)
1705
	$(AM_LINK)
K
Kai Liu 已提交
1706

1707
auto_roll_logger_test: util/auto_roll_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
1708
	$(AM_LINK)
1709

A
agiardullo 已提交
1710 1711 1712
memtable_list_test: db/memtable_list_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

A
agiardullo 已提交
1713 1714 1715
write_callback_test: db/write_callback_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

奏之章 已提交
1716
heap_test: util/heap_test.o $(GTEST) ${LIBNAME}.so
1717 1718
	$(AM_LINK)

A
agiardullo 已提交
1719 1720 1721
transaction_test: utilities/transactions/transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1722 1723 1724
write_prepared_transaction_test: utilities/transactions/write_prepared_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1725 1726 1727
write_unprepared_transaction_test: utilities/transactions/write_unprepared_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

L
leipeng 已提交
1728
sst_dump: ${xdir}/tools/sst_dump.o $(LIBOBJECTS) ${LIBNAME}.so
1729
	$(AM_LINK)
1730

L
leipeng 已提交
1731
blob_dump: ${xdir}/tools/blob_dump.o $(LIBOBJECTS)
Y
Yi Wu 已提交
1732 1733
	$(AM_LINK)

O
omegaga 已提交
1734 1735 1736
column_aware_encoding_exp: utilities/column_aware_encoding_exp.o $(EXPOBJECTS)
	$(AM_LINK)

A
Andrew Kryczka 已提交
1737 1738 1739
repair_test: db/repair_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

L
leipeng 已提交
1740
ldb_cmd_test: ${xdir}/tools/ldb_cmd_test.o $(LIBOBJECTS) $(TESTHARNESS) ${LIBNAME}.so
1741 1742
	$(AM_LINK)

L
leipeng.tk 已提交
1743
ldb: ${xdir}/tools/ldb.o $(SHARED1)
1744
	$(AM_LINK)
1745

L
leipeng 已提交
1746
kvpipe: ${xdir}/tools/kvpipe.o ${SHARED1}
1747 1748
	$(AM_LINK)

1749 1750 1751
remote_compaction_worker_101: ${xdir}/tools/remote_compaction_worker_101.o ${SHARED1}
	$(AM_LINK)

L
leipeng 已提交
1752
multi_get: ${xdir}/tools/multi_get.o ${SHARED1}
1753
	$(AM_LINK)
1754

1755
iostats_context_test: monitoring/iostats_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
奏之章 已提交
1756
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(TerarkLDFLAGS)
1757

1758 1759 1760
persistent_cache_test: utilities/persistent_cache/persistent_cache_test.o  db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1761
statistics_test: monitoring/statistics_test.o $(LIBOBJECTS) $(TESTHARNESS)
1762 1763
	$(AM_LINK)

1764
lru_cache_test: cache/lru_cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
Y
Yi Wu 已提交
1765 1766
	$(AM_LINK)

1767 1768
lua_test: utilities/lua/rocks_lua_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)
Y
Yi Wu 已提交
1769

A
Andrew Kryczka 已提交
1770 1771 1772
range_del_aggregator_test: db/range_del_aggregator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1773 1774 1775
range_del_aggregator_bench: db/range_del_aggregator_bench.o $(LIBOBJECTS) $(TESTUTIL)
	$(AM_LINK)

1776 1777 1778
repeatable_thread_test: util/repeatable_thread_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

奏之章 已提交
1779 1780 1781 1782
terark_zip_table_db_test: db/terark_zip_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

terark_zip_table_reader_test: table/terark_zip_table_reader_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS) ${LIBNAME}.so
Z
ZhaoMing 已提交
1783

1784 1785 1786
range_tombstone_fragmenter_test: db/range_tombstone_fragmenter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
	$(AM_LINK)

1787
sst_file_reader_test: table/sst_file_reader_test.o $(LIBOBJECTS) $(TESTHARNESS)
奏之章 已提交
1788 1789
	$(AM_LINK)

I
Igor Canadi 已提交
1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803
#-------------------------------------------------
# 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
1804
	for header_dir in `$(FIND) "include/rocksdb" -type d`; do \
I
Igor Canadi 已提交
1805 1806
		install -d $(INSTALL_PATH)/$$header_dir; \
	done
1807
	for header in `$(FIND) "include/rocksdb" -type f -name *.h`; do \
I
Igor Canadi 已提交
1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821
		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 已提交
1822
	[ -e $(SHARED4) ] && $(MAKE) install-shared || :
I
Igor Canadi 已提交
1823 1824 1825 1826

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


1827 1828 1829 1830
# ---------------------------------------------------------------------------
# Jni stuff
# ---------------------------------------------------------------------------

1831
JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/linux
D
David Bernard 已提交
1832 1833
ifeq ($(PLATFORM), OS_SOLARIS)
	ARCH := $(shell isainfo -b)
1834 1835 1836 1837 1838 1839
else ifeq ($(PLATFORM), OS_OPENBSD)
	ifneq (,$(filter $(MACHINE), amd64 arm64 sparc64))
		ARCH := 64
	else
		ARCH := 32
	endif
D
David Bernard 已提交
1840 1841 1842
else
	ARCH := $(shell getconf LONG_BIT)
endif
1843 1844 1845 1846 1847 1848

ifeq (,$(findstring ppc,$(MACHINE)))
        ROCKSDBJNILIB = librocksdbjni-linux$(ARCH).so
else
        ROCKSDBJNILIB = librocksdbjni-linux-$(MACHINE).so
endif
1849
ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-linux$(ARCH).jar
1850
ROCKSDB_JAR_ALL = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH).jar
C
Chris Riccomini 已提交
1851
ROCKSDB_JAVADOCS_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-javadoc.jar
1852
ROCKSDB_SOURCES_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-sources.jar
1853 1854
SHA256_CMD = sha256sum

T
Tomas Kolda 已提交
1855 1856 1857 1858 1859
ZLIB_VER ?= 1.2.11
ZLIB_SHA256 ?= c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1
ZLIB_DOWNLOAD_BASE ?= http://zlib.net
BZIP2_VER ?= 1.0.6
BZIP2_SHA256 ?= a2848f34fcd5d6cf47def00461fcb528a0484d8edef8208d6d2e2909dc61d9cd
1860
BZIP2_DOWNLOAD_BASE ?= https://web.archive.org/web/20180624184835/http://www.bzip.org
S
Sagar Vemuri 已提交
1861 1862
SNAPPY_VER ?= 1.1.4
SNAPPY_SHA256 ?= 134bfe122fd25599bb807bb8130e7ba6d9bdb851e0b16efcb83ac4f5d0b70057
T
Tomas Kolda 已提交
1863
SNAPPY_DOWNLOAD_BASE ?= https://github.com/google/snappy/releases/download
A
Adam Retter 已提交
1864 1865
LZ4_VER ?= 1.8.0
LZ4_SHA256 ?= 2ca482ea7a9bb103603108b5a7510b7592b90158c151ff50a28f1ca8389fccf6
T
Tomas Kolda 已提交
1866
LZ4_DOWNLOAD_BASE ?= https://github.com/lz4/lz4/archive
A
Adam Retter 已提交
1867 1868
ZSTD_VER ?= 1.3.3
ZSTD_SHA256 ?= a77c47153ee7de02626c5b2a097005786b71688be61e9fb81806a011f90b297b
1869
ZSTD_DOWNLOAD_BASE ?= https://github.com/facebook/zstd/archive
P
Pengchao Wang 已提交
1870
CURL_SSL_OPTS ?= --tlsv1
1871 1872

ifeq ($(PLATFORM), OS_MACOSX)
D
David Bernard 已提交
1873 1874
	ROCKSDBJNILIB = librocksdbjni-osx.jnilib
	ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-osx.jar
1875
	SHA256_CMD = openssl sha256 -r
1876 1877 1878 1879 1880
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
1881
endif
1882
ifeq ($(PLATFORM), OS_FREEBSD)
1883
	JAVA_INCLUDE = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/freebsd
1884 1885 1886
	ROCKSDBJNILIB = librocksdbjni-freebsd$(ARCH).so
	ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-freebsd$(ARCH).jar
endif
D
David Bernard 已提交
1887 1888 1889 1890
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
1891
	SHA256_CMD = digest -a sha256
D
David Bernard 已提交
1892
endif
T
Tomas Kolda 已提交
1893 1894 1895 1896 1897 1898
ifeq ($(PLATFORM), OS_AIX)
	JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/aix
	ROCKSDBJNILIB = librocksdbjni-aix.so
	EXTRACT_SOURCES = gunzip < TAR_GZ | tar xvf -
	SNAPPY_MAKE_TARGET = libsnappy.la
endif
1899 1900 1901 1902 1903
ifeq ($(PLATFORM), OS_OPENBSD)
        JAVA_INCLUDE = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/openbsd
	ROCKSDBJNILIB = librocksdbjni-openbsd$(ARCH).so
        ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-openbsd$(ARCH).jar
endif
1904

L
leipeng 已提交
1905 1906
libz.a: zlib-1.2.11/zlib.h
zlib-1.2.11/zlib.h:
1907
	-rm -rf zlib-$(ZLIB_VER)
G
guokuankuan 已提交
1908 1909
	cp -a downloads/zlib-$(ZLIB_VER).tar.gz .
	#curl -O -L ${ZLIB_DOWNLOAD_BASE}/zlib-$(ZLIB_VER).tar.gz
1910 1911 1912 1913 1914 1915
	ZLIB_SHA256_ACTUAL=`$(SHA256_CMD) zlib-$(ZLIB_VER).tar.gz | cut -d ' ' -f 1`; \
	if [ "$(ZLIB_SHA256)" != "$$ZLIB_SHA256_ACTUAL" ]; then \
		echo zlib-$(ZLIB_VER).tar.gz checksum mismatch, expected=\"$(ZLIB_SHA256)\" actual=\"$$ZLIB_SHA256_ACTUAL\"; \
		exit 1; \
	fi
	tar xvzf zlib-$(ZLIB_VER).tar.gz
L
leipeng 已提交
1916 1917
	cd zlib-$(ZLIB_VER) && CFLAGS='-fPIC ${EXTRA_CFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' ./configure --static
	cd zlib-$(ZLIB_VER) && CFLAGS='-fPIC ${EXTRA_CFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' $(MAKE)
1918
	cp zlib-$(ZLIB_VER)/libz.a .
N
Naveen 已提交
1919 1920

libbz2.a:
1921
	-rm -rf bzip2-$(BZIP2_VER)
G
guokuankuan 已提交
1922 1923 1924
	cp -a downloads/bzip2-$(BZIP2_VER).tar.gz .
	#wget ${BZIP2_DOWNLOAD_BASE}/$(BZIP2_VER)/bzip2-$(BZIP2_VER).tar.gz
	#curl -O -L ${BZIP2_DOWNLOAD_BASE}/$(BZIP2_VER)/bzip2-$(BZIP2_VER).tar.gz
1925 1926 1927 1928 1929 1930
	BZIP2_SHA256_ACTUAL=`$(SHA256_CMD) bzip2-$(BZIP2_VER).tar.gz | cut -d ' ' -f 1`; \
	if [ "$(BZIP2_SHA256)" != "$$BZIP2_SHA256_ACTUAL" ]; then \
		echo bzip2-$(BZIP2_VER).tar.gz checksum mismatch, expected=\"$(BZIP2_SHA256)\" actual=\"$$BZIP2_SHA256_ACTUAL\"; \
		exit 1; \
	fi
	tar xvzf bzip2-$(BZIP2_VER).tar.gz
L
leipeng 已提交
1931
	cd bzip2-$(BZIP2_VER) && $(MAKE) CFLAGS='-fPIC -O2 -g -D_FILE_OFFSET_BITS=64 ${EXTRA_CFLAGS}' AR='ar ${EXTRA_ARFLAGS}' LDFLAGS=
1932
	cp bzip2-$(BZIP2_VER)/libbz2.a .
N
Naveen 已提交
1933

L
leipeng 已提交
1934 1935
libsnappy.a: snappy-1.1.4/snappy.h
snappy-1.1.4/snappy.h:
1936
	-rm -rf snappy-$(SNAPPY_VER)
G
guokuankuan 已提交
1937 1938 1939
	cp -a downloads/snappy-$(SNAPPY_VER).tar.gz .
	#wget ${SNAPPY_DOWNLOAD_BASE}/$(SNAPPY_VER)/snappy-$(SNAPPY_VER).tar.gz
	#curl -O -L ${CURL_SSL_OPTS} ${SNAPPY_DOWNLOAD_BASE}/$(SNAPPY_VER)/snappy-$(SNAPPY_VER).tar.gz
1940 1941 1942 1943 1944 1945
	SNAPPY_SHA256_ACTUAL=`$(SHA256_CMD) snappy-$(SNAPPY_VER).tar.gz | cut -d ' ' -f 1`; \
	if [ "$(SNAPPY_SHA256)" != "$$SNAPPY_SHA256_ACTUAL" ]; then \
		echo snappy-$(SNAPPY_VER).tar.gz checksum mismatch, expected=\"$(SNAPPY_SHA256)\" actual=\"$$SNAPPY_SHA256_ACTUAL\"; \
		exit 1; \
	fi
	tar xvzf snappy-$(SNAPPY_VER).tar.gz
T
Tomas Kolda 已提交
1946
	cd snappy-$(SNAPPY_VER) && CFLAGS='${EXTRA_CFLAGS}' CXXFLAGS='${EXTRA_CXXFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' ./configure --with-pic --enable-static --disable-shared
L
leipeng 已提交
1947
	cd snappy-$(SNAPPY_VER) && CFLAGS='${EXTRA_CFLAGS}' CXXFLAGS='${EXTRA_CXXFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' $(MAKE) ${SNAPPY_MAKE_TARGET}
1948
	cp snappy-$(SNAPPY_VER)/.libs/libsnappy.a .
1949

L
leipeng 已提交
1950 1951
liblz4.a: lz4-1.8.0/lib/lz4.h
lz4-1.8.0/lib/lz4.h:
1952
	-rm -rf lz4-$(LZ4_VER)
G
guokuankuan 已提交
1953 1954 1955
	cp -a downloads/lz4-$(LZ4_VER).tar.gz .
	#wget ${LZ4_DOWNLOAD_BASE}/v$(LZ4_VER).tar.gz
	#curl -O -L ${CURL_SSL_OPTS} ${LZ4_DOWNLOAD_BASE}/v$(LZ4_VER).tar.gz
G
guokuankuan 已提交
1956
	#mv v$(LZ4_VER).tar.gz lz4-$(LZ4_VER).tar.gz
1957 1958 1959 1960 1961 1962
	LZ4_SHA256_ACTUAL=`$(SHA256_CMD) lz4-$(LZ4_VER).tar.gz | cut -d ' ' -f 1`; \
	if [ "$(LZ4_SHA256)" != "$$LZ4_SHA256_ACTUAL" ]; then \
		echo lz4-$(LZ4_VER).tar.gz checksum mismatch, expected=\"$(LZ4_SHA256)\" actual=\"$$LZ4_SHA256_ACTUAL\"; \
		exit 1; \
	fi
	tar xvzf lz4-$(LZ4_VER).tar.gz
L
leipeng 已提交
1963
	cd lz4-$(LZ4_VER)/lib && $(MAKE) CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' LDFLAGS= all
1964
	cp lz4-$(LZ4_VER)/lib/liblz4.a .
N
Naveen 已提交
1965

L
leipeng 已提交
1966 1967
libzstd.a: zstd-1.3.3/lib/include/zstd.h
zstd-1.3.3/lib/include/zstd.h:
1968
	-rm -rf zstd-$(ZSTD_VER)
G
guokuankuan 已提交
1969 1970
	cp -a downloads/zstd-$(ZSTD_VER).tar.gz .
	#wget ${ZSTD_DOWNLOAD_BASE}/v$(ZSTD_VER).tar.gz
G
guokuankuan 已提交
1971 1972
	#curl -O -L ${CURL_SSL_OPTS} ${ZSTD_DOWNLOAD_BASE}/v$(ZSTD_VER).tar.gz
	#mv v$(ZSTD_VER).tar.gz zstd-$(ZSTD_VER).tar.gz
1973 1974 1975 1976 1977 1978
	ZSTD_SHA256_ACTUAL=`$(SHA256_CMD) zstd-$(ZSTD_VER).tar.gz | cut -d ' ' -f 1`; \
	if [ "$(ZSTD_SHA256)" != "$$ZSTD_SHA256_ACTUAL" ]; then \
		echo zstd-$(ZSTD_VER).tar.gz checksum mismatch, expected=\"$(ZSTD_SHA256)\" actual=\"$$ZSTD_SHA256_ACTUAL\"; \
		exit 1; \
	fi
	tar xvzf zstd-$(ZSTD_VER).tar.gz
L
leipeng 已提交
1979
	cd zstd-$(ZSTD_VER)/lib && LDFLAGS= DESTDIR=. PREFIX= $(MAKE) CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' install
1980 1981
	cp zstd-$(ZSTD_VER)/lib/libzstd.a .

1982
# A version of each $(LIBOBJECTS) compiled with -fPIC and a fixed set of static compression libraries
A
Andrew Kryczka 已提交
1983
java_static_libobjects = $(patsubst %,jls/%,$(LIB_CC_OBJECTS))
1984
CLEAN_FILES += jls
A
Andrew Kryczka 已提交
1985
java_static_all_libobjects = $(java_static_libobjects)
1986

1987
ifneq ($(ROCKSDB_JAVA_NO_COMPRESSION), 1)
1988
JAVA_COMPRESSIONS = libz.a libbz2.a libsnappy.a liblz4.a libzstd.a
1989 1990
endif

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

A
Andrew Kryczka 已提交
1994
ifeq ($(HAVE_POWER8),1)
雷鹏 已提交
1995 1996
JAVA_STATIC_C_LIBOBJECTS = $(patsubst %.c.o,jls/%.c.o,$(addprefix ${xdir},$(LIB_SOURCES_C:.c=.o)))
JAVA_STATIC_ASM_LIBOBJECTS = $(patsubst %.S.o,jls/%.S.o,$(addprefix ${xdir},$(LIB_SOURCES_ASM:.S=.o)))
A
Andrew Kryczka 已提交
1997 1998 1999

java_static_ppc_libobjects = $(JAVA_STATIC_C_LIBOBJECTS) $(JAVA_STATIC_ASM_LIBOBJECTS)

雷鹏 已提交
2000
jls/${xdir}/util/crc32c_ppc.o: util/crc32c_ppc.c
A
Andrew Kryczka 已提交
2001 2002
	$(AM_V_CC)$(CC) $(CFLAGS) $(JAVA_STATIC_FLAGS) $(JAVA_STATIC_INCLUDES) -c $< -o $@

雷鹏 已提交
2003
jls/${xdir}/util/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S
A
Andrew Kryczka 已提交
2004 2005 2006 2007 2008
	$(AM_V_CC)$(CC) $(CFLAGS) $(JAVA_STATIC_FLAGS) $(JAVA_STATIC_INCLUDES) -c $< -o $@

java_static_all_libobjects += $(java_static_ppc_libobjects)
endif

雷鹏 已提交
2009
$(java_static_libobjects): jls/${xdir}/%.o: %.cc $(JAVA_COMPRESSIONS)
2010
	$(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) $(JAVA_STATIC_FLAGS) $(JAVA_STATIC_INCLUDES) -fPIC -c $< -o $@ $(COVERAGEFLAGS)
2011

A
Andrew Kryczka 已提交
2012
rocksdbjavastatic: $(java_static_all_libobjects)
F
fyrz 已提交
2013
	cd java;$(MAKE) javalib;
2014
	rm -f ./java/target/$(ROCKSDBJNILIB)
2015 2016
	$(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC \
	  -o ./java/target/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) \
A
Andrew Kryczka 已提交
2017
	  $(java_static_all_libobjects) $(COVERAGEFLAGS) \
2018
	  $(JAVA_COMPRESSIONS) $(JAVA_STATIC_LDFLAGS)
2019 2020 2021
	cd java/target;if [ "$(DEBUG_LEVEL)" == "0" ]; then \
		strip $(STRIPFLAGS) $(ROCKSDBJNILIB); \
	fi
2022 2023 2024 2025 2026
	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 已提交
2027

2028
rocksdbjavastaticrelease: rocksdbjavastatic
2029
	cd java/crossbuild && vagrant destroy -f && vagrant up linux32 && vagrant halt linux32 && vagrant up linux64 && vagrant halt linux64
2030
	cd java;jar -cf target/$(ROCKSDB_JAR_ALL) HISTORY*.md
2031
	cd java/target;jar -uf $(ROCKSDB_JAR_ALL) librocksdbjni-*.so librocksdbjni-*.jnilib
2032
	cd java/target/classes;jar -uf ../$(ROCKSDB_JAR_ALL) org/rocksdb/*.class org/rocksdb/util/*.class
2033

2034 2035 2036 2037 2038 2039 2040
rocksdbjavastaticreleasedocker: rocksdbjavastatic rocksdbjavastaticdockerx86 rocksdbjavastaticdockerx86_64
	cd java;jar -cf target/$(ROCKSDB_JAR_ALL) HISTORY*.md
	cd java/target;jar -uf $(ROCKSDB_JAR_ALL) librocksdbjni-*.so librocksdbjni-*.jnilib
	cd java/target/classes;jar -uf ../$(ROCKSDB_JAR_ALL) org/rocksdb/*.class org/rocksdb/util/*.class

rocksdbjavastaticdockerx86:
	mkdir -p java/target
2041 2042
	DOCKER_LINUX_X86_CONTAINER=`docker ps -aqf name=rocksdb_linux_x86-be`; \
	if [ -z "$$DOCKER_LINUX_X86_CONTAINER" ]; then \
2043
		docker container create --attach stdin --attach stdout --attach stderr --volume `pwd`:/rocksdb-host --name rocksdb_linux_x86-be evolvedbinary/rocksjava:centos6_x86-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh; \
2044 2045
	fi
	docker start -a rocksdb_linux_x86-be
2046 2047 2048 2049 2050 2051 2052 2053

rocksdbjavastaticdockerx86_64:
	mkdir -p java/target
	DOCKER_LINUX_X64_CONTAINER=`docker ps -aqf name=rocksdb_linux_x64-be`; \
	if [ -z "$$DOCKER_LINUX_X64_CONTAINER" ]; then \
		docker container create --attach stdin --attach stdout --attach stderr --volume `pwd`:/rocksdb-host --name rocksdb_linux_x64-be evolvedbinary/rocksjava:centos6_x64-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh; \
	fi
	docker start -a rocksdb_linux_x64-be
2054

2055 2056 2057 2058 2059 2060 2061 2062
rocksdbjavastaticdockerppc64le:
	mkdir -p java/target
	DOCKER_LINUX_PPC64LE_CONTAINER=`docker ps -aqf name=rocksdb_linux_ppc64le-be`; \
	if [ -z "$$DOCKER_LINUX_PPC64LE_CONTAINER" ]; then \
		docker container create --attach stdin --attach stdout --attach stderr --volume `pwd`:/rocksdb-host --name rocksdb_linux_ppc64le-be evolvedbinary/rocksjava:centos7_ppc64le-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh; \
	fi
	docker start -a rocksdb_linux_ppc64le-be

2063 2064
rocksdbjavastaticpublish: rocksdbjavastaticrelease rocksdbjavastaticpublishcentral

2065 2066
rocksdbjavastaticpublishdocker: rocksdbjavastaticreleasedocker rocksdbjavastaticpublishcentral

2067
rocksdbjavastaticpublishcentral:
2068 2069 2070 2071 2072
	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
2073
	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
2074
	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
2075

2076
# A version of each $(LIBOBJECTS) compiled with -fPIC
2077 2078 2079 2080 2081 2082 2083 2084 2085
ifeq ($(HAVE_POWER8),1)
JAVA_CC_OBJECTS = $(SHARED_CC_OBJECTS)
JAVA_C_OBJECTS = $(SHARED_C_OBJECTS)
JAVA_ASM_OBJECTS = $(SHARED_ASM_OBJECTS)

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

S
Sagar Vemuri 已提交
2086
java_libobjects = $(patsubst %,jl/%,$(LIB_CC_OBJECTS))
2087
CLEAN_FILES += jl
2088 2089 2090 2091 2092
java_all_libobjects = $(java_libobjects)

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

雷鹏 已提交
2093
jl/${xdir}/crc32c_ppc.o: util/crc32c_ppc.c
2094 2095
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@

雷鹏 已提交
2096
jl/${xdir}/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S
2097 2098 2099
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
java_all_libobjects += $(java_ppc_libobjects)
endif
2100

雷鹏 已提交
2101
$(java_libobjects): jl/${xdir}/%.o: %.cc
2102 2103
	$(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) -fPIC -c $< -o $@ $(COVERAGEFLAGS)

2104
rocksdbjava: $(java_all_libobjects)
2105 2106
	$(AM_V_GEN)cd java;$(MAKE) javalib;
	$(AM_V_at)rm -f ./java/target/$(ROCKSDBJNILIB)
2107
	$(AM_V_at)$(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC -o ./java/target/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) $(java_all_libobjects) $(JAVA_LDFLAGS) $(COVERAGEFLAGS)
2108 2109 2110
	$(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
2111 2112 2113 2114

jclean:
	cd java;$(MAKE) clean;

2115 2116 2117 2118 2119 2120
jtest_compile: rocksdbjava
	cd java;$(MAKE) java_test

jtest_run:
	cd java;$(MAKE) run_test

2121
jtest: rocksdbjava
2122
	cd java;$(MAKE) sample;$(MAKE) test;
2123

2124 2125 2126
jdb_bench:
	cd java;$(MAKE) db_bench;

2127 2128
commit_prereq: build_tools/rocksdb-lego-determinator \
               build_tools/precommit_checker.py
2129
	J=$(J) build_tools/precommit_checker.py unit unit_481 clang_unit release release_481 clang_release tsan asan ubsan lite unit_non_shm
2130
	$(MAKE) clean && $(MAKE) jclean && $(MAKE) rocksdbjava;
2131

2132 2133 2134
# ---------------------------------------------------------------------------
#  	Platform-specific compilation
# ---------------------------------------------------------------------------
J
Jim Paton 已提交
2135

2136 2137 2138
ifeq ($(PLATFORM), IOS)
# For iOS, create universal object files to be used on both the simulator and
# a device.
H
heyongqiang 已提交
2139 2140 2141
PLATFORMSROOT=/Applications/Xcode.app/Contents/Developer/Platforms
SIMULATORROOT=$(PLATFORMSROOT)/iPhoneSimulator.platform/Developer
DEVICEROOT=$(PLATFORMSROOT)/iPhoneOS.platform/Developer
I
Igor Canadi 已提交
2142
IOSVERSION=$(shell defaults read $(PLATFORMSROOT)/iPhoneOS.platform/version CFBundleShortVersionString)
2143

2144 2145
.cc.o:
	mkdir -p ios-x86/$(dir $@)
I
Igor Canadi 已提交
2146
	$(CXX) $(CXXFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@
2147
	mkdir -p ios-arm/$(dir $@)
I
Igor Canadi 已提交
2148
	xcrun -sdk iphoneos $(CXX) $(CXXFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -arch armv7s -arch arm64 -c $< -o ios-arm/$@
2149
	lipo ios-x86/$@ ios-arm/$@ -create -output $@
2150 2151 2152

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

2158
else
2159 2160 2161 2162 2163 2164 2165
ifeq ($(HAVE_POWER8),1)
util/crc32c_ppc.o: util/crc32c_ppc.c
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@

util/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
endif
2166
.cc.o:
2167
	$(AM_V_CC)$(CXX) $(CXXFLAGS) -c $< -o $@ $(COVERAGEFLAGS)
2168

2169
.c.o:
2170
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
2171
endif
2172 2173 2174 2175
# ---------------------------------------------------------------------------
#  	Source files dependencies detection
# ---------------------------------------------------------------------------

2176
all_sources = $(LIB_SOURCES) $(MAIN_SOURCES) $(MOCK_LIB_SOURCES) $(TOOL_LIB_SOURCES) $(BENCH_LIB_SOURCES) $(TEST_LIB_SOURCES) $(EXP_LIB_SOURCES) $(ANALYZER_LIB_SOURCES)
2177
DEPFILES = $(addprefix ${xdir}/,$(all_sources:.cc=.cc.d))
2178

2179 2180 2181 2182 2183
# 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.
2184 2185
${xdir}/%.cc.d: %.cc
	@mkdir -p $(dir $@)
2186
	@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
2187
	  -MM -MT'$@' -MT'$(<:.cc=.o)' "$<" -o '$@'
2188

2189
ifeq ($(HAVE_POWER8),1)
2190 2191
DEPFILES_C = $(addprefix ${xdir}/,$(LIB_SOURCES_C:.c=.c.d))
DEPFILES_ASM = $(addprefix ${xdir}/,$(LIB_SOURCES_ASM:.S=.S.d))
2192

2193 2194
${xdir}/%.c.d: %.c
	@mkdir -p $(dir $@)
2195 2196 2197
	@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
	  -MM -MT'$@' -MT'$(<:.c=.o)' "$<" -o '$@'

2198 2199
${xdir}/%.S.d: %.S
	@mkdir -p $(dir $@)
2200 2201 2202 2203 2204 2205 2206 2207
	@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
	  -MM -MT'$@' -MT'$(<:.S=.o)' "$<" -o '$@'

$(DEPFILES_C): %.c.d

$(DEPFILES_ASM): %.S.d
depend: $(DEPFILES) $(DEPFILES_C) $(DEPFILES_ASM)
else
2208
depend: $(DEPFILES)
2209
endif
2210

2211 2212 2213 2214 2215 2216 2217 2218
COMPRESSION_HEADERS :=          \
  snappy-1.1.4/snappy.h         \
  lz4-1.8.0/lib/lz4.h           \
  zstd-1.3.3/lib/include/zstd.h \
  zlib-1.2.11/zlib.h

${DEPFILES} : ${COMPRESSION_HEADERS}

2219 2220 2221 2222
# 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.
2223
ifneq ($(MAKECMDGOALS),clean)
2224
ifneq ($(MAKECMDGOALS),format)
2225 2226
ifneq ($(MAKECMDGOALS),jclean)
ifneq ($(MAKECMDGOALS),jtest)
2227
ifneq ($(MAKECMDGOALS),package)
2228
ifneq ($(MAKECMDGOALS),analyze)
2229 2230
-include $(DEPFILES)
endif
2231
endif
2232 2233
endif
endif
2234
endif
2235
endif