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

郭宽宽 已提交
10 11 12
# For Flink Rocksdb Version
FROCKSDB_VERSION ?= 2.0

J
Jonathan Lee 已提交
13 14 15
BASH_EXISTS := $(shell which bash)
SHELL := $(shell which bash)

L
leipeng 已提交
16
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 已提交
17
COMPRESSION_LDFLAGS  ?= -L. -lsnappy -lz -llz4
18

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

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

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

# Set the default DEBUG_LEVEL to 1
DEBUG_LEVEL?=1
53 54

ifeq ($(MAKECMDGOALS),dbg)
Y
Yueh-Hsuan Chiang 已提交
55
	DEBUG_LEVEL=2
56
endif
57

58 59 60 61 62 63 64 65
ifeq ($(MAKECMDGOALS),clean)
	DEBUG_LEVEL=0
endif

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

C
chenchanglong 已提交
66 67 68
ifeq ($(MAKECMDGOALS),shared_lib)
	DEBUG_LEVEL=0
endif
I
Igor Canadi 已提交
69

C
chenchanglong 已提交
70 71 72
ifeq ($(MAKECMDGOALS),install-shared)
	DEBUG_LEVEL=0
endif
I
Igor Canadi 已提交
73

C
chenchanglong 已提交
74 75 76
ifeq ($(MAKECMDGOALS),static_lib)
	DEBUG_LEVEL=0
endif
I
Igor Canadi 已提交
77

C
chenchanglong 已提交
78 79 80
ifeq ($(MAKECMDGOALS),install-static)
	DEBUG_LEVEL=0
endif
I
Igor Canadi 已提交
81 82

ifeq ($(MAKECMDGOALS),install)
Y
Yueh-Hsuan Chiang 已提交
83
	DEBUG_LEVEL=0
84 85
endif

86
ifeq ($(MAKECMDGOALS),rocksdbjavastatic)
87 88 89
	ifneq ($(DEBUG_LEVEL),2)
		DEBUG_LEVEL=0
	endif
90 91
endif

Y
Yueh-Hsuan Chiang 已提交
92 93 94 95
ifeq ($(MAKECMDGOALS),rocksdbjavastaticrelease)
	DEBUG_LEVEL=0
endif

96 97 98 99
ifeq ($(MAKECMDGOALS),rocksdbjavastaticreleasedocker)
        DEBUG_LEVEL=0
endif

Y
Yueh-Hsuan Chiang 已提交
100 101 102 103
ifeq ($(MAKECMDGOALS),rocksdbjavastaticpublish)
	DEBUG_LEVEL=0
endif

郭宽宽 已提交
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
ifeq ($(MAKECMDGOALS),frocksdbjavastatic)
	ifneq ($(DEBUG_LEVEL),2)
		DEBUG_LEVEL=0
	endif
endif

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

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

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

雷鹏 已提交
122 123
###############################################################################
## Terark specific
L
leipeng 已提交
124

125
ifeq (${DEBUG_LEVEL},0)
奏之章 已提交
126
  DBG_OR_RLS=r
127 128 129 130 131
endif
ifeq (${DEBUG_LEVEL},1)
  DBG_OR_RLS=a
endif
ifeq (${DEBUG_LEVEL},2)
奏之章 已提交
132 133 134
  DBG_OR_RLS=d
endif

雷鹏 已提交
135
BMI2 ?= $(shell bash cpu_has_bmi2.sh)
雷鹏 已提交
136 137 138 139
BUILD_NAME := $(shell bash get_terark_build_name.sh ${CXX} ${BMI2})
BUILD_ROOT := build/${BUILD_NAME}
xdir:=${BUILD_ROOT}/dbg-${DEBUG_LEVEL}

C
chenchanglong 已提交
140
TERARK_CORE_HOME ?= terark-core
C
chenchanglong 已提交
141
TERARK_CORE_PKG_DIR := ${TERARK_CORE_HOME}/pkg/terark-fsa_all-${BUILD_NAME}
C
chenchanglong 已提交
142 143 144 145 146 147 148
BOOST_LIB_DIR := ${TERARK_CORE_HOME}/boost-include/stage/lib
LINK_SHARED_BOOST := -L${BOOST_LIB_DIR} \
					 -lboost_context \
					 -lboost_fiber \
					 -lboost_filesystem \
					 -lboost_system \
					 -ldl
149

L
leipeng 已提交
150
CXXFLAGS += -march=haswell
Z
ZhaoMing 已提交
151
CXXFLAGS += -I${TERARK_CORE_HOME}/src -I${TERARK_CORE_HOME}/boost-include -I${TERARK_CORE_HOME}/3rdparty/zstd
L
leipeng 已提交
152

林源劲 已提交
153 154 155 156 157
CPPUTIL_METRICS2_HOME ?= third-party/metrics2-cmake
LDFLAGS += ${CPPUTIL_METRICS2_HOME}/cmake-build/libmetrics2.a
CFLAGS += -I${CPPUTIL_METRICS2_HOME}
CXXFLAGS += -I${CPPUTIL_METRICS2_HOME}

L
leipeng 已提交
158
#------------------------------------------------------------------------------
L
leipeng 已提交
159
ifeq (${TERARK_CORE_HOME},terark-core)
L
leipeng 已提交
160
terark-core.got:
C
chenchanglong 已提交
161 162
ifdef TERARK_CORE_BRANCH
	cd terark-core && git checkout ${TERARK_CORE_BRANCH} && git submodule update --init
163
endif
C
chenchanglong 已提交
164
	+$(MAKE) -C terark-core pkg PKG_WITH_DBG=1 PKG_WITH_STATIC=1 WITH_BMI2=${BMI2}
L
leipeng 已提交
165 166
	touch $@
endif
L
leipeng 已提交
167
LINK_TERARK ?= static
雷鹏 已提交
168

L
leipeng 已提交
169 170 171 172
ifeq ($(shell uname),Darwin)
  LIB_GOMP :=
else
  LIB_GOMP := -lgomp
雷鹏 已提交
173 174
endif

C
chenchanglong 已提交
175 176 177 178 179
LINK_SHARED_TERARK := -lterark-idx-${DBG_OR_RLS} \
					  -lterark-zbs-${DBG_OR_RLS} \
					  -lterark-fsa-${DBG_OR_RLS} \
					  -lterark-core-${DBG_OR_RLS} -ldl ${LIB_GOMP}

雷鹏 已提交
180
ifeq ($(LINK_TERARK),shared)
181
  export LD_LIBRARY_PATH:=${TERARK_CORE_PKG_DIR}/lib:${LD_LIBRARY_PATH}
赵明 已提交
182 183 184 185
  TerarkLDFLAGS += -lterark-idx-${DBG_OR_RLS} \
                   -lterark-zbs-${DBG_OR_RLS} \
                   -lterark-fsa-${DBG_OR_RLS} \
                   -lterark-core-${DBG_OR_RLS} -ldl ${LIB_GOMP}
奏之章 已提交
186
endif
赵明 已提交
187

雷鹏 已提交
188
ifeq ($(LINK_TERARK),static)
189 190 191 192 193
  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 已提交
194
  ifeq ($(shell uname),Darwin)
L
leipeng 已提交
195 196 197 198 199
    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 已提交
200
  endif
L
leipeng 已提交
201
  override LINK_STATIC_TERARK += ${LIB_GOMP}
L
leipeng 已提交
202

奏之章 已提交
203
endif
L
leipeng 已提交
204

雷鹏 已提交
205
###############################################################################
奏之章 已提交
206

Y
Yi Wu 已提交
207 208
# Lite build flag.
LITE ?= 0
209 210 211 212 213 214 215 216
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 已提交
217 218
	OPT += -DROCKSDB_LITE
endif
219
endif
Y
Yi Wu 已提交
220 221 222 223 224 225 226 227 228 229

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

230 231
# compile with -O2 if debug level is not 2
ifneq ($(DEBUG_LEVEL), 2)
Y
Yi Wu 已提交
232
OPT += -fno-omit-frame-pointer
233 234
# 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))
235 236 237 238
OPT += -momit-leaf-frame-pointer
endif
endif

239 240 241 242 243 244 245 246 247 248 249 250
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

251
# if we're compiling for release, compile without debug code (-DNDEBUG)
252
ifeq ($(DEBUG_LEVEL),0)
L
leipeng 已提交
253
OPT += -DNDEBUG -DBOOST_DISABLE_ASSERTS
S
Siying Dong 已提交
254 255 256 257 258 259

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

赵明 已提交
264 265 266 267
ifeq ($(TERARKDB_ENABLE_METRICS),1)
OPT += -DTERARKDB_ENABLE_METRICS
endif

L
linyuanjin 已提交
268 269 270 271
ifeq ($(TERARKDB_ENABLE_CONSOLE),1)
OPT += -DTERARKDB_ENABLE_CONSOLE
endif

272
#-----------------------------------------------
273
include src.mk
274

奏之章 已提交
275
AM_DEFAULT_VERBOSITY = 1
276 277 278 279 280

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 已提交
281 282 283 284
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
am__v_at_0 = @
am__v_at_1 =
285 286 287 288 289 290 291 292 293 294 295

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 已提交
296 297 298 299
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 =
300

301 302 303 304
ifdef ROCKSDB_USE_LIBRADOS
LIB_SOURCES += utilities/env_librados.cc
LDFLAGS += -lrados
endif
305

雷鹏 已提交
306 307
LIB_SOURCES += ${TERARK_ZIP_SRC}

308
CMAKE_BUILD_TYPE=Debug
赵明 已提交
309 310
ifeq ($(DEBUG_LEVEL),0)
  LIBNAME_SUFFIX=
311
	CMAKE_BUILD_TYPE=RelWithDebInfo
赵明 已提交
312 313 314 315 316 317 318 319 320 321
endif
ifeq ($(DEBUG_LEVEL),1)
  LIBNAME_SUFFIX=_assert
endif
ifeq ($(DEBUG_LEVEL),2)
  LIBNAME_SUFFIX=_debug
endif

AM_LINK = $(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LINK_STATIC_TERARK) $(LDFLAGS) $(COVERAGEFLAGS)
ifeq ($(shell uname),Darwin)
Z
ZhaoMing 已提交
322
  AM_LINK_SHR_LDFLAGS=-lrocksdb${LIBNAME_SUFFIX}
赵明 已提交
323 324 325
else
  AM_LINK_SHR_LDFLAGS=-Wl,-Bdynamic -lrocksdb${LIBNAME_SUFFIX}
endif
C
chenchanglong 已提交
326
AM_LINK_SHR = $(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(COVERAGEFLAGS) $(AM_LINK_SHR_LDFLAGS) $(LINK_SHARED_BOOST)
327
# detect what platform we're building on
奏之章 已提交
328 329 330 331
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 已提交
332
# this file is generated by the previous line to set build flags and sources
I
Igor Canadi 已提交
333
include make_config.mk
334
CLEAN_FILES += make_config.mk
J
jorlow@chromium.org 已提交
335

336 337 338 339 340 341 342 343 344
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 已提交
345 346 347
ifeq ($(PLATFORM), OS_AIX)
# no debug info
else ifneq ($(PLATFORM), IOS)
I
Igor Canadi 已提交
348 349 350 351
CFLAGS += -g
CXXFLAGS += -g
else
# no debug info for IOS, that will make our library big
L
leipeng 已提交
352
OPT += -DNDEBUG -DBOOST_DISABLE_ASSERTS
I
Igor Canadi 已提交
353 354
endif

T
Tomas Kolda 已提交
355 356 357 358 359
ifeq ($(PLATFORM), OS_AIX)
ARFLAGS = -X64 rs
STRIPFLAGS = -X64 -x
endif

D
David Bernard 已提交
360 361 362
ifeq ($(PLATFORM), OS_SOLARIS)
	PLATFORM_CXXFLAGS += -D _GLIBCXX_USE_C99
endif
363
ifneq ($(filter -DROCKSDB_LITE,$(OPT)),)
Y
Yueh-Hsuan Chiang 已提交
364 365 366
	# found
	CFLAGS += -fno-exceptions
	CXXFLAGS += -fno-exceptions
367 368
	# LUA is not supported under ROCKSDB_LITE
	LUA_PATH =
369 370
endif

I
Igor Canadi 已提交
371 372
# 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 已提交
373 374 375 376
	DISABLE_JEMALLOC=1
	EXEC_LDFLAGS += -fsanitize=address
	PLATFORM_CCFLAGS += -fsanitize=address
	PLATFORM_CXXFLAGS += -fsanitize=address
I
Igor Canadi 已提交
377 378 379 380
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 已提交
381
	DISABLE_JEMALLOC=1
S
Siying Dong 已提交
382
	EXEC_LDFLAGS += -fsanitize=thread
383 384
	PLATFORM_CCFLAGS += -fsanitize=thread -fPIC
	PLATFORM_CXXFLAGS += -fsanitize=thread -fPIC
385 386
        # Turn off -pg when enabling TSAN testing, because that induces
        # a link failure.  TODO: find the root cause
D
dx9 已提交
387
	PROFILING_FLAGS =
388 389
	# LUA is not supported under TSAN
	LUA_PATH =
390 391 392
	# Limit keys for crash test under TSAN to avoid error:
	# "ThreadSanitizer: DenseSlabAllocator overflow. Dying."
	CRASH_TEST_EXT_ARGS += --max_key=1000000
I
Igor Canadi 已提交
393 394
endif

T
Tomas Kolda 已提交
395 396 397 398 399
# AIX doesn't work with -pg
ifeq ($(PLATFORM), OS_AIX)
	PROFILING_FLAGS =
endif

400 401 402
# 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 已提交
403 404 405 406
	# 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.
407 408 409
	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
410 411
endif

412 413 414 415 416
ifdef ROCKSDB_VALGRIND_RUN
	PLATFORM_CCFLAGS += -DROCKSDB_VALGRIND_RUN
	PLATFORM_CXXFLAGS += -DROCKSDB_VALGRIND_RUN
endif

I
Igor Canadi 已提交
417
ifndef DISABLE_JEMALLOC
418
	ifdef JEMALLOC
T
Tamir Duberstein 已提交
419 420
		PLATFORM_CXXFLAGS += -DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE
		PLATFORM_CCFLAGS  += -DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE
421
	endif
422 423 424 425
	ifdef WITH_JEMALLOC_FLAG
		PLATFORM_LDFLAGS += -ljemalloc
		JAVA_LDFLAGS += -ljemalloc
	endif
Y
Yueh-Hsuan Chiang 已提交
426 427 428
	EXEC_LDFLAGS := $(JEMALLOC_LIB) $(EXEC_LDFLAGS)
	PLATFORM_CXXFLAGS += $(JEMALLOC_INCLUDE)
	PLATFORM_CCFLAGS += $(JEMALLOC_INCLUDE)
I
Igor Canadi 已提交
429 430
endif

T
Tamir Duberstein 已提交
431 432
export GTEST_THROW_ON_FAILURE=1
export GTEST_HAS_EXCEPTIONS=1
I
Igor Sugak 已提交
433
GTEST_DIR = ./third-party/gtest-1.7.0/fused-src
T
Tomas Kolda 已提交
434 435 436 437 438 439 440 441
# 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 已提交
442

443 444 445
# This (the first rule) must depend on "all".
default: all

446
WARNING_FLAGS = -W -Wextra -Wall -Wsign-compare \
447
  -Wunused-parameter
448

449 450 451 452
ifdef Wshadow_local
    WARNING_FLAGS += -Wshadow=local
endif

453 454 455 456
ifeq ($(PLATFORM), OS_OPENBSD)
	WARNING_FLAGS += -Wno-unused-lambda-capture
endif

457
ifndef DISABLE_WARNING_AS_ERROR
Y
Yueh-Hsuan Chiang 已提交
458
	WARNING_FLAGS += -Werror
459 460
endif

461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483

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
484
EXEC_LDFLAGS += $(LUA_LIB)
485 486 487

endif

488 489 490
ifeq ($(NO_THREEWAY_CRC32C), 1)
	CXXFLAGS += -DNO_THREEWAY_CRC32C
endif
491

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

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

497 498 499
# 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
500
date := $(shell date +%F)
I
Igor Canadi 已提交
501
ifdef FORCE_GIT_SHA
Y
Yueh-Hsuan Chiang 已提交
502
	git_sha := $(FORCE_GIT_SHA)
I
Igor Canadi 已提交
503
else
Y
Yueh-Hsuan Chiang 已提交
504
	git_sha := $(shell git rev-parse HEAD 2>/dev/null)
I
Igor Canadi 已提交
505
endif
506
gen_build_version = sed -e s/@@GIT_SHA@@/$(git_sha)/ -e s/@@GIT_DATE_TIME@@/$(date)/ util/build_version.cc.in
507 508 509 510 511 512

# 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.
513 514
FORCE:
util/build_version.cc: FORCE
Y
Yueh-Hsuan Chiang 已提交
515 516 517 518 519
	$(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
520
endif
521

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

525
ifeq (${TERARK_CORE_HOME},terark-core)
Z
ZhaoMing 已提交
526
${LIB_SOURCES} ${LIB_SOURCES:.cc=.o} : terark-core.got
C
chenchanglong 已提交
527
${LIB_SOURCES} ${LIB_SOURCES:.cc=.o} : CXXFLAGS += -Wno-unused-parameter
528
endif
Z
ZhaoMing 已提交
529

530
ifeq ($(HAVE_POWER8),1)
雷鹏 已提交
531 532
LIBOBJECTS += $(addprefix ${xdir}/, $(LIB_SOURCES_C:.c=.o))
LIBOBJECTS += $(addprefix ${xdir}/, $(LIB_SOURCES_ASM:.S=.o))
533 534
endif

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

赵明 已提交
538 539
${xdir}/util/testharness.o: shared_lib

雷鹏 已提交
540 541 542
GTEST = ${xdir}/$(GTEST_DIR)/gtest/gtest-all.o
TESTUTIL = ${xdir}/util/testutil.o
TESTHARNESS = ${xdir}/util/testharness.o $(TESTUTIL) $(MOCKOBJECTS) $(GTEST)
543
VALGRIND_ERROR = 2
544
VALGRIND_VER := $(join $(VALGRIND_VER),valgrind)
545

546
VALGRIND_OPTS = --error-exitcode=$(VALGRIND_ERROR) --leak-check=full
547

L
leipeng 已提交
548
BENCHTOOLOBJECTS = $(BENCH_LIB_SOURCES:.cc=.o) $(TESTUTIL)
赵明 已提交
549 550

ANALYZETOOLOBJECTS = $(ANALYZER_LIB_SOURCES:.cc=.o)
551

赵明 已提交
552
EXPOBJECTS = $(addprefix ${xdir}/, $(EXP_LIB_SOURCES:.cc=.o)) $(TESTUTIL)
O
omegaga 已提交
553

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

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

726 727 728 729
# 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 已提交
730 731 732 733 734 735 736 737
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
738

739
TOOLS = \
Y
Yueh-Hsuan Chiang 已提交
740 741 742
	sst_dump \
	db_sanity_test \
	db_stress \
I
Igor Canadi 已提交
743
	write_stress \
Y
Yueh-Hsuan Chiang 已提交
744
	ldb \
L
leipeng 已提交
745
	kvpipe \
赵明 已提交
746
	remote_compaction_worker_101 \
Y
Yueh-Hsuan Chiang 已提交
747 748
	db_repl_stress \
	rocksdb_dump \
Y
Yi Wu 已提交
749
	rocksdb_undump \
Z
Zhichao Cao 已提交
750
	trace_analyzer \
J
jorlow@chromium.org 已提交
751

752 753 754
TEST_LIBS = \
	librocksdb_env_basic_test.a

S
sdong 已提交
755
# TODO: add back forward_iterator_bench, after making it build in all environemnts.
756
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 已提交
757

758
# if user didn't config LIBNAME, set the default
759
ifeq ($(LIBNAME),)
760
# we should only run rocksdb in production with DEBUG_LEVEL 0
赵明 已提交
761
  LIBNAME=librocksdb${LIBNAME_SUFFIX}
762
endif
763
LIBRARY = ${LIBNAME}.a
764
TOOLS_LIBRARY = ${LIBNAME}_tools.a
765

766 767 768
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)
769

770 771
default: all

772 773 774
#-----------------------------------------------
# Create platform independent shared libraries.
#-----------------------------------------------
775
ifneq ($(PLATFORM_SHARED_EXT),)
H
heyongqiang 已提交
776 777

ifneq ($(PLATFORM_SHARED_VERSIONED),true)
778
SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
H
heyongqiang 已提交
779 780
SHARED2 = $(SHARED1)
SHARED3 = $(SHARED1)
781
SHARED4 = $(SHARED1)
H
heyongqiang 已提交
782 783
SHARED = $(SHARED1)
else
784 785
SHARED_MAJOR = $(ROCKSDB_MAJOR)
SHARED_MINOR = $(ROCKSDB_MINOR)
786
SHARED_PATCH = $(ROCKSDB_PATCH)
787
SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
788 789 790 791 792 793
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
794 795
SHARED2 = $(SHARED1).$(SHARED_MAJOR)
SHARED3 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR)
796
SHARED4 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR).$(SHARED_PATCH)
797
endif
798
SHARED = $(SHARED1) $(SHARED2) $(SHARED3) $(SHARED4)
奏之章 已提交
799

L
leipeng 已提交
800 801 802 803 804
$(SHARED1): $(SHARED2)
	ln -fs $(SHARED2) $(SHARED1)
$(SHARED2): $(SHARED3)
	ln -fs $(SHARED3) $(SHARED2)
$(SHARED3): $(SHARED4)
Y
Yueh-Hsuan Chiang 已提交
805
	ln -fs $(SHARED4) $(SHARED3)
林源劲 已提交
806
$(SHARED4): shared-objects/${xdir}/${SHARED4} cpputil_metrics2
Z
ZhaoMing 已提交
807
	ln -fs $< $@
奏之章 已提交
808

809
ifeq ($(HAVE_POWER8),1)
雷鹏 已提交
810 811
SHARED_C_OBJECTS = $(addprefix ${xdir}/, $(LIB_SOURCES_C:.c=.o))
SHARED_ASM_OBJECTS = $(addprefix ${xdir}/, $(LIB_SOURCES_ASM:.S=.o))
812 813 814 815
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
816
shared_libobjects = $(patsubst %,shared-objects/%,$(LIBOBJECTS))
817 818
endif

819
CLEAN_FILES += shared-objects
820
shared_all_libobjects = $(shared_libobjects)
821

822 823 824
ifeq ($(HAVE_POWER8),1)
shared-ppc-objects = $(SHARED_C_LIBOBJECTS) $(SHARED_ASM_LIBOBJECTS)

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

雷鹏 已提交
828
shared-objects/${xdir}/util/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S
829 830
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
endif
雷鹏 已提交
831
shared-objects/${xdir}/%.o: %.cc
832 833
	$(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) -c $< -o $@

834 835 836
ifeq ($(HAVE_POWER8),1)
shared_all_libobjects = $(shared_libobjects) $(shared-ppc-objects)
endif
奏之章 已提交
837

雷鹏 已提交
838
shared-objects/${xdir}/$(SHARED1): shared-objects/${xdir}/$(SHARED4)
奏之章 已提交
839
	cd  $(dir $@) ; ln -fs $(notdir $<) $(notdir $@)
雷鹏 已提交
840
shared-objects/${xdir}/$(SHARED2): shared-objects/${xdir}/$(SHARED4)
奏之章 已提交
841
	cd  $(dir $@) ; ln -fs $(notdir $<) $(notdir $@)
雷鹏 已提交
842
shared-objects/${xdir}/$(SHARED3): shared-objects/${xdir}/$(SHARED4)
奏之章 已提交
843 844 845 846
	cd  $(dir $@) ; ln -fs $(notdir $<) $(notdir $@)

endif # PLATFORM_SHARED_VERSIONED

雷鹏 已提交
847
shared-objects/${xdir}/$(SHARED4): $(shared_all_libobjects)
奏之章 已提交
848
	$(CXX) $^ $(PLATFORM_SHARED_LDFLAGS)$(SHARED3) \
雷鹏 已提交
849
		      $(PLATFORM_SHARED_CFLAGS) $(LDFLAGS) $(LINK_STATIC_TERARK) $(TerarkLDFLAGS) -o $@
奏之章 已提交
850 851 852

${xdir}/%.o: %.cc
	@mkdir -p $(dir $@)
853
	$(CXX) -c $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) -o $@ $<
H
heyongqiang 已提交
854 855 856

endif  # PLATFORM_SHARED_EXT

857
.PHONY: blackbox_crash_test check clean coverage crash_test ldb_tests package \
858
	release tags tags0 valgrind_check whitebox_crash_test format static_lib shared_lib all \
Y
Yueh-Hsuan Chiang 已提交
859
	dbg rocksdbjavastatic rocksdbjava install install-static install-shared uninstall \
860
	analyze tools tools_lib
861

C
chenchanglong 已提交
862
all: $(LIBRARY) $(SHARED) $(BENCHMARKS) tools tools_lib test_libs $(TESTS)
863

864 865
all_but_some_tests: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(SUBSET)

林源劲 已提交
866
${CPPUTIL_METRICS2_HOME}/cmake-build/libmetrics2.a:
867
	mkdir -p ${CPPUTIL_METRICS2_HOME}/cmake-build && cd ${CPPUTIL_METRICS2_HOME}/cmake-build && cmake .. -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} && make
林源劲 已提交
868 869 870

cpputil_metrics2: ${CPPUTIL_METRICS2_HOME}/cmake-build/libmetrics2.a

I
Igor Canadi 已提交
871 872 873 874
static_lib: $(LIBRARY)

shared_lib: $(SHARED)

M
maurice barnum 已提交
875 876
tools: $(TOOLS)

877 878
tools_lib: $(TOOLS_LIBRARY)

879 880
test_libs: $(TEST_LIBS)

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

883
# creates static library and programs
884
release:
Y
Yueh-Hsuan Chiang 已提交
885
	$(MAKE) clean
886
	DEBUG_LEVEL=0 $(MAKE) static_lib tools db_bench
K
Kai Liu 已提交
887 888

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

Y
Yi Wu 已提交
895 896 897 898 899
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 已提交
900 901
TMPDIR := $(shell echo $${TMPDIR:-/tmp})
TMPD := $(shell f=/dev/shm; test -k $$f || f=$(TMPDIR);     \
Y
Yi Wu 已提交
902 903 904 905 906 907 908 909 910 911 912 913 914 915
  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.
916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933
# 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 已提交
934 935 936 937 938 939 940 941 942 943 944
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 \
945
		TEST_SCRIPT=t/run-$$TEST_BINARY-$${TEST_NAME//\//-}; \
Y
Yi Wu 已提交
946 947 948 949 950
		echo "  GEN     " $$TEST_SCRIPT; \
    printf '%s\n' \
      '#!/bin/sh' \
      "d=\$(TMPD)$$TEST_SCRIPT" \
      'mkdir -p $$d' \
951
      "TEST_TMPDIR=\$$d $(DRIVER) ./$$TEST_BINARY --gtest_filter=$$TEST_NAME" \
Y
Yi Wu 已提交
952 953 954 955 956 957 958 959
		> $$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)
960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977

# 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 已提交
978
	^.*SnapshotConcurrentAccessTest.*$$|^t/run-table_test-HarnessTest.Randomized$$|^t/run-db_test-.*(?:FileCreationRandomFailure|EncodeDecompressedBlockSizeTest)$$|^.*RecoverFromCorruptedWALWithoutFlush$$
979
prioritize_long_running_tests =						\
Y
Yueh-Hsuan Chiang 已提交
980 981 982
  perl -pe 's,($(slow_test_regexp)),100 $$1,'				\
    | sort -k1,1gr							\
    | sed 's/^[.0-9]* //'
983 984 985 986 987 988

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

V
Venkatesh Radhakrishnan 已提交
991 992 993
# Use this regexp to select the subset of tests whose names match.
tests-regexp = .

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

1010
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
1011

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

CLEAN_FILES += t LOG $(TMPD)
1031

1032 1033 1034 1035 1036 1037 1038 1039
# 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:
1040
	$(WATCH) --interval=0 'sort -k7,7nr -k4,4gr LOG|$(quoted_perl_command)'
1041

I
Igor Canadi 已提交
1042
# If J != 1 and GNU parallel is installed, run the tests in parallel,
1043
# via the check_0 rule above.  Otherwise, run them sequentially.
C
chenchanglong 已提交
1044
check: all
Y
Yi Wu 已提交
1045
	$(MAKE) gen_parallel_tests
Y
Yueh-Hsuan Chiang 已提交
1046
	$(AM_V_GEN)if test "$(J)" != 1                                  \
C
chenchanglong 已提交
1047
	    && (build_tools/gnu_parallel --gnu --help 2>/dev/null) |    \
Y
Yueh-Hsuan Chiang 已提交
1048 1049 1050 1051 1052 1053 1054 1055
	        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 已提交
1056
ifneq ($(PLATFORM), OS_AIX)
I
Islam AbdelRahman 已提交
1057
ifeq ($(filter -DROCKSDB_LITE,$(OPT)),)
Y
Yueh-Hsuan Chiang 已提交
1058 1059
	python tools/ldb_test.py
	sh tools/rocksdb_dump_test.sh
I
Islam AbdelRahman 已提交
1060
endif
T
Tomas Kolda 已提交
1061
endif
1062

C
chenchanglong 已提交
1063 1064 1065
testing:
	echo $(CURDIR)

S
Siying Dong 已提交
1066 1067
# TODO add ldb_tests
check_some: $(SUBSET)
Y
Yueh-Hsuan Chiang 已提交
1068
	for t in $(SUBSET); do echo "===== Running $$t"; ./$$t || exit 1; done
1069 1070

.PHONY: ldb_tests
1071
ldb_tests: ldb
Y
Yueh-Hsuan Chiang 已提交
1072
	python tools/ldb_test.py
1073

I
Igor Canadi 已提交
1074
crash_test: whitebox_crash_test blackbox_crash_test
1075 1076

blackbox_crash_test: db_stress
1077
	python -u tools/db_crashtest.py --simple blackbox $(CRASH_TEST_EXT_ARGS)
1078
	python -u tools/db_crashtest.py --enable_atomic_flush blackbox $(CRASH_TEST_EXT_ARGS)
1079
	python -u tools/db_crashtest.py blackbox $(CRASH_TEST_EXT_ARGS)
1080

1081 1082 1083 1084
ifeq ($(CRASH_TEST_KILL_ODD),)
  CRASH_TEST_KILL_ODD=888887
endif

1085
whitebox_crash_test: db_stress
1086
	python -u tools/db_crashtest.py --simple whitebox --random_kill_odd \
1087 1088
      $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
	python -u tools/db_crashtest.py --enable_atomic_flush whitebox  --random_kill_odd \
1089
      $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
1090
	python -u tools/db_crashtest.py whitebox  --random_kill_odd \
1091
      $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
1092

I
Igor Canadi 已提交
1093
asan_check:
Y
Yueh-Hsuan Chiang 已提交
1094 1095 1096
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) check -j32
	$(MAKE) clean
1097 1098

asan_crash_test:
Y
Yueh-Hsuan Chiang 已提交
1099 1100 1101
	$(MAKE) clean
	COMPILE_WITH_ASAN=1 $(MAKE) crash_test
	$(MAKE) clean
I
Igor Canadi 已提交
1102

1103 1104 1105 1106 1107 1108 1109 1110 1111 1112
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

1113
valgrind_test:
1114
	ROCKSDB_VALGRIND_RUN=1 DISABLE_JEMALLOC=1 $(MAKE) valgrind_check
1115

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

1134 1135 1136 1137 1138 1139 1140

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

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

1181
analyze: clean
Y
Yueh-Hsuan Chiang 已提交
1182 1183 1184 1185
	$(CLANG_SCAN_BUILD) --use-analyzer=$(CLANG_ANALYZER) \
		--use-c++=$(CXX) --use-cc=$(CC) --status-bugs \
		-o $(CURDIR)/scan_build_report \
		$(MAKE) dbg
1186

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

E
Evan Shaw 已提交
1196 1197 1198 1199
unity.a: unity.o
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ unity.o

1200 1201

TOOLLIBOBJECTS = $(TOOL_LIB_SOURCES:.cc=.o)
I
Igor Canadi 已提交
1202
# try compiling db_test with unity
1203
unity_test: db/db_test.o db/db_test_util.o $(TESTHARNESS) $(TOOLLIBOBJECTS) unity.a
赵明 已提交
1204
	$(AM_LINK_SHR)
I
Igor Canadi 已提交
1205 1206
	./unity_test

E
Evan Shaw 已提交
1207 1208
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 已提交
1209

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

1221
tags:
1222
	ctags -R .
1223
	cscope -b `$(FIND) . -name '*.cc'` `$(FIND) . -name '*.h'` `$(FIND) . -name '*.c'`
L
Leonidas Galanis 已提交
1224
	ctags -e -R -o etags *
1225

1226 1227 1228 1229 1230 1231 1232
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 *

1233
format:
Y
Yueh-Hsuan Chiang 已提交
1234
	build_tools/format-diff.sh
1235

1236
package:
Y
Yueh-Hsuan Chiang 已提交
1237
	bash build_tools/make_package.sh $(SHARED_MAJOR).$(SHARED_MINOR)
1238

1239 1240 1241
# ---------------------------------------------------------------------------
# 	Unit tests and tools
# ---------------------------------------------------------------------------
林源劲 已提交
1242 1243

$(LIBRARY): $(LIBOBJECTS) cpputil_metrics2
Y
Yueh-Hsuan Chiang 已提交
1244 1245
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $(LIBOBJECTS)
郭宽宽 已提交
1246
ifeq (${BUNDLE_ALL_TERARK_STATIC},1)\
雷鹏 已提交
1247
	mv $@ orgin-$@
Z
ZhaoMing 已提交
1248
	ln -fs ${TERARK_CORE_PKG_DIR}/lib_static/libterark-{idx,zbs,fsa,core}-${DBG_OR_RLS}.a .
雷鹏 已提交
1249 1250
	(\
	echo create $@; \
1251
	echo addlib libterark-idx-${DBG_OR_RLS}.a; \
雷鹏 已提交
1252 1253 1254
	echo addlib libterark-zbs-${DBG_OR_RLS}.a; \
	echo addlib libterark-fsa-${DBG_OR_RLS}.a; \
	echo addlib libterark-core-${DBG_OR_RLS}.a; \
林源劲 已提交
1255
	echo addlib ${CPPUTIL_METRICS2_HOME}/cmake-build/libmetrics2.a; \
雷鹏 已提交
1256 1257 1258 1259
	echo addlib orgin-$@; \
	echo save; \
	echo end; \
	) | ar -M
1260
	rm -f libterark-{idx,zbs,fsa,core}-${DBG_OR_RLS}.a
雷鹏 已提交
1261
endif
J
jorlow@chromium.org 已提交
1262

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

赵明 已提交
1267
librocksdb_env_basic_test.a: env/env_basic_test.o $(TESTHARNESS)
1268 1269 1270
	$(AM_V_AR)rm -f $@
	$(AM_V_at)$(AR) $(ARFLAGS) $@ $^

L
leipeng 已提交
1271
db_bench: tools/db_bench.o $(BENCHTOOLOBJECTS)
M
maguoshun 已提交
1272
	$(AM_LINK_SHR) librocksdb.a -lgflags -fopenmp
J
jorlow@chromium.org 已提交
1273

1274
trace_analyzer: tools/trace_analyzer.o $(ANALYZETOOLOBJECTS) $(LIBOBJECTS)
M
maguoshun 已提交
1275
	$(AM_LINK_SHR) librocksdb.a -fopenmp
1276

赵明 已提交
1277 1278
cache_bench: cache/cache_bench.o $(TESTUTIL)
	$(AM_LINK_SHR)
J
jorlow@chromium.org 已提交
1279

赵明 已提交
1280 1281
persistent_cache_bench: utilities/persistent_cache/persistent_cache_bench.o $(TESTUTIL)
	$(AM_LINK_SHR)
1282

赵明 已提交
1283 1284
memtablerep_bench: memtable/memtablerep_bench.o $(TESTUTIL)
	$(AM_LINK_SHR)
A
Ameya Gupte 已提交
1285

赵明 已提交
1286 1287
db_stress: tools/db_stress.o $(TESTUTIL)
	$(AM_LINK_SHR)
1288

赵明 已提交
1289 1290
write_stress: tools/write_stress.o $(TESTUTIL)
	$(AM_LINK_SHR)
I
Igor Canadi 已提交
1291

赵明 已提交
1292 1293
db_sanity_test: tools/db_sanity_test.o $(TESTUTIL)
	$(AM_LINK_SHR)
1294

赵明 已提交
1295 1296
db_repl_stress: tools/db_repl_stress.o $(TESTUTIL)
	$(AM_LINK_SHR)
1297

赵明 已提交
1298 1299
arena_test: util/arena_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
J
jorlow@chromium.org 已提交
1300

赵明 已提交
1301 1302
autovector_test: util/autovector_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
K
kailiu 已提交
1303

赵明 已提交
1304 1305
column_family_test: db/column_family_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1306

赵明 已提交
1307 1308
table_properties_collector_test: db/table_properties_collector_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1309

赵明 已提交
1310 1311
bloom_test: util/bloom_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
S
Sanjay Ghemawat 已提交
1312

赵明 已提交
1313 1314
dynamic_bloom_test: util/dynamic_bloom_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1315

赵明 已提交
1316 1317
c_test: db/c_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1318

赵明 已提交
1319 1320
cache_test: cache/cache_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
J
jorlow@chromium.org 已提交
1321

赵明 已提交
1322 1323
coding_test: util/coding_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
J
jorlow@chromium.org 已提交
1324

赵明 已提交
1325 1326
hash_test: util/hash_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1327

赵明 已提交
1328 1329
option_change_migration_test: utilities/option_change_migration/option_change_migration_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1330

赵明 已提交
1331 1332
stringappend_test: utilities/merge_operators/string_append/stringappend_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1333

赵明 已提交
1334 1335
cassandra_format_test: utilities/cassandra/cassandra_format_test.o utilities/cassandra/test_utils.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1336

赵明 已提交
1337 1338
cassandra_functional_test: utilities/cassandra/cassandra_functional_test.o utilities/cassandra/test_utils.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1339

赵明 已提交
1340 1341
cassandra_row_merge_test: utilities/cassandra/cassandra_row_merge_test.o utilities/cassandra/test_utils.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1342

赵明 已提交
1343 1344
cassandra_serialize_test: utilities/cassandra/cassandra_serialize_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1345

赵明 已提交
1346 1347
redis_test: utilities/redis/redis_lists_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1348

郭宽宽 已提交
1349 1350 1351
flink_compaction_filter_test: utilities/flink/flink_compaction_filter_test.o $(TESTHARNESS) $(TESTHARNESS)
	$(AM_LINK_SHR)

赵明 已提交
1352 1353
hash_table_test: utilities/persistent_cache/hash_table_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1354

赵明 已提交
1355 1356
histogram_test: monitoring/histogram_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
A
Abhishek Kona 已提交
1357

雷鹏 已提交
1358
thread_local_test: util/thread_local_test.o $(SHARED1) $(TESTHARNESS)
赵明 已提交
1359
	$(AM_LINK_SHR)
L
Lei Jin 已提交
1360

赵明 已提交
1361 1362
corruption_test: db/corruption_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
J
jorlow@chromium.org 已提交
1363

赵明 已提交
1364 1365
crc32c_test: util/crc32c_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
J
jorlow@chromium.org 已提交
1366

赵明 已提交
1367 1368
slice_transform_test: util/slice_transform_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1369

赵明 已提交
1370 1371
db_basic_test: db/db_basic_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
E
Ewout Prangsma 已提交
1372

赵明 已提交
1373 1374
db_encryption_test: db/db_encryption_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1375

赵明 已提交
1376 1377
db_test: db/db_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
J
jorlow@chromium.org 已提交
1378

赵明 已提交
1379 1380
db_test2: db/db_test2.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1381

赵明 已提交
1382 1383
db_block_cache_test: db/db_block_cache_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1384

赵明 已提交
1385 1386
db_bloom_filter_test: db/db_bloom_filter_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
Y
Yi Wu 已提交
1387

赵明 已提交
1388 1389
db_log_iter_test: db/db_log_iter_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1390

赵明 已提交
1391 1392
db_compaction_filter_test: db/db_compaction_filter_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1393

赵明 已提交
1394 1395
db_compaction_test: db/db_compaction_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1396

赵明 已提交
1397 1398
db_dynamic_level_test: db/db_dynamic_level_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1399

赵明 已提交
1400 1401
db_flush_test: db/db_flush_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1402

赵明 已提交
1403 1404
db_inplace_update_test: db/db_inplace_update_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1405

赵明 已提交
1406 1407
db_iterator_test: db/db_iterator_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
Y
Yi Wu 已提交
1408

赵明 已提交
1409 1410
db_memtable_test: db/db_memtable_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1411

赵明 已提交
1412 1413
db_merge_operator_test: db/db_merge_operator_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1414

赵明 已提交
1415 1416
db_options_test: db/db_options_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1417

赵明 已提交
1418 1419
db_range_del_test: db/db_range_del_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1420

赵明 已提交
1421 1422
db_sst_test: db/db_sst_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
Y
Yi Wu 已提交
1423

赵明 已提交
1424 1425
db_statistics_test: db/db_statistics_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1426

赵明 已提交
1427 1428
db_write_test: db/db_write_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
Y
Yi Wu 已提交
1429

赵明 已提交
1430 1431
error_handler_test: db/error_handler_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1432

赵明 已提交
1433 1434
external_sst_file_basic_test: db/external_sst_file_basic_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
S
Siying Dong 已提交
1435

赵明 已提交
1436 1437
external_sst_file_test: db/external_sst_file_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1438

赵明 已提交
1439 1440
db_tailing_iter_test: db/db_tailing_iter_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1441

赵明 已提交
1442 1443
db_iter_test: db/db_iter_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
S
Stanislau Hlebik 已提交
1444

赵明 已提交
1445 1446
db_iter_stress_test: db/db_iter_stress_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
C
chenchanglong 已提交
1447

赵明 已提交
1448 1449
db_universal_compaction_test: db/db_universal_compaction_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1450

赵明 已提交
1451 1452
db_wal_test: db/db_wal_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
S
sdong 已提交
1453

赵明 已提交
1454 1455
db_io_failure_test: db/db_io_failure_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
O
omegaga 已提交
1456

赵明 已提交
1457 1458
db_properties_test: db/db_properties_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1459

赵明 已提交
1460 1461
db_table_properties_test: db/db_table_properties_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1462

赵明 已提交
1463 1464
log_write_bench: util/log_write_bench.o $(TESTHARNESS)
	$(AM_LINK_SHR) $(PROFILING_FLAGS)
1465

赵明 已提交
1466 1467
plain_table_db_test: db/plain_table_db_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
S
Siying Dong 已提交
1468

赵明 已提交
1469 1470
comparator_db_test: db/comparator_db_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1471

赵明 已提交
1472 1473
table_reader_bench: table/table_reader_bench.o $(TESTHARNESS)
	$(AM_LINK_SHR) $(PROFILING_FLAGS)
1474

赵明 已提交
1475 1476
perf_context_test: db/perf_context_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1477

赵明 已提交
1478 1479
prefix_test: db/prefix_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
H
Haobo Xu 已提交
1480

赵明 已提交
1481 1482
backupable_db_test: utilities/backupable/backupable_db_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
I
Igor Canadi 已提交
1483

赵明 已提交
1484 1485
checkpoint_test: utilities/checkpoint/checkpoint_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1486

赵明 已提交
1487 1488
document_db_test: utilities/document/document_db_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
I
Igor Canadi 已提交
1489

赵明 已提交
1490 1491
json_document_test: utilities/document/json_document_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
I
Igor Canadi 已提交
1492

赵明 已提交
1493 1494
sim_cache_test: utilities/simulator_cache/sim_cache_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1495

赵明 已提交
1496 1497
spatial_db_test: utilities/spatialdb/spatial_db_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
I
Igor Canadi 已提交
1498

赵明 已提交
1499 1500
env_mirror_test: utilities/env_mirror_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
S
Sage Weil 已提交
1501

赵明 已提交
1502 1503
env_timed_test: utilities/env_timed_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
A
Andrew Kryczka 已提交
1504

1505
ifdef ROCKSDB_USE_LIBRADOS
赵明 已提交
1506
env_librados_test: utilities/env_librados_test.o $(TESTHARNESS)
1507 1508 1509
	$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(COVERAGEFLAGS)
endif

赵明 已提交
1510 1511
object_registry_test: utilities/object_registry_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1512

赵明 已提交
1513 1514
ttl_test: utilities/ttl/ttl_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1515

赵明 已提交
1516 1517
date_tiered_test: utilities/date_tiered/date_tiered_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
O
omegaga 已提交
1518

赵明 已提交
1519 1520
write_batch_with_index_test: utilities/write_batch_with_index/write_batch_with_index_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1521

赵明 已提交
1522 1523
flush_job_test: db/flush_job_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
A
Andres Noetzli 已提交
1524

赵明 已提交
1525 1526
compaction_iterator_test: db/compaction_iterator_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
I
Igor Canadi 已提交
1527

赵明 已提交
1528 1529
compaction_job_test: db/compaction_job_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
I
Igor Canadi 已提交
1530

赵明 已提交
1531 1532
compaction_job_stats_test: db/compaction_job_stats_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1533

赵明 已提交
1534 1535
compact_on_deletion_collector_test: utilities/table_properties_collectors/compact_on_deletion_collector_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1536

赵明 已提交
1537 1538
wal_manager_test: db/wal_manager_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
I
Igor Canadi 已提交
1539

赵明 已提交
1540 1541
dbformat_test: db/dbformat_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
J
jorlow@chromium.org 已提交
1542

赵明 已提交
1543 1544
env_basic_test: env/env_basic_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1545

赵明 已提交
1546 1547
env_test: env/env_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
J
jorlow@chromium.org 已提交
1548

赵明 已提交
1549 1550
fault_injection_test: db/fault_injection_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1551

赵明 已提交
1552 1553
rate_limiter_test: util/rate_limiter_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
L
Lei Jin 已提交
1554

赵明 已提交
1555 1556
delete_scheduler_test: util/delete_scheduler_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
I
Islam AbdelRahman 已提交
1557

赵明 已提交
1558 1559
filename_test: db/filename_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
J
jorlow@chromium.org 已提交
1560

赵明 已提交
1561 1562
file_reader_writer_test: util/file_reader_writer_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1563

赵明 已提交
1564 1565
block_based_filter_block_test: table/block_based_filter_block_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1566

赵明 已提交
1567 1568
full_filter_block_test: table/full_filter_block_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
S
Sanjay Ghemawat 已提交
1569

赵明 已提交
1570 1571
partitioned_filter_block_test: table/partitioned_filter_block_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
M
Maysam Yabandeh 已提交
1572

赵明 已提交
1573 1574
log_test: db/log_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
M
Maysam Yabandeh 已提交
1575

赵明 已提交
1576 1577
cleanable_test: table/cleanable_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
J
jorlow@chromium.org 已提交
1578

赵明 已提交
1579 1580
table_test: table/table_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
J
jorlow@chromium.org 已提交
1581

赵明 已提交
1582 1583
block_test: table/block_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
D
Dhruba Borthakur 已提交
1584

赵明 已提交
1585 1586
data_block_hash_index_test: table/data_block_hash_index_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1587

赵明 已提交
1588 1589
inlineskiplist_test: memtable/inlineskiplist_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
N
Nathan Bronson 已提交
1590

赵明 已提交
1591 1592
skiplist_test: memtable/skiplist_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
J
jorlow@chromium.org 已提交
1593

赵明 已提交
1594 1595
write_buffer_manager_test: memtable/write_buffer_manager_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1596

赵明 已提交
1597 1598
version_edit_test: db/version_edit_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
J
jorlow@chromium.org 已提交
1599

赵明 已提交
1600 1601
version_set_test: db/version_set_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1602

赵明 已提交
1603 1604
compaction_picker_test: db/compaction_picker_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
S
sdong 已提交
1605

赵明 已提交
1606 1607
version_builder_test: db/version_builder_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
S
sdong 已提交
1608

赵明 已提交
1609 1610
file_indexer_test: db/file_indexer_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1611

赵明 已提交
1612 1613
reduce_levels_test: tools/reduce_levels_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1614

赵明 已提交
1615 1616
write_batch_test: db/write_batch_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1617

赵明 已提交
1618 1619
write_controller_test: db/write_controller_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1620

赵明 已提交
1621 1622
merge_helper_test: db/merge_helper_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1623

赵明 已提交
1624 1625
memory_test: utilities/memory/memory_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1626

赵明 已提交
1627 1628
merge_test: db/merge_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
J
jorlow@chromium.org 已提交
1629

赵明 已提交
1630 1631
merger_test: table/merger_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
I
Igor Canadi 已提交
1632

赵明 已提交
1633 1634
util_merge_operators_test: utilities/util_merge_operators_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1635

赵明 已提交
1636 1637
options_file_test: db/options_file_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1638

赵明 已提交
1639 1640
deletefile_test: db/deletefile_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1641

赵明 已提交
1642 1643
obsolete_files_test: db/obsolete_files_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1644

赵明 已提交
1645 1646
geodb_test: utilities/geodb/geodb_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1647

C
chenchanglong 已提交
1648
rocksdb_dump: tools/dump/rocksdb_dump.o
赵明 已提交
1649
	$(AM_LINK_SHR)
1650

C
chenchanglong 已提交
1651
rocksdb_undump: tools/dump/rocksdb_undump.o
赵明 已提交
1652
	$(AM_LINK_SHR)
1653

赵明 已提交
1654 1655
cuckoo_table_builder_test: table/cuckoo_table_builder_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1656

赵明 已提交
1657 1658
cuckoo_table_reader_test: table/cuckoo_table_reader_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1659

赵明 已提交
1660 1661
cuckoo_table_db_test: db/cuckoo_table_db_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1662

赵明 已提交
1663 1664
listener_test: db/listener_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1665

赵明 已提交
1666 1667
thread_list_test: util/thread_list_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
Y
Yueh-Hsuan Chiang 已提交
1668

赵明 已提交
1669 1670
compact_files_test: db/compact_files_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1671

赵明 已提交
1672 1673
options_test: options/options_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1674

赵明 已提交
1675 1676
options_settable_test: options/options_settable_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1677

赵明 已提交
1678 1679
options_util_test: utilities/options/options_util_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1680

1681
db_bench_tool_test: tools/db_bench_tool_test.o $(BENCHTOOLOBJECTS) $(TESTHARNESS)
赵明 已提交
1682
	$(AM_LINK_SHR) -lgflags
1683

赵明 已提交
1684 1685
trace_analyzer_test: tools/trace_analyzer_test.o $(ANALYZETOOLOBJECTS) $(TESTHARNESS)
	$(AM_LINK_SHR)
Z
Zhichao Cao 已提交
1686

赵明 已提交
1687 1688
event_logger_test: util/event_logger_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
I
Igor Canadi 已提交
1689

赵明 已提交
1690 1691
timer_queue_test: util/timer_queue_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
A
Anirban Rahut 已提交
1692

赵明 已提交
1693 1694
sst_dump_test: tools/sst_dump_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1695

O
omegaga 已提交
1696
column_aware_encoding_test: utilities/column_aware_encoding_test.o $(TESTHARNESS) $(EXPOBJECTS)
赵明 已提交
1697
	$(AM_LINK_SHR)
O
omegaga 已提交
1698

赵明 已提交
1699 1700
optimistic_transaction_test: utilities/transactions/optimistic_transaction_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
A
agiardullo 已提交
1701

赵明 已提交
1702 1703
mock_env_test : env/mock_env_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1704

赵明 已提交
1705 1706
manual_compaction_test: db/manual_compaction_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1707

赵明 已提交
1708 1709
filelock_test: util/filelock_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
K
Kai Liu 已提交
1710

赵明 已提交
1711 1712
auto_roll_logger_test: util/auto_roll_logger_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1713

赵明 已提交
1714 1715
memtable_list_test: db/memtable_list_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
A
agiardullo 已提交
1716

赵明 已提交
1717 1718
write_callback_test: db/write_callback_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
A
agiardullo 已提交
1719

C
chenchanglong 已提交
1720
heap_test: util/heap_test.o $(TESTHARNESS)
赵明 已提交
1721
	$(AM_LINK_SHR)
1722

赵明 已提交
1723 1724
transaction_test: utilities/transactions/transaction_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
A
agiardullo 已提交
1725

赵明 已提交
1726 1727
write_prepared_transaction_test: utilities/transactions/write_prepared_transaction_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1728

赵明 已提交
1729 1730
write_unprepared_transaction_test: utilities/transactions/write_unprepared_transaction_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1731

赵明 已提交
1732 1733
sst_dump: ${xdir}/tools/sst_dump.o
	$(AM_LINK_SHR)
1734

C
chenchanglong 已提交
1735
blob_dump: ${xdir}/tools/blob_dump.o
赵明 已提交
1736
	$(AM_LINK_SHR)
Y
Yi Wu 已提交
1737

O
omegaga 已提交
1738
column_aware_encoding_exp: utilities/column_aware_encoding_exp.o $(EXPOBJECTS)
赵明 已提交
1739
	$(AM_LINK_SHR)
O
omegaga 已提交
1740

赵明 已提交
1741 1742
repair_test: db/repair_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
A
Andrew Kryczka 已提交
1743

赵明 已提交
1744 1745
ldb_cmd_test: ${xdir}/tools/ldb_cmd_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1746

L
leipeng.tk 已提交
1747
ldb: ${xdir}/tools/ldb.o $(SHARED1)
赵明 已提交
1748
	$(AM_LINK_SHR)
1749

L
leipeng 已提交
1750
kvpipe: ${xdir}/tools/kvpipe.o ${SHARED1}
赵明 已提交
1751
	$(AM_LINK_SHR)
1752

1753
remote_compaction_worker_101: ${xdir}/tools/remote_compaction_worker_101.o ${SHARED1}
赵明 已提交
1754
	$(AM_LINK_SHR)
1755

L
leipeng 已提交
1756
multi_get: ${xdir}/tools/multi_get.o ${SHARED1}
赵明 已提交
1757
	$(AM_LINK_SHR)
1758

赵明 已提交
1759 1760
iostats_context_test: monitoring/iostats_context_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1761

赵明 已提交
1762 1763
persistent_cache_test: utilities/persistent_cache/persistent_cache_test.o  db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1764

赵明 已提交
1765 1766
statistics_test: monitoring/statistics_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
Y
Yi Wu 已提交
1767

赵明 已提交
1768 1769
lru_cache_test: cache/lru_cache_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
Y
Yi Wu 已提交
1770

赵明 已提交
1771 1772
lua_test: utilities/lua/rocks_lua_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
A
Andrew Kryczka 已提交
1773

赵明 已提交
1774 1775
range_del_aggregator_test: db/range_del_aggregator_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1776

赵明 已提交
1777 1778
range_del_aggregator_bench: db/range_del_aggregator_bench.o $(TESTUTIL)
	$(AM_LINK_SHR)
1779

赵明 已提交
1780 1781
repeatable_thread_test: util/repeatable_thread_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
奏之章 已提交
1782

赵明 已提交
1783 1784
terark_zip_table_db_test: db/terark_zip_table_db_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
Z
ZhaoMing 已提交
1785

赵明 已提交
1786 1787
terark_zip_table_reader_test: table/terark_zip_table_reader_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
1788

赵明 已提交
1789 1790
range_tombstone_fragmenter_test: db/range_tombstone_fragmenter_test.o db/db_test_util.o $(TESTHARNESS)
	$(AM_LINK_SHR)
奏之章 已提交
1791

赵明 已提交
1792 1793
sst_file_reader_test: table/sst_file_reader_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
Z
ZhaoMing 已提交
1794

赵明 已提交
1795 1796
lazy_buffer_test: util/lazy_buffer_test.o $(TESTHARNESS)
	$(AM_LINK_SHR)
Z
ZhaoMing 已提交
1797

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

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


1835 1836 1837 1838
# ---------------------------------------------------------------------------
# Jni stuff
# ---------------------------------------------------------------------------

1839
JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/linux
D
David Bernard 已提交
1840 1841
ifeq ($(PLATFORM), OS_SOLARIS)
	ARCH := $(shell isainfo -b)
1842 1843 1844 1845 1846 1847
else ifeq ($(PLATFORM), OS_OPENBSD)
	ifneq (,$(filter $(MACHINE), amd64 arm64 sparc64))
		ARCH := 64
	else
		ARCH := 32
	endif
D
David Bernard 已提交
1848 1849 1850
else
	ARCH := $(shell getconf LONG_BIT)
endif
1851 1852 1853 1854 1855 1856

ifeq (,$(findstring ppc,$(MACHINE)))
        ROCKSDBJNILIB = librocksdbjni-linux$(ARCH).so
else
        ROCKSDBJNILIB = librocksdbjni-linux-$(MACHINE).so
endif
1857
ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-linux$(ARCH).jar
1858
ROCKSDB_JAR_ALL = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH).jar
C
Chris Riccomini 已提交
1859
ROCKSDB_JAVADOCS_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-javadoc.jar
1860
ROCKSDB_SOURCES_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-sources.jar
1861 1862
SHA256_CMD = sha256sum

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

ifeq ($(PLATFORM), OS_MACOSX)
D
David Bernard 已提交
1881 1882
	ROCKSDBJNILIB = librocksdbjni-osx.jnilib
	ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-osx.jar
1883
	SHA256_CMD = openssl sha256 -r
1884 1885 1886 1887 1888
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
1889
endif
1890
ifeq ($(PLATFORM), OS_FREEBSD)
1891
	JAVA_INCLUDE = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/freebsd
1892 1893 1894
	ROCKSDBJNILIB = librocksdbjni-freebsd$(ARCH).so
	ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-freebsd$(ARCH).jar
endif
D
David Bernard 已提交
1895 1896 1897 1898
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
1899
	SHA256_CMD = digest -a sha256
D
David Bernard 已提交
1900
endif
T
Tomas Kolda 已提交
1901 1902 1903 1904 1905 1906
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
1907 1908 1909 1910 1911
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
1912

L
leipeng 已提交
1913 1914
libz.a: zlib-1.2.11/zlib.h
zlib-1.2.11/zlib.h:
1915
	-rm -rf zlib-$(ZLIB_VER)
G
guokuankuan 已提交
1916 1917
	cp -a downloads/zlib-$(ZLIB_VER).tar.gz .
	#curl -O -L ${ZLIB_DOWNLOAD_BASE}/zlib-$(ZLIB_VER).tar.gz
1918 1919 1920 1921 1922 1923
	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 已提交
1924 1925
	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)
1926
	cp zlib-$(ZLIB_VER)/libz.a .
N
Naveen 已提交
1927 1928

libbz2.a:
1929
	-rm -rf bzip2-$(BZIP2_VER)
G
guokuankuan 已提交
1930 1931 1932
	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
1933 1934 1935 1936 1937 1938
	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 已提交
1939
	cd bzip2-$(BZIP2_VER) && $(MAKE) CFLAGS='-fPIC -O2 -g -D_FILE_OFFSET_BITS=64 ${EXTRA_CFLAGS}' AR='ar ${EXTRA_ARFLAGS}' LDFLAGS=
1940
	cp bzip2-$(BZIP2_VER)/libbz2.a .
N
Naveen 已提交
1941

L
leipeng 已提交
1942 1943
libsnappy.a: snappy-1.1.4/snappy.h
snappy-1.1.4/snappy.h:
1944
	-rm -rf snappy-$(SNAPPY_VER)
G
guokuankuan 已提交
1945 1946 1947
	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
1948 1949 1950 1951 1952 1953
	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 已提交
1954
	cd snappy-$(SNAPPY_VER) && CFLAGS='${EXTRA_CFLAGS}' CXXFLAGS='${EXTRA_CXXFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' ./configure --with-pic --enable-static --disable-shared
L
leipeng 已提交
1955
	cd snappy-$(SNAPPY_VER) && CFLAGS='${EXTRA_CFLAGS}' CXXFLAGS='${EXTRA_CXXFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' $(MAKE) ${SNAPPY_MAKE_TARGET}
1956
	cp snappy-$(SNAPPY_VER)/.libs/libsnappy.a .
1957

L
leipeng 已提交
1958 1959
liblz4.a: lz4-1.8.0/lib/lz4.h
lz4-1.8.0/lib/lz4.h:
1960
	-rm -rf lz4-$(LZ4_VER)
G
guokuankuan 已提交
1961 1962 1963
	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 已提交
1964
	#mv v$(LZ4_VER).tar.gz lz4-$(LZ4_VER).tar.gz
1965 1966 1967 1968 1969 1970
	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 已提交
1971
	cd lz4-$(LZ4_VER)/lib && $(MAKE) CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' LDFLAGS= all
1972
	cp lz4-$(LZ4_VER)/lib/liblz4.a .
N
Naveen 已提交
1973

L
leipeng 已提交
1974 1975
libzstd.a: zstd-1.3.3/lib/include/zstd.h
zstd-1.3.3/lib/include/zstd.h:
1976
	-rm -rf zstd-$(ZSTD_VER)
G
guokuankuan 已提交
1977 1978
	cp -a downloads/zstd-$(ZSTD_VER).tar.gz .
	#wget ${ZSTD_DOWNLOAD_BASE}/v$(ZSTD_VER).tar.gz
G
guokuankuan 已提交
1979 1980
	#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
1981 1982 1983 1984 1985 1986
	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 已提交
1987
	cd zstd-$(ZSTD_VER)/lib && LDFLAGS= DESTDIR=. PREFIX= $(MAKE) CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' install
1988 1989
	cp zstd-$(ZSTD_VER)/lib/libzstd.a .

1990
# A version of each $(LIBOBJECTS) compiled with -fPIC and a fixed set of static compression libraries
A
Andrew Kryczka 已提交
1991
java_static_libobjects = $(patsubst %,jls/%,$(LIB_CC_OBJECTS))
1992
CLEAN_FILES += jls
A
Andrew Kryczka 已提交
1993
java_static_all_libobjects = $(java_static_libobjects)
1994

1995
ifneq ($(ROCKSDB_JAVA_NO_COMPRESSION), 1)
郭宽宽 已提交
1996
JAVA_COMPRESSIONS = libz.a libsnappy.a liblz4.a
1997 1998
endif

郭宽宽 已提交
1999 2000
JAVA_STATIC_FLAGS = -DZLIB -DSNAPPY -DLZ4 -DZSTD
JAVA_STATIC_INCLUDES = -I./zlib-$(ZLIB_VER) -I./snappy-$(SNAPPY_VER) -I./lz4-$(LZ4_VER)/lib -I./zstd-$(ZSTD_VER)/lib/include
2001

A
Andrew Kryczka 已提交
2002
ifeq ($(HAVE_POWER8),1)
雷鹏 已提交
2003 2004
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 已提交
2005 2006 2007

java_static_ppc_libobjects = $(JAVA_STATIC_C_LIBOBJECTS) $(JAVA_STATIC_ASM_LIBOBJECTS)

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

雷鹏 已提交
2011
jls/${xdir}/util/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S
A
Andrew Kryczka 已提交
2012 2013 2014 2015 2016
	$(AM_V_CC)$(CC) $(CFLAGS) $(JAVA_STATIC_FLAGS) $(JAVA_STATIC_INCLUDES) -c $< -o $@

java_static_all_libobjects += $(java_static_ppc_libobjects)
endif

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

郭宽宽 已提交
2020 2021 2022 2023 2024 2025 2026 2027
fakemake: $(java_static_all_libobjects)
	@echo "-------------------"
	@echo $(java_static_libobjects)
	@echo "-------------------"
	@echo $(AM_LINK)
	@echo "-------------------"
	@echo $(LINK_STATIC_TERARK) $(LDFLAGS) $(COVERAGEFLAGS)

A
Andrew Kryczka 已提交
2028
rocksdbjavastatic: $(java_static_all_libobjects)
F
fyrz 已提交
2029
	cd java;$(MAKE) javalib;
2030
	rm -f ./java/target/$(ROCKSDBJNILIB)
2031 2032
	$(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC \
	  -o ./java/target/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) \
A
Andrew Kryczka 已提交
2033
	  $(java_static_all_libobjects) $(COVERAGEFLAGS) \
郭宽宽 已提交
2034 2035 2036 2037
	  $(JAVA_COMPRESSIONS) $(JAVA_STATIC_LDFLAGS) \
	  $(LINK_STATIC_TERARK) $(LDFLAGS) $(COVERAGEFLAGS) \
	  -Wno-unused-parameter
	  
2038 2039 2040
	cd java/target;if [ "$(DEBUG_LEVEL)" == "0" ]; then \
		strip $(STRIPFLAGS) $(ROCKSDBJNILIB); \
	fi
2041
	cd java;jar -cf target/$(ROCKSDB_JAR) HISTORY*.md
郭宽宽 已提交
2042
	jar -uf java/target/$(ROCKSDB_JAR) HISTORY*.md
2043 2044 2045 2046
	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 已提交
2047

郭宽宽 已提交
2048 2049 2050 2051
	mkdir -p java/target/META-INF
	cp LICENSE.Apache java/target/META-INF/LICENSE
	cd java/target;jar -uf $(ROCKSDB_JAR) META-INF/LICENSE

2052
rocksdbjavastaticrelease: rocksdbjavastatic
郭宽宽 已提交
2053 2054 2055
	# We only have to support Linux-64 build for now
	# TODO enable crossbuild again (guokuankuan)
	# cd java/crossbuild && vagrant destroy -f && vagrant up linux32 && vagrant halt linux32 && vagrant up linux64 && vagrant halt linux64
2056
	cd java;jar -cf target/$(ROCKSDB_JAR_ALL) HISTORY*.md
郭宽宽 已提交
2057 2058 2059 2060 2061
	jar -uf java/target/$(ROCKSDB_JAR_ALL) HISTORY*.md

	# Enable crossbuild again(guokuankuan)
	# cd java/target;jar -uf $(ROCKSDB_JAR_ALL) librocksdbjni-*.so librocksdbjni-*.jnilib librocksdbjni-win64.dll
	cd java/target;jar -uf $(ROCKSDB_JAR_ALL) *.so
2062
	cd java/target/classes;jar -uf ../$(ROCKSDB_JAR_ALL) org/rocksdb/*.class org/rocksdb/util/*.class
2063

郭宽宽 已提交
2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112
frocksdbjavastaticrelease: rocksdbjavastaticrelease
	# update license
	mkdir -p java/target/META-INF
	cp LICENSE.Apache java/target/META-INF/LICENSE
	cd java/target;jar -uf $(ROCKSDB_JAR_ALL) META-INF/LICENSE

	# platform jars
	$(eval JAR_PREF=rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH))
	$(eval JAR_DOCS=$(JAR_PREF)-javadoc.jar)
	$(eval JAR_SOURCES=$(JAR_PREF)-sources.jar)
	# $(eval OSX_JAR=$(JAR_PREF)-osx.jar)
	# $(eval WIN_JAR=$(JAR_PREF)-win64.jar)
	# $(eval LINUX32_JAR=$(JAR_PREF)-linux32.jar)
	$(eval LINUX64_JAR=$(JAR_PREF)-linux64.jar)

	# update windows jar
	# cd java/target;cp rocksdbjni_classes.jar $(WIN_JAR)
	# cd java;jar -uf target/$(WIN_JAR) HISTORY*.md
	# jar -uf java/target/$(WIN_JAR) HISTORY*.md
	# cd java/target;jar -uf $(WIN_JAR) librocksdbjni-win64.dll
	# cd java/target;jar -uf $(WIN_JAR) META-INF/LICENSE

	# update linux 64 jar with ppc64 lib
	# cd java/target;jar -uf $(LINUX64_JAR) librocksdbjni-linux-ppc64le.so

	cd java/target;jar -uf $(JAR_DOCS) META-INF/LICENSE
	cd java/target;jar -uf $(JAR_SOURCES) META-INF/LICENSE

	# prepare frocksdb release
	cd java/target;mkdir -p frocksdb-release

	$(eval FJAR_PREF=frocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-artisans-$(FROCKSDB_VERSION))
	$(eval FJAR=$(FJAR_PREF).jar)
	$(eval FJAR_DOCS=$(FJAR_PREF)-javadoc.jar)
	$(eval FJAR_SOURCES=$(FJAR_PREF)-sources.jar)
	# $(eval OSX_FJAR=$(FJAR_PREF)-osx.jar)
	# $(eval WIN_FJAR=$(FJAR_PREF)-win64.jar)
	# $(eval LINUX32_FJAR=$(FJAR_PREF)-linux32.jar)
	$(eval LINUX64_FJAR=$(FJAR_PREF)-linux64.jar)

	cd java/target;cp $(ROCKSDB_JAR_ALL) frocksdb-release/$(FJAR)
	cd java/target;cp $(JAR_DOCS) frocksdb-release/$(FJAR_DOCS)
	cd java/target;cp $(JAR_SOURCES) frocksdb-release/$(FJAR_SOURCES)
	# cd java/target;cp $(OSX_JAR) frocksdb-release/$(OSX_FJAR)
	# cd java/target;cp $(WIN_JAR) frocksdb-release/$(WIN_FJAR)
	# cd java/target;cp $(LINUX32_JAR) frocksdb-release/$(LINUX32_FJAR)
	cd java/target;cp $(LINUX64_JAR) frocksdb-release/$(LINUX64_FJAR)
	cd java;cp rocksjni_flink.pom target/frocksdb-release/$(FJAR_PREF).pom

2113 2114 2115 2116 2117 2118 2119
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
2120 2121
	DOCKER_LINUX_X86_CONTAINER=`docker ps -aqf name=rocksdb_linux_x86-be`; \
	if [ -z "$$DOCKER_LINUX_X86_CONTAINER" ]; then \
2122
		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; \
2123 2124
	fi
	docker start -a rocksdb_linux_x86-be
2125 2126 2127 2128 2129 2130 2131 2132

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
2133

2134 2135 2136 2137 2138 2139 2140 2141
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

2142 2143
rocksdbjavastaticpublish: rocksdbjavastaticrelease rocksdbjavastaticpublishcentral

2144 2145
rocksdbjavastaticpublishdocker: rocksdbjavastaticreleasedocker rocksdbjavastaticpublishcentral

2146
rocksdbjavastaticpublishcentral:
2147 2148 2149 2150 2151
	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
2152
	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
2153
	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
2154

2155
# A version of each $(LIBOBJECTS) compiled with -fPIC
2156 2157 2158 2159 2160 2161 2162 2163 2164
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 已提交
2165
java_libobjects = $(patsubst %,jl/%,$(LIB_CC_OBJECTS))
2166
CLEAN_FILES += jl
2167 2168 2169 2170 2171
java_all_libobjects = $(java_libobjects)

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

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

雷鹏 已提交
2175
jl/${xdir}/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S
2176 2177 2178
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
java_all_libobjects += $(java_ppc_libobjects)
endif
2179

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

2183
rocksdbjava: $(java_all_libobjects)
2184 2185
	$(AM_V_GEN)cd java;$(MAKE) javalib;
	$(AM_V_at)rm -f ./java/target/$(ROCKSDBJNILIB)
2186
	$(AM_V_at)$(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC -o ./java/target/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) $(java_all_libobjects) $(JAVA_LDFLAGS) $(COVERAGEFLAGS)
2187 2188 2189
	$(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
2190 2191 2192 2193

jclean:
	cd java;$(MAKE) clean;

2194 2195 2196 2197 2198 2199
jtest_compile: rocksdbjava
	cd java;$(MAKE) java_test

jtest_run:
	cd java;$(MAKE) run_test

2200
jtest: rocksdbjava
2201
	cd java;$(MAKE) sample;$(MAKE) test;
2202

2203 2204 2205
jdb_bench:
	cd java;$(MAKE) db_bench;

2206 2207
commit_prereq: build_tools/rocksdb-lego-determinator \
               build_tools/precommit_checker.py
2208
	J=$(J) build_tools/precommit_checker.py unit unit_481 clang_unit release release_481 clang_release tsan asan ubsan lite unit_non_shm
2209
	$(MAKE) clean && $(MAKE) jclean && $(MAKE) rocksdbjava;
2210

2211 2212 2213
# ---------------------------------------------------------------------------
#  	Platform-specific compilation
# ---------------------------------------------------------------------------
J
Jim Paton 已提交
2214

2215 2216 2217
ifeq ($(PLATFORM), IOS)
# For iOS, create universal object files to be used on both the simulator and
# a device.
H
heyongqiang 已提交
2218 2219 2220
PLATFORMSROOT=/Applications/Xcode.app/Contents/Developer/Platforms
SIMULATORROOT=$(PLATFORMSROOT)/iPhoneSimulator.platform/Developer
DEVICEROOT=$(PLATFORMSROOT)/iPhoneOS.platform/Developer
I
Igor Canadi 已提交
2221
IOSVERSION=$(shell defaults read $(PLATFORMSROOT)/iPhoneOS.platform/version CFBundleShortVersionString)
2222

2223 2224
.cc.o:
	mkdir -p ios-x86/$(dir $@)
I
Igor Canadi 已提交
2225
	$(CXX) $(CXXFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@
2226
	mkdir -p ios-arm/$(dir $@)
I
Igor Canadi 已提交
2227
	xcrun -sdk iphoneos $(CXX) $(CXXFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -arch armv7s -arch arm64 -c $< -o ios-arm/$@
2228
	lipo ios-x86/$@ ios-arm/$@ -create -output $@
2229 2230 2231

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

2237
else
2238 2239 2240 2241 2242 2243 2244
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
2245
.cc.o:
2246
	$(AM_V_CC)$(CXX) $(CXXFLAGS) -c $< -o $@ $(COVERAGEFLAGS)
2247

2248
.c.o:
2249
	$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
2250
endif
2251 2252 2253 2254
# ---------------------------------------------------------------------------
#  	Source files dependencies detection
# ---------------------------------------------------------------------------

2255
all_sources = $(LIB_SOURCES) $(MAIN_SOURCES) $(MOCK_LIB_SOURCES) $(TOOL_LIB_SOURCES) $(BENCH_LIB_SOURCES) $(TEST_LIB_SOURCES) $(EXP_LIB_SOURCES) $(ANALYZER_LIB_SOURCES)
2256
DEPFILES = $(addprefix ${xdir}/,$(all_sources:.cc=.cc.d))
L
leipeng 已提交
2257
DEPFILES += $(addprefix shared-objects/${xdir}/,$(all_sources:.cc=.cc.d))
2258

2259 2260 2261 2262 2263
# 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.
2264 2265
${xdir}/%.cc.d: %.cc
	@mkdir -p $(dir $@)
2266
	@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
L
leipeng 已提交
2267 2268 2269 2270 2271 2272
	  -MM -MT'$@' -MT'$(@:.cc.d=.o)' "$<" -o '$@'

shared-objects/${xdir}/%.cc.d: %.cc
	@mkdir -p $(dir $@)
	@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
	  -MM -MT'$@' -MT'$(@:.cc.d=.o)' "$<" -o '$@'
2273

2274
ifeq ($(HAVE_POWER8),1)
2275 2276
DEPFILES_C = $(addprefix ${xdir}/,$(LIB_SOURCES_C:.c=.c.d))
DEPFILES_ASM = $(addprefix ${xdir}/,$(LIB_SOURCES_ASM:.S=.S.d))
2277

L
leipeng 已提交
2278 2279 2280
DEPFILES_C += $(addprefix shared-objects/${xdir}/,$(LIB_SOURCES_C:.c=.c.d))
DEPFILES_ASM += $(addprefix shared-objects/${xdir}/,$(LIB_SOURCES_ASM:.S=.S.d))

2281 2282
${xdir}/%.c.d: %.c
	@mkdir -p $(dir $@)
2283
	@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
L
leipeng 已提交
2284
	  -MM -MT'$@' -MT'$(@:.c.d=.o)' "$<" -o '$@'
2285

2286 2287
${xdir}/%.S.d: %.S
	@mkdir -p $(dir $@)
2288
	@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
L
leipeng 已提交
2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299
	  -MM -MT'$@' -MT'$(@:.S.d=.o)' "$<" -o '$@'

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

shared-objects/${xdir}/%.S.d: %.S
	@mkdir -p $(dir $@)
	@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
	  -MM -MT'$@' -MT'$(@:.S.d=.o)' "$<" -o '$@'
2300 2301 2302 2303 2304 2305

$(DEPFILES_C): %.c.d

$(DEPFILES_ASM): %.S.d
depend: $(DEPFILES) $(DEPFILES_C) $(DEPFILES_ASM)
else
2306
depend: $(DEPFILES)
2307
endif
2308

2309 2310 2311 2312 2313 2314 2315 2316
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}

2317 2318 2319 2320
# 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.
2321
ifneq ($(MAKECMDGOALS),clean)
2322
ifneq ($(MAKECMDGOALS),format)
2323 2324
ifneq ($(MAKECMDGOALS),jclean)
ifneq ($(MAKECMDGOALS),jtest)
2325
ifneq ($(MAKECMDGOALS),package)
2326
ifneq ($(MAKECMDGOALS),analyze)
2327 2328
-include $(DEPFILES)
endif
2329
endif
2330 2331
endif
endif
2332
endif
2333
endif