]> git.proxmox.com Git - ceph.git/blob - ceph/src/rocksdb/Makefile
import quincy beta 17.1.0
[ceph.git] / ceph / src / rocksdb / Makefile
1 # Copyright (c) 2011 The LevelDB Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. See the AUTHORS file for names of contributors.
4
5 # Inherit some settings from environment variables, if available
6
7 #-----------------------------------------------
8
9 BASH_EXISTS := $(shell which bash)
10 SHELL := $(shell which bash)
11 # Default to python3. Some distros like CentOS 8 do not have `python`.
12 ifeq ($(origin PYTHON), undefined)
13 PYTHON := $(shell which python3 || which python || echo python3)
14 endif
15 export PYTHON
16
17 CLEAN_FILES = # deliberately empty, so we can append below.
18 CFLAGS += ${EXTRA_CFLAGS}
19 CXXFLAGS += ${EXTRA_CXXFLAGS}
20 LDFLAGS += $(EXTRA_LDFLAGS)
21 MACHINE ?= $(shell uname -m)
22 ARFLAGS = ${EXTRA_ARFLAGS} rs
23 STRIPFLAGS = -S -x
24
25 # Transform parallel LOG output into something more readable.
26 perl_command = perl -n \
27 -e '@a=split("\t",$$_,-1); $$t=$$a[8];' \
28 -e '$$t =~ /.*if\s\[\[\s"(.*?\.[\w\/]+)/ and $$t=$$1;' \
29 -e '$$t =~ s,^\./,,;' \
30 -e '$$t =~ s, >.*,,; chomp $$t;' \
31 -e '$$t =~ /.*--gtest_filter=(.*?\.[\w\/]+)/ and $$t=$$1;' \
32 -e 'printf "%7.3f %s %s\n", $$a[3], $$a[6] == 0 ? "PASS" : "FAIL", $$t'
33 quoted_perl_command = $(subst ','\'',$(perl_command))
34
35 # DEBUG_LEVEL can have three values:
36 # * DEBUG_LEVEL=2; this is the ultimate debug mode. It will compile rocksdb
37 # without any optimizations. To compile with level 2, issue `make dbg`
38 # * DEBUG_LEVEL=1; debug level 1 enables all assertions and debug code, but
39 # compiles rocksdb with -O2 optimizations. this is the default debug level.
40 # `make all` or `make <binary_target>` compile RocksDB with debug level 1.
41 # We use this debug level when developing RocksDB.
42 # * DEBUG_LEVEL=0; this is the debug level we use for release. If you're
43 # running rocksdb in production you most definitely want to compile RocksDB
44 # with debug level 0. To compile with level 0, run `make shared_lib`,
45 # `make install-shared`, `make static_lib`, `make install-static` or
46 # `make install`
47
48 # Set the default DEBUG_LEVEL to 1
49 DEBUG_LEVEL?=1
50
51 # LIB_MODE says whether or not to use/build "shared" or "static" libraries.
52 # Mode "static" means to link against static libraries (.a)
53 # Mode "shared" means to link against shared libraries (.so, .sl, .dylib, etc)
54 #
55 # Set the default LIB_MODE to static
56 LIB_MODE?=static
57
58 ifeq ($(MAKECMDGOALS),dbg)
59 DEBUG_LEVEL=2
60 endif
61
62 ifeq ($(MAKECMDGOALS),clean)
63 DEBUG_LEVEL=0
64 endif
65
66 ifeq ($(MAKECMDGOALS),release)
67 DEBUG_LEVEL=0
68 endif
69
70 ifeq ($(MAKECMDGOALS),shared_lib)
71 LIB_MODE=shared
72 DEBUG_LEVEL=0
73 endif
74
75 ifeq ($(MAKECMDGOALS),install-shared)
76 LIB_MODE=shared
77 DEBUG_LEVEL=0
78 endif
79
80 ifeq ($(MAKECMDGOALS),static_lib)
81 DEBUG_LEVEL=0
82 LIB_MODE=static
83 endif
84
85 ifeq ($(MAKECMDGOALS),install-static)
86 DEBUG_LEVEL=0
87 LIB_MODE=static
88 endif
89
90 ifeq ($(MAKECMDGOALS),install)
91 DEBUG_LEVEL=0
92 endif
93
94
95 ifneq ($(findstring jtest, $(MAKECMDGOALS)),)
96 OBJ_DIR=jl
97 LIB_MODE=shared
98 endif
99
100 ifneq ($(findstring rocksdbjava, $(MAKECMDGOALS)),)
101 LIB_MODE=shared
102 ifneq ($(findstring rocksdbjavastatic, $(MAKECMDGOALS)),)
103 OBJ_DIR=jls
104 ifneq ($(DEBUG_LEVEL),2)
105 DEBUG_LEVEL=0
106 endif
107 ifeq ($(MAKECMDGOALS),rocksdbjavastaticpublish)
108 DEBUG_LEVEL=0
109 endif
110 else
111 OBJ_DIR=jl
112 endif
113 endif
114
115 $(info $$DEBUG_LEVEL is ${DEBUG_LEVEL})
116
117 # Lite build flag.
118 LITE ?= 0
119 ifeq ($(LITE), 0)
120 ifneq ($(filter -DROCKSDB_LITE,$(OPT)),)
121 # Be backward compatible and support older format where OPT=-DROCKSDB_LITE is
122 # specified instead of LITE=1 on the command line.
123 LITE=1
124 endif
125 else ifeq ($(LITE), 1)
126 ifeq ($(filter -DROCKSDB_LITE,$(OPT)),)
127 OPT += -DROCKSDB_LITE
128 endif
129 endif
130
131 # Figure out optimize level.
132 ifneq ($(DEBUG_LEVEL), 2)
133 ifeq ($(LITE), 0)
134 OPTIMIZE_LEVEL ?= -O2
135 else
136 OPTIMIZE_LEVEL ?= -Os
137 endif
138 endif
139 # `OPTIMIZE_LEVEL` is empty when the user does not set it and `DEBUG_LEVEL=2`.
140 # In that case, the compiler default (`-O0` for gcc and clang) will be used.
141 OPT += $(OPTIMIZE_LEVEL)
142
143 # compile with -O2 if debug level is not 2
144 ifneq ($(DEBUG_LEVEL), 2)
145 OPT += -fno-omit-frame-pointer
146 # Skip for archs that don't support -momit-leaf-frame-pointer
147 ifeq (,$(shell $(CXX) -fsyntax-only -momit-leaf-frame-pointer -xc /dev/null 2>&1))
148 OPT += -momit-leaf-frame-pointer
149 endif
150 endif
151
152 ifeq (,$(shell $(CXX) -fsyntax-only -maltivec -xc /dev/null 2>&1))
153 CXXFLAGS += -DHAS_ALTIVEC
154 CFLAGS += -DHAS_ALTIVEC
155 HAS_ALTIVEC=1
156 endif
157
158 ifeq (,$(shell $(CXX) -fsyntax-only -mcpu=power8 -xc /dev/null 2>&1))
159 CXXFLAGS += -DHAVE_POWER8
160 CFLAGS += -DHAVE_POWER8
161 HAVE_POWER8=1
162 endif
163
164 ifeq (,$(shell $(CXX) -fsyntax-only -march=armv8-a+crc+crypto -xc /dev/null 2>&1))
165 CXXFLAGS += -march=armv8-a+crc+crypto
166 CFLAGS += -march=armv8-a+crc+crypto
167 ARMCRC_SOURCE=1
168 endif
169
170 # if we're compiling for shared libraries, add the shared flags
171 ifeq ($(LIB_MODE),shared)
172 CXXFLAGS += $(PLATFORM_SHARED_CFLAGS) -DROCKSDB_DLL
173 CFLAGS += $(PLATFORM_SHARED_CFLAGS) -DROCKSDB_DLL
174 endif
175
176 # if we're compiling for release, compile without debug code (-DNDEBUG)
177 ifeq ($(DEBUG_LEVEL),0)
178 OPT += -DNDEBUG
179
180 ifneq ($(USE_RTTI), 1)
181 CXXFLAGS += -fno-rtti
182 else
183 CXXFLAGS += -DROCKSDB_USE_RTTI
184 endif
185 else
186 ifneq ($(USE_RTTI), 0)
187 CXXFLAGS += -DROCKSDB_USE_RTTI
188 else
189 CXXFLAGS += -fno-rtti
190 endif
191
192 ifdef ASSERT_STATUS_CHECKED
193 ifeq ($(filter -DROCKSDB_ASSERT_STATUS_CHECKED,$(OPT)),)
194 OPT += -DROCKSDB_ASSERT_STATUS_CHECKED
195 endif
196 endif
197
198 $(warning Warning: Compiling in debug mode. Don't use the resulting binary in production)
199 endif
200
201 # `USE_LTO=1` enables link-time optimizations. Among other things, this enables
202 # more devirtualization opportunities and inlining across translation units.
203 # This can save significant overhead introduced by RocksDB's pluggable
204 # interfaces/internal abstractions, like in the iterator hierarchy. It works
205 # better when combined with profile-guided optimizations (not currently
206 # supported natively in Makefile).
207 ifeq ($(USE_LTO), 1)
208 CXXFLAGS += -flto
209 LDFLAGS += -flto -fuse-linker-plugin
210 endif
211
212 #-----------------------------------------------
213 include src.mk
214
215 AM_DEFAULT_VERBOSITY ?= 0
216
217 AM_V_GEN = $(am__v_GEN_$(V))
218 am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
219 am__v_GEN_0 = @echo " GEN " $@;
220 am__v_GEN_1 =
221 AM_V_at = $(am__v_at_$(V))
222 am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
223 am__v_at_0 = @
224 am__v_at_1 =
225
226 AM_V_CC = $(am__v_CC_$(V))
227 am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
228 am__v_CC_0 = @echo " CC " $@;
229 am__v_CC_1 =
230
231 AM_V_CCLD = $(am__v_CCLD_$(V))
232 am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
233 ifneq ($(SKIP_LINK), 1)
234 am__v_CCLD_0 = @echo " CCLD " $@;
235 am__v_CCLD_1 =
236 else
237 am__v_CCLD_0 = @echo " !CCLD " $@; true skip
238 am__v_CCLD_1 = true skip
239 endif
240 AM_V_AR = $(am__v_AR_$(V))
241 am__v_AR_ = $(am__v_AR_$(AM_DEFAULT_VERBOSITY))
242 am__v_AR_0 = @echo " AR " $@;
243 am__v_AR_1 =
244
245 ifdef ROCKSDB_USE_LIBRADOS
246 LIB_SOURCES += utilities/env_librados.cc
247 LDFLAGS += -lrados
248 endif
249
250 AM_LINK = $(AM_V_CCLD)$(CXX) -L. $(patsubst lib%.a, -l%, $(patsubst lib%.$(PLATFORM_SHARED_EXT), -l%, $^)) $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(COVERAGEFLAGS)
251 AM_SHARE = $(AM_V_CCLD) $(CXX) $(PLATFORM_SHARED_LDFLAGS)$@ -L. $(patsubst lib%.$(PLATFORM_SHARED_EXT), -l%, $^) $(LDFLAGS) -o $@
252
253 # Detect what platform we're building on.
254 # Export some common variables that might have been passed as Make variables
255 # instead of environment variables.
256 dummy := $(shell (export ROCKSDB_ROOT="$(CURDIR)"; \
257 export COMPILE_WITH_ASAN="$(COMPILE_WITH_ASAN)"; \
258 export COMPILE_WITH_TSAN="$(COMPILE_WITH_TSAN)"; \
259 export COMPILE_WITH_UBSAN="$(COMPILE_WITH_UBSAN)"; \
260 export PORTABLE="$(PORTABLE)"; \
261 export ROCKSDB_NO_FBCODE="$(ROCKSDB_NO_FBCODE)"; \
262 export USE_CLANG="$(USE_CLANG)"; \
263 "$(CURDIR)/build_tools/build_detect_platform" "$(CURDIR)/make_config.mk"))
264 # this file is generated by the previous line to set build flags and sources
265 include make_config.mk
266
267 export JAVAC_ARGS
268 CLEAN_FILES += make_config.mk rocksdb.pc
269
270 ifeq ($(V), 1)
271 $(info $(shell uname -a))
272 $(info $(shell $(CC) --version))
273 $(info $(shell $(CXX) --version))
274 endif
275
276 missing_make_config_paths := $(shell \
277 grep "\./\S*\|/\S*" -o $(CURDIR)/make_config.mk | \
278 while read path; \
279 do [ -e $$path ] || echo $$path; \
280 done | sort | uniq)
281
282 $(foreach path, $(missing_make_config_paths), \
283 $(warning Warning: $(path) does not exist))
284
285 ifeq ($(PLATFORM), OS_AIX)
286 # no debug info
287 else ifneq ($(PLATFORM), IOS)
288 CFLAGS += -g
289 CXXFLAGS += -g
290 else
291 # no debug info for IOS, that will make our library big
292 OPT += -DNDEBUG
293 endif
294
295 ifeq ($(PLATFORM), OS_AIX)
296 ARFLAGS = -X64 rs
297 STRIPFLAGS = -X64 -x
298 endif
299
300 ifeq ($(PLATFORM), OS_SOLARIS)
301 PLATFORM_CXXFLAGS += -D _GLIBCXX_USE_C99
302 endif
303 ifneq ($(filter -DROCKSDB_LITE,$(OPT)),)
304 # found
305 CFLAGS += -fno-exceptions
306 CXXFLAGS += -fno-exceptions
307 # LUA is not supported under ROCKSDB_LITE
308 LUA_PATH =
309 endif
310
311 ifeq ($(LIB_MODE),shared)
312 # So that binaries are executable from build location, in addition to install location
313 EXEC_LDFLAGS += -Wl,-rpath -Wl,'$$ORIGIN'
314 endif
315
316 # ASAN doesn't work well with jemalloc. If we're compiling with ASAN, we should use regular malloc.
317 ifdef COMPILE_WITH_ASAN
318 DISABLE_JEMALLOC=1
319 EXEC_LDFLAGS += -fsanitize=address
320 PLATFORM_CCFLAGS += -fsanitize=address
321 PLATFORM_CXXFLAGS += -fsanitize=address
322 endif
323
324 # TSAN doesn't work well with jemalloc. If we're compiling with TSAN, we should use regular malloc.
325 ifdef COMPILE_WITH_TSAN
326 DISABLE_JEMALLOC=1
327 EXEC_LDFLAGS += -fsanitize=thread
328 PLATFORM_CCFLAGS += -fsanitize=thread -fPIC -DFOLLY_SANITIZE_THREAD
329 PLATFORM_CXXFLAGS += -fsanitize=thread -fPIC -DFOLLY_SANITIZE_THREAD
330 # Turn off -pg when enabling TSAN testing, because that induces
331 # a link failure. TODO: find the root cause
332 PROFILING_FLAGS =
333 # LUA is not supported under TSAN
334 LUA_PATH =
335 # Limit keys for crash test under TSAN to avoid error:
336 # "ThreadSanitizer: DenseSlabAllocator overflow. Dying."
337 CRASH_TEST_EXT_ARGS += --max_key=1000000
338 endif
339
340 # AIX doesn't work with -pg
341 ifeq ($(PLATFORM), OS_AIX)
342 PROFILING_FLAGS =
343 endif
344
345 # USAN doesn't work well with jemalloc. If we're compiling with USAN, we should use regular malloc.
346 ifdef COMPILE_WITH_UBSAN
347 DISABLE_JEMALLOC=1
348 # Suppress alignment warning because murmurhash relies on casting unaligned
349 # memory to integer. Fixing it may cause performance regression. 3-way crc32
350 # relies on it too, although it can be rewritten to eliminate with minimal
351 # performance regression.
352 EXEC_LDFLAGS += -fsanitize=undefined -fno-sanitize-recover=all
353 PLATFORM_CCFLAGS += -fsanitize=undefined -fno-sanitize-recover=all -DROCKSDB_UBSAN_RUN
354 PLATFORM_CXXFLAGS += -fsanitize=undefined -fno-sanitize-recover=all -DROCKSDB_UBSAN_RUN
355 endif
356
357 ifdef ROCKSDB_VALGRIND_RUN
358 PLATFORM_CCFLAGS += -DROCKSDB_VALGRIND_RUN
359 PLATFORM_CXXFLAGS += -DROCKSDB_VALGRIND_RUN
360 endif
361
362 ifndef DISABLE_JEMALLOC
363 ifdef JEMALLOC
364 PLATFORM_CXXFLAGS += -DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE
365 PLATFORM_CCFLAGS += -DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE
366 endif
367 ifdef WITH_JEMALLOC_FLAG
368 PLATFORM_LDFLAGS += -ljemalloc
369 JAVA_LDFLAGS += -ljemalloc
370 endif
371 EXEC_LDFLAGS := $(JEMALLOC_LIB) $(EXEC_LDFLAGS)
372 PLATFORM_CXXFLAGS += $(JEMALLOC_INCLUDE)
373 PLATFORM_CCFLAGS += $(JEMALLOC_INCLUDE)
374 endif
375
376 ifndef USE_FOLLY_DISTRIBUTED_MUTEX
377 USE_FOLLY_DISTRIBUTED_MUTEX=0
378 endif
379
380 ifndef GTEST_THROW_ON_FAILURE
381 export GTEST_THROW_ON_FAILURE=1
382 endif
383 ifndef GTEST_HAS_EXCEPTIONS
384 export GTEST_HAS_EXCEPTIONS=1
385 endif
386
387 GTEST_DIR = third-party/gtest-1.8.1/fused-src
388 # AIX: pre-defined system headers are surrounded by an extern "C" block
389 ifeq ($(PLATFORM), OS_AIX)
390 PLATFORM_CCFLAGS += -I$(GTEST_DIR)
391 PLATFORM_CXXFLAGS += -I$(GTEST_DIR)
392 else
393 PLATFORM_CCFLAGS += -isystem $(GTEST_DIR)
394 PLATFORM_CXXFLAGS += -isystem $(GTEST_DIR)
395 endif
396
397 ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1)
398 FOLLY_DIR = ./third-party/folly
399 # AIX: pre-defined system headers are surrounded by an extern "C" block
400 ifeq ($(PLATFORM), OS_AIX)
401 PLATFORM_CCFLAGS += -I$(FOLLY_DIR)
402 PLATFORM_CXXFLAGS += -I$(FOLLY_DIR)
403 else
404 PLATFORM_CCFLAGS += -isystem $(FOLLY_DIR)
405 PLATFORM_CXXFLAGS += -isystem $(FOLLY_DIR)
406 endif
407 endif
408
409 ifdef TEST_CACHE_LINE_SIZE
410 PLATFORM_CCFLAGS += -DTEST_CACHE_LINE_SIZE=$(TEST_CACHE_LINE_SIZE)
411 PLATFORM_CXXFLAGS += -DTEST_CACHE_LINE_SIZE=$(TEST_CACHE_LINE_SIZE)
412 endif
413 ifdef TEST_UINT128_COMPAT
414 PLATFORM_CCFLAGS += -DTEST_UINT128_COMPAT=1
415 PLATFORM_CXXFLAGS += -DTEST_UINT128_COMPAT=1
416 endif
417 ifdef ROCKSDB_MODIFY_NPHASH
418 PLATFORM_CCFLAGS += -DROCKSDB_MODIFY_NPHASH=1
419 PLATFORM_CXXFLAGS += -DROCKSDB_MODIFY_NPHASH=1
420 endif
421
422 # This (the first rule) must depend on "all".
423 default: all
424
425 WARNING_FLAGS = -W -Wextra -Wall -Wsign-compare -Wshadow \
426 -Wunused-parameter
427
428 ifdef USE_CLANG
429 # Used by some teams in Facebook
430 WARNING_FLAGS += -Wshift-sign-overflow
431 endif
432
433 ifeq ($(PLATFORM), OS_OPENBSD)
434 WARNING_FLAGS += -Wno-unused-lambda-capture
435 endif
436
437 ifndef DISABLE_WARNING_AS_ERROR
438 WARNING_FLAGS += -Werror
439 endif
440
441
442 ifdef LUA_PATH
443
444 ifndef LUA_INCLUDE
445 LUA_INCLUDE=$(LUA_PATH)/include
446 endif
447
448 LUA_INCLUDE_FILE=$(LUA_INCLUDE)/lualib.h
449
450 ifeq ("$(wildcard $(LUA_INCLUDE_FILE))", "")
451 # LUA_INCLUDE_FILE does not exist
452 $(error Cannot find lualib.h under $(LUA_INCLUDE). Try to specify both LUA_PATH and LUA_INCLUDE manually)
453 endif
454 LUA_FLAGS = -I$(LUA_INCLUDE) -DLUA -DLUA_COMPAT_ALL
455 CFLAGS += $(LUA_FLAGS)
456 CXXFLAGS += $(LUA_FLAGS)
457
458 ifndef LUA_LIB
459 LUA_LIB = $(LUA_PATH)/lib/liblua.a
460 endif
461 ifeq ("$(wildcard $(LUA_LIB))", "") # LUA_LIB does not exist
462 $(error $(LUA_LIB) does not exist. Try to specify both LUA_PATH and LUA_LIB manually)
463 endif
464 EXEC_LDFLAGS += $(LUA_LIB)
465
466 endif
467
468 ifeq ($(NO_THREEWAY_CRC32C), 1)
469 CXXFLAGS += -DNO_THREEWAY_CRC32C
470 endif
471
472 CFLAGS += $(WARNING_FLAGS) -I. -I./include $(PLATFORM_CCFLAGS) $(OPT)
473 CXXFLAGS += $(WARNING_FLAGS) -I. -I./include $(PLATFORM_CXXFLAGS) $(OPT) -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers
474
475 LDFLAGS += $(PLATFORM_LDFLAGS)
476
477 # If NO_UPDATE_BUILD_VERSION is set we don't update util/build_version.cc, but
478 # the file needs to already exist or else the build will fail
479 ifndef NO_UPDATE_BUILD_VERSION
480 date := $(shell date +%F)
481 ifdef FORCE_GIT_SHA
482 git_sha := $(FORCE_GIT_SHA)
483 else
484 git_sha := $(shell git rev-parse HEAD 2>/dev/null)
485 endif
486 gen_build_version = sed -e s/@@GIT_SHA@@/$(git_sha)/ -e s/@@GIT_DATE_TIME@@/$(date)/ util/build_version.cc.in
487
488 # Record the version of the source that we are compiling.
489 # We keep a record of the git revision in this file. It is then built
490 # as a regular source file as part of the compilation process.
491 # One can run "strings executable_filename | grep _build_" to find
492 # the version of the source that we used to build the executable file.
493 FORCE:
494 util/build_version.cc: FORCE
495 $(AM_V_GEN)rm -f $@-t
496 $(AM_V_at)$(gen_build_version) > $@-t
497 $(AM_V_at)if test -f $@; then \
498 cmp -s $@-t $@ && rm -f $@-t || mv -f $@-t $@; \
499 else mv -f $@-t $@; fi
500 endif
501
502 OBJ_DIR?=.
503 LIB_OBJECTS = $(patsubst %.cc, $(OBJ_DIR)/%.o, $(LIB_SOURCES))
504 ifeq ($(HAVE_POWER8),1)
505 LIB_OBJECTS += $(patsubst %.c, $(OBJ_DIR)/%.o, $(LIB_SOURCES_C))
506 LIB_OBJECTS += $(patsubst %.S, $(OBJ_DIR)/%.o, $(LIB_SOURCES_ASM))
507 endif
508
509 ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1)
510 LIB_OBJECTS += $(patsubst %.cpp, $(OBJ_DIR)/%.o, $(FOLLY_SOURCES))
511 endif
512
513 GTEST = $(OBJ_DIR)/$(GTEST_DIR)/gtest/gtest-all.o
514 TESTUTIL = $(OBJ_DIR)/test_util/testutil.o
515 TESTHARNESS = $(OBJ_DIR)/test_util/testharness.o $(TESTUTIL) $(GTEST)
516 VALGRIND_ERROR = 2
517 VALGRIND_VER := $(join $(VALGRIND_VER),valgrind)
518
519 VALGRIND_OPTS = --error-exitcode=$(VALGRIND_ERROR) --leak-check=full
520
521 TEST_OBJECTS = $(patsubst %.cc, $(OBJ_DIR)/%.o, $(TEST_LIB_SOURCES) $(MOCK_LIB_SOURCES)) $(GTEST)
522 BENCH_OBJECTS = $(patsubst %.cc, $(OBJ_DIR)/%.o, $(BENCH_LIB_SOURCES))
523 TOOL_OBJECTS = $(patsubst %.cc, $(OBJ_DIR)/%.o, $(TOOL_LIB_SOURCES))
524 ANALYZE_OBJECTS = $(patsubst %.cc, $(OBJ_DIR)/%.o, $(ANALYZER_LIB_SOURCES))
525 STRESS_OBJECTS = $(patsubst %.cc, $(OBJ_DIR)/%.o, $(STRESS_LIB_SOURCES))
526
527 ALL_SOURCES = $(LIB_SOURCES) $(TEST_LIB_SOURCES) $(MOCK_LIB_SOURCES) $(GTEST_DIR)/gtest/gtest-all.cc
528 ALL_SOURCES += $(TOOL_LIB_SOURCES) $(BENCH_LIB_SOURCES) $(ANALYZER_LIB_SOURCES) $(STRESS_LIB_SOURCES)
529 ALL_SOURCES += $(TEST_MAIN_SOURCES) $(TOOL_MAIN_SOURCES) $(BENCH_MAIN_SOURCES)
530
531 TESTS = $(patsubst %.cc, %, $(notdir $(TEST_MAIN_SOURCES)))
532 TESTS += $(patsubst %.c, %, $(notdir $(TEST_MAIN_SOURCES_C)))
533
534 ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1)
535 TESTS += folly_synchronization_distributed_mutex_test
536 ALL_SOURCES += third-party/folly/folly/synchronization/test/DistributedMutexTest.cc
537 endif
538
539 PARALLEL_TEST = \
540 backupable_db_test \
541 db_bloom_filter_test \
542 db_compaction_filter_test \
543 db_compaction_test \
544 db_merge_operator_test \
545 db_sst_test \
546 db_test \
547 db_test2 \
548 db_universal_compaction_test \
549 db_wal_test \
550 column_family_test \
551 external_sst_file_test \
552 import_column_family_test \
553 fault_injection_test \
554 file_reader_writer_test \
555 inlineskiplist_test \
556 manual_compaction_test \
557 persistent_cache_test \
558 table_test \
559 transaction_test \
560 point_lock_manager_test \
561 write_prepared_transaction_test \
562 write_unprepared_transaction_test \
563
564 ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1)
565 TESTS += folly_synchronization_distributed_mutex_test
566 PARALLEL_TEST += folly_synchronization_distributed_mutex_test
567 TESTS_PASSING_ASC = folly_synchronization_distributed_mutex_test
568 endif
569
570 # options_settable_test doesn't pass with UBSAN as we use hack in the test
571 ifdef COMPILE_WITH_UBSAN
572 TESTS := $(shell echo $(TESTS) | sed 's/\boptions_settable_test\b//g')
573 endif
574 ifdef ASSERT_STATUS_CHECKED
575 # This is a new check for which we will add support incrementally. This
576 # list can be removed once support is fully added.
577 TESTS_PASSING_ASC = \
578 arena_test \
579 autovector_test \
580 cache_test \
581 lru_cache_test \
582 blob_file_addition_test \
583 blob_file_builder_test \
584 blob_file_cache_test \
585 blob_file_garbage_test \
586 blob_file_reader_test \
587 bloom_test \
588 cassandra_format_test \
589 cassandra_row_merge_test \
590 cassandra_serialize_test \
591 cleanable_test \
592 coding_test \
593 crc32c_test \
594 dbformat_test \
595 db_basic_test \
596 db_blob_basic_test \
597 db_flush_test \
598 db_with_timestamp_basic_test \
599 db_with_timestamp_compaction_test \
600 db_options_test \
601 db_properties_test \
602 db_secondary_test \
603 options_file_test \
604 defer_test \
605 filename_test \
606 dynamic_bloom_test \
607 env_basic_test \
608 env_test \
609 env_logger_test \
610 event_logger_test \
611 error_handler_fs_test \
612 auto_roll_logger_test \
613 file_indexer_test \
614 flush_job_test \
615 hash_table_test \
616 hash_test \
617 heap_test \
618 histogram_test \
619 inlineskiplist_test \
620 io_posix_test \
621 iostats_context_test \
622 ldb_cmd_test \
623 memkind_kmem_allocator_test \
624 merger_test \
625 mock_env_test \
626 object_registry_test \
627 prefix_test \
628 plain_table_db_test \
629 repair_test \
630 configurable_test \
631 customizable_test \
632 options_settable_test \
633 options_test \
634 random_test \
635 range_del_aggregator_test \
636 sst_file_reader_test \
637 range_tombstone_fragmenter_test \
638 repeatable_thread_test \
639 ribbon_test \
640 skiplist_test \
641 slice_test \
642 sst_dump_test \
643 statistics_test \
644 stats_history_test \
645 thread_local_test \
646 trace_analyzer_test \
647 env_timed_test \
648 filelock_test \
649 timer_queue_test \
650 timer_test \
651 options_util_test \
652 persistent_cache_test \
653 util_merge_operators_test \
654 block_cache_trace_analyzer_test \
655 block_cache_tracer_test \
656 cache_simulator_test \
657 sim_cache_test \
658 version_builder_test \
659 version_edit_test \
660 work_queue_test \
661 write_controller_test \
662 compaction_iterator_test \
663 compaction_job_test \
664 compaction_job_stats_test \
665 io_tracer_test \
666 merge_helper_test \
667 memtable_list_test \
668 flush_job_test \
669 block_based_filter_block_test \
670 block_fetcher_test \
671 full_filter_block_test \
672 partitioned_filter_block_test \
673 column_family_test \
674 file_reader_writer_test \
675 corruption_test \
676 db_universal_compaction_test \
677 import_column_family_test \
678 memory_test \
679 table_test \
680
681 ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1)
682 TESTS_PASSING_ASC += folly_synchronization_distributed_mutex_test
683 endif
684
685 # Enable building all unit tests, but use check_some to run only tests
686 # known to pass ASC (ASSERT_STATUS_CHECKED)
687 ROCKSDBTESTS_SUBSET ?= $(TESTS_PASSING_ASC)
688 # Alternate: only build unit tests known to pass ASC, and run them
689 # with make check
690 #TESTS := $(filter $(TESTS_PASSING_ASC),$(TESTS))
691 #PARALLEL_TEST := $(filter $(TESTS_PASSING_ASC),$(PARALLEL_TEST))
692 else
693 ROCKSDBTESTS_SUBSET ?= $(TESTS)
694 endif
695 # Not necessarily well thought out or up-to-date, but matches old list
696 TESTS_PLATFORM_DEPENDENT := \
697 db_basic_test \
698 db_blob_basic_test \
699 db_with_timestamp_basic_test \
700 db_encryption_test \
701 db_test2 \
702 external_sst_file_basic_test \
703 auto_roll_logger_test \
704 bloom_test \
705 dynamic_bloom_test \
706 c_test \
707 checkpoint_test \
708 crc32c_test \
709 coding_test \
710 inlineskiplist_test \
711 env_basic_test \
712 env_test \
713 env_logger_test \
714 io_posix_test \
715 hash_test \
716 random_test \
717 ribbon_test \
718 thread_local_test \
719 work_queue_test \
720 rate_limiter_test \
721 perf_context_test \
722 iostats_context_test \
723 db_wal_test \
724
725 # Sort ROCKSDBTESTS_SUBSET for filtering, except db_test is special (expensive)
726 # so is placed first (out-of-order)
727 ROCKSDBTESTS_SUBSET := $(filter db_test, $(ROCKSDBTESTS_SUBSET)) $(sort $(filter-out db_test, $(ROCKSDBTESTS_SUBSET)))
728
729 ifdef ROCKSDBTESTS_START
730 ROCKSDBTESTS_SUBSET := $(shell echo $(ROCKSDBTESTS_SUBSET) | sed 's/^.*$(ROCKSDBTESTS_START)/$(ROCKSDBTESTS_START)/')
731 endif
732
733 ifdef ROCKSDBTESTS_END
734 ROCKSDBTESTS_SUBSET := $(shell echo $(ROCKSDBTESTS_SUBSET) | sed 's/$(ROCKSDBTESTS_END).*//')
735 endif
736
737 ifeq ($(ROCKSDBTESTS_PLATFORM_DEPENDENT), only)
738 ROCKSDBTESTS_SUBSET := $(filter $(TESTS_PLATFORM_DEPENDENT), $(ROCKSDBTESTS_SUBSET))
739 else ifeq ($(ROCKSDBTESTS_PLATFORM_DEPENDENT), exclude)
740 ROCKSDBTESTS_SUBSET := $(filter-out $(TESTS_PLATFORM_DEPENDENT), $(ROCKSDBTESTS_SUBSET))
741 endif
742
743 # bench_tool_analyer main is in bench_tool_analyzer_tool, or this would be simpler...
744 TOOLS = $(patsubst %.cc, %, $(notdir $(patsubst %_tool.cc, %.cc, $(TOOLS_MAIN_SOURCES))))
745
746 TEST_LIBS = \
747 librocksdb_env_basic_test.a
748
749 # TODO: add back forward_iterator_bench, after making it build in all environemnts.
750 BENCHMARKS = $(patsubst %.cc, %, $(notdir $(BENCH_MAIN_SOURCES)))
751
752 # if user didn't config LIBNAME, set the default
753 ifeq ($(LIBNAME),)
754 LIBNAME=librocksdb
755 # we should only run rocksdb in production with DEBUG_LEVEL 0
756 ifneq ($(DEBUG_LEVEL),0)
757 LIBDEBUG=_debug
758 endif
759 endif
760 STATIC_LIBRARY = ${LIBNAME}$(LIBDEBUG).a
761 STATIC_TEST_LIBRARY = ${LIBNAME}_test$(LIBDEBUG).a
762 STATIC_TOOLS_LIBRARY = ${LIBNAME}_tools$(LIBDEBUG).a
763 STATIC_STRESS_LIBRARY = ${LIBNAME}_stress$(LIBDEBUG).a
764
765 ALL_STATIC_LIBS = $(STATIC_LIBRARY) $(STATIC_TEST_LIBRARY) $(STATIC_TOOLS_LIBRARY) $(STATIC_STRESS_LIBRARY)
766
767 SHARED_TEST_LIBRARY = ${LIBNAME}_test$(LIBDEBUG).$(PLATFORM_SHARED_EXT)
768 SHARED_TOOLS_LIBRARY = ${LIBNAME}_tools$(LIBDEBUG).$(PLATFORM_SHARED_EXT)
769 SHARED_STRESS_LIBRARY = ${LIBNAME}_stress$(LIBDEBUG).$(PLATFORM_SHARED_EXT)
770
771 ALL_SHARED_LIBS = $(SHARED1) $(SHARED2) $(SHARED3) $(SHARED4) $(SHARED_TEST_LIBRARY) $(SHARED_TOOLS_LIBRARY) $(SHARED_STRESS_LIBRARY)
772
773 ifeq ($(LIB_MODE),shared)
774 LIBRARY=$(SHARED1)
775 TEST_LIBRARY=$(SHARED_TEST_LIBRARY)
776 TOOLS_LIBRARY=$(SHARED_TOOLS_LIBRARY)
777 STRESS_LIBRARY=$(SHARED_STRESS_LIBRARY)
778 CLOUD_LIBRARY=$(SHARED_CLOUD_LIBRARY)
779 else
780 LIBRARY=$(STATIC_LIBRARY)
781 TEST_LIBRARY=$(STATIC_TEST_LIBRARY)
782 TOOLS_LIBRARY=$(STATIC_TOOLS_LIBRARY)
783 STRESS_LIBRARY=$(STATIC_STRESS_LIBRARY)
784 endif
785
786 ROCKSDB_MAJOR = $(shell egrep "ROCKSDB_MAJOR.[0-9]" include/rocksdb/version.h | cut -d ' ' -f 3)
787 ROCKSDB_MINOR = $(shell egrep "ROCKSDB_MINOR.[0-9]" include/rocksdb/version.h | cut -d ' ' -f 3)
788 ROCKSDB_PATCH = $(shell egrep "ROCKSDB_PATCH.[0-9]" include/rocksdb/version.h | cut -d ' ' -f 3)
789
790 default: all
791
792 #-----------------------------------------------
793 # Create platform independent shared libraries.
794 #-----------------------------------------------
795 ifneq ($(PLATFORM_SHARED_EXT),)
796
797 ifneq ($(PLATFORM_SHARED_VERSIONED),true)
798 SHARED1 = ${LIBNAME}$(LIBDEBUG).$(PLATFORM_SHARED_EXT)
799 SHARED2 = $(SHARED1)
800 SHARED3 = $(SHARED1)
801 SHARED4 = $(SHARED1)
802 SHARED = $(SHARED1)
803 else
804 SHARED_MAJOR = $(ROCKSDB_MAJOR)
805 SHARED_MINOR = $(ROCKSDB_MINOR)
806 SHARED_PATCH = $(ROCKSDB_PATCH)
807 SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
808 ifeq ($(PLATFORM), OS_MACOSX)
809 SHARED_OSX = $(LIBNAME)$(LIBDEBUG).$(SHARED_MAJOR)
810 SHARED2 = $(SHARED_OSX).$(PLATFORM_SHARED_EXT)
811 SHARED3 = $(SHARED_OSX).$(SHARED_MINOR).$(PLATFORM_SHARED_EXT)
812 SHARED4 = $(SHARED_OSX).$(SHARED_MINOR).$(SHARED_PATCH).$(PLATFORM_SHARED_EXT)
813 else
814 SHARED2 = $(SHARED1).$(SHARED_MAJOR)
815 SHARED3 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR)
816 SHARED4 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR).$(SHARED_PATCH)
817 endif # MACOSX
818 SHARED = $(SHARED1) $(SHARED2) $(SHARED3) $(SHARED4)
819 $(SHARED1): $(SHARED4) $(SHARED2)
820 ln -fs $(SHARED4) $(SHARED1)
821 $(SHARED2): $(SHARED4) $(SHARED3)
822 ln -fs $(SHARED4) $(SHARED2)
823 $(SHARED3): $(SHARED4)
824 ln -fs $(SHARED4) $(SHARED3)
825
826 endif # PLATFORM_SHARED_VERSIONED
827 $(SHARED4): $(LIB_OBJECTS)
828 $(AM_V_CCLD) $(CXX) $(PLATFORM_SHARED_LDFLAGS)$(SHARED3) $(LIB_OBJECTS) $(LDFLAGS) -o $@
829 endif # PLATFORM_SHARED_EXT
830
831 .PHONY: blackbox_crash_test check clean coverage crash_test ldb_tests package \
832 release tags tags0 valgrind_check whitebox_crash_test format static_lib shared_lib all \
833 dbg rocksdbjavastatic rocksdbjava gen-pc install install-static install-shared uninstall \
834 analyze tools tools_lib \
835 blackbox_crash_test_with_atomic_flush whitebox_crash_test_with_atomic_flush \
836 blackbox_crash_test_with_txn whitebox_crash_test_with_txn \
837 blackbox_crash_test_with_best_efforts_recovery
838
839
840 all: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(TESTS)
841
842 all_but_some_tests: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(ROCKSDBTESTS_SUBSET)
843
844 static_lib: $(STATIC_LIBRARY)
845
846 shared_lib: $(SHARED)
847
848 stress_lib: $(STRESS_LIBRARY)
849
850 tools: $(TOOLS)
851
852 tools_lib: $(TOOLS_LIBRARY)
853
854 test_libs: $(TEST_LIBS)
855
856 benchmarks: $(BENCHMARKS)
857
858 dbg: $(LIBRARY) $(BENCHMARKS) tools $(TESTS)
859
860 # creates library and programs
861 release: clean
862 LIB_MODE=$(LIB_MODE) DEBUG_LEVEL=0 $(MAKE) $(LIBRARY) tools db_bench
863
864 coverage: clean
865 COVERAGEFLAGS="-fprofile-arcs -ftest-coverage" LDFLAGS+="-lgcov" $(MAKE) J=1 all check
866 cd coverage && ./coverage_test.sh
867 # Delete intermediate files
868 $(FIND) . -type f -regex ".*\.\(\(gcda\)\|\(gcno\)\)" -exec rm -f {} \;
869
870 ifneq (,$(filter check parallel_check,$(MAKECMDGOALS)),)
871 # Use /dev/shm if it has the sticky bit set (otherwise, /tmp),
872 # and create a randomly-named rocksdb.XXXX directory therein.
873 # We'll use that directory in the "make check" rules.
874 ifeq ($(TMPD),)
875 TMPDIR := $(shell echo $${TMPDIR:-/tmp})
876 TMPD := $(shell f=/dev/shm; test -k $$f || f=$(TMPDIR); \
877 perl -le 'use File::Temp "tempdir";' \
878 -e 'print tempdir("'$$f'/rocksdb.XXXX", CLEANUP => 0)')
879 endif
880 endif
881
882 # Run all tests in parallel, accumulating per-test logs in t/log-*.
883 #
884 # Each t/run-* file is a tiny generated bourne shell script that invokes one of
885 # sub-tests. Why use a file for this? Because that makes the invocation of
886 # parallel below simpler, which in turn makes the parsing of parallel's
887 # LOG simpler (the latter is for live monitoring as parallel
888 # tests run).
889 #
890 # Test names are extracted by running tests with --gtest_list_tests.
891 # This filter removes the "#"-introduced comments, and expands to
892 # fully-qualified names by changing input like this:
893 #
894 # DBTest.
895 # Empty
896 # WriteEmptyBatch
897 # MultiThreaded/MultiThreadedDBTest.
898 # MultiThreaded/0 # GetParam() = 0
899 # MultiThreaded/1 # GetParam() = 1
900 #
901 # into this:
902 #
903 # DBTest.Empty
904 # DBTest.WriteEmptyBatch
905 # MultiThreaded/MultiThreadedDBTest.MultiThreaded/0
906 # MultiThreaded/MultiThreadedDBTest.MultiThreaded/1
907 #
908
909 parallel_tests = $(patsubst %,parallel_%,$(PARALLEL_TEST))
910 .PHONY: gen_parallel_tests $(parallel_tests)
911 $(parallel_tests): $(PARALLEL_TEST)
912 $(AM_V_at)TEST_BINARY=$(patsubst parallel_%,%,$@); \
913 TEST_NAMES=` \
914 ./$$TEST_BINARY --gtest_list_tests \
915 | perl -n \
916 -e 's/ *\#.*//;' \
917 -e '/^(\s*)(\S+)/; !$$1 and do {$$p=$$2; break};' \
918 -e 'print qq! $$p$$2!'`; \
919 for TEST_NAME in $$TEST_NAMES; do \
920 TEST_SCRIPT=t/run-$$TEST_BINARY-$${TEST_NAME//\//-}; \
921 echo " GEN " $$TEST_SCRIPT; \
922 printf '%s\n' \
923 '#!/bin/sh' \
924 "d=\$(TMPD)$$TEST_SCRIPT" \
925 'mkdir -p $$d' \
926 "TEST_TMPDIR=\$$d $(DRIVER) ./$$TEST_BINARY --gtest_filter=$$TEST_NAME" \
927 > $$TEST_SCRIPT; \
928 chmod a=rx $$TEST_SCRIPT; \
929 done
930
931 gen_parallel_tests:
932 $(AM_V_at)mkdir -p t
933 $(AM_V_at)$(FIND) t -type f -name 'run-*' -exec rm -f {} \;
934 $(MAKE) $(parallel_tests)
935
936 # Reorder input lines (which are one per test) so that the
937 # longest-running tests appear first in the output.
938 # Do this by prefixing each selected name with its duration,
939 # sort the resulting names, and remove the leading numbers.
940 # FIXME: the "100" we prepend is a fake time, for now.
941 # FIXME: squirrel away timings from each run and use them
942 # (when present) on subsequent runs to order these tests.
943 #
944 # Without this reordering, these two tests would happen to start only
945 # after almost all other tests had completed, thus adding 100 seconds
946 # to the duration of parallel "make check". That's the difference
947 # between 4 minutes (old) and 2m20s (new).
948 #
949 # 152.120 PASS t/DBTest.FileCreationRandomFailure
950 # 107.816 PASS t/DBTest.EncodeDecompressedBlockSizeTest
951 #
952 slow_test_regexp = \
953 ^.*SnapshotConcurrentAccessTest.*$$|^t/run-table_test-HarnessTest.Randomized$$|^t/run-db_test-.*(?:FileCreationRandomFailure|EncodeDecompressedBlockSizeTest)$$|^.*RecoverFromCorruptedWALWithoutFlush$$
954 prioritize_long_running_tests = \
955 perl -pe 's,($(slow_test_regexp)),100 $$1,' \
956 | sort -k1,1gr \
957 | sed 's/^[.0-9]* //'
958
959 # "make check" uses
960 # Run with "make J=1 check" to disable parallelism in "make check".
961 # Run with "make J=200% check" to run two parallel jobs per core.
962 # The default is to run one job per core (J=100%).
963 # See "man parallel" for its "-j ..." option.
964 J ?= 100%
965
966 # Use this regexp to select the subset of tests whose names match.
967 tests-regexp = .
968 EXCLUDE_TESTS_REGEX ?= "^$"
969
970 ifeq ($(PRINT_PARALLEL_OUTPUTS), 1)
971 parallel_com = '{}'
972 else
973 parallel_com = '{} >& t/log-{/}'
974 endif
975
976 .PHONY: check_0
977 check_0:
978 $(AM_V_GEN)export TEST_TMPDIR=$(TMPD); \
979 printf '%s\n' '' \
980 'To monitor subtest <duration,pass/fail,name>,' \
981 ' run "make watch-log" in a separate window' ''; \
982 test -t 1 && eta=--eta || eta=; \
983 { \
984 printf './%s\n' $(filter-out $(PARALLEL_TEST),$(TESTS)); \
985 find t -name 'run-*' -print; \
986 } \
987 | $(prioritize_long_running_tests) \
988 | grep -E '$(tests-regexp)' \
989 | grep -E -v '$(EXCLUDE_TESTS_REGEX)' \
990 | build_tools/gnu_parallel -j$(J) --plain --joblog=LOG $$eta --gnu $(parallel_com) ; \
991 parallel_retcode=$$? ; \
992 awk '{ if ($$7 != 0 || $$8 != 0) { if ($$7 == "Exitval") { h = $$0; } else { if (!f) print h; print; f = 1 } } } END { if(f) exit 1; }' < LOG ; \
993 awk_retcode=$$?; \
994 if [ $$parallel_retcode -ne 0 ] || [ $$awk_retcode -ne 0 ] ; then exit 1 ; fi
995
996 valgrind-exclude-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
997
998 .PHONY: valgrind_check_0
999 valgrind_check_0:
1000 $(AM_V_GEN)export TEST_TMPDIR=$(TMPD); \
1001 printf '%s\n' '' \
1002 'To monitor subtest <duration,pass/fail,name>,' \
1003 ' run "make watch-log" in a separate window' ''; \
1004 test -t 1 && eta=--eta || eta=; \
1005 { \
1006 printf './%s\n' $(filter-out $(PARALLEL_TEST) %skiplist_test options_settable_test, $(TESTS)); \
1007 find t -name 'run-*' -print; \
1008 } \
1009 | $(prioritize_long_running_tests) \
1010 | grep -E '$(tests-regexp)' \
1011 | grep -E -v '$(valgrind-exclude-regexp)' \
1012 | build_tools/gnu_parallel -j$(J) --plain --joblog=LOG $$eta --gnu \
1013 '(if [[ "{}" == "./"* ]] ; then $(DRIVER) {}; else {}; fi) ' \
1014 '>& t/valgrind_log-{/}'
1015
1016 CLEAN_FILES += t LOG $(TMPD)
1017
1018 # When running parallel "make check", you can monitor its progress
1019 # from another window.
1020 # Run "make watch_LOG" to show the duration,PASS/FAIL,name of parallel
1021 # tests as they are being run. We sort them so that longer-running ones
1022 # appear at the top of the list and any failing tests remain at the top
1023 # regardless of their duration. As with any use of "watch", hit ^C to
1024 # interrupt.
1025 watch-log:
1026 $(WATCH) --interval=0 'sort -k7,7nr -k4,4gr LOG|$(quoted_perl_command)'
1027
1028 dump-log:
1029 bash -c '$(quoted_perl_command)' < LOG
1030
1031 # If J != 1 and GNU parallel is installed, run the tests in parallel,
1032 # via the check_0 rule above. Otherwise, run them sequentially.
1033 check: all
1034 $(MAKE) gen_parallel_tests
1035 $(AM_V_GEN)if test "$(J)" != 1 \
1036 && (build_tools/gnu_parallel --gnu --help 2>/dev/null) | \
1037 grep -q 'GNU Parallel'; \
1038 then \
1039 $(MAKE) T="$$t" TMPD=$(TMPD) check_0; \
1040 else \
1041 for t in $(TESTS); do \
1042 echo "===== Running $$t (`date`)"; ./$$t || exit 1; done; \
1043 fi
1044 rm -rf $(TMPD)
1045 ifneq ($(PLATFORM), OS_AIX)
1046 $(PYTHON) tools/check_all_python.py
1047 ifeq ($(filter -DROCKSDB_LITE,$(OPT)),)
1048 ifndef ASSERT_STATUS_CHECKED # not yet working with these tests
1049 $(PYTHON) tools/ldb_test.py
1050 sh tools/rocksdb_dump_test.sh
1051 endif
1052 endif
1053 endif
1054 ifndef SKIP_FORMAT_BUCK_CHECKS
1055 $(MAKE) check-format
1056 $(MAKE) check-buck-targets
1057 endif
1058
1059 # TODO add ldb_tests
1060 check_some: $(ROCKSDBTESTS_SUBSET)
1061 for t in $(ROCKSDBTESTS_SUBSET); do echo "===== Running $$t (`date`)"; ./$$t || exit 1; done
1062
1063 .PHONY: ldb_tests
1064 ldb_tests: ldb
1065 $(PYTHON) tools/ldb_test.py
1066
1067 crash_test: whitebox_crash_test blackbox_crash_test
1068
1069 crash_test_with_atomic_flush: whitebox_crash_test_with_atomic_flush blackbox_crash_test_with_atomic_flush
1070
1071 crash_test_with_txn: whitebox_crash_test_with_txn blackbox_crash_test_with_txn
1072
1073 crash_test_with_best_efforts_recovery: blackbox_crash_test_with_best_efforts_recovery
1074
1075 blackbox_crash_test: db_stress
1076 $(PYTHON) -u tools/db_crashtest.py --simple blackbox $(CRASH_TEST_EXT_ARGS)
1077 $(PYTHON) -u tools/db_crashtest.py blackbox $(CRASH_TEST_EXT_ARGS)
1078
1079 blackbox_crash_test_with_atomic_flush: db_stress
1080 $(PYTHON) -u tools/db_crashtest.py --cf_consistency blackbox $(CRASH_TEST_EXT_ARGS)
1081
1082 blackbox_crash_test_with_txn: db_stress
1083 $(PYTHON) -u tools/db_crashtest.py --txn blackbox $(CRASH_TEST_EXT_ARGS)
1084
1085 blackbox_crash_test_with_best_efforts_recovery: db_stress
1086 $(PYTHON) -u tools/db_crashtest.py --test_best_efforts_recovery blackbox $(CRASH_TEST_EXT_ARGS)
1087
1088 ifeq ($(CRASH_TEST_KILL_ODD),)
1089 CRASH_TEST_KILL_ODD=888887
1090 endif
1091
1092 whitebox_crash_test: db_stress
1093 $(PYTHON) -u tools/db_crashtest.py --simple whitebox --random_kill_odd \
1094 $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
1095 $(PYTHON) -u tools/db_crashtest.py whitebox --random_kill_odd \
1096 $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
1097
1098 whitebox_crash_test_with_atomic_flush: db_stress
1099 $(PYTHON) -u tools/db_crashtest.py --cf_consistency whitebox --random_kill_odd \
1100 $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
1101
1102 whitebox_crash_test_with_txn: db_stress
1103 $(PYTHON) -u tools/db_crashtest.py --txn whitebox --random_kill_odd \
1104 $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
1105
1106 asan_check: clean
1107 COMPILE_WITH_ASAN=1 $(MAKE) check -j32
1108 $(MAKE) clean
1109
1110 asan_crash_test: clean
1111 COMPILE_WITH_ASAN=1 $(MAKE) crash_test
1112 $(MAKE) clean
1113
1114 whitebox_asan_crash_test: clean
1115 COMPILE_WITH_ASAN=1 $(MAKE) whitebox_crash_test
1116 $(MAKE) clean
1117
1118 blackbox_asan_crash_test: clean
1119 COMPILE_WITH_ASAN=1 $(MAKE) blackbox_crash_test
1120 $(MAKE) clean
1121
1122 asan_crash_test_with_atomic_flush: clean
1123 COMPILE_WITH_ASAN=1 $(MAKE) crash_test_with_atomic_flush
1124 $(MAKE) clean
1125
1126 asan_crash_test_with_txn: clean
1127 COMPILE_WITH_ASAN=1 $(MAKE) crash_test_with_txn
1128 $(MAKE) clean
1129
1130 asan_crash_test_with_best_efforts_recovery: clean
1131 COMPILE_WITH_ASAN=1 $(MAKE) crash_test_with_best_efforts_recovery
1132 $(MAKE) clean
1133
1134 ubsan_check: clean
1135 COMPILE_WITH_UBSAN=1 $(MAKE) check -j32
1136 $(MAKE) clean
1137
1138 ubsan_crash_test: clean
1139 COMPILE_WITH_UBSAN=1 $(MAKE) crash_test
1140 $(MAKE) clean
1141
1142 whitebox_ubsan_crash_test: clean
1143 COMPILE_WITH_UBSAN=1 $(MAKE) whitebox_crash_test
1144 $(MAKE) clean
1145
1146 blackbox_ubsan_crash_test: clean
1147 COMPILE_WITH_UBSAN=1 $(MAKE) blackbox_crash_test
1148 $(MAKE) clean
1149
1150 ubsan_crash_test_with_atomic_flush: clean
1151 COMPILE_WITH_UBSAN=1 $(MAKE) crash_test_with_atomic_flush
1152 $(MAKE) clean
1153
1154 ubsan_crash_test_with_txn: clean
1155 COMPILE_WITH_UBSAN=1 $(MAKE) crash_test_with_txn
1156 $(MAKE) clean
1157
1158 ubsan_crash_test_with_best_efforts_recovery: clean
1159 COMPILE_WITH_UBSAN=1 $(MAKE) crash_test_with_best_efforts_recovery
1160 $(MAKE) clean
1161
1162 valgrind_test:
1163 ROCKSDB_VALGRIND_RUN=1 DISABLE_JEMALLOC=1 $(MAKE) valgrind_check
1164
1165 valgrind_test_some:
1166 ROCKSDB_VALGRIND_RUN=1 DISABLE_JEMALLOC=1 $(MAKE) valgrind_check_some
1167
1168 valgrind_check: $(TESTS)
1169 $(MAKE) DRIVER="$(VALGRIND_VER) $(VALGRIND_OPTS)" gen_parallel_tests
1170 $(AM_V_GEN)if test "$(J)" != 1 \
1171 && (build_tools/gnu_parallel --gnu --help 2>/dev/null) | \
1172 grep -q 'GNU Parallel'; \
1173 then \
1174 $(MAKE) TMPD=$(TMPD) \
1175 DRIVER="$(VALGRIND_VER) $(VALGRIND_OPTS)" valgrind_check_0; \
1176 else \
1177 for t in $(filter-out %skiplist_test options_settable_test,$(TESTS)); do \
1178 $(VALGRIND_VER) $(VALGRIND_OPTS) ./$$t; \
1179 ret_code=$$?; \
1180 if [ $$ret_code -ne 0 ]; then \
1181 exit $$ret_code; \
1182 fi; \
1183 done; \
1184 fi
1185
1186 valgrind_check_some: $(ROCKSDBTESTS_SUBSET)
1187 for t in $(ROCKSDBTESTS_SUBSET); do \
1188 $(VALGRIND_VER) $(VALGRIND_OPTS) ./$$t; \
1189 ret_code=$$?; \
1190 if [ $$ret_code -ne 0 ]; then \
1191 exit $$ret_code; \
1192 fi; \
1193 done
1194
1195 ifneq ($(PAR_TEST),)
1196 parloop:
1197 ret_bad=0; \
1198 for t in $(PAR_TEST); do \
1199 echo "===== Running $$t in parallel $(NUM_PAR) (`date`)";\
1200 if [ $(db_test) -eq 1 ]; then \
1201 seq $(J) | v="$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{}; export TEST_TMPDIR=$$s;' \
1202 'timeout 2m ./db_test --gtest_filter=$$v >> $$s/log-{} 2>1'; \
1203 else\
1204 seq $(J) | v="./$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{};' \
1205 'export TEST_TMPDIR=$$s; timeout 10m $$v >> $$s/log-{} 2>1'; \
1206 fi; \
1207 ret_code=$$?; \
1208 if [ $$ret_code -ne 0 ]; then \
1209 ret_bad=$$ret_code; \
1210 echo $$t exited with $$ret_code; \
1211 fi; \
1212 done; \
1213 exit $$ret_bad;
1214 endif
1215
1216 test_names = \
1217 ./db_test --gtest_list_tests \
1218 | perl -n \
1219 -e 's/ *\#.*//;' \
1220 -e '/^(\s*)(\S+)/; !$$1 and do {$$p=$$2; break};' \
1221 -e 'print qq! $$p$$2!'
1222
1223 parallel_check: $(TESTS)
1224 $(AM_V_GEN)if test "$(J)" > 1 \
1225 && (build_tools/gnu_parallel --gnu --help 2>/dev/null) | \
1226 grep -q 'GNU Parallel'; \
1227 then \
1228 echo Running in parallel $(J); \
1229 else \
1230 echo "Need to have GNU Parallel and J > 1"; exit 1; \
1231 fi; \
1232 ret_bad=0; \
1233 echo $(J);\
1234 echo Test Dir: $(TMPD); \
1235 seq $(J) | build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{}; rm -rf $$s; mkdir $$s'; \
1236 $(MAKE) PAR_TEST="$(shell $(test_names))" TMPD=$(TMPD) \
1237 J=$(J) db_test=1 parloop; \
1238 $(MAKE) PAR_TEST="$(filter-out db_test, $(TESTS))" \
1239 TMPD=$(TMPD) J=$(J) db_test=0 parloop;
1240
1241 analyze: clean
1242 USE_CLANG=1 $(MAKE) analyze_incremental
1243
1244 analyze_incremental:
1245 $(CLANG_SCAN_BUILD) --use-analyzer=$(CLANG_ANALYZER) \
1246 --use-c++=$(CXX) --use-cc=$(CC) --status-bugs \
1247 -o $(CURDIR)/scan_build_report \
1248 $(MAKE) dbg
1249
1250 CLEAN_FILES += unity.cc
1251 unity.cc: Makefile
1252 rm -f $@ $@-t
1253 for source_file in $(LIB_SOURCES); do \
1254 echo "#include \"$$source_file\"" >> $@-t; \
1255 done
1256 chmod a=r $@-t
1257 mv $@-t $@
1258
1259 unity.a: $(OBJ_DIR)/unity.o
1260 $(AM_V_AR)rm -f $@
1261 $(AM_V_at)$(AR) $(ARFLAGS) $@ $(OBJ_DIR)/unity.o
1262
1263
1264 # try compiling db_test with unity
1265 unity_test: $(OBJ_DIR)/db/db_basic_test.o $(OBJ_DIR)/db/db_test_util.o $(TEST_OBJECTS) $(TOOL_OBJECTS) unity.a
1266 $(AM_LINK)
1267 ./unity_test
1268
1269 rocksdb.h rocksdb.cc: build_tools/amalgamate.py Makefile $(LIB_SOURCES) unity.cc
1270 build_tools/amalgamate.py -I. -i./include unity.cc -x include/rocksdb/c.h -H rocksdb.h -o rocksdb.cc
1271
1272 clean: clean-ext-libraries-all clean-rocks clean-rocksjava
1273
1274 clean-not-downloaded: clean-ext-libraries-bin clean-rocks clean-not-downloaded-rocksjava
1275
1276 clean-rocks:
1277 echo shared=$(ALL_SHARED_LIBS)
1278 echo static=$(ALL_STATIC_LIBS)
1279 rm -f $(BENCHMARKS) $(TOOLS) $(TESTS) $(PARALLEL_TEST) $(ALL_STATIC_LIBS) $(ALL_SHARED_LIBS)
1280 rm -rf $(CLEAN_FILES) ios-x86 ios-arm scan_build_report
1281 $(FIND) . -name "*.[oda]" -exec rm -f {} \;
1282 $(FIND) . -type f -regex ".*\.\(\(gcda\)\|\(gcno\)\)" -exec rm -f {} \;
1283
1284 clean-rocksjava:
1285 rm -rf jl jls
1286 cd java && $(MAKE) clean
1287
1288 clean-not-downloaded-rocksjava:
1289 cd java && $(MAKE) clean-not-downloaded
1290
1291 clean-ext-libraries-all:
1292 rm -rf bzip2* snappy* zlib* lz4* zstd*
1293
1294 clean-ext-libraries-bin:
1295 find . -maxdepth 1 -type d \( -name bzip2\* -or -name snappy\* -or -name zlib\* -or -name lz4\* -or -name zstd\* \) -prune -exec rm -rf {} \;
1296
1297 tags:
1298 ctags -R .
1299 cscope -b `$(FIND) . -name '*.cc'` `$(FIND) . -name '*.h'` `$(FIND) . -name '*.c'`
1300 ctags -e -R -o etags *
1301
1302 tags0:
1303 ctags -R .
1304 cscope -b `$(FIND) . -name '*.cc' -and ! -name '*_test.cc'` \
1305 `$(FIND) . -name '*.c' -and ! -name '*_test.c'` \
1306 `$(FIND) . -name '*.h' -and ! -name '*_test.h'`
1307 ctags -e -R -o etags *
1308
1309 format:
1310 build_tools/format-diff.sh
1311
1312 check-format:
1313 build_tools/format-diff.sh -c
1314
1315 check-buck-targets:
1316 buckifier/check_buck_targets.sh
1317
1318 package:
1319 bash build_tools/make_package.sh $(SHARED_MAJOR).$(SHARED_MINOR)
1320
1321 # ---------------------------------------------------------------------------
1322 # Unit tests and tools
1323 # ---------------------------------------------------------------------------
1324 $(STATIC_LIBRARY): $(LIB_OBJECTS)
1325 $(AM_V_AR)rm -f $@ $(SHARED1) $(SHARED2) $(SHARED3) $(SHARED4)
1326 $(AM_V_at)$(AR) $(ARFLAGS) $@ $(LIB_OBJECTS)
1327
1328 $(STATIC_TEST_LIBRARY): $(TEST_OBJECTS)
1329 $(AM_V_AR)rm -f $@ $(SHARED_TEST_LIBRARY)
1330 $(AM_V_at)$(AR) $(ARFLAGS) $@ $^
1331
1332 $(STATIC_TOOLS_LIBRARY): $(BENCH_OBJECTS) $(TOOL_OBJECTS)
1333 $(AM_V_AR)rm -f $@ $(SHARED_TOOLS_LIBRARY)
1334 $(AM_V_at)$(AR) $(ARFLAGS) $@ $^
1335
1336 $(STATIC_STRESS_LIBRARY): $(ANALYZE_OBJECTS) $(STRESS_OBJECTS)
1337 $(AM_V_AR)rm -f $@ $(SHARED_STRESS_LIBRARY)
1338 $(AM_V_at)$(AR) $(ARFLAGS) $@ $^
1339
1340 $(SHARED_TEST_LIBRARY): $(TEST_OBJECTS) $(SHARED1)
1341 $(AM_V_AR)rm -f $@ $(STATIC_TEST_LIBRARY)
1342 $(AM_SHARE)
1343
1344 $(SHARED_TOOLS_LIBRARY): $(TOOL_OBJECTS) $(SHARED1)
1345 $(AM_V_AR)rm -f $@ $(STATIC_TOOLS_LIBRARY)
1346 $(AM_SHARE)
1347
1348 $(SHARED_STRESS_LIBRARY): $(ANALYZE_OBJECTS) $(STRESS_OBJECTS) $(SHARED_TOOLS_LIBRARY) $(SHARED1)
1349 $(AM_V_AR)rm -f $@ $(STATIC_STRESS_LIBRARY)
1350 $(AM_SHARE)
1351
1352 librocksdb_env_basic_test.a: $(OBJ_DIR)/env/env_basic_test.o $(LIB_OBJECTS) $(TESTHARNESS)
1353 $(AM_V_AR)rm -f $@
1354 $(AM_V_at)$(AR) $(ARFLAGS) $@ $^
1355
1356 db_bench: $(OBJ_DIR)/tools/db_bench.o $(BENCH_OBJECTS) $(TESTUTIL) $(LIBRARY)
1357 $(AM_LINK)
1358
1359 trace_analyzer: $(OBJ_DIR)/tools/trace_analyzer.o $(ANALYZE_OBJECTS) $(TOOLS_LIBRARY) $(LIBRARY)
1360 $(AM_LINK)
1361
1362 block_cache_trace_analyzer: $(OBJ_DIR)/tools/block_cache_analyzer/block_cache_trace_analyzer_tool.o $(ANALYZE_OBJECTS) $(TOOLS_LIBRARY) $(LIBRARY)
1363 $(AM_LINK)
1364
1365 ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1)
1366 folly_synchronization_distributed_mutex_test: $(OBJ_DIR)/third-party/folly/folly/synchronization/test/DistributedMutexTest.o $(TEST_LIBRARY) $(LIBRARY)
1367 $(AM_LINK)
1368 endif
1369
1370 cache_bench: $(OBJ_DIR)/cache/cache_bench.o $(LIBRARY)
1371 $(AM_LINK)
1372
1373 persistent_cache_bench: $(OBJ_DIR)/utilities/persistent_cache/persistent_cache_bench.o $(LIBRARY)
1374 $(AM_LINK)
1375
1376 memtablerep_bench: $(OBJ_DIR)/memtable/memtablerep_bench.o $(LIBRARY)
1377 $(AM_LINK)
1378
1379 filter_bench: $(OBJ_DIR)/util/filter_bench.o $(LIBRARY)
1380 $(AM_LINK)
1381
1382 db_stress: $(OBJ_DIR)/db_stress_tool/db_stress.o $(STRESS_LIBRARY) $(TOOLS_LIBRARY) $(LIBRARY)
1383 $(AM_LINK)
1384
1385 write_stress: $(OBJ_DIR)/tools/write_stress.o $(LIBRARY)
1386 $(AM_LINK)
1387
1388 db_sanity_test: $(OBJ_DIR)/tools/db_sanity_test.o $(LIBRARY)
1389 $(AM_LINK)
1390
1391 db_repl_stress: $(OBJ_DIR)/tools/db_repl_stress.o $(LIBRARY)
1392 $(AM_LINK)
1393
1394 arena_test: $(OBJ_DIR)/memory/arena_test.o $(TEST_LIBRARY) $(LIBRARY)
1395 $(AM_LINK)
1396
1397 memkind_kmem_allocator_test: memory/memkind_kmem_allocator_test.o $(TEST_LIBRARY) $(LIBRARY)
1398 $(AM_LINK)
1399
1400 autovector_test: $(OBJ_DIR)/util/autovector_test.o $(TEST_LIBRARY) $(LIBRARY)
1401 $(AM_LINK)
1402
1403 column_family_test: $(OBJ_DIR)/db/column_family_test.o $(TEST_LIBRARY) $(LIBRARY)
1404 $(AM_LINK)
1405
1406 table_properties_collector_test: $(OBJ_DIR)/db/table_properties_collector_test.o $(TEST_LIBRARY) $(LIBRARY)
1407 $(AM_LINK)
1408
1409 bloom_test: $(OBJ_DIR)/util/bloom_test.o $(TEST_LIBRARY) $(LIBRARY)
1410 $(AM_LINK)
1411
1412 dynamic_bloom_test: $(OBJ_DIR)/util/dynamic_bloom_test.o $(TEST_LIBRARY) $(LIBRARY)
1413 $(AM_LINK)
1414
1415 c_test: $(OBJ_DIR)/db/c_test.o $(TEST_LIBRARY) $(LIBRARY)
1416 $(AM_LINK)
1417
1418 cache_test: $(OBJ_DIR)/cache/cache_test.o $(TEST_LIBRARY) $(LIBRARY)
1419 $(AM_LINK)
1420
1421 coding_test: $(OBJ_DIR)/util/coding_test.o $(TEST_LIBRARY) $(LIBRARY)
1422 $(AM_LINK)
1423
1424 hash_test: $(OBJ_DIR)/util/hash_test.o $(TEST_LIBRARY) $(LIBRARY)
1425 $(AM_LINK)
1426
1427 random_test: $(OBJ_DIR)/util/random_test.o $(TEST_LIBRARY) $(LIBRARY)
1428 $(AM_LINK)
1429
1430 ribbon_test: $(OBJ_DIR)/util/ribbon_test.o $(TEST_LIBRARY) $(LIBRARY)
1431 $(AM_LINK)
1432
1433 option_change_migration_test: $(OBJ_DIR)/utilities/option_change_migration/option_change_migration_test.o $(TEST_LIBRARY) $(LIBRARY)
1434 $(AM_LINK)
1435
1436 stringappend_test: $(OBJ_DIR)/utilities/merge_operators/string_append/stringappend_test.o $(TEST_LIBRARY) $(LIBRARY)
1437 $(AM_LINK)
1438
1439 cassandra_format_test: $(OBJ_DIR)/utilities/cassandra/cassandra_format_test.o $(OBJ_DIR)/utilities/cassandra/test_utils.o $(TEST_LIBRARY) $(LIBRARY)
1440 $(AM_LINK)
1441
1442 cassandra_functional_test: $(OBJ_DIR)/utilities/cassandra/cassandra_functional_test.o $(OBJ_DIR)/utilities/cassandra/test_utils.o $(TEST_LIBRARY) $(LIBRARY)
1443 $(AM_LINK)
1444
1445 cassandra_row_merge_test: $(OBJ_DIR)/utilities/cassandra/cassandra_row_merge_test.o $(OBJ_DIR)/utilities/cassandra/test_utils.o $(TEST_LIBRARY) $(LIBRARY)
1446 $(AM_LINK)
1447
1448 cassandra_serialize_test: $(OBJ_DIR)/utilities/cassandra/cassandra_serialize_test.o $(TEST_LIBRARY) $(LIBRARY)
1449 $(AM_LINK)
1450
1451 hash_table_test: $(OBJ_DIR)/utilities/persistent_cache/hash_table_test.o $(TEST_LIBRARY) $(LIBRARY)
1452 $(AM_LINK)
1453
1454 histogram_test: $(OBJ_DIR)/monitoring/histogram_test.o $(TEST_LIBRARY) $(LIBRARY)
1455 $(AM_LINK)
1456
1457 thread_local_test: $(OBJ_DIR)/util/thread_local_test.o $(TEST_LIBRARY) $(LIBRARY)
1458 $(AM_LINK)
1459
1460 work_queue_test: $(OBJ_DIR)/util/work_queue_test.o $(TEST_LIBRARY) $(LIBRARY)
1461 $(AM_LINK)
1462
1463 corruption_test: $(OBJ_DIR)/db/corruption_test.o $(TEST_LIBRARY) $(LIBRARY)
1464 $(AM_LINK)
1465
1466 crc32c_test: $(OBJ_DIR)/util/crc32c_test.o $(TEST_LIBRARY) $(LIBRARY)
1467 $(AM_LINK)
1468
1469 slice_test: $(OBJ_DIR)/util/slice_test.o $(TEST_LIBRARY) $(LIBRARY)
1470 $(AM_LINK)
1471
1472 slice_transform_test: $(OBJ_DIR)/util/slice_transform_test.o $(TEST_LIBRARY) $(LIBRARY)
1473 $(AM_LINK)
1474
1475 db_basic_test: $(OBJ_DIR)/db/db_basic_test.o $(TEST_LIBRARY) $(LIBRARY)
1476 $(AM_LINK)
1477
1478 db_blob_basic_test: $(OBJ_DIR)/db/blob/db_blob_basic_test.o $(TEST_LIBRARY) $(LIBRARY)
1479 $(AM_LINK)
1480
1481 db_with_timestamp_basic_test: $(OBJ_DIR)/db/db_with_timestamp_basic_test.o $(TEST_LIBRARY) $(LIBRARY)
1482 $(AM_LINK)
1483
1484 db_with_timestamp_compaction_test: db/db_with_timestamp_compaction_test.o $(TEST_LIBRARY) $(LIBRARY)
1485 $(AM_LINK)
1486
1487 db_encryption_test: $(OBJ_DIR)/db/db_encryption_test.o $(TEST_LIBRARY) $(LIBRARY)
1488 $(AM_LINK)
1489
1490 db_test: $(OBJ_DIR)/db/db_test.o $(TEST_LIBRARY) $(LIBRARY)
1491 $(AM_LINK)
1492
1493 db_test2: $(OBJ_DIR)/db/db_test2.o $(TEST_LIBRARY) $(LIBRARY)
1494 $(AM_LINK)
1495
1496 db_logical_block_size_cache_test: $(OBJ_DIR)/db/db_logical_block_size_cache_test.o $(TEST_LIBRARY) $(LIBRARY)
1497 $(AM_LINK)
1498
1499 db_blob_index_test: $(OBJ_DIR)/db/blob/db_blob_index_test.o $(TEST_LIBRARY) $(LIBRARY)
1500 $(AM_LINK)
1501
1502 db_block_cache_test: $(OBJ_DIR)/db/db_block_cache_test.o $(TEST_LIBRARY) $(LIBRARY)
1503 $(AM_LINK)
1504
1505 db_bloom_filter_test: $(OBJ_DIR)/db/db_bloom_filter_test.o $(TEST_LIBRARY) $(LIBRARY)
1506 $(AM_LINK)
1507
1508 db_log_iter_test: $(OBJ_DIR)/db/db_log_iter_test.o $(TEST_LIBRARY) $(LIBRARY)
1509 $(AM_LINK)
1510
1511 db_compaction_filter_test: $(OBJ_DIR)/db/db_compaction_filter_test.o $(TEST_LIBRARY) $(LIBRARY)
1512 $(AM_LINK)
1513
1514 db_compaction_test: $(OBJ_DIR)/db/db_compaction_test.o $(TEST_LIBRARY) $(LIBRARY)
1515 $(AM_LINK)
1516
1517 db_dynamic_level_test: $(OBJ_DIR)/db/db_dynamic_level_test.o $(TEST_LIBRARY) $(LIBRARY)
1518 $(AM_LINK)
1519
1520 db_flush_test: $(OBJ_DIR)/db/db_flush_test.o $(TEST_LIBRARY) $(LIBRARY)
1521 $(AM_LINK)
1522
1523 db_inplace_update_test: $(OBJ_DIR)/db/db_inplace_update_test.o $(TEST_LIBRARY) $(LIBRARY)
1524 $(AM_LINK)
1525
1526 db_iterator_test: $(OBJ_DIR)/db/db_iterator_test.o $(TEST_LIBRARY) $(LIBRARY)
1527 $(AM_LINK)
1528
1529 db_memtable_test: $(OBJ_DIR)/db/db_memtable_test.o $(TEST_LIBRARY) $(LIBRARY)
1530 $(AM_LINK)
1531
1532 db_merge_operator_test: $(OBJ_DIR)/db/db_merge_operator_test.o $(TEST_LIBRARY) $(LIBRARY)
1533 $(AM_LINK)
1534
1535 db_merge_operand_test: $(OBJ_DIR)/db/db_merge_operand_test.o $(TEST_LIBRARY) $(LIBRARY)
1536 $(AM_LINK)
1537
1538 db_options_test: $(OBJ_DIR)/db/db_options_test.o $(TEST_LIBRARY) $(LIBRARY)
1539 $(AM_LINK)
1540
1541 db_range_del_test: $(OBJ_DIR)/db/db_range_del_test.o $(TEST_LIBRARY) $(LIBRARY)
1542 $(AM_LINK)
1543
1544 db_sst_test: $(OBJ_DIR)/db/db_sst_test.o $(TEST_LIBRARY) $(LIBRARY)
1545 $(AM_LINK)
1546
1547 db_statistics_test: $(OBJ_DIR)/db/db_statistics_test.o $(TEST_LIBRARY) $(LIBRARY)
1548 $(AM_LINK)
1549
1550 db_write_test: $(OBJ_DIR)/db/db_write_test.o $(TEST_LIBRARY) $(LIBRARY)
1551 $(AM_LINK)
1552
1553 error_handler_fs_test: $(OBJ_DIR)/db/error_handler_fs_test.o $(TEST_LIBRARY) $(LIBRARY)
1554 $(AM_LINK)
1555
1556 external_sst_file_basic_test: $(OBJ_DIR)/db/external_sst_file_basic_test.o $(TEST_LIBRARY) $(LIBRARY)
1557 $(AM_LINK)
1558
1559 external_sst_file_test: $(OBJ_DIR)/db/external_sst_file_test.o $(TEST_LIBRARY) $(LIBRARY)
1560 $(AM_LINK)
1561
1562 import_column_family_test: $(OBJ_DIR)/db/import_column_family_test.o $(TEST_LIBRARY) $(LIBRARY)
1563 $(AM_LINK)
1564
1565 db_tailing_iter_test: $(OBJ_DIR)/db/db_tailing_iter_test.o $(TEST_LIBRARY) $(LIBRARY)
1566 $(AM_LINK)
1567
1568 db_iter_test: $(OBJ_DIR)/db/db_iter_test.o $(TEST_LIBRARY) $(LIBRARY)
1569 $(AM_LINK)
1570
1571 db_iter_stress_test: $(OBJ_DIR)/db/db_iter_stress_test.o $(TEST_LIBRARY) $(LIBRARY)
1572 $(AM_LINK)
1573
1574 db_universal_compaction_test: $(OBJ_DIR)/db/db_universal_compaction_test.o $(TEST_LIBRARY) $(LIBRARY)
1575 $(AM_LINK)
1576
1577 db_wal_test: $(OBJ_DIR)/db/db_wal_test.o $(TEST_LIBRARY) $(LIBRARY)
1578 $(AM_LINK)
1579
1580 db_io_failure_test: $(OBJ_DIR)/db/db_io_failure_test.o $(TEST_LIBRARY) $(LIBRARY)
1581 $(AM_LINK)
1582
1583 db_properties_test: $(OBJ_DIR)/db/db_properties_test.o $(TEST_LIBRARY) $(LIBRARY)
1584 $(AM_LINK)
1585
1586 db_table_properties_test: $(OBJ_DIR)/db/db_table_properties_test.o $(TEST_LIBRARY) $(LIBRARY)
1587 $(AM_LINK)
1588
1589 log_write_bench: $(OBJ_DIR)/util/log_write_bench.o $(TEST_LIBRARY) $(LIBRARY)
1590 $(AM_LINK) $(PROFILING_FLAGS)
1591
1592 plain_table_db_test: $(OBJ_DIR)/db/plain_table_db_test.o $(TEST_LIBRARY) $(LIBRARY)
1593 $(AM_LINK)
1594
1595 comparator_db_test: $(OBJ_DIR)/db/comparator_db_test.o $(TEST_LIBRARY) $(LIBRARY)
1596 $(AM_LINK)
1597
1598 table_reader_bench: $(OBJ_DIR)/table/table_reader_bench.o $(TEST_LIBRARY) $(LIBRARY)
1599 $(AM_LINK) $(PROFILING_FLAGS)
1600
1601 perf_context_test: $(OBJ_DIR)/db/perf_context_test.o $(TEST_LIBRARY) $(LIBRARY)
1602 $(AM_LINK)
1603
1604 prefix_test: $(OBJ_DIR)/db/prefix_test.o $(TEST_LIBRARY) $(LIBRARY)
1605 $(AM_LINK)
1606
1607 backupable_db_test: $(OBJ_DIR)/utilities/backupable/backupable_db_test.o $(TEST_LIBRARY) $(LIBRARY)
1608 $(AM_LINK)
1609
1610 checkpoint_test: $(OBJ_DIR)/utilities/checkpoint/checkpoint_test.o $(TEST_LIBRARY) $(LIBRARY)
1611 $(AM_LINK)
1612
1613 cache_simulator_test: $(OBJ_DIR)/utilities/simulator_cache/cache_simulator_test.o $(TEST_LIBRARY) $(LIBRARY)
1614 $(AM_LINK)
1615
1616 sim_cache_test: $(OBJ_DIR)/utilities/simulator_cache/sim_cache_test.o $(TEST_LIBRARY) $(LIBRARY)
1617 $(AM_LINK)
1618
1619 env_mirror_test: $(OBJ_DIR)/utilities/env_mirror_test.o $(TEST_LIBRARY) $(LIBRARY)
1620 $(AM_LINK)
1621
1622 env_timed_test: $(OBJ_DIR)/utilities/env_timed_test.o $(TEST_LIBRARY) $(LIBRARY)
1623 $(AM_LINK)
1624
1625 ifdef ROCKSDB_USE_LIBRADOS
1626 env_librados_test: $(OBJ_DIR)/utilities/env_librados_test.o $(TEST_LIBRARY) $(LIBRARY)
1627 $(AM_LINK)
1628 endif
1629
1630 object_registry_test: $(OBJ_DIR)/utilities/object_registry_test.o $(TEST_LIBRARY) $(LIBRARY)
1631 $(AM_LINK)
1632
1633 ttl_test: $(OBJ_DIR)/utilities/ttl/ttl_test.o $(TEST_LIBRARY) $(LIBRARY)
1634 $(AM_LINK)
1635
1636 write_batch_with_index_test: $(OBJ_DIR)/utilities/write_batch_with_index/write_batch_with_index_test.o $(TEST_LIBRARY) $(LIBRARY)
1637 $(AM_LINK)
1638
1639 flush_job_test: $(OBJ_DIR)/db/flush_job_test.o $(TEST_LIBRARY) $(LIBRARY)
1640 $(AM_LINK)
1641
1642 compaction_iterator_test: $(OBJ_DIR)/db/compaction/compaction_iterator_test.o $(TEST_LIBRARY) $(LIBRARY)
1643 $(AM_LINK)
1644
1645 compaction_job_test: $(OBJ_DIR)/db/compaction/compaction_job_test.o $(TEST_LIBRARY) $(LIBRARY)
1646 $(AM_LINK)
1647
1648 compaction_job_stats_test: $(OBJ_DIR)/db/compaction/compaction_job_stats_test.o $(TEST_LIBRARY) $(LIBRARY)
1649 $(AM_LINK)
1650
1651 compact_on_deletion_collector_test: $(OBJ_DIR)/utilities/table_properties_collectors/compact_on_deletion_collector_test.o $(TEST_LIBRARY) $(LIBRARY)
1652 $(AM_LINK)
1653
1654 wal_manager_test: $(OBJ_DIR)/db/wal_manager_test.o $(TEST_LIBRARY) $(LIBRARY)
1655 $(AM_LINK)
1656
1657 wal_edit_test: $(OBJ_DIR)/db/wal_edit_test.o $(TEST_LIBRARY) $(LIBRARY)
1658 $(AM_LINK)
1659
1660 dbformat_test: $(OBJ_DIR)/db/dbformat_test.o $(TEST_LIBRARY) $(LIBRARY)
1661 $(AM_LINK)
1662
1663 env_basic_test: $(OBJ_DIR)/env/env_basic_test.o $(TEST_LIBRARY) $(LIBRARY)
1664 $(AM_LINK)
1665
1666 env_test: $(OBJ_DIR)/env/env_test.o $(TEST_LIBRARY) $(LIBRARY)
1667 $(AM_LINK)
1668
1669 io_posix_test: $(OBJ_DIR)/env/io_posix_test.o $(TEST_LIBRARY) $(LIBRARY)
1670 $(AM_LINK)
1671
1672 fault_injection_test: $(OBJ_DIR)/db/fault_injection_test.o $(TEST_LIBRARY) $(LIBRARY)
1673 $(AM_LINK)
1674
1675 rate_limiter_test: $(OBJ_DIR)/util/rate_limiter_test.o $(TEST_LIBRARY) $(LIBRARY)
1676 $(AM_LINK)
1677
1678 delete_scheduler_test: $(OBJ_DIR)/file/delete_scheduler_test.o $(TEST_LIBRARY) $(LIBRARY)
1679 $(AM_LINK)
1680
1681 filename_test: $(OBJ_DIR)/db/filename_test.o $(TEST_LIBRARY) $(LIBRARY)
1682 $(AM_LINK)
1683
1684 random_access_file_reader_test: $(OBJ_DIR)/file/random_access_file_reader_test.o $(TEST_LIBRARY) $(LIBRARY)
1685 $(AM_LINK)
1686
1687 file_reader_writer_test: $(OBJ_DIR)/util/file_reader_writer_test.o $(TEST_LIBRARY) $(LIBRARY)
1688 $(AM_LINK)
1689
1690 block_based_filter_block_test: $(OBJ_DIR)/table/block_based/block_based_filter_block_test.o $(TEST_LIBRARY) $(LIBRARY)
1691 $(AM_LINK)
1692
1693 block_based_table_reader_test: table/block_based/block_based_table_reader_test.o $(TEST_LIBRARY) $(LIBRARY)
1694 $(AM_LINK)
1695
1696 full_filter_block_test: $(OBJ_DIR)/table/block_based/full_filter_block_test.o $(TEST_LIBRARY) $(LIBRARY)
1697 $(AM_LINK)
1698
1699 partitioned_filter_block_test: $(OBJ_DIR)/table/block_based/partitioned_filter_block_test.o $(TEST_LIBRARY) $(LIBRARY)
1700 $(AM_LINK)
1701
1702 log_test: $(OBJ_DIR)/db/log_test.o $(TEST_LIBRARY) $(LIBRARY)
1703 $(AM_LINK)
1704
1705 cleanable_test: $(OBJ_DIR)/table/cleanable_test.o $(TEST_LIBRARY) $(LIBRARY)
1706 $(AM_LINK)
1707
1708 table_test: $(OBJ_DIR)/table/table_test.o $(TEST_LIBRARY) $(LIBRARY)
1709 $(AM_LINK)
1710
1711 block_fetcher_test: table/block_fetcher_test.o $(TEST_LIBRARY) $(LIBRARY)
1712 $(AM_LINK)
1713
1714 block_test: $(OBJ_DIR)/table/block_based/block_test.o $(TEST_LIBRARY) $(LIBRARY)
1715 $(AM_LINK)
1716
1717 data_block_hash_index_test: $(OBJ_DIR)/table/block_based/data_block_hash_index_test.o $(TEST_LIBRARY) $(LIBRARY)
1718 $(AM_LINK)
1719
1720 inlineskiplist_test: $(OBJ_DIR)/memtable/inlineskiplist_test.o $(TEST_LIBRARY) $(LIBRARY)
1721 $(AM_LINK)
1722
1723 skiplist_test: $(OBJ_DIR)/memtable/skiplist_test.o $(TEST_LIBRARY) $(LIBRARY)
1724 $(AM_LINK)
1725
1726 write_buffer_manager_test: $(OBJ_DIR)/memtable/write_buffer_manager_test.o $(TEST_LIBRARY) $(LIBRARY)
1727 $(AM_LINK)
1728
1729 version_edit_test: $(OBJ_DIR)/db/version_edit_test.o $(TEST_LIBRARY) $(LIBRARY)
1730 $(AM_LINK)
1731
1732 version_set_test: $(OBJ_DIR)/db/version_set_test.o $(TEST_LIBRARY) $(LIBRARY)
1733 $(AM_LINK)
1734
1735 compaction_picker_test: $(OBJ_DIR)/db/compaction/compaction_picker_test.o $(TEST_LIBRARY) $(LIBRARY)
1736 $(AM_LINK)
1737
1738 version_builder_test: $(OBJ_DIR)/db/version_builder_test.o $(TEST_LIBRARY) $(LIBRARY)
1739 $(AM_LINK)
1740
1741 file_indexer_test: $(OBJ_DIR)/db/file_indexer_test.o $(TEST_LIBRARY) $(LIBRARY)
1742 $(AM_LINK)
1743
1744 reduce_levels_test: $(OBJ_DIR)/tools/reduce_levels_test.o $(TOOLS_LIBRARY) $(TEST_LIBRARY) $(LIBRARY)
1745 $(AM_LINK)
1746
1747 write_batch_test: $(OBJ_DIR)/db/write_batch_test.o $(TEST_LIBRARY) $(LIBRARY)
1748 $(AM_LINK)
1749
1750 write_controller_test: $(OBJ_DIR)/db/write_controller_test.o $(TEST_LIBRARY) $(LIBRARY)
1751 $(AM_LINK)
1752
1753 merge_helper_test: $(OBJ_DIR)/db/merge_helper_test.o $(TEST_LIBRARY) $(LIBRARY)
1754 $(AM_LINK)
1755
1756 memory_test: $(OBJ_DIR)/utilities/memory/memory_test.o $(TEST_LIBRARY) $(LIBRARY)
1757 $(AM_LINK)
1758
1759 merge_test: $(OBJ_DIR)/db/merge_test.o $(TEST_LIBRARY) $(LIBRARY)
1760 $(AM_LINK)
1761
1762 merger_test: $(OBJ_DIR)/table/merger_test.o $(TEST_LIBRARY) $(LIBRARY)
1763 $(AM_LINK)
1764
1765 util_merge_operators_test: $(OBJ_DIR)/utilities/util_merge_operators_test.o $(TEST_LIBRARY) $(LIBRARY)
1766 $(AM_LINK)
1767
1768 options_file_test: $(OBJ_DIR)/db/options_file_test.o $(TEST_LIBRARY) $(LIBRARY)
1769 $(AM_LINK)
1770
1771 deletefile_test: $(OBJ_DIR)/db/deletefile_test.o $(TEST_LIBRARY) $(LIBRARY)
1772 $(AM_LINK)
1773
1774 obsolete_files_test: $(OBJ_DIR)/db/obsolete_files_test.o $(TEST_LIBRARY) $(LIBRARY)
1775 $(AM_LINK)
1776
1777 rocksdb_dump: $(OBJ_DIR)/tools/dump/rocksdb_dump.o $(LIBRARY)
1778 $(AM_LINK)
1779
1780 rocksdb_undump: $(OBJ_DIR)/tools/dump/rocksdb_undump.o $(LIBRARY)
1781 $(AM_LINK)
1782
1783 cuckoo_table_builder_test: $(OBJ_DIR)/table/cuckoo/cuckoo_table_builder_test.o $(TEST_LIBRARY) $(LIBRARY)
1784 $(AM_LINK)
1785
1786 cuckoo_table_reader_test: $(OBJ_DIR)/table/cuckoo/cuckoo_table_reader_test.o $(TEST_LIBRARY) $(LIBRARY)
1787 $(AM_LINK)
1788
1789 cuckoo_table_db_test: $(OBJ_DIR)/db/cuckoo_table_db_test.o $(TEST_LIBRARY) $(LIBRARY)
1790 $(AM_LINK)
1791
1792 listener_test: $(OBJ_DIR)/db/listener_test.o $(TEST_LIBRARY) $(LIBRARY)
1793 $(AM_LINK)
1794
1795 thread_list_test: $(OBJ_DIR)/util/thread_list_test.o $(TEST_LIBRARY) $(LIBRARY)
1796 $(AM_LINK)
1797
1798 compact_files_test: $(OBJ_DIR)/db/compact_files_test.o $(TEST_LIBRARY) $(LIBRARY)
1799 $(AM_LINK)
1800
1801 configurable_test: options/configurable_test.o $(TEST_LIBRARY) $(LIBRARY)
1802 $(AM_LINK)
1803
1804 customizable_test: options/customizable_test.o $(TEST_LIBRARY) $(LIBRARY)
1805 $(AM_LINK)
1806
1807 options_test: $(OBJ_DIR)/options/options_test.o $(TEST_LIBRARY) $(LIBRARY)
1808 $(AM_LINK)
1809
1810 options_settable_test: $(OBJ_DIR)/options/options_settable_test.o $(TEST_LIBRARY) $(LIBRARY)
1811 $(AM_LINK)
1812
1813 options_util_test: $(OBJ_DIR)/utilities/options/options_util_test.o $(TEST_LIBRARY) $(LIBRARY)
1814 $(AM_LINK)
1815
1816 db_bench_tool_test: $(OBJ_DIR)/tools/db_bench_tool_test.o $(BENCH_OBJECTS) $(TEST_LIBRARY) $(LIBRARY)
1817 $(AM_LINK)
1818
1819 trace_analyzer_test: $(OBJ_DIR)/tools/trace_analyzer_test.o $(ANALYZE_OBJECTS) $(TOOLS_LIBRARY) $(TEST_LIBRARY) $(LIBRARY)
1820 $(AM_LINK)
1821
1822 event_logger_test: $(OBJ_DIR)/logging/event_logger_test.o $(TEST_LIBRARY) $(LIBRARY)
1823 $(AM_LINK)
1824
1825 timer_queue_test: $(OBJ_DIR)/util/timer_queue_test.o $(TEST_LIBRARY) $(LIBRARY)
1826 $(AM_LINK)
1827
1828 sst_dump_test: $(OBJ_DIR)/tools/sst_dump_test.o $(TOOLS_LIBRARY) $(TEST_LIBRARY) $(LIBRARY)
1829 $(AM_LINK)
1830
1831 optimistic_transaction_test: $(OBJ_DIR)/utilities/transactions/optimistic_transaction_test.o $(TEST_LIBRARY) $(LIBRARY)
1832 $(AM_LINK)
1833
1834 mock_env_test : $(OBJ_DIR)/env/mock_env_test.o $(TEST_LIBRARY) $(LIBRARY)
1835 $(AM_LINK)
1836
1837 manual_compaction_test: $(OBJ_DIR)/db/manual_compaction_test.o $(TEST_LIBRARY) $(LIBRARY)
1838 $(AM_LINK)
1839
1840 filelock_test: $(OBJ_DIR)/util/filelock_test.o $(TEST_LIBRARY) $(LIBRARY)
1841 $(AM_LINK)
1842
1843 auto_roll_logger_test: $(OBJ_DIR)/logging/auto_roll_logger_test.o $(TEST_LIBRARY) $(LIBRARY)
1844 $(AM_LINK)
1845
1846 env_logger_test: $(OBJ_DIR)/logging/env_logger_test.o $(TEST_LIBRARY) $(LIBRARY)
1847 $(AM_LINK)
1848
1849 memtable_list_test: $(OBJ_DIR)/db/memtable_list_test.o $(TEST_LIBRARY) $(LIBRARY)
1850 $(AM_LINK)
1851
1852 write_callback_test: $(OBJ_DIR)/db/write_callback_test.o $(TEST_LIBRARY) $(LIBRARY)
1853 $(AM_LINK)
1854
1855 heap_test: $(OBJ_DIR)/util/heap_test.o $(GTEST)
1856 $(AM_LINK)
1857
1858 point_lock_manager_test: utilities/transactions/lock/point/point_lock_manager_test.o $(TEST_LIBRARY) $(LIBRARY)
1859 $(AM_LINK)
1860
1861 transaction_test: $(OBJ_DIR)/utilities/transactions/transaction_test.o $(TEST_LIBRARY) $(LIBRARY)
1862 $(AM_LINK)
1863
1864 write_prepared_transaction_test: $(OBJ_DIR)/utilities/transactions/write_prepared_transaction_test.o $(TEST_LIBRARY) $(LIBRARY)
1865 $(AM_LINK)
1866
1867 write_unprepared_transaction_test: $(OBJ_DIR)/utilities/transactions/write_unprepared_transaction_test.o $(TEST_LIBRARY) $(LIBRARY)
1868 $(AM_LINK)
1869
1870 sst_dump: $(OBJ_DIR)/tools/sst_dump.o $(TOOLS_LIBRARY) $(LIBRARY)
1871 $(AM_LINK)
1872
1873 blob_dump: $(OBJ_DIR)/tools/blob_dump.o $(TOOLS_LIBRARY) $(LIBRARY)
1874 $(AM_LINK)
1875
1876 repair_test: $(OBJ_DIR)/db/repair_test.o $(TEST_LIBRARY) $(LIBRARY)
1877 $(AM_LINK)
1878
1879 ldb_cmd_test: $(OBJ_DIR)/tools/ldb_cmd_test.o $(TOOLS_LIBRARY) $(TEST_LIBRARY) $(LIBRARY)
1880 $(AM_LINK)
1881
1882 ldb: $(OBJ_DIR)/tools/ldb.o $(TOOLS_LIBRARY) $(LIBRARY)
1883 $(AM_LINK)
1884
1885 iostats_context_test: $(OBJ_DIR)/monitoring/iostats_context_test.o $(TEST_LIBRARY) $(LIBRARY)
1886 $(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)
1887
1888 persistent_cache_test: $(OBJ_DIR)/utilities/persistent_cache/persistent_cache_test.o $(TEST_LIBRARY) $(LIBRARY)
1889 $(AM_LINK)
1890
1891 statistics_test: $(OBJ_DIR)/monitoring/statistics_test.o $(TEST_LIBRARY) $(LIBRARY)
1892 $(AM_LINK)
1893
1894 stats_history_test: $(OBJ_DIR)/monitoring/stats_history_test.o $(TEST_LIBRARY) $(LIBRARY)
1895 $(AM_LINK)
1896
1897 lru_cache_test: $(OBJ_DIR)/cache/lru_cache_test.o $(TEST_LIBRARY) $(LIBRARY)
1898 $(AM_LINK)
1899
1900 range_del_aggregator_test: $(OBJ_DIR)/db/range_del_aggregator_test.o $(TEST_LIBRARY) $(LIBRARY)
1901 $(AM_LINK)
1902
1903 range_del_aggregator_bench: $(OBJ_DIR)/db/range_del_aggregator_bench.o $(LIBRARY)
1904 $(AM_LINK)
1905
1906 blob_db_test: $(OBJ_DIR)/utilities/blob_db/blob_db_test.o $(TEST_LIBRARY) $(LIBRARY)
1907 $(AM_LINK)
1908
1909 repeatable_thread_test: $(OBJ_DIR)/util/repeatable_thread_test.o $(TEST_LIBRARY) $(LIBRARY)
1910 $(AM_LINK)
1911
1912 range_tombstone_fragmenter_test: $(OBJ_DIR)/db/range_tombstone_fragmenter_test.o $(TEST_LIBRARY) $(LIBRARY)
1913 $(AM_LINK)
1914
1915 sst_file_reader_test: $(OBJ_DIR)/table/sst_file_reader_test.o $(TEST_LIBRARY) $(LIBRARY)
1916 $(AM_LINK)
1917
1918 db_secondary_test: $(OBJ_DIR)/db/db_impl/db_secondary_test.o $(TEST_LIBRARY) $(LIBRARY)
1919 $(AM_LINK)
1920
1921 block_cache_tracer_test: $(OBJ_DIR)/trace_replay/block_cache_tracer_test.o $(TEST_LIBRARY) $(LIBRARY)
1922 $(AM_LINK)
1923
1924 block_cache_trace_analyzer_test: $(OBJ_DIR)/tools/block_cache_analyzer/block_cache_trace_analyzer_test.o $(OBJ_DIR)/tools/block_cache_analyzer/block_cache_trace_analyzer.o $(TEST_LIBRARY) $(LIBRARY)
1925 $(AM_LINK)
1926
1927 defer_test: $(OBJ_DIR)/util/defer_test.o $(TEST_LIBRARY) $(LIBRARY)
1928 $(AM_LINK)
1929
1930 blob_file_addition_test: $(OBJ_DIR)/db/blob/blob_file_addition_test.o $(TEST_LIBRARY) $(LIBRARY)
1931 $(AM_LINK)
1932
1933 blob_file_builder_test: $(OBJ_DIR)/db/blob/blob_file_builder_test.o $(TEST_LIBRARY) $(LIBRARY)
1934 $(AM_LINK)
1935
1936 blob_file_cache_test: $(OBJ_DIR)/db/blob/blob_file_cache_test.o $(TEST_LIBRARY) $(LIBRARY)
1937 $(AM_LINK)
1938
1939 blob_file_garbage_test: $(OBJ_DIR)/db/blob/blob_file_garbage_test.o $(TEST_LIBRARY) $(LIBRARY)
1940 $(AM_LINK)
1941
1942 blob_file_reader_test: $(OBJ_DIR)/db/blob/blob_file_reader_test.o $(TEST_LIBRARY) $(LIBRARY)
1943 $(AM_LINK)
1944
1945 timer_test: $(OBJ_DIR)/util/timer_test.o $(TEST_LIBRARY) $(LIBRARY)
1946 $(AM_LINK)
1947
1948 periodic_work_scheduler_test: $(OBJ_DIR)/db/periodic_work_scheduler_test.o $(TEST_LIBRARY) $(LIBRARY)
1949 $(AM_LINK)
1950
1951 testutil_test: $(OBJ_DIR)/test_util/testutil_test.o $(TEST_LIBRARY) $(LIBRARY)
1952 $(AM_LINK)
1953
1954 io_tracer_test: $(OBJ_DIR)/trace_replay/io_tracer_test.o $(OBJ_DIR)/trace_replay/io_tracer.o $(TEST_LIBRARY) $(LIBRARY)
1955 $(AM_LINK)
1956
1957 prefetch_test: $(OBJ_DIR)/file/prefetch_test.o $(TEST_LIBRARY) $(LIBRARY)
1958 $(AM_LINK)
1959
1960 io_tracer_parser_test: $(OBJ_DIR)/tools/io_tracer_parser_test.o $(OBJ_DIR)/tools/io_tracer_parser_tool.o $(TEST_LIBRARY) $(LIBRARY)
1961 $(AM_LINK)
1962
1963 io_tracer_parser: $(OBJ_DIR)/tools/io_tracer_parser.o $(TOOLS_LIBRARY) $(LIBRARY)
1964 $(AM_LINK)
1965
1966 #-------------------------------------------------
1967 # make install related stuff
1968 PREFIX ?= /usr/local
1969 LIBDIR ?= $(PREFIX)/lib
1970 INSTALL_LIBDIR = $(DESTDIR)$(LIBDIR)
1971
1972 uninstall:
1973 rm -rf $(DESTDIR)$(PREFIX)/include/rocksdb \
1974 $(INSTALL_LIBDIR)/$(LIBRARY) \
1975 $(INSTALL_LIBDIR)/$(SHARED4) \
1976 $(INSTALL_LIBDIR)/$(SHARED3) \
1977 $(INSTALL_LIBDIR)/$(SHARED2) \
1978 $(INSTALL_LIBDIR)/$(SHARED1) \
1979 $(INSTALL_LIBDIR)/pkgconfig/rocksdb.pc
1980
1981 install-headers: gen-pc
1982 install -d $(INSTALL_LIBDIR)
1983 install -d $(INSTALL_LIBDIR)/pkgconfig
1984 for header_dir in `$(FIND) "include/rocksdb" -type d`; do \
1985 install -d $(DESTDIR)/$(PREFIX)/$$header_dir; \
1986 done
1987 for header in `$(FIND) "include/rocksdb" -type f -name *.h`; do \
1988 install -C -m 644 $$header $(DESTDIR)/$(PREFIX)/$$header; \
1989 done
1990 install -C -m 644 rocksdb.pc $(INSTALL_LIBDIR)/pkgconfig/rocksdb.pc
1991
1992 install-static: install-headers $(LIBRARY)
1993 install -d $(INSTALL_LIBDIR)
1994 install -C -m 755 $(LIBRARY) $(INSTALL_LIBDIR)
1995
1996 install-shared: install-headers $(SHARED4)
1997 install -d $(INSTALL_LIBDIR)
1998 install -C -m 755 $(SHARED4) $(INSTALL_LIBDIR)
1999 ln -fs $(SHARED4) $(INSTALL_LIBDIR)/$(SHARED3)
2000 ln -fs $(SHARED4) $(INSTALL_LIBDIR)/$(SHARED2)
2001 ln -fs $(SHARED4) $(INSTALL_LIBDIR)/$(SHARED1)
2002
2003 # install static by default + install shared if it exists
2004 install: install-static
2005 [ -e $(SHARED4) ] && $(MAKE) install-shared || :
2006
2007 # Generate the pkg-config file
2008 gen-pc:
2009 -echo 'prefix=$(PREFIX)' > rocksdb.pc
2010 -echo 'exec_prefix=$${prefix}' >> rocksdb.pc
2011 -echo 'includedir=$${prefix}/include' >> rocksdb.pc
2012 -echo 'libdir=$(LIBDIR)' >> rocksdb.pc
2013 -echo '' >> rocksdb.pc
2014 -echo 'Name: rocksdb' >> rocksdb.pc
2015 -echo 'Description: An embeddable persistent key-value store for fast storage' >> rocksdb.pc
2016 -echo Version: $(shell ./build_tools/version.sh full) >> rocksdb.pc
2017 -echo 'Libs: -L$${libdir} $(EXEC_LDFLAGS) -lrocksdb' >> rocksdb.pc
2018 -echo 'Libs.private: $(PLATFORM_LDFLAGS)' >> rocksdb.pc
2019 -echo 'Cflags: -I$${includedir} $(PLATFORM_CXXFLAGS)' >> rocksdb.pc
2020
2021 #-------------------------------------------------
2022
2023
2024 # ---------------------------------------------------------------------------
2025 # Jni stuff
2026 # ---------------------------------------------------------------------------
2027
2028 JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/linux
2029 ifeq ($(PLATFORM), OS_SOLARIS)
2030 ARCH := $(shell isainfo -b)
2031 else ifeq ($(PLATFORM), OS_OPENBSD)
2032 ifneq (,$(filter amd64 ppc64 ppc64le arm64 aarch64 sparc64, $(MACHINE)))
2033 ARCH := 64
2034 else
2035 ARCH := 32
2036 endif
2037 else
2038 ARCH := $(shell getconf LONG_BIT)
2039 endif
2040
2041 ifeq ($(shell ldd /usr/bin/env 2>/dev/null | grep -q musl; echo $$?),0)
2042 JNI_LIBC = musl
2043 # GNU LibC (or glibc) is so pervasive we can assume it is the default
2044 # else
2045 # JNI_LIBC = glibc
2046 endif
2047
2048 ifneq ($(origin JNI_LIBC), undefined)
2049 JNI_LIBC_POSTFIX = -$(JNI_LIBC)
2050 endif
2051
2052 ifneq (,$(filter ppc% arm64 aarch64 sparc64, $(MACHINE)))
2053 ROCKSDBJNILIB = librocksdbjni-linux-$(MACHINE)$(JNI_LIBC_POSTFIX).so
2054 else
2055 ROCKSDBJNILIB = librocksdbjni-linux$(ARCH)$(JNI_LIBC_POSTFIX).so
2056 endif
2057 ROCKSDB_JAVA_VERSION ?= $(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)
2058 ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_JAVA_VERSION)-linux$(ARCH)$(JNI_LIBC_POSTFIX).jar
2059 ROCKSDB_JAR_ALL = rocksdbjni-$(ROCKSDB_JAVA_VERSION).jar
2060 ROCKSDB_JAVADOCS_JAR = rocksdbjni-$(ROCKSDB_JAVA_VERSION)-javadoc.jar
2061 ROCKSDB_SOURCES_JAR = rocksdbjni-$(ROCKSDB_JAVA_VERSION)-sources.jar
2062 SHA256_CMD = sha256sum
2063
2064 ZLIB_VER ?= 1.2.11
2065 ZLIB_SHA256 ?= c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1
2066 ZLIB_DOWNLOAD_BASE ?= http://zlib.net
2067 BZIP2_VER ?= 1.0.8
2068 BZIP2_SHA256 ?= ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269
2069 BZIP2_DOWNLOAD_BASE ?= https://sourceware.org/pub/bzip2
2070 SNAPPY_VER ?= 1.1.8
2071 SNAPPY_SHA256 ?= 16b677f07832a612b0836178db7f374e414f94657c138e6993cbfc5dcc58651f
2072 SNAPPY_DOWNLOAD_BASE ?= https://github.com/google/snappy/archive
2073 LZ4_VER ?= 1.9.2
2074 LZ4_SHA256 ?= 658ba6191fa44c92280d4aa2c271b0f4fbc0e34d249578dd05e50e76d0e5efcc
2075 LZ4_DOWNLOAD_BASE ?= https://github.com/lz4/lz4/archive
2076 ZSTD_VER ?= 1.4.5
2077 ZSTD_SHA256 ?= 734d1f565c42f691f8420c8d06783ad818060fc390dee43ae0a89f86d0a4f8c2
2078 ZSTD_DOWNLOAD_BASE ?= https://github.com/facebook/zstd/archive
2079 CURL_SSL_OPTS ?= --tlsv1
2080
2081 ifeq ($(PLATFORM), OS_MACOSX)
2082 ROCKSDBJNILIB = librocksdbjni-osx.jnilib
2083 ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_JAVA_VERSION)-osx.jar
2084 SHA256_CMD = openssl sha256 -r
2085 ifneq ("$(wildcard $(JAVA_HOME)/include/darwin)","")
2086 JAVA_INCLUDE = -I$(JAVA_HOME)/include -I $(JAVA_HOME)/include/darwin
2087 else
2088 JAVA_INCLUDE = -I/System/Library/Frameworks/JavaVM.framework/Headers/
2089 endif
2090 endif
2091 ifeq ($(PLATFORM), OS_FREEBSD)
2092 JAVA_INCLUDE = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/freebsd
2093 ROCKSDBJNILIB = librocksdbjni-freebsd$(ARCH).so
2094 ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_JAVA_VERSION)-freebsd$(ARCH).jar
2095 endif
2096 ifeq ($(PLATFORM), OS_SOLARIS)
2097 ROCKSDBJNILIB = librocksdbjni-solaris$(ARCH).so
2098 ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-solaris$(ARCH).jar
2099 JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/solaris
2100 SHA256_CMD = digest -a sha256
2101 endif
2102 ifeq ($(PLATFORM), OS_AIX)
2103 JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/aix
2104 ROCKSDBJNILIB = librocksdbjni-aix.so
2105 EXTRACT_SOURCES = gunzip < TAR_GZ | tar xvf -
2106 SNAPPY_MAKE_TARGET = libsnappy.la
2107 endif
2108 ifeq ($(PLATFORM), OS_OPENBSD)
2109 JAVA_INCLUDE = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/openbsd
2110 ROCKSDBJNILIB = librocksdbjni-openbsd$(ARCH).so
2111 ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_JAVA_VERSION)-openbsd$(ARCH).jar
2112 endif
2113
2114 zlib-$(ZLIB_VER).tar.gz:
2115 curl --fail --output zlib-$(ZLIB_VER).tar.gz --location ${ZLIB_DOWNLOAD_BASE}/zlib-$(ZLIB_VER).tar.gz
2116 ZLIB_SHA256_ACTUAL=`$(SHA256_CMD) zlib-$(ZLIB_VER).tar.gz | cut -d ' ' -f 1`; \
2117 if [ "$(ZLIB_SHA256)" != "$$ZLIB_SHA256_ACTUAL" ]; then \
2118 echo zlib-$(ZLIB_VER).tar.gz checksum mismatch, expected=\"$(ZLIB_SHA256)\" actual=\"$$ZLIB_SHA256_ACTUAL\"; \
2119 exit 1; \
2120 fi
2121
2122 libz.a: zlib-$(ZLIB_VER).tar.gz
2123 -rm -rf zlib-$(ZLIB_VER)
2124 tar xvzf zlib-$(ZLIB_VER).tar.gz
2125 cd zlib-$(ZLIB_VER) && CFLAGS='-fPIC ${EXTRA_CFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' ./configure --static && $(MAKE)
2126 cp zlib-$(ZLIB_VER)/libz.a .
2127
2128 bzip2-$(BZIP2_VER).tar.gz:
2129 curl --fail --output bzip2-$(BZIP2_VER).tar.gz --location ${CURL_SSL_OPTS} ${BZIP2_DOWNLOAD_BASE}/bzip2-$(BZIP2_VER).tar.gz
2130 BZIP2_SHA256_ACTUAL=`$(SHA256_CMD) bzip2-$(BZIP2_VER).tar.gz | cut -d ' ' -f 1`; \
2131 if [ "$(BZIP2_SHA256)" != "$$BZIP2_SHA256_ACTUAL" ]; then \
2132 echo bzip2-$(BZIP2_VER).tar.gz checksum mismatch, expected=\"$(BZIP2_SHA256)\" actual=\"$$BZIP2_SHA256_ACTUAL\"; \
2133 exit 1; \
2134 fi
2135
2136 libbz2.a: bzip2-$(BZIP2_VER).tar.gz
2137 -rm -rf bzip2-$(BZIP2_VER)
2138 tar xvzf bzip2-$(BZIP2_VER).tar.gz
2139 cd bzip2-$(BZIP2_VER) && $(MAKE) CFLAGS='-fPIC -O2 -g -D_FILE_OFFSET_BITS=64 ${EXTRA_CFLAGS}' AR='ar ${EXTRA_ARFLAGS}'
2140 cp bzip2-$(BZIP2_VER)/libbz2.a .
2141
2142 snappy-$(SNAPPY_VER).tar.gz:
2143 curl --fail --output snappy-$(SNAPPY_VER).tar.gz --location ${CURL_SSL_OPTS} ${SNAPPY_DOWNLOAD_BASE}/$(SNAPPY_VER).tar.gz
2144 SNAPPY_SHA256_ACTUAL=`$(SHA256_CMD) snappy-$(SNAPPY_VER).tar.gz | cut -d ' ' -f 1`; \
2145 if [ "$(SNAPPY_SHA256)" != "$$SNAPPY_SHA256_ACTUAL" ]; then \
2146 echo snappy-$(SNAPPY_VER).tar.gz checksum mismatch, expected=\"$(SNAPPY_SHA256)\" actual=\"$$SNAPPY_SHA256_ACTUAL\"; \
2147 exit 1; \
2148 fi
2149
2150 libsnappy.a: snappy-$(SNAPPY_VER).tar.gz
2151 -rm -rf snappy-$(SNAPPY_VER)
2152 tar xvzf snappy-$(SNAPPY_VER).tar.gz
2153 mkdir snappy-$(SNAPPY_VER)/build
2154 cd snappy-$(SNAPPY_VER)/build && CFLAGS='${EXTRA_CFLAGS}' CXXFLAGS='${EXTRA_CXXFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON .. && $(MAKE) ${SNAPPY_MAKE_TARGET}
2155 cp snappy-$(SNAPPY_VER)/build/libsnappy.a .
2156
2157 lz4-$(LZ4_VER).tar.gz:
2158 curl --fail --output lz4-$(LZ4_VER).tar.gz --location ${CURL_SSL_OPTS} ${LZ4_DOWNLOAD_BASE}/v$(LZ4_VER).tar.gz
2159 LZ4_SHA256_ACTUAL=`$(SHA256_CMD) lz4-$(LZ4_VER).tar.gz | cut -d ' ' -f 1`; \
2160 if [ "$(LZ4_SHA256)" != "$$LZ4_SHA256_ACTUAL" ]; then \
2161 echo lz4-$(LZ4_VER).tar.gz checksum mismatch, expected=\"$(LZ4_SHA256)\" actual=\"$$LZ4_SHA256_ACTUAL\"; \
2162 exit 1; \
2163 fi
2164
2165 liblz4.a: lz4-$(LZ4_VER).tar.gz
2166 -rm -rf lz4-$(LZ4_VER)
2167 tar xvzf lz4-$(LZ4_VER).tar.gz
2168 cd lz4-$(LZ4_VER)/lib && $(MAKE) CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' all
2169 cp lz4-$(LZ4_VER)/lib/liblz4.a .
2170
2171 zstd-$(ZSTD_VER).tar.gz:
2172 curl --fail --output zstd-$(ZSTD_VER).tar.gz --location ${CURL_SSL_OPTS} ${ZSTD_DOWNLOAD_BASE}/v$(ZSTD_VER).tar.gz
2173 ZSTD_SHA256_ACTUAL=`$(SHA256_CMD) zstd-$(ZSTD_VER).tar.gz | cut -d ' ' -f 1`; \
2174 if [ "$(ZSTD_SHA256)" != "$$ZSTD_SHA256_ACTUAL" ]; then \
2175 echo zstd-$(ZSTD_VER).tar.gz checksum mismatch, expected=\"$(ZSTD_SHA256)\" actual=\"$$ZSTD_SHA256_ACTUAL\"; \
2176 exit 1; \
2177 fi
2178
2179 libzstd.a: zstd-$(ZSTD_VER).tar.gz
2180 -rm -rf zstd-$(ZSTD_VER)
2181 tar xvzf zstd-$(ZSTD_VER).tar.gz
2182 cd zstd-$(ZSTD_VER)/lib && DESTDIR=. PREFIX= $(MAKE) CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' install
2183 cp zstd-$(ZSTD_VER)/lib/libzstd.a .
2184
2185 # A version of each $(LIB_OBJECTS) compiled with -fPIC and a fixed set of static compression libraries
2186 ifneq ($(ROCKSDB_JAVA_NO_COMPRESSION), 1)
2187 JAVA_COMPRESSIONS = libz.a libbz2.a libsnappy.a liblz4.a libzstd.a
2188 endif
2189
2190 JAVA_STATIC_FLAGS = -DZLIB -DBZIP2 -DSNAPPY -DLZ4 -DZSTD
2191 JAVA_STATIC_INCLUDES = -I./zlib-$(ZLIB_VER) -I./bzip2-$(BZIP2_VER) -I./snappy-$(SNAPPY_VER) -I./snappy-$(SNAPPY_VER)/build -I./lz4-$(LZ4_VER)/lib -I./zstd-$(ZSTD_VER)/lib -I./zstd-$(ZSTD_VER)/lib/dictBuilder
2192
2193 ifneq ($(findstring rocksdbjavastatic, $(filter-out rocksdbjavastatic_deps, $(MAKECMDGOALS))),)
2194 CXXFLAGS += $(JAVA_STATIC_FLAGS) $(JAVA_STATIC_INCLUDES)
2195 CFLAGS += $(JAVA_STATIC_FLAGS) $(JAVA_STATIC_INCLUDES)
2196 endif
2197 rocksdbjavastatic:
2198 ifeq ($(JAVA_HOME),)
2199 $(error JAVA_HOME is not set)
2200 endif
2201 $(MAKE) rocksdbjavastatic_deps
2202 $(MAKE) rocksdbjavastatic_libobjects
2203 $(MAKE) rocksdbjavastatic_javalib
2204
2205 rocksdbjavastatic_javalib:
2206 cd java;$(MAKE) javalib
2207 rm -f java/target/$(ROCKSDBJNILIB)
2208 $(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC \
2209 -o ./java/target/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) \
2210 $(LIB_OBJECTS) $(COVERAGEFLAGS) \
2211 $(JAVA_COMPRESSIONS) $(JAVA_STATIC_LDFLAGS)
2212 cd java/target;if [ "$(DEBUG_LEVEL)" == "0" ]; then \
2213 strip $(STRIPFLAGS) $(ROCKSDBJNILIB); \
2214 fi
2215 cd java;jar -cf target/$(ROCKSDB_JAR) HISTORY*.md
2216 cd java/target;jar -uf $(ROCKSDB_JAR) $(ROCKSDBJNILIB)
2217 cd java/target/classes;jar -uf ../$(ROCKSDB_JAR) org/rocksdb/*.class org/rocksdb/util/*.class
2218 cd java/target/apidocs;jar -cf ../$(ROCKSDB_JAVADOCS_JAR) *
2219 cd java/src/main/java;jar -cf ../../../target/$(ROCKSDB_SOURCES_JAR) org
2220 openssl sha1 java/target/$(ROCKSDB_JAR) | sed 's/.*= \([0-9a-f]*\)/\1/' > java/target/$(ROCKSDB_JAR).sha1
2221 openssl sha1 java/target/$(ROCKSDB_JAVADOCS_JAR) | sed 's/.*= \([0-9a-f]*\)/\1/' > java/target/$(ROCKSDB_JAVADOCS_JAR).sha1
2222 openssl sha1 java/target/$(ROCKSDB_SOURCES_JAR) | sed 's/.*= \([0-9a-f]*\)/\1/' > java/target/$(ROCKSDB_SOURCES_JAR).sha1
2223
2224 rocksdbjavastatic_deps: $(JAVA_COMPRESSIONS)
2225
2226 rocksdbjavastatic_libobjects: $(LIB_OBJECTS)
2227
2228 rocksdbjavastaticrelease: rocksdbjavastatic
2229 cd java/crossbuild && (vagrant destroy -f || true) && vagrant up linux32 && vagrant halt linux32 && vagrant up linux64 && vagrant halt linux64 && vagrant up linux64-musl && vagrant halt linux64-musl
2230 cd java;jar -cf target/$(ROCKSDB_JAR_ALL) HISTORY*.md
2231 cd java/target;jar -uf $(ROCKSDB_JAR_ALL) librocksdbjni-*.so librocksdbjni-*.jnilib
2232 cd java/target/classes;jar -uf ../$(ROCKSDB_JAR_ALL) org/rocksdb/*.class org/rocksdb/util/*.class
2233 openssl sha1 java/target/$(ROCKSDB_JAR_ALL) | sed 's/.*= \([0-9a-f]*\)/\1/' > java/target/$(ROCKSDB_JAR_ALL).sha1
2234
2235 rocksdbjavastaticreleasedocker: rocksdbjavastatic rocksdbjavastaticdockerx86 rocksdbjavastaticdockerx86_64 rocksdbjavastaticdockerx86musl rocksdbjavastaticdockerx86_64musl
2236 cd java;jar -cf target/$(ROCKSDB_JAR_ALL) HISTORY*.md
2237 cd java/target;jar -uf $(ROCKSDB_JAR_ALL) librocksdbjni-*.so librocksdbjni-*.jnilib
2238 cd java/target/classes;jar -uf ../$(ROCKSDB_JAR_ALL) org/rocksdb/*.class org/rocksdb/util/*.class
2239 openssl sha1 java/target/$(ROCKSDB_JAR_ALL) | sed 's/.*= \([0-9a-f]*\)/\1/' > java/target/$(ROCKSDB_JAR_ALL).sha1
2240
2241 rocksdbjavastaticdockerx86:
2242 mkdir -p java/target
2243 docker run --rm --name rocksdb_linux_x86-be --platform linux/386 --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) evolvedbinary/rocksjava:centos6_x86-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh
2244
2245 rocksdbjavastaticdockerx86_64:
2246 mkdir -p java/target
2247 docker run --rm --name rocksdb_linux_x64-be --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) evolvedbinary/rocksjava:centos6_x64-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh
2248
2249 rocksdbjavastaticdockerppc64le:
2250 mkdir -p java/target
2251 docker run --rm --name rocksdb_linux_ppc64le-be --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) evolvedbinary/rocksjava:centos7_ppc64le-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh
2252
2253 rocksdbjavastaticdockerarm64v8:
2254 mkdir -p java/target
2255 docker run --rm --name rocksdb_linux_arm64v8-be --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) evolvedbinary/rocksjava:centos7_arm64v8-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh
2256
2257 rocksdbjavastaticdockerx86musl:
2258 mkdir -p java/target
2259 docker run --rm --name rocksdb_linux_x86-musl-be --platform linux/386 --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) evolvedbinary/rocksjava:alpine3_x86-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh
2260
2261 rocksdbjavastaticdockerx86_64musl:
2262 mkdir -p java/target
2263 docker run --rm --name rocksdb_linux_x64-musl-be --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) evolvedbinary/rocksjava:alpine3_x64-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh
2264
2265 rocksdbjavastaticdockerppc64lemusl:
2266 mkdir -p java/target
2267 docker run --rm --name rocksdb_linux_ppc64le-musl-be --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) evolvedbinary/rocksjava:alpine3_ppc64le-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh
2268
2269 rocksdbjavastaticdockerarm64v8musl:
2270 mkdir -p java/target
2271 docker run --rm --name rocksdb_linux_arm64v8-musl-be --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) evolvedbinary/rocksjava:alpine3_arm64v8-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh
2272
2273 rocksdbjavastaticpublish: rocksdbjavastaticrelease rocksdbjavastaticpublishcentral
2274
2275 rocksdbjavastaticpublishdocker: rocksdbjavastaticreleasedocker rocksdbjavastaticpublishcentral
2276
2277 rocksdbjavastaticpublishcentral: rocksdbjavageneratepom
2278 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/pom.xml -Dfile=java/target/rocksdbjni-$(ROCKSDB_JAVA_VERSION)-javadoc.jar -Dclassifier=javadoc
2279 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/pom.xml -Dfile=java/target/rocksdbjni-$(ROCKSDB_JAVA_VERSION)-sources.jar -Dclassifier=sources
2280 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/pom.xml -Dfile=java/target/rocksdbjni-$(ROCKSDB_JAVA_VERSION)-linux64.jar -Dclassifier=linux64
2281 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/pom.xml -Dfile=java/target/rocksdbjni-$(ROCKSDB_JAVA_VERSION)-linux32.jar -Dclassifier=linux32
2282 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/pom.xml -Dfile=java/target/rocksdbjni-$(ROCKSDB_JAVA_VERSION)-linux64-musl.jar -Dclassifier=linux64-musl
2283 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/pom.xml -Dfile=java/target/rocksdbjni-$(ROCKSDB_JAVA_VERSION)-linux32-musl.jar -Dclassifier=linux32-musl
2284 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/pom.xml -Dfile=java/target/rocksdbjni-$(ROCKSDB_JAVA_VERSION)-osx.jar -Dclassifier=osx
2285 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/pom.xml -Dfile=java/target/rocksdbjni-$(ROCKSDB_JAVA_VERSION)-win64.jar -Dclassifier=win64
2286 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/pom.xml -Dfile=java/target/rocksdbjni-$(ROCKSDB_JAVA_VERSION).jar
2287
2288 rocksdbjavageneratepom:
2289 cd java;cat pom.xml.template | sed 's/\$${ROCKSDB_JAVA_VERSION}/$(ROCKSDB_JAVA_VERSION)/' > pom.xml
2290
2291 # A version of each $(LIBOBJECTS) compiled with -fPIC
2292
2293 jl/%.o: %.cc
2294 $(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) -fPIC -c $< -o $@ $(COVERAGEFLAGS)
2295
2296 rocksdbjava: $(LIB_OBJECTS)
2297 ifeq ($(JAVA_HOME),)
2298 $(error JAVA_HOME is not set)
2299 endif
2300 $(AM_V_GEN)cd java;$(MAKE) javalib;
2301 $(AM_V_at)rm -f ./java/target/$(ROCKSDBJNILIB)
2302 $(AM_V_at)$(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC -o ./java/target/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) $(LIB_OBJECTS) $(JAVA_LDFLAGS) $(COVERAGEFLAGS)
2303 $(AM_V_at)cd java;jar -cf target/$(ROCKSDB_JAR) HISTORY*.md
2304 $(AM_V_at)cd java/target;jar -uf $(ROCKSDB_JAR) $(ROCKSDBJNILIB)
2305 $(AM_V_at)cd java/target/classes;jar -uf ../$(ROCKSDB_JAR) org/rocksdb/*.class org/rocksdb/util/*.class
2306 $(AM_V_at)openssl sha1 java/target/$(ROCKSDB_JAR) | sed 's/.*= \([0-9a-f]*\)/\1/' > java/target/$(ROCKSDB_JAR).sha1
2307
2308 jclean:
2309 cd java;$(MAKE) clean;
2310
2311 jtest_compile: rocksdbjava
2312 cd java;$(MAKE) java_test
2313
2314 jtest_run:
2315 cd java;$(MAKE) run_test
2316
2317 jtest: rocksdbjava
2318 cd java;$(MAKE) sample;$(MAKE) test;
2319 $(PYTHON) tools/check_all_python.py # TODO peterd: find a better place for this check in CI targets
2320
2321 jdb_bench:
2322 cd java;$(MAKE) db_bench;
2323
2324 commit_prereq: build_tools/rocksdb-lego-determinator \
2325 build_tools/precommit_checker.py
2326 J=$(J) build_tools/precommit_checker.py unit unit_481 clang_unit release release_481 clang_release tsan asan ubsan lite unit_non_shm
2327 $(MAKE) clean && $(MAKE) jclean && $(MAKE) rocksdbjava;
2328
2329 # ---------------------------------------------------------------------------
2330 # Platform-specific compilation
2331 # ---------------------------------------------------------------------------
2332
2333 ifeq ($(PLATFORM), IOS)
2334 # For iOS, create universal object files to be used on both the simulator and
2335 # a device.
2336 XCODEROOT=$(shell xcode-select -print-path)
2337 PLATFORMSROOT=$(XCODEROOT)/Platforms
2338 SIMULATORROOT=$(PLATFORMSROOT)/iPhoneSimulator.platform/Developer
2339 DEVICEROOT=$(PLATFORMSROOT)/iPhoneOS.platform/Developer
2340 IOSVERSION=$(shell defaults read $(PLATFORMSROOT)/iPhoneOS.platform/version CFBundleShortVersionString)
2341
2342 .cc.o:
2343 mkdir -p ios-x86/$(dir $@)
2344 $(CXX) $(CXXFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@
2345 mkdir -p ios-arm/$(dir $@)
2346 xcrun -sdk iphoneos $(CXX) $(CXXFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -arch armv7s -arch arm64 -c $< -o ios-arm/$@
2347 lipo ios-x86/$@ ios-arm/$@ -create -output $@
2348
2349 .c.o:
2350 mkdir -p ios-x86/$(dir $@)
2351 $(CC) $(CFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@
2352 mkdir -p ios-arm/$(dir $@)
2353 xcrun -sdk iphoneos $(CC) $(CFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -arch armv7s -arch arm64 -c $< -o ios-arm/$@
2354 lipo ios-x86/$@ ios-arm/$@ -create -output $@
2355
2356 else
2357 ifeq ($(HAVE_POWER8),1)
2358 $(OBJ_DIR)/util/crc32c_ppc.o: util/crc32c_ppc.c
2359 $(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
2360
2361 $(OBJ_DIR)/util/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S
2362 $(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
2363 endif
2364 $(OBJ_DIR)/%.o: %.cc
2365 $(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) -c $< -o $@ $(COVERAGEFLAGS)
2366
2367 $(OBJ_DIR)/%.o: %.cpp
2368 $(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) -c $< -o $@ $(COVERAGEFLAGS)
2369
2370 $(OBJ_DIR)/%.o: %.c
2371 $(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
2372 endif
2373
2374 # ---------------------------------------------------------------------------
2375 # Source files dependencies detection
2376 # ---------------------------------------------------------------------------
2377
2378 DEPFILES = $(patsubst %.cc, $(OBJ_DIR)/%.cc.d, $(ALL_SOURCES))
2379 DEPFILES+ = $(patsubst %.c, $(OBJ_DIR)/%.c.d, $(LIB_SOURCES_C) $(TEST_MAIN_SOURCES_C))
2380 ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1)
2381 DEPFILES +=$(patsubst %.cpp, $(OBJ_DIR)/%.cpp.d, $(FOLLY_SOURCES))
2382 endif
2383
2384 # Add proper dependency support so changing a .h file forces a .cc file to
2385 # rebuild.
2386
2387 # The .d file indicates .cc file's dependencies on .h files. We generate such
2388 # dependency by g++'s -MM option, whose output is a make dependency rule.
2389 $(OBJ_DIR)/%.cc.d: %.cc
2390 @mkdir -p $(@D) && $(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
2391 -MM -MT'$@' -MT'$(<:.cc=.o)' -MT'$(<:%.cc=$(OBJ_DIR)/%.o)' \
2392 "$<" -o '$@'
2393
2394 $(OBJ_DIR)/%.cpp.d: %.cpp
2395 @mkdir -p $(@D) && $(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
2396 -MM -MT'$@' -MT'$(<:.cpp=.o)' -MT'$(<:%.cpp=$(OBJ_DIR)/%.o)' \
2397 "$<" -o '$@'
2398
2399 ifeq ($(HAVE_POWER8),1)
2400 DEPFILES_C = $(patsubst %.c, $(OBJ_DIR)/%.c.d, $(LIB_SOURCES_C))
2401 DEPFILES_ASM = $(patsubst %.S, $(OBJ_DIR)/%.S.d, $(LIB_SOURCES_ASM))
2402
2403 $(OBJ_DIR)/%.c.d: %.c
2404 @$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
2405 -MM -MT'$@' -MT'$(<:.c=.o)' "$<" -o '$@'
2406
2407 $(OBJ_DIR)/%.S.d: %.S
2408 @$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
2409 -MM -MT'$@' -MT'$(<:.S=.o)' "$<" -o '$@'
2410
2411 $(DEPFILES_C): %.c.d
2412
2413 $(DEPFILES_ASM): %.S.d
2414 depend: $(DEPFILES) $(DEPFILES_C) $(DEPFILES_ASM)
2415 else
2416 depend: $(DEPFILES)
2417 endif
2418
2419 build_subset_tests: $(ROCKSDBTESTS_SUBSET)
2420 $(AM_V_GEN)if [ -n "$${ROCKSDBTESTS_SUBSET_TESTS_TO_FILE}" ]; then echo "$(ROCKSDBTESTS_SUBSET)" > "$${ROCKSDBTESTS_SUBSET_TESTS_TO_FILE}"; else echo "$(ROCKSDBTESTS_SUBSET)"; fi
2421
2422 # if the make goal is either "clean" or "format", we shouldn't
2423 # try to import the *.d files.
2424 # TODO(kailiu) The unfamiliarity of Make's conditions leads to the ugly
2425 # working solution.
2426 ifneq ($(MAKECMDGOALS),clean)
2427 ifneq ($(MAKECMDGOALS),format)
2428 ifneq ($(MAKECMDGOALS),jclean)
2429 ifneq ($(MAKECMDGOALS),jtest)
2430 ifneq ($(MAKECMDGOALS),rocksdbjavastatic)
2431 ifneq ($(MAKECMDGOALS),rocksdbjavastatic_deps)
2432 ifneq ($(MAKECMDGOALS),package)
2433 ifneq ($(MAKECMDGOALS),analyze)
2434 -include $(DEPFILES)
2435 endif
2436 endif
2437 endif
2438 endif
2439 endif
2440 endif
2441 endif
2442 endif