]> git.proxmox.com Git - ceph.git/blob - ceph/src/rocksdb/Makefile
update sources to ceph Nautilus 14.2.1
[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
12 CLEAN_FILES = # deliberately empty, so we can append below.
13 CFLAGS += ${EXTRA_CFLAGS}
14 CXXFLAGS += ${EXTRA_CXXFLAGS}
15 LDFLAGS += $(EXTRA_LDFLAGS)
16 MACHINE ?= $(shell uname -m)
17 ARFLAGS = ${EXTRA_ARFLAGS} rs
18 STRIPFLAGS = -S -x
19
20 # Transform parallel LOG output into something more readable.
21 perl_command = perl -n \
22 -e '@a=split("\t",$$_,-1); $$t=$$a[8];' \
23 -e '$$t =~ /.*if\s\[\[\s"(.*?\.[\w\/]+)/ and $$t=$$1;' \
24 -e '$$t =~ s,^\./,,;' \
25 -e '$$t =~ s, >.*,,; chomp $$t;' \
26 -e '$$t =~ /.*--gtest_filter=(.*?\.[\w\/]+)/ and $$t=$$1;' \
27 -e 'printf "%7.3f %s %s\n", $$a[3], $$a[6] == 0 ? "PASS" : "FAIL", $$t'
28 quoted_perl_command = $(subst ','\'',$(perl_command))
29
30 # DEBUG_LEVEL can have three values:
31 # * DEBUG_LEVEL=2; this is the ultimate debug mode. It will compile rocksdb
32 # without any optimizations. To compile with level 2, issue `make dbg`
33 # * DEBUG_LEVEL=1; debug level 1 enables all assertions and debug code, but
34 # compiles rocksdb with -O2 optimizations. this is the default debug level.
35 # `make all` or `make <binary_target>` compile RocksDB with debug level 1.
36 # We use this debug level when developing RocksDB.
37 # * DEBUG_LEVEL=0; this is the debug level we use for release. If you're
38 # running rocksdb in production you most definitely want to compile RocksDB
39 # with debug level 0. To compile with level 0, run `make shared_lib`,
40 # `make install-shared`, `make static_lib`, `make install-static` or
41 # `make install`
42
43 # Set the default DEBUG_LEVEL to 1
44 DEBUG_LEVEL?=1
45
46 ifeq ($(MAKECMDGOALS),dbg)
47 DEBUG_LEVEL=2
48 endif
49
50 ifeq ($(MAKECMDGOALS),clean)
51 DEBUG_LEVEL=0
52 endif
53
54 ifeq ($(MAKECMDGOALS),release)
55 DEBUG_LEVEL=0
56 endif
57
58 ifeq ($(MAKECMDGOALS),shared_lib)
59 DEBUG_LEVEL=0
60 endif
61
62 ifeq ($(MAKECMDGOALS),install-shared)
63 DEBUG_LEVEL=0
64 endif
65
66 ifeq ($(MAKECMDGOALS),static_lib)
67 DEBUG_LEVEL=0
68 endif
69
70 ifeq ($(MAKECMDGOALS),install-static)
71 DEBUG_LEVEL=0
72 endif
73
74 ifeq ($(MAKECMDGOALS),install)
75 DEBUG_LEVEL=0
76 endif
77
78 ifeq ($(MAKECMDGOALS),rocksdbjavastatic)
79 ifneq ($(DEBUG_LEVEL),2)
80 DEBUG_LEVEL=0
81 endif
82 endif
83
84 ifeq ($(MAKECMDGOALS),rocksdbjavastaticrelease)
85 DEBUG_LEVEL=0
86 endif
87
88 ifeq ($(MAKECMDGOALS),rocksdbjavastaticreleasedocker)
89 DEBUG_LEVEL=0
90 endif
91
92 ifeq ($(MAKECMDGOALS),rocksdbjavastaticpublish)
93 DEBUG_LEVEL=0
94 endif
95
96 # compile with -O2 if debug level is not 2
97 ifneq ($(DEBUG_LEVEL), 2)
98 OPT += -O2 -fno-omit-frame-pointer
99 # Skip for archs that don't support -momit-leaf-frame-pointer
100 ifeq (,$(shell $(CXX) -fsyntax-only -momit-leaf-frame-pointer -xc /dev/null 2>&1))
101 OPT += -momit-leaf-frame-pointer
102 endif
103 endif
104
105 ifeq (,$(shell $(CXX) -fsyntax-only -faligned-new -xc++ /dev/null 2>&1))
106 CXXFLAGS += -faligned-new -DHAVE_ALIGNED_NEW
107 endif
108
109 ifeq (,$(shell $(CXX) -fsyntax-only -maltivec -xc /dev/null 2>&1))
110 CXXFLAGS += -DHAS_ALTIVEC
111 CFLAGS += -DHAS_ALTIVEC
112 HAS_ALTIVEC=1
113 endif
114
115 ifeq (,$(shell $(CXX) -fsyntax-only -mcpu=power8 -xc /dev/null 2>&1))
116 CXXFLAGS += -DHAVE_POWER8
117 CFLAGS += -DHAVE_POWER8
118 HAVE_POWER8=1
119 endif
120
121 # if we're compiling for release, compile without debug code (-DNDEBUG)
122 ifeq ($(DEBUG_LEVEL),0)
123 OPT += -DNDEBUG
124
125 ifneq ($(USE_RTTI), 1)
126 CXXFLAGS += -fno-rtti
127 else
128 CXXFLAGS += -DROCKSDB_USE_RTTI
129 endif
130 else
131 ifneq ($(USE_RTTI), 0)
132 CXXFLAGS += -DROCKSDB_USE_RTTI
133 else
134 CXXFLAGS += -fno-rtti
135 endif
136
137 $(warning Warning: Compiling in debug mode. Don't use the resulting binary in production)
138 endif
139
140 #-----------------------------------------------
141 include src.mk
142
143 AM_DEFAULT_VERBOSITY = 0
144
145 AM_V_GEN = $(am__v_GEN_$(V))
146 am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
147 am__v_GEN_0 = @echo " GEN " $@;
148 am__v_GEN_1 =
149 AM_V_at = $(am__v_at_$(V))
150 am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
151 am__v_at_0 = @
152 am__v_at_1 =
153
154 AM_V_CC = $(am__v_CC_$(V))
155 am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
156 am__v_CC_0 = @echo " CC " $@;
157 am__v_CC_1 =
158 CCLD = $(CC)
159 LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
160 AM_V_CCLD = $(am__v_CCLD_$(V))
161 am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
162 am__v_CCLD_0 = @echo " CCLD " $@;
163 am__v_CCLD_1 =
164 AM_V_AR = $(am__v_AR_$(V))
165 am__v_AR_ = $(am__v_AR_$(AM_DEFAULT_VERBOSITY))
166 am__v_AR_0 = @echo " AR " $@;
167 am__v_AR_1 =
168
169 ifdef ROCKSDB_USE_LIBRADOS
170 LIB_SOURCES += utilities/env_librados.cc
171 LDFLAGS += -lrados
172 endif
173
174 AM_LINK = $(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(COVERAGEFLAGS)
175 # detect what platform we're building on
176 dummy := $(shell (export ROCKSDB_ROOT="$(CURDIR)"; export PORTABLE="$(PORTABLE)"; "$(CURDIR)/build_tools/build_detect_platform" "$(CURDIR)/make_config.mk"))
177 # this file is generated by the previous line to set build flags and sources
178 include make_config.mk
179 CLEAN_FILES += make_config.mk
180
181 missing_make_config_paths := $(shell \
182 grep "\/\S*" -o $(CURDIR)/make_config.mk | \
183 while read path; \
184 do [ -e $$path ] || echo $$path; \
185 done | sort | uniq)
186
187 $(foreach path, $(missing_make_config_paths), \
188 $(warning Warning: $(path) dont exist))
189
190 ifeq ($(PLATFORM), OS_AIX)
191 # no debug info
192 else ifneq ($(PLATFORM), IOS)
193 CFLAGS += -g
194 CXXFLAGS += -g
195 else
196 # no debug info for IOS, that will make our library big
197 OPT += -DNDEBUG
198 endif
199
200 ifeq ($(PLATFORM), OS_AIX)
201 ARFLAGS = -X64 rs
202 STRIPFLAGS = -X64 -x
203 endif
204
205 ifeq ($(PLATFORM), OS_SOLARIS)
206 PLATFORM_CXXFLAGS += -D _GLIBCXX_USE_C99
207 endif
208 ifneq ($(filter -DROCKSDB_LITE,$(OPT)),)
209 # found
210 CFLAGS += -fno-exceptions
211 CXXFLAGS += -fno-exceptions
212 # LUA is not supported under ROCKSDB_LITE
213 LUA_PATH =
214 endif
215
216 # ASAN doesn't work well with jemalloc. If we're compiling with ASAN, we should use regular malloc.
217 ifdef COMPILE_WITH_ASAN
218 DISABLE_JEMALLOC=1
219 EXEC_LDFLAGS += -fsanitize=address
220 PLATFORM_CCFLAGS += -fsanitize=address
221 PLATFORM_CXXFLAGS += -fsanitize=address
222 endif
223
224 # TSAN doesn't work well with jemalloc. If we're compiling with TSAN, we should use regular malloc.
225 ifdef COMPILE_WITH_TSAN
226 DISABLE_JEMALLOC=1
227 EXEC_LDFLAGS += -fsanitize=thread
228 PLATFORM_CCFLAGS += -fsanitize=thread -fPIC
229 PLATFORM_CXXFLAGS += -fsanitize=thread -fPIC
230 # Turn off -pg when enabling TSAN testing, because that induces
231 # a link failure. TODO: find the root cause
232 PROFILING_FLAGS =
233 # LUA is not supported under TSAN
234 LUA_PATH =
235 # Limit keys for crash test under TSAN to avoid error:
236 # "ThreadSanitizer: DenseSlabAllocator overflow. Dying."
237 CRASH_TEST_EXT_ARGS += --max_key=1000000
238 endif
239
240 # AIX doesn't work with -pg
241 ifeq ($(PLATFORM), OS_AIX)
242 PROFILING_FLAGS =
243 endif
244
245 # USAN doesn't work well with jemalloc. If we're compiling with USAN, we should use regular malloc.
246 ifdef COMPILE_WITH_UBSAN
247 DISABLE_JEMALLOC=1
248 # Suppress alignment warning because murmurhash relies on casting unaligned
249 # memory to integer. Fixing it may cause performance regression. 3-way crc32
250 # relies on it too, although it can be rewritten to eliminate with minimal
251 # performance regression.
252 EXEC_LDFLAGS += -fsanitize=undefined -fno-sanitize-recover=all
253 PLATFORM_CCFLAGS += -fsanitize=undefined -fno-sanitize-recover=all -DROCKSDB_UBSAN_RUN
254 PLATFORM_CXXFLAGS += -fsanitize=undefined -fno-sanitize-recover=all -DROCKSDB_UBSAN_RUN
255 endif
256
257 ifdef ROCKSDB_VALGRIND_RUN
258 PLATFORM_CCFLAGS += -DROCKSDB_VALGRIND_RUN
259 PLATFORM_CXXFLAGS += -DROCKSDB_VALGRIND_RUN
260 endif
261
262 ifndef DISABLE_JEMALLOC
263 ifdef JEMALLOC
264 PLATFORM_CXXFLAGS += -DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE
265 PLATFORM_CCFLAGS += -DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE
266 endif
267 ifdef WITH_JEMALLOC_FLAG
268 PLATFORM_LDFLAGS += -ljemalloc
269 JAVA_LDFLAGS += -ljemalloc
270 endif
271 EXEC_LDFLAGS := $(JEMALLOC_LIB) $(EXEC_LDFLAGS)
272 PLATFORM_CXXFLAGS += $(JEMALLOC_INCLUDE)
273 PLATFORM_CCFLAGS += $(JEMALLOC_INCLUDE)
274 endif
275
276 export GTEST_THROW_ON_FAILURE=1
277 export GTEST_HAS_EXCEPTIONS=1
278 GTEST_DIR = ./third-party/gtest-1.7.0/fused-src
279 # AIX: pre-defined system headers are surrounded by an extern "C" block
280 ifeq ($(PLATFORM), OS_AIX)
281 PLATFORM_CCFLAGS += -I$(GTEST_DIR)
282 PLATFORM_CXXFLAGS += -I$(GTEST_DIR)
283 else
284 PLATFORM_CCFLAGS += -isystem $(GTEST_DIR)
285 PLATFORM_CXXFLAGS += -isystem $(GTEST_DIR)
286 endif
287
288 # This (the first rule) must depend on "all".
289 default: all
290
291 WARNING_FLAGS = -W -Wextra -Wall -Wsign-compare -Wshadow \
292 -Wunused-parameter
293
294 ifeq ($(PLATFORM), OS_OPENBSD)
295 WARNING_FLAGS += -Wno-unused-lambda-capture
296 endif
297
298 ifndef DISABLE_WARNING_AS_ERROR
299 WARNING_FLAGS += -Werror
300 endif
301
302
303 ifdef LUA_PATH
304
305 ifndef LUA_INCLUDE
306 LUA_INCLUDE=$(LUA_PATH)/include
307 endif
308
309 LUA_INCLUDE_FILE=$(LUA_INCLUDE)/lualib.h
310
311 ifeq ("$(wildcard $(LUA_INCLUDE_FILE))", "")
312 # LUA_INCLUDE_FILE does not exist
313 $(error Cannot find lualib.h under $(LUA_INCLUDE). Try to specify both LUA_PATH and LUA_INCLUDE manually)
314 endif
315 LUA_FLAGS = -I$(LUA_INCLUDE) -DLUA -DLUA_COMPAT_ALL
316 CFLAGS += $(LUA_FLAGS)
317 CXXFLAGS += $(LUA_FLAGS)
318
319 ifndef LUA_LIB
320 LUA_LIB = $(LUA_PATH)/lib/liblua.a
321 endif
322 ifeq ("$(wildcard $(LUA_LIB))", "") # LUA_LIB does not exist
323 $(error $(LUA_LIB) does not exist. Try to specify both LUA_PATH and LUA_LIB manually)
324 endif
325 LDFLAGS += $(LUA_LIB)
326
327 endif
328
329 ifeq ($(NO_THREEWAY_CRC32C), 1)
330 CXXFLAGS += -DNO_THREEWAY_CRC32C
331 endif
332
333 CFLAGS += $(WARNING_FLAGS) -I. -I./include $(PLATFORM_CCFLAGS) $(OPT)
334 CXXFLAGS += $(WARNING_FLAGS) -I. -I./include $(PLATFORM_CXXFLAGS) $(OPT) -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers
335
336 LDFLAGS += $(PLATFORM_LDFLAGS)
337
338 # If NO_UPDATE_BUILD_VERSION is set we don't update util/build_version.cc, but
339 # the file needs to already exist or else the build will fail
340 ifndef NO_UPDATE_BUILD_VERSION
341 date := $(shell date +%F)
342 ifdef FORCE_GIT_SHA
343 git_sha := $(FORCE_GIT_SHA)
344 else
345 git_sha := $(shell git rev-parse HEAD 2>/dev/null)
346 endif
347 gen_build_version = sed -e s/@@GIT_SHA@@/$(git_sha)/ -e s/@@GIT_DATE_TIME@@/$(date)/ util/build_version.cc.in
348
349 # Record the version of the source that we are compiling.
350 # We keep a record of the git revision in this file. It is then built
351 # as a regular source file as part of the compilation process.
352 # One can run "strings executable_filename | grep _build_" to find
353 # the version of the source that we used to build the executable file.
354 FORCE:
355 util/build_version.cc: FORCE
356 $(AM_V_GEN)rm -f $@-t
357 $(AM_V_at)$(gen_build_version) > $@-t
358 $(AM_V_at)if test -f $@; then \
359 cmp -s $@-t $@ && rm -f $@-t || mv -f $@-t $@; \
360 else mv -f $@-t $@; fi
361 endif
362
363 LIBOBJECTS = $(LIB_SOURCES:.cc=.o)
364 ifeq ($(HAVE_POWER8),1)
365 LIB_CC_OBJECTS = $(LIB_SOURCES:.cc=.o)
366 LIBOBJECTS += $(LIB_SOURCES_C:.c=.o)
367 LIBOBJECTS += $(LIB_SOURCES_ASM:.S=.o)
368 else
369 LIB_CC_OBJECTS = $(LIB_SOURCES:.cc=.o)
370 endif
371
372 LIBOBJECTS += $(TOOL_LIB_SOURCES:.cc=.o)
373 MOCKOBJECTS = $(MOCK_LIB_SOURCES:.cc=.o)
374
375 GTEST = $(GTEST_DIR)/gtest/gtest-all.o
376 TESTUTIL = ./util/testutil.o
377 TESTHARNESS = ./util/testharness.o $(TESTUTIL) $(MOCKOBJECTS) $(GTEST)
378 VALGRIND_ERROR = 2
379 VALGRIND_VER := $(join $(VALGRIND_VER),valgrind)
380
381 VALGRIND_OPTS = --error-exitcode=$(VALGRIND_ERROR) --leak-check=full
382
383 BENCHTOOLOBJECTS = $(BENCH_LIB_SOURCES:.cc=.o) $(LIBOBJECTS) $(TESTUTIL)
384
385 ANALYZETOOLOBJECTS = $(ANALYZER_LIB_SOURCES:.cc=.o)
386
387 EXPOBJECTS = $(EXP_LIB_SOURCES:.cc=.o) $(LIBOBJECTS) $(TESTUTIL)
388
389 TESTS = \
390 db_basic_test \
391 db_encryption_test \
392 db_test2 \
393 external_sst_file_basic_test \
394 auto_roll_logger_test \
395 bloom_test \
396 dynamic_bloom_test \
397 c_test \
398 checkpoint_test \
399 crc32c_test \
400 coding_test \
401 inlineskiplist_test \
402 env_basic_test \
403 env_test \
404 hash_test \
405 thread_local_test \
406 rate_limiter_test \
407 perf_context_test \
408 iostats_context_test \
409 db_wal_test \
410 db_block_cache_test \
411 db_test \
412 db_blob_index_test \
413 db_bloom_filter_test \
414 db_iter_test \
415 db_iter_stress_test \
416 db_log_iter_test \
417 db_compaction_filter_test \
418 db_compaction_test \
419 db_dynamic_level_test \
420 db_flush_test \
421 db_inplace_update_test \
422 db_iterator_test \
423 db_memtable_test \
424 db_merge_operator_test \
425 db_options_test \
426 db_range_del_test \
427 db_sst_test \
428 db_tailing_iter_test \
429 db_io_failure_test \
430 db_properties_test \
431 db_table_properties_test \
432 db_statistics_test \
433 db_write_test \
434 error_handler_test \
435 autovector_test \
436 blob_db_test \
437 cleanable_test \
438 column_family_test \
439 table_properties_collector_test \
440 arena_test \
441 block_test \
442 data_block_hash_index_test \
443 cache_test \
444 corruption_test \
445 slice_transform_test \
446 dbformat_test \
447 fault_injection_test \
448 filelock_test \
449 filename_test \
450 file_reader_writer_test \
451 block_based_filter_block_test \
452 full_filter_block_test \
453 partitioned_filter_block_test \
454 hash_table_test \
455 histogram_test \
456 log_test \
457 manual_compaction_test \
458 mock_env_test \
459 memtable_list_test \
460 merge_helper_test \
461 memory_test \
462 merge_test \
463 merger_test \
464 util_merge_operators_test \
465 options_file_test \
466 redis_test \
467 reduce_levels_test \
468 plain_table_db_test \
469 comparator_db_test \
470 external_sst_file_test \
471 prefix_test \
472 skiplist_test \
473 write_buffer_manager_test \
474 stringappend_test \
475 cassandra_format_test \
476 cassandra_functional_test \
477 cassandra_row_merge_test \
478 cassandra_serialize_test \
479 ttl_test \
480 date_tiered_test \
481 backupable_db_test \
482 document_db_test \
483 json_document_test \
484 sim_cache_test \
485 spatial_db_test \
486 version_edit_test \
487 version_set_test \
488 compaction_picker_test \
489 version_builder_test \
490 file_indexer_test \
491 write_batch_test \
492 write_batch_with_index_test \
493 write_controller_test\
494 deletefile_test \
495 obsolete_files_test \
496 table_test \
497 geodb_test \
498 delete_scheduler_test \
499 options_test \
500 options_settable_test \
501 options_util_test \
502 event_logger_test \
503 timer_queue_test \
504 cuckoo_table_builder_test \
505 cuckoo_table_reader_test \
506 cuckoo_table_db_test \
507 flush_job_test \
508 wal_manager_test \
509 listener_test \
510 compaction_iterator_test \
511 compaction_job_test \
512 thread_list_test \
513 sst_dump_test \
514 column_aware_encoding_test \
515 compact_files_test \
516 optimistic_transaction_test \
517 write_callback_test \
518 heap_test \
519 compact_on_deletion_collector_test \
520 compaction_job_stats_test \
521 option_change_migration_test \
522 transaction_test \
523 ldb_cmd_test \
524 persistent_cache_test \
525 statistics_test \
526 lua_test \
527 range_del_aggregator_test \
528 lru_cache_test \
529 object_registry_test \
530 repair_test \
531 env_timed_test \
532 write_prepared_transaction_test \
533 write_unprepared_transaction_test \
534 db_universal_compaction_test \
535 trace_analyzer_test \
536 repeatable_thread_test \
537
538 PARALLEL_TEST = \
539 backupable_db_test \
540 db_compaction_filter_test \
541 db_compaction_test \
542 db_merge_operator_test \
543 db_sst_test \
544 db_test \
545 db_universal_compaction_test \
546 db_wal_test \
547 external_sst_file_test \
548 fault_injection_test \
549 inlineskiplist_test \
550 manual_compaction_test \
551 persistent_cache_test \
552 table_test \
553 transaction_test \
554 write_prepared_transaction_test \
555 write_unprepared_transaction_test \
556
557 # options_settable_test doesn't pass with UBSAN as we use hack in the test
558 ifdef COMPILE_WITH_UBSAN
559 TESTS := $(shell echo $(TESTS) | sed 's/\boptions_settable_test\b//g')
560 endif
561 SUBSET := $(TESTS)
562 ifdef ROCKSDBTESTS_START
563 SUBSET := $(shell echo $(SUBSET) | sed 's/^.*$(ROCKSDBTESTS_START)/$(ROCKSDBTESTS_START)/')
564 endif
565
566 ifdef ROCKSDBTESTS_END
567 SUBSET := $(shell echo $(SUBSET) | sed 's/$(ROCKSDBTESTS_END).*//')
568 endif
569
570 TOOLS = \
571 sst_dump \
572 db_sanity_test \
573 db_stress \
574 write_stress \
575 ldb \
576 db_repl_stress \
577 rocksdb_dump \
578 rocksdb_undump \
579 blob_dump \
580 trace_analyzer \
581
582 TEST_LIBS = \
583 librocksdb_env_basic_test.a
584
585 # TODO: add back forward_iterator_bench, after making it build in all environemnts.
586 BENCHMARKS = db_bench table_reader_bench cache_bench memtablerep_bench column_aware_encoding_exp persistent_cache_bench range_del_aggregator_bench
587
588 # if user didn't config LIBNAME, set the default
589 ifeq ($(LIBNAME),)
590 # we should only run rocksdb in production with DEBUG_LEVEL 0
591 ifeq ($(DEBUG_LEVEL),0)
592 LIBNAME=librocksdb
593 else
594 LIBNAME=librocksdb_debug
595 endif
596 endif
597 LIBRARY = ${LIBNAME}.a
598 TOOLS_LIBRARY = ${LIBNAME}_tools.a
599
600 ROCKSDB_MAJOR = $(shell egrep "ROCKSDB_MAJOR.[0-9]" include/rocksdb/version.h | cut -d ' ' -f 3)
601 ROCKSDB_MINOR = $(shell egrep "ROCKSDB_MINOR.[0-9]" include/rocksdb/version.h | cut -d ' ' -f 3)
602 ROCKSDB_PATCH = $(shell egrep "ROCKSDB_PATCH.[0-9]" include/rocksdb/version.h | cut -d ' ' -f 3)
603
604 default: all
605
606 #-----------------------------------------------
607 # Create platform independent shared libraries.
608 #-----------------------------------------------
609 ifneq ($(PLATFORM_SHARED_EXT),)
610
611 ifneq ($(PLATFORM_SHARED_VERSIONED),true)
612 SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
613 SHARED2 = $(SHARED1)
614 SHARED3 = $(SHARED1)
615 SHARED4 = $(SHARED1)
616 SHARED = $(SHARED1)
617 else
618 SHARED_MAJOR = $(ROCKSDB_MAJOR)
619 SHARED_MINOR = $(ROCKSDB_MINOR)
620 SHARED_PATCH = $(ROCKSDB_PATCH)
621 SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
622 ifeq ($(PLATFORM), OS_MACOSX)
623 SHARED_OSX = $(LIBNAME).$(SHARED_MAJOR)
624 SHARED2 = $(SHARED_OSX).$(PLATFORM_SHARED_EXT)
625 SHARED3 = $(SHARED_OSX).$(SHARED_MINOR).$(PLATFORM_SHARED_EXT)
626 SHARED4 = $(SHARED_OSX).$(SHARED_MINOR).$(SHARED_PATCH).$(PLATFORM_SHARED_EXT)
627 else
628 SHARED2 = $(SHARED1).$(SHARED_MAJOR)
629 SHARED3 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR)
630 SHARED4 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR).$(SHARED_PATCH)
631 endif
632 SHARED = $(SHARED1) $(SHARED2) $(SHARED3) $(SHARED4)
633 $(SHARED1): $(SHARED4)
634 ln -fs $(SHARED4) $(SHARED1)
635 $(SHARED2): $(SHARED4)
636 ln -fs $(SHARED4) $(SHARED2)
637 $(SHARED3): $(SHARED4)
638 ln -fs $(SHARED4) $(SHARED3)
639 endif
640 ifeq ($(HAVE_POWER8),1)
641 SHARED_C_OBJECTS = $(LIB_SOURCES_C:.c=.o)
642 SHARED_ASM_OBJECTS = $(LIB_SOURCES_ASM:.S=.o)
643 SHARED_C_LIBOBJECTS = $(patsubst %.o,shared-objects/%.o,$(SHARED_C_OBJECTS))
644 SHARED_ASM_LIBOBJECTS = $(patsubst %.o,shared-objects/%.o,$(SHARED_ASM_OBJECTS))
645 shared_libobjects = $(patsubst %,shared-objects/%,$(LIB_CC_OBJECTS))
646 else
647 shared_libobjects = $(patsubst %,shared-objects/%,$(LIBOBJECTS))
648 endif
649
650 CLEAN_FILES += shared-objects
651 shared_all_libobjects = $(shared_libobjects)
652
653 ifeq ($(HAVE_POWER8),1)
654 shared-ppc-objects = $(SHARED_C_LIBOBJECTS) $(SHARED_ASM_LIBOBJECTS)
655
656 shared-objects/util/crc32c_ppc.o: util/crc32c_ppc.c
657 $(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
658
659 shared-objects/util/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S
660 $(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
661 endif
662 $(shared_libobjects): shared-objects/%.o: %.cc
663 $(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) -c $< -o $@
664
665 ifeq ($(HAVE_POWER8),1)
666 shared_all_libobjects = $(shared_libobjects) $(shared-ppc-objects)
667 endif
668 $(SHARED4): $(shared_all_libobjects)
669 $(CXX) $(PLATFORM_SHARED_LDFLAGS)$(SHARED3) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) $(shared_all_libobjects) $(LDFLAGS) -o $@
670
671 endif # PLATFORM_SHARED_EXT
672
673 .PHONY: blackbox_crash_test check clean coverage crash_test ldb_tests package \
674 release tags tags0 valgrind_check whitebox_crash_test format static_lib shared_lib all \
675 dbg rocksdbjavastatic rocksdbjava install install-static install-shared uninstall \
676 analyze tools tools_lib
677
678
679 all: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(TESTS)
680
681 all_but_some_tests: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(SUBSET)
682
683 static_lib: $(LIBRARY)
684
685 shared_lib: $(SHARED)
686
687 tools: $(TOOLS)
688
689 tools_lib: $(TOOLS_LIBRARY)
690
691 test_libs: $(TEST_LIBS)
692
693 dbg: $(LIBRARY) $(BENCHMARKS) tools $(TESTS)
694
695 # creates static library and programs
696 release:
697 $(MAKE) clean
698 DEBUG_LEVEL=0 $(MAKE) static_lib tools db_bench
699
700 coverage:
701 $(MAKE) clean
702 COVERAGEFLAGS="-fprofile-arcs -ftest-coverage" LDFLAGS+="-lgcov" $(MAKE) J=1 all check
703 cd coverage && ./coverage_test.sh
704 # Delete intermediate files
705 $(FIND) . -type f -regex ".*\.\(\(gcda\)\|\(gcno\)\)" -exec rm {} \;
706
707 ifneq (,$(filter check parallel_check,$(MAKECMDGOALS)),)
708 # Use /dev/shm if it has the sticky bit set (otherwise, /tmp),
709 # and create a randomly-named rocksdb.XXXX directory therein.
710 # We'll use that directory in the "make check" rules.
711 ifeq ($(TMPD),)
712 TMPDIR := $(shell echo $${TMPDIR:-/tmp})
713 TMPD := $(shell f=/dev/shm; test -k $$f || f=$(TMPDIR); \
714 perl -le 'use File::Temp "tempdir";' \
715 -e 'print tempdir("'$$f'/rocksdb.XXXX", CLEANUP => 0)')
716 endif
717 endif
718
719 # Run all tests in parallel, accumulating per-test logs in t/log-*.
720 #
721 # Each t/run-* file is a tiny generated bourne shell script that invokes one of
722 # sub-tests. Why use a file for this? Because that makes the invocation of
723 # parallel below simpler, which in turn makes the parsing of parallel's
724 # LOG simpler (the latter is for live monitoring as parallel
725 # tests run).
726 #
727 # Test names are extracted by running tests with --gtest_list_tests.
728 # This filter removes the "#"-introduced comments, and expands to
729 # fully-qualified names by changing input like this:
730 #
731 # DBTest.
732 # Empty
733 # WriteEmptyBatch
734 # MultiThreaded/MultiThreadedDBTest.
735 # MultiThreaded/0 # GetParam() = 0
736 # MultiThreaded/1 # GetParam() = 1
737 #
738 # into this:
739 #
740 # DBTest.Empty
741 # DBTest.WriteEmptyBatch
742 # MultiThreaded/MultiThreadedDBTest.MultiThreaded/0
743 # MultiThreaded/MultiThreadedDBTest.MultiThreaded/1
744 #
745
746 parallel_tests = $(patsubst %,parallel_%,$(PARALLEL_TEST))
747 .PHONY: gen_parallel_tests $(parallel_tests)
748 $(parallel_tests): $(PARALLEL_TEST)
749 $(AM_V_at)TEST_BINARY=$(patsubst parallel_%,%,$@); \
750 TEST_NAMES=` \
751 ./$$TEST_BINARY --gtest_list_tests \
752 | perl -n \
753 -e 's/ *\#.*//;' \
754 -e '/^(\s*)(\S+)/; !$$1 and do {$$p=$$2; break};' \
755 -e 'print qq! $$p$$2!'`; \
756 for TEST_NAME in $$TEST_NAMES; do \
757 TEST_SCRIPT=t/run-$$TEST_BINARY-$${TEST_NAME//\//-}; \
758 echo " GEN " $$TEST_SCRIPT; \
759 printf '%s\n' \
760 '#!/bin/sh' \
761 "d=\$(TMPD)$$TEST_SCRIPT" \
762 'mkdir -p $$d' \
763 "TEST_TMPDIR=\$$d $(DRIVER) ./$$TEST_BINARY --gtest_filter=$$TEST_NAME" \
764 > $$TEST_SCRIPT; \
765 chmod a=rx $$TEST_SCRIPT; \
766 done
767
768 gen_parallel_tests:
769 $(AM_V_at)mkdir -p t
770 $(AM_V_at)rm -f t/run-*
771 $(MAKE) $(parallel_tests)
772
773 # Reorder input lines (which are one per test) so that the
774 # longest-running tests appear first in the output.
775 # Do this by prefixing each selected name with its duration,
776 # sort the resulting names, and remove the leading numbers.
777 # FIXME: the "100" we prepend is a fake time, for now.
778 # FIXME: squirrel away timings from each run and use them
779 # (when present) on subsequent runs to order these tests.
780 #
781 # Without this reordering, these two tests would happen to start only
782 # after almost all other tests had completed, thus adding 100 seconds
783 # to the duration of parallel "make check". That's the difference
784 # between 4 minutes (old) and 2m20s (new).
785 #
786 # 152.120 PASS t/DBTest.FileCreationRandomFailure
787 # 107.816 PASS t/DBTest.EncodeDecompressedBlockSizeTest
788 #
789 slow_test_regexp = \
790 ^.*SnapshotConcurrentAccessTest.*$$|^t/run-table_test-HarnessTest.Randomized$$|^t/run-db_test-.*(?:FileCreationRandomFailure|EncodeDecompressedBlockSizeTest)$$|^.*RecoverFromCorruptedWALWithoutFlush$$
791 prioritize_long_running_tests = \
792 perl -pe 's,($(slow_test_regexp)),100 $$1,' \
793 | sort -k1,1gr \
794 | sed 's/^[.0-9]* //'
795
796 # "make check" uses
797 # Run with "make J=1 check" to disable parallelism in "make check".
798 # Run with "make J=200% check" to run two parallel jobs per core.
799 # The default is to run one job per core (J=100%).
800 # See "man parallel" for its "-j ..." option.
801 J ?= 100%
802
803 # Use this regexp to select the subset of tests whose names match.
804 tests-regexp = .
805
806 t_run = $(wildcard t/run-*)
807 .PHONY: check_0
808 check_0:
809 $(AM_V_GEN)export TEST_TMPDIR=$(TMPD); \
810 printf '%s\n' '' \
811 'To monitor subtest <duration,pass/fail,name>,' \
812 ' run "make watch-log" in a separate window' ''; \
813 test -t 1 && eta=--eta || eta=; \
814 { \
815 printf './%s\n' $(filter-out $(PARALLEL_TEST),$(TESTS)); \
816 printf '%s\n' $(t_run); \
817 } \
818 | $(prioritize_long_running_tests) \
819 | grep -E '$(tests-regexp)' \
820 | build_tools/gnu_parallel -j$(J) --plain --joblog=LOG $$eta --gnu '{} >& t/log-{/}'
821
822 valgrind-blacklist-regexp = InlineSkipTest.ConcurrentInsert|TransactionStressTest.DeadlockStress|DBCompactionTest.SuggestCompactRangeNoTwoLevel0Compactions|BackupableDBTest.RateLimiting|DBTest.CloseSpeedup|DBTest.ThreadStatusFlush|DBTest.RateLimitingTest|DBTest.EncodeDecompressedBlockSizeTest|FaultInjectionTest.UninstalledCompaction|HarnessTest.Randomized|ExternalSSTFileTest.CompactDuringAddFileRandom|ExternalSSTFileTest.IngestFileWithGlobalSeqnoRandomized|MySQLStyleTransactionTest.TransactionStressTest
823
824 .PHONY: valgrind_check_0
825 valgrind_check_0:
826 $(AM_V_GEN)export TEST_TMPDIR=$(TMPD); \
827 printf '%s\n' '' \
828 'To monitor subtest <duration,pass/fail,name>,' \
829 ' run "make watch-log" in a separate window' ''; \
830 test -t 1 && eta=--eta || eta=; \
831 { \
832 printf './%s\n' $(filter-out $(PARALLEL_TEST) %skiplist_test options_settable_test, $(TESTS)); \
833 printf '%s\n' $(t_run); \
834 } \
835 | $(prioritize_long_running_tests) \
836 | grep -E '$(tests-regexp)' \
837 | grep -E -v '$(valgrind-blacklist-regexp)' \
838 | build_tools/gnu_parallel -j$(J) --plain --joblog=LOG $$eta --gnu \
839 '(if [[ "{}" == "./"* ]] ; then $(DRIVER) {}; else {}; fi) ' \
840 '>& t/valgrind_log-{/}'
841
842 CLEAN_FILES += t LOG $(TMPD)
843
844 # When running parallel "make check", you can monitor its progress
845 # from another window.
846 # Run "make watch_LOG" to show the duration,PASS/FAIL,name of parallel
847 # tests as they are being run. We sort them so that longer-running ones
848 # appear at the top of the list and any failing tests remain at the top
849 # regardless of their duration. As with any use of "watch", hit ^C to
850 # interrupt.
851 watch-log:
852 $(WATCH) --interval=0 'sort -k7,7nr -k4,4gr LOG|$(quoted_perl_command)'
853
854 # If J != 1 and GNU parallel is installed, run the tests in parallel,
855 # via the check_0 rule above. Otherwise, run them sequentially.
856 check: all
857 $(MAKE) gen_parallel_tests
858 $(AM_V_GEN)if test "$(J)" != 1 \
859 && (build_tools/gnu_parallel --gnu --help 2>/dev/null) | \
860 grep -q 'GNU Parallel'; \
861 then \
862 $(MAKE) T="$$t" TMPD=$(TMPD) check_0; \
863 else \
864 for t in $(TESTS); do \
865 echo "===== Running $$t"; ./$$t || exit 1; done; \
866 fi
867 rm -rf $(TMPD)
868 ifneq ($(PLATFORM), OS_AIX)
869 ifeq ($(filter -DROCKSDB_LITE,$(OPT)),)
870 python tools/ldb_test.py
871 sh tools/rocksdb_dump_test.sh
872 endif
873 endif
874
875 # TODO add ldb_tests
876 check_some: $(SUBSET)
877 for t in $(SUBSET); do echo "===== Running $$t"; ./$$t || exit 1; done
878
879 .PHONY: ldb_tests
880 ldb_tests: ldb
881 python tools/ldb_test.py
882
883 crash_test: whitebox_crash_test blackbox_crash_test
884
885 blackbox_crash_test: db_stress
886 python -u tools/db_crashtest.py --simple blackbox $(CRASH_TEST_EXT_ARGS)
887 python -u tools/db_crashtest.py blackbox $(CRASH_TEST_EXT_ARGS)
888
889 ifeq ($(CRASH_TEST_KILL_ODD),)
890 CRASH_TEST_KILL_ODD=888887
891 endif
892
893 whitebox_crash_test: db_stress
894 python -u tools/db_crashtest.py --simple whitebox --random_kill_odd \
895 $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
896 python -u tools/db_crashtest.py whitebox --random_kill_odd \
897 $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
898
899 asan_check:
900 $(MAKE) clean
901 COMPILE_WITH_ASAN=1 $(MAKE) check -j32
902 $(MAKE) clean
903
904 asan_crash_test:
905 $(MAKE) clean
906 COMPILE_WITH_ASAN=1 $(MAKE) crash_test
907 $(MAKE) clean
908
909 ubsan_check:
910 $(MAKE) clean
911 COMPILE_WITH_UBSAN=1 $(MAKE) check -j32
912 $(MAKE) clean
913
914 ubsan_crash_test:
915 $(MAKE) clean
916 COMPILE_WITH_UBSAN=1 $(MAKE) crash_test
917 $(MAKE) clean
918
919 valgrind_test:
920 ROCKSDB_VALGRIND_RUN=1 DISABLE_JEMALLOC=1 $(MAKE) valgrind_check
921
922 valgrind_check: $(TESTS)
923 $(MAKE) DRIVER="$(VALGRIND_VER) $(VALGRIND_OPTS)" gen_parallel_tests
924 $(AM_V_GEN)if test "$(J)" != 1 \
925 && (build_tools/gnu_parallel --gnu --help 2>/dev/null) | \
926 grep -q 'GNU Parallel'; \
927 then \
928 $(MAKE) TMPD=$(TMPD) \
929 DRIVER="$(VALGRIND_VER) $(VALGRIND_OPTS)" valgrind_check_0; \
930 else \
931 for t in $(filter-out %skiplist_test options_settable_test,$(TESTS)); do \
932 $(VALGRIND_VER) $(VALGRIND_OPTS) ./$$t; \
933 ret_code=$$?; \
934 if [ $$ret_code -ne 0 ]; then \
935 exit $$ret_code; \
936 fi; \
937 done; \
938 fi
939
940
941 ifneq ($(PAR_TEST),)
942 parloop:
943 ret_bad=0; \
944 for t in $(PAR_TEST); do \
945 echo "===== Running $$t in parallel $(NUM_PAR)";\
946 if [ $(db_test) -eq 1 ]; then \
947 seq $(J) | v="$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{}; export TEST_TMPDIR=$$s;' \
948 'timeout 2m ./db_test --gtest_filter=$$v >> $$s/log-{} 2>1'; \
949 else\
950 seq $(J) | v="./$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{};' \
951 'export TEST_TMPDIR=$$s; timeout 10m $$v >> $$s/log-{} 2>1'; \
952 fi; \
953 ret_code=$$?; \
954 if [ $$ret_code -ne 0 ]; then \
955 ret_bad=$$ret_code; \
956 echo $$t exited with $$ret_code; \
957 fi; \
958 done; \
959 exit $$ret_bad;
960 endif
961
962 test_names = \
963 ./db_test --gtest_list_tests \
964 | perl -n \
965 -e 's/ *\#.*//;' \
966 -e '/^(\s*)(\S+)/; !$$1 and do {$$p=$$2; break};' \
967 -e 'print qq! $$p$$2!'
968
969 parallel_check: $(TESTS)
970 $(AM_V_GEN)if test "$(J)" > 1 \
971 && (build_tools/gnu_parallel --gnu --help 2>/dev/null) | \
972 grep -q 'GNU Parallel'; \
973 then \
974 echo Running in parallel $(J); \
975 else \
976 echo "Need to have GNU Parallel and J > 1"; exit 1; \
977 fi; \
978 ret_bad=0; \
979 echo $(J);\
980 echo Test Dir: $(TMPD); \
981 seq $(J) | build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{}; rm -rf $$s; mkdir $$s'; \
982 $(MAKE) PAR_TEST="$(shell $(test_names))" TMPD=$(TMPD) \
983 J=$(J) db_test=1 parloop; \
984 $(MAKE) PAR_TEST="$(filter-out db_test, $(TESTS))" \
985 TMPD=$(TMPD) J=$(J) db_test=0 parloop;
986
987 analyze: clean
988 $(CLANG_SCAN_BUILD) --use-analyzer=$(CLANG_ANALYZER) \
989 --use-c++=$(CXX) --use-cc=$(CC) --status-bugs \
990 -o $(CURDIR)/scan_build_report \
991 $(MAKE) dbg
992
993 CLEAN_FILES += unity.cc
994 unity.cc: Makefile
995 rm -f $@ $@-t
996 for source_file in $(LIB_SOURCES); do \
997 echo "#include \"$$source_file\"" >> $@-t; \
998 done
999 chmod a=r $@-t
1000 mv $@-t $@
1001
1002 unity.a: unity.o
1003 $(AM_V_AR)rm -f $@
1004 $(AM_V_at)$(AR) $(ARFLAGS) $@ unity.o
1005
1006
1007 TOOLLIBOBJECTS = $(TOOL_LIB_SOURCES:.cc=.o)
1008 # try compiling db_test with unity
1009 unity_test: db/db_test.o db/db_test_util.o $(TESTHARNESS) $(TOOLLIBOBJECTS) unity.a
1010 $(AM_LINK)
1011 ./unity_test
1012
1013 rocksdb.h rocksdb.cc: build_tools/amalgamate.py Makefile $(LIB_SOURCES) unity.cc
1014 build_tools/amalgamate.py -I. -i./include unity.cc -x include/rocksdb/c.h -H rocksdb.h -o rocksdb.cc
1015
1016 clean:
1017 rm -f $(BENCHMARKS) $(TOOLS) $(TESTS) $(LIBRARY) $(SHARED)
1018 rm -rf $(CLEAN_FILES) ios-x86 ios-arm scan_build_report
1019 $(FIND) . -name "*.[oda]" -exec rm -f {} \;
1020 $(FIND) . -type f -regex ".*\.\(\(gcda\)\|\(gcno\)\)" -exec rm {} \;
1021 rm -rf bzip2* snappy* zlib* lz4* zstd*
1022 cd java; $(MAKE) clean
1023
1024 tags:
1025 ctags -R .
1026 cscope -b `$(FIND) . -name '*.cc'` `$(FIND) . -name '*.h'` `$(FIND) . -name '*.c'`
1027 ctags -e -R -o etags *
1028
1029 tags0:
1030 ctags -R .
1031 cscope -b `$(FIND) . -name '*.cc' -and ! -name '*_test.cc'` \
1032 `$(FIND) . -name '*.c' -and ! -name '*_test.c'` \
1033 `$(FIND) . -name '*.h' -and ! -name '*_test.h'`
1034 ctags -e -R -o etags *
1035
1036 format:
1037 build_tools/format-diff.sh
1038
1039 package:
1040 bash build_tools/make_package.sh $(SHARED_MAJOR).$(SHARED_MINOR)
1041
1042 # ---------------------------------------------------------------------------
1043 # Unit tests and tools
1044 # ---------------------------------------------------------------------------
1045 $(LIBRARY): $(LIBOBJECTS)
1046 $(AM_V_AR)rm -f $@
1047 $(AM_V_at)$(AR) $(ARFLAGS) $@ $(LIBOBJECTS)
1048
1049 $(TOOLS_LIBRARY): $(BENCH_LIB_SOURCES:.cc=.o) $(TOOL_LIB_SOURCES:.cc=.o) $(LIB_SOURCES:.cc=.o) $(TESTUTIL) $(ANALYZER_LIB_SOURCES:.cc=.o)
1050 $(AM_V_AR)rm -f $@
1051 $(AM_V_at)$(AR) $(ARFLAGS) $@ $^
1052
1053 librocksdb_env_basic_test.a: env/env_basic_test.o $(LIBOBJECTS) $(TESTHARNESS)
1054 $(AM_V_AR)rm -f $@
1055 $(AM_V_at)$(AR) $(ARFLAGS) $@ $^
1056
1057 db_bench: tools/db_bench.o $(BENCHTOOLOBJECTS)
1058 $(AM_LINK)
1059
1060 trace_analyzer: tools/trace_analyzer.o $(ANALYZETOOLOBJECTS) $(LIBOBJECTS)
1061 $(AM_LINK)
1062
1063 cache_bench: cache/cache_bench.o $(LIBOBJECTS) $(TESTUTIL)
1064 $(AM_LINK)
1065
1066 persistent_cache_bench: utilities/persistent_cache/persistent_cache_bench.o $(LIBOBJECTS) $(TESTUTIL)
1067 $(AM_LINK)
1068
1069 memtablerep_bench: memtable/memtablerep_bench.o $(LIBOBJECTS) $(TESTUTIL)
1070 $(AM_LINK)
1071
1072 db_stress: tools/db_stress.o $(LIBOBJECTS) $(TESTUTIL)
1073 $(AM_LINK)
1074
1075 write_stress: tools/write_stress.o $(LIBOBJECTS) $(TESTUTIL)
1076 $(AM_LINK)
1077
1078 db_sanity_test: tools/db_sanity_test.o $(LIBOBJECTS) $(TESTUTIL)
1079 $(AM_LINK)
1080
1081 db_repl_stress: tools/db_repl_stress.o $(LIBOBJECTS) $(TESTUTIL)
1082 $(AM_LINK)
1083
1084 arena_test: util/arena_test.o $(LIBOBJECTS) $(TESTHARNESS)
1085 $(AM_LINK)
1086
1087 autovector_test: util/autovector_test.o $(LIBOBJECTS) $(TESTHARNESS)
1088 $(AM_LINK)
1089
1090 column_family_test: db/column_family_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1091 $(AM_LINK)
1092
1093 table_properties_collector_test: db/table_properties_collector_test.o $(LIBOBJECTS) $(TESTHARNESS)
1094 $(AM_LINK)
1095
1096 bloom_test: util/bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
1097 $(AM_LINK)
1098
1099 dynamic_bloom_test: util/dynamic_bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
1100 $(AM_LINK)
1101
1102 c_test: db/c_test.o $(LIBOBJECTS) $(TESTHARNESS)
1103 $(AM_LINK)
1104
1105 cache_test: cache/cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
1106 $(AM_LINK)
1107
1108 coding_test: util/coding_test.o $(LIBOBJECTS) $(TESTHARNESS)
1109 $(AM_LINK)
1110
1111 hash_test: util/hash_test.o $(LIBOBJECTS) $(TESTHARNESS)
1112 $(AM_LINK)
1113
1114 option_change_migration_test: utilities/option_change_migration/option_change_migration_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1115 $(AM_LINK)
1116
1117 stringappend_test: utilities/merge_operators/string_append/stringappend_test.o $(LIBOBJECTS) $(TESTHARNESS)
1118 $(AM_LINK)
1119
1120 cassandra_format_test: utilities/cassandra/cassandra_format_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
1121 $(AM_LINK)
1122
1123 cassandra_functional_test: utilities/cassandra/cassandra_functional_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
1124 $(AM_LINK)
1125
1126 cassandra_row_merge_test: utilities/cassandra/cassandra_row_merge_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
1127 $(AM_LINK)
1128
1129 cassandra_serialize_test: utilities/cassandra/cassandra_serialize_test.o $(LIBOBJECTS) $(TESTHARNESS)
1130 $(AM_LINK)
1131
1132 redis_test: utilities/redis/redis_lists_test.o $(LIBOBJECTS) $(TESTHARNESS)
1133 $(AM_LINK)
1134
1135 hash_table_test: utilities/persistent_cache/hash_table_test.o $(LIBOBJECTS) $(TESTHARNESS)
1136 $(AM_LINK)
1137
1138 histogram_test: monitoring/histogram_test.o $(LIBOBJECTS) $(TESTHARNESS)
1139 $(AM_LINK)
1140
1141 thread_local_test: util/thread_local_test.o $(LIBOBJECTS) $(TESTHARNESS)
1142 $(AM_LINK)
1143
1144 corruption_test: db/corruption_test.o $(LIBOBJECTS) $(TESTHARNESS)
1145 $(AM_LINK)
1146
1147 crc32c_test: util/crc32c_test.o $(LIBOBJECTS) $(TESTHARNESS)
1148 $(AM_LINK)
1149
1150 slice_transform_test: util/slice_transform_test.o $(LIBOBJECTS) $(TESTHARNESS)
1151 $(AM_LINK)
1152
1153 db_basic_test: db/db_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1154 $(AM_LINK)
1155
1156 db_encryption_test: db/db_encryption_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1157 $(AM_LINK)
1158
1159 db_test: db/db_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1160 $(AM_LINK)
1161
1162 db_test2: db/db_test2.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1163 $(AM_LINK)
1164
1165 db_blob_index_test: db/db_blob_index_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1166 $(AM_LINK)
1167
1168 db_block_cache_test: db/db_block_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1169 $(AM_LINK)
1170
1171 db_bloom_filter_test: db/db_bloom_filter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1172 $(AM_LINK)
1173
1174 db_log_iter_test: db/db_log_iter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1175 $(AM_LINK)
1176
1177 db_compaction_filter_test: db/db_compaction_filter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1178 $(AM_LINK)
1179
1180 db_compaction_test: db/db_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1181 $(AM_LINK)
1182
1183 db_dynamic_level_test: db/db_dynamic_level_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1184 $(AM_LINK)
1185
1186 db_flush_test: db/db_flush_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1187 $(AM_LINK)
1188
1189 db_inplace_update_test: db/db_inplace_update_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1190 $(AM_LINK)
1191
1192 db_iterator_test: db/db_iterator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1193 $(AM_LINK)
1194
1195 db_memtable_test: db/db_memtable_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1196 $(AM_LINK)
1197
1198 db_merge_operator_test: db/db_merge_operator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1199 $(AM_LINK)
1200
1201 db_options_test: db/db_options_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1202 $(AM_LINK)
1203
1204 db_range_del_test: db/db_range_del_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1205 $(AM_LINK)
1206
1207 db_sst_test: db/db_sst_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1208 $(AM_LINK)
1209
1210 db_statistics_test: db/db_statistics_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1211 $(AM_LINK)
1212
1213 db_write_test: db/db_write_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1214 $(AM_LINK)
1215
1216 error_handler_test: db/error_handler_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1217 $(AM_LINK)
1218
1219 external_sst_file_basic_test: db/external_sst_file_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1220 $(AM_LINK)
1221
1222 external_sst_file_test: db/external_sst_file_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1223 $(AM_LINK)
1224
1225 db_tailing_iter_test: db/db_tailing_iter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1226 $(AM_LINK)
1227
1228 db_iter_test: db/db_iter_test.o $(LIBOBJECTS) $(TESTHARNESS)
1229 $(AM_LINK)
1230
1231 db_iter_stress_test: db/db_iter_stress_test.o $(LIBOBJECTS) $(TESTHARNESS)
1232 $(AM_LINK)
1233
1234 db_universal_compaction_test: db/db_universal_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1235 $(AM_LINK)
1236
1237 db_wal_test: db/db_wal_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1238 $(AM_LINK)
1239
1240 db_io_failure_test: db/db_io_failure_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1241 $(AM_LINK)
1242
1243 db_properties_test: db/db_properties_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1244 $(AM_LINK)
1245
1246 db_table_properties_test: db/db_table_properties_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1247 $(AM_LINK)
1248
1249 log_write_bench: util/log_write_bench.o $(LIBOBJECTS) $(TESTHARNESS)
1250 $(AM_LINK) $(PROFILING_FLAGS)
1251
1252 plain_table_db_test: db/plain_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1253 $(AM_LINK)
1254
1255 comparator_db_test: db/comparator_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1256 $(AM_LINK)
1257
1258 table_reader_bench: table/table_reader_bench.o $(LIBOBJECTS) $(TESTHARNESS)
1259 $(AM_LINK) $(PROFILING_FLAGS)
1260
1261 perf_context_test: db/perf_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
1262 $(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)
1263
1264 prefix_test: db/prefix_test.o $(LIBOBJECTS) $(TESTHARNESS)
1265 $(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)
1266
1267 backupable_db_test: utilities/backupable/backupable_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1268 $(AM_LINK)
1269
1270 checkpoint_test: utilities/checkpoint/checkpoint_test.o $(LIBOBJECTS) $(TESTHARNESS)
1271 $(AM_LINK)
1272
1273 document_db_test: utilities/document/document_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1274 $(AM_LINK)
1275
1276 json_document_test: utilities/document/json_document_test.o $(LIBOBJECTS) $(TESTHARNESS)
1277 $(AM_LINK)
1278
1279 sim_cache_test: utilities/simulator_cache/sim_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1280 $(AM_LINK)
1281
1282 spatial_db_test: utilities/spatialdb/spatial_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1283 $(AM_LINK)
1284
1285 env_mirror_test: utilities/env_mirror_test.o $(LIBOBJECTS) $(TESTHARNESS)
1286 $(AM_LINK)
1287
1288 env_timed_test: utilities/env_timed_test.o $(LIBOBJECTS) $(TESTHARNESS)
1289 $(AM_LINK)
1290
1291 ifdef ROCKSDB_USE_LIBRADOS
1292 env_librados_test: utilities/env_librados_test.o $(LIBOBJECTS) $(TESTHARNESS)
1293 $(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(COVERAGEFLAGS)
1294 endif
1295
1296 object_registry_test: utilities/object_registry_test.o $(LIBOBJECTS) $(TESTHARNESS)
1297 $(AM_LINK)
1298
1299 ttl_test: utilities/ttl/ttl_test.o $(LIBOBJECTS) $(TESTHARNESS)
1300 $(AM_LINK)
1301
1302 date_tiered_test: utilities/date_tiered/date_tiered_test.o $(LIBOBJECTS) $(TESTHARNESS)
1303 $(AM_LINK)
1304
1305 write_batch_with_index_test: utilities/write_batch_with_index/write_batch_with_index_test.o $(LIBOBJECTS) $(TESTHARNESS)
1306 $(AM_LINK)
1307
1308 flush_job_test: db/flush_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
1309 $(AM_LINK)
1310
1311 compaction_iterator_test: db/compaction_iterator_test.o $(LIBOBJECTS) $(TESTHARNESS)
1312 $(AM_LINK)
1313
1314 compaction_job_test: db/compaction_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
1315 $(AM_LINK)
1316
1317 compaction_job_stats_test: db/compaction_job_stats_test.o $(LIBOBJECTS) $(TESTHARNESS)
1318 $(AM_LINK)
1319
1320 compact_on_deletion_collector_test: utilities/table_properties_collectors/compact_on_deletion_collector_test.o $(LIBOBJECTS) $(TESTHARNESS)
1321 $(AM_LINK)
1322
1323 wal_manager_test: db/wal_manager_test.o $(LIBOBJECTS) $(TESTHARNESS)
1324 $(AM_LINK)
1325
1326 dbformat_test: db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS)
1327 $(AM_LINK)
1328
1329 env_basic_test: env/env_basic_test.o $(LIBOBJECTS) $(TESTHARNESS)
1330 $(AM_LINK)
1331
1332 env_test: env/env_test.o $(LIBOBJECTS) $(TESTHARNESS)
1333 $(AM_LINK)
1334
1335 fault_injection_test: db/fault_injection_test.o $(LIBOBJECTS) $(TESTHARNESS)
1336 $(AM_LINK)
1337
1338 rate_limiter_test: util/rate_limiter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1339 $(AM_LINK)
1340
1341 delete_scheduler_test: util/delete_scheduler_test.o $(LIBOBJECTS) $(TESTHARNESS)
1342 $(AM_LINK)
1343
1344 filename_test: db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS)
1345 $(AM_LINK)
1346
1347 file_reader_writer_test: util/file_reader_writer_test.o $(LIBOBJECTS) $(TESTHARNESS)
1348 $(AM_LINK)
1349
1350 block_based_filter_block_test: table/block_based_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1351 $(AM_LINK)
1352
1353 full_filter_block_test: table/full_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1354 $(AM_LINK)
1355
1356 partitioned_filter_block_test: table/partitioned_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1357 $(AM_LINK)
1358
1359 log_test: db/log_test.o $(LIBOBJECTS) $(TESTHARNESS)
1360 $(AM_LINK)
1361
1362 cleanable_test: table/cleanable_test.o $(LIBOBJECTS) $(TESTHARNESS)
1363 $(AM_LINK)
1364
1365 table_test: table/table_test.o $(LIBOBJECTS) $(TESTHARNESS)
1366 $(AM_LINK)
1367
1368 block_test: table/block_test.o $(LIBOBJECTS) $(TESTHARNESS)
1369 $(AM_LINK)
1370
1371 data_block_hash_index_test: table/data_block_hash_index_test.o $(LIBOBJECTS) $(TESTHARNESS)
1372 $(AM_LINK)
1373
1374 inlineskiplist_test: memtable/inlineskiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
1375 $(AM_LINK)
1376
1377 skiplist_test: memtable/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
1378 $(AM_LINK)
1379
1380 write_buffer_manager_test: memtable/write_buffer_manager_test.o $(LIBOBJECTS) $(TESTHARNESS)
1381 $(AM_LINK)
1382
1383 version_edit_test: db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS)
1384 $(AM_LINK)
1385
1386 version_set_test: db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS)
1387 $(AM_LINK)
1388
1389 compaction_picker_test: db/compaction_picker_test.o $(LIBOBJECTS) $(TESTHARNESS)
1390 $(AM_LINK)
1391
1392 version_builder_test: db/version_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
1393 $(AM_LINK)
1394
1395 file_indexer_test: db/file_indexer_test.o $(LIBOBJECTS) $(TESTHARNESS)
1396 $(AM_LINK)
1397
1398 reduce_levels_test: tools/reduce_levels_test.o $(LIBOBJECTS) $(TESTHARNESS)
1399 $(AM_LINK)
1400
1401 write_batch_test: db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS)
1402 $(AM_LINK)
1403
1404 write_controller_test: db/write_controller_test.o $(LIBOBJECTS) $(TESTHARNESS)
1405 $(AM_LINK)
1406
1407 merge_helper_test: db/merge_helper_test.o $(LIBOBJECTS) $(TESTHARNESS)
1408 $(AM_LINK)
1409
1410 memory_test: utilities/memory/memory_test.o $(LIBOBJECTS) $(TESTHARNESS)
1411 $(AM_LINK)
1412
1413 merge_test: db/merge_test.o $(LIBOBJECTS) $(TESTHARNESS)
1414 $(AM_LINK)
1415
1416 merger_test: table/merger_test.o $(LIBOBJECTS) $(TESTHARNESS)
1417 $(AM_LINK)
1418
1419 util_merge_operators_test: utilities/util_merge_operators_test.o $(LIBOBJECTS) $(TESTHARNESS)
1420 $(AM_LINK)
1421
1422 options_file_test: db/options_file_test.o $(LIBOBJECTS) $(TESTHARNESS)
1423 $(AM_LINK)
1424
1425 deletefile_test: db/deletefile_test.o $(LIBOBJECTS) $(TESTHARNESS)
1426 $(AM_LINK)
1427
1428 obsolete_files_test: db/obsolete_files_test.o $(LIBOBJECTS) $(TESTHARNESS)
1429 $(AM_LINK)
1430
1431 geodb_test: utilities/geodb/geodb_test.o $(LIBOBJECTS) $(TESTHARNESS)
1432 $(AM_LINK)
1433
1434 rocksdb_dump: tools/dump/rocksdb_dump.o $(LIBOBJECTS)
1435 $(AM_LINK)
1436
1437 rocksdb_undump: tools/dump/rocksdb_undump.o $(LIBOBJECTS)
1438 $(AM_LINK)
1439
1440 cuckoo_table_builder_test: table/cuckoo_table_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
1441 $(AM_LINK)
1442
1443 cuckoo_table_reader_test: table/cuckoo_table_reader_test.o $(LIBOBJECTS) $(TESTHARNESS)
1444 $(AM_LINK)
1445
1446 cuckoo_table_db_test: db/cuckoo_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1447 $(AM_LINK)
1448
1449 listener_test: db/listener_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1450 $(AM_LINK)
1451
1452 thread_list_test: util/thread_list_test.o $(LIBOBJECTS) $(TESTHARNESS)
1453 $(AM_LINK)
1454
1455 compact_files_test: db/compact_files_test.o $(LIBOBJECTS) $(TESTHARNESS)
1456 $(AM_LINK)
1457
1458 options_test: options/options_test.o $(LIBOBJECTS) $(TESTHARNESS)
1459 $(AM_LINK)
1460
1461 options_settable_test: options/options_settable_test.o $(LIBOBJECTS) $(TESTHARNESS)
1462 $(AM_LINK)
1463
1464 options_util_test: utilities/options/options_util_test.o $(LIBOBJECTS) $(TESTHARNESS)
1465 $(AM_LINK)
1466
1467 db_bench_tool_test: tools/db_bench_tool_test.o $(BENCHTOOLOBJECTS) $(TESTHARNESS)
1468 $(AM_LINK)
1469
1470 trace_analyzer_test: tools/trace_analyzer_test.o $(LIBOBJECTS) $(ANALYZETOOLOBJECTS) $(TESTHARNESS)
1471 $(AM_LINK)
1472
1473 event_logger_test: util/event_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
1474 $(AM_LINK)
1475
1476 timer_queue_test: util/timer_queue_test.o $(LIBOBJECTS) $(TESTHARNESS)
1477 $(AM_LINK)
1478
1479 sst_dump_test: tools/sst_dump_test.o $(LIBOBJECTS) $(TESTHARNESS)
1480 $(AM_LINK)
1481
1482 column_aware_encoding_test: utilities/column_aware_encoding_test.o $(TESTHARNESS) $(EXPOBJECTS)
1483 $(AM_LINK)
1484
1485 optimistic_transaction_test: utilities/transactions/optimistic_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
1486 $(AM_LINK)
1487
1488 mock_env_test : env/mock_env_test.o $(LIBOBJECTS) $(TESTHARNESS)
1489 $(AM_LINK)
1490
1491 manual_compaction_test: db/manual_compaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
1492 $(AM_LINK)
1493
1494 filelock_test: util/filelock_test.o $(LIBOBJECTS) $(TESTHARNESS)
1495 $(AM_LINK)
1496
1497 auto_roll_logger_test: util/auto_roll_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
1498 $(AM_LINK)
1499
1500 memtable_list_test: db/memtable_list_test.o $(LIBOBJECTS) $(TESTHARNESS)
1501 $(AM_LINK)
1502
1503 write_callback_test: db/write_callback_test.o $(LIBOBJECTS) $(TESTHARNESS)
1504 $(AM_LINK)
1505
1506 heap_test: util/heap_test.o $(GTEST)
1507 $(AM_LINK)
1508
1509 transaction_test: utilities/transactions/transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
1510 $(AM_LINK)
1511
1512 write_prepared_transaction_test: utilities/transactions/write_prepared_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
1513 $(AM_LINK)
1514
1515 write_unprepared_transaction_test: utilities/transactions/write_unprepared_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
1516 $(AM_LINK)
1517
1518 sst_dump: tools/sst_dump.o $(LIBOBJECTS)
1519 $(AM_LINK)
1520
1521 blob_dump: tools/blob_dump.o $(LIBOBJECTS)
1522 $(AM_LINK)
1523
1524 column_aware_encoding_exp: utilities/column_aware_encoding_exp.o $(EXPOBJECTS)
1525 $(AM_LINK)
1526
1527 repair_test: db/repair_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1528 $(AM_LINK)
1529
1530 ldb_cmd_test: tools/ldb_cmd_test.o $(LIBOBJECTS) $(TESTHARNESS)
1531 $(AM_LINK)
1532
1533 ldb: tools/ldb.o $(LIBOBJECTS)
1534 $(AM_LINK)
1535
1536 iostats_context_test: monitoring/iostats_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
1537 $(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)
1538
1539 persistent_cache_test: utilities/persistent_cache/persistent_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1540 $(AM_LINK)
1541
1542 statistics_test: monitoring/statistics_test.o $(LIBOBJECTS) $(TESTHARNESS)
1543 $(AM_LINK)
1544
1545 lru_cache_test: cache/lru_cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
1546 $(AM_LINK)
1547
1548 lua_test: utilities/lua/rocks_lua_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1549 $(AM_LINK)
1550
1551 range_del_aggregator_test: db/range_del_aggregator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
1552 $(AM_LINK)
1553
1554 range_del_aggregator_bench: db/range_del_aggregator_bench.o $(LIBOBJECTS) $(TESTUTIL)
1555 $(AM_LINK)
1556
1557 blob_db_test: utilities/blob_db/blob_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
1558 $(AM_LINK)
1559
1560 repeatable_thread_test: util/repeatable_thread_test.o $(LIBOBJECTS) $(TESTHARNESS)
1561 $(AM_LINK)
1562
1563 #-------------------------------------------------
1564 # make install related stuff
1565 INSTALL_PATH ?= /usr/local
1566
1567 uninstall:
1568 rm -rf $(INSTALL_PATH)/include/rocksdb \
1569 $(INSTALL_PATH)/lib/$(LIBRARY) \
1570 $(INSTALL_PATH)/lib/$(SHARED4) \
1571 $(INSTALL_PATH)/lib/$(SHARED3) \
1572 $(INSTALL_PATH)/lib/$(SHARED2) \
1573 $(INSTALL_PATH)/lib/$(SHARED1)
1574
1575 install-headers:
1576 install -d $(INSTALL_PATH)/lib
1577 for header_dir in `$(FIND) "include/rocksdb" -type d`; do \
1578 install -d $(INSTALL_PATH)/$$header_dir; \
1579 done
1580 for header in `$(FIND) "include/rocksdb" -type f -name *.h`; do \
1581 install -C -m 644 $$header $(INSTALL_PATH)/$$header; \
1582 done
1583
1584 install-static: install-headers $(LIBRARY)
1585 install -C -m 755 $(LIBRARY) $(INSTALL_PATH)/lib
1586
1587 install-shared: install-headers $(SHARED4)
1588 install -C -m 755 $(SHARED4) $(INSTALL_PATH)/lib && \
1589 ln -fs $(SHARED4) $(INSTALL_PATH)/lib/$(SHARED3) && \
1590 ln -fs $(SHARED4) $(INSTALL_PATH)/lib/$(SHARED2) && \
1591 ln -fs $(SHARED4) $(INSTALL_PATH)/lib/$(SHARED1)
1592
1593 # install static by default + install shared if it exists
1594 install: install-static
1595 [ -e $(SHARED4) ] && $(MAKE) install-shared || :
1596
1597 #-------------------------------------------------
1598
1599
1600 # ---------------------------------------------------------------------------
1601 # Jni stuff
1602 # ---------------------------------------------------------------------------
1603
1604 JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/linux
1605 ifeq ($(PLATFORM), OS_SOLARIS)
1606 ARCH := $(shell isainfo -b)
1607 else ifeq ($(PLATFORM), OS_OPENBSD)
1608 ifneq (,$(filter $(MACHINE), amd64 arm64 sparc64))
1609 ARCH := 64
1610 else
1611 ARCH := 32
1612 endif
1613 else
1614 ARCH := $(shell getconf LONG_BIT)
1615 endif
1616
1617 ifeq (,$(findstring ppc,$(MACHINE)))
1618 ROCKSDBJNILIB = librocksdbjni-linux$(ARCH).so
1619 else
1620 ROCKSDBJNILIB = librocksdbjni-linux-$(MACHINE).so
1621 endif
1622 ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-linux$(ARCH).jar
1623 ROCKSDB_JAR_ALL = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH).jar
1624 ROCKSDB_JAVADOCS_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-javadoc.jar
1625 ROCKSDB_SOURCES_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-sources.jar
1626 SHA256_CMD = sha256sum
1627
1628 ZLIB_VER ?= 1.2.11
1629 ZLIB_SHA256 ?= c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1
1630 ZLIB_DOWNLOAD_BASE ?= http://zlib.net
1631 BZIP2_VER ?= 1.0.6
1632 BZIP2_SHA256 ?= a2848f34fcd5d6cf47def00461fcb528a0484d8edef8208d6d2e2909dc61d9cd
1633 BZIP2_DOWNLOAD_BASE ?= https://web.archive.org/web/20180624184835/http://www.bzip.org
1634 SNAPPY_VER ?= 1.1.4
1635 SNAPPY_SHA256 ?= 134bfe122fd25599bb807bb8130e7ba6d9bdb851e0b16efcb83ac4f5d0b70057
1636 SNAPPY_DOWNLOAD_BASE ?= https://github.com/google/snappy/releases/download
1637 LZ4_VER ?= 1.8.0
1638 LZ4_SHA256 ?= 2ca482ea7a9bb103603108b5a7510b7592b90158c151ff50a28f1ca8389fccf6
1639 LZ4_DOWNLOAD_BASE ?= https://github.com/lz4/lz4/archive
1640 ZSTD_VER ?= 1.3.3
1641 ZSTD_SHA256 ?= a77c47153ee7de02626c5b2a097005786b71688be61e9fb81806a011f90b297b
1642 ZSTD_DOWNLOAD_BASE ?= https://github.com/facebook/zstd/archive
1643 CURL_SSL_OPTS ?= --tlsv1
1644
1645 ifeq ($(PLATFORM), OS_MACOSX)
1646 ROCKSDBJNILIB = librocksdbjni-osx.jnilib
1647 ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-osx.jar
1648 SHA256_CMD = openssl sha256 -r
1649 ifneq ("$(wildcard $(JAVA_HOME)/include/darwin)","")
1650 JAVA_INCLUDE = -I$(JAVA_HOME)/include -I $(JAVA_HOME)/include/darwin
1651 else
1652 JAVA_INCLUDE = -I/System/Library/Frameworks/JavaVM.framework/Headers/
1653 endif
1654 endif
1655 ifeq ($(PLATFORM), OS_FREEBSD)
1656 JAVA_INCLUDE = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/freebsd
1657 ROCKSDBJNILIB = librocksdbjni-freebsd$(ARCH).so
1658 ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-freebsd$(ARCH).jar
1659 endif
1660 ifeq ($(PLATFORM), OS_SOLARIS)
1661 ROCKSDBJNILIB = librocksdbjni-solaris$(ARCH).so
1662 ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-solaris$(ARCH).jar
1663 JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/solaris
1664 SHA256_CMD = digest -a sha256
1665 endif
1666 ifeq ($(PLATFORM), OS_AIX)
1667 JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/aix
1668 ROCKSDBJNILIB = librocksdbjni-aix.so
1669 EXTRACT_SOURCES = gunzip < TAR_GZ | tar xvf -
1670 SNAPPY_MAKE_TARGET = libsnappy.la
1671 endif
1672 ifeq ($(PLATFORM), OS_OPENBSD)
1673 JAVA_INCLUDE = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/openbsd
1674 ROCKSDBJNILIB = librocksdbjni-openbsd$(ARCH).so
1675 ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-openbsd$(ARCH).jar
1676 endif
1677
1678 libz.a:
1679 -rm -rf zlib-$(ZLIB_VER)
1680 curl -O -L ${ZLIB_DOWNLOAD_BASE}/zlib-$(ZLIB_VER).tar.gz
1681 ZLIB_SHA256_ACTUAL=`$(SHA256_CMD) zlib-$(ZLIB_VER).tar.gz | cut -d ' ' -f 1`; \
1682 if [ "$(ZLIB_SHA256)" != "$$ZLIB_SHA256_ACTUAL" ]; then \
1683 echo zlib-$(ZLIB_VER).tar.gz checksum mismatch, expected=\"$(ZLIB_SHA256)\" actual=\"$$ZLIB_SHA256_ACTUAL\"; \
1684 exit 1; \
1685 fi
1686 tar xvzf zlib-$(ZLIB_VER).tar.gz
1687 cd zlib-$(ZLIB_VER) && CFLAGS='-fPIC ${EXTRA_CFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' ./configure --static && $(MAKE)
1688 cp zlib-$(ZLIB_VER)/libz.a .
1689
1690 libbz2.a:
1691 -rm -rf bzip2-$(BZIP2_VER)
1692 curl -O -L ${BZIP2_DOWNLOAD_BASE}/$(BZIP2_VER)/bzip2-$(BZIP2_VER).tar.gz
1693 BZIP2_SHA256_ACTUAL=`$(SHA256_CMD) bzip2-$(BZIP2_VER).tar.gz | cut -d ' ' -f 1`; \
1694 if [ "$(BZIP2_SHA256)" != "$$BZIP2_SHA256_ACTUAL" ]; then \
1695 echo bzip2-$(BZIP2_VER).tar.gz checksum mismatch, expected=\"$(BZIP2_SHA256)\" actual=\"$$BZIP2_SHA256_ACTUAL\"; \
1696 exit 1; \
1697 fi
1698 tar xvzf bzip2-$(BZIP2_VER).tar.gz
1699 cd bzip2-$(BZIP2_VER) && $(MAKE) CFLAGS='-fPIC -O2 -g -D_FILE_OFFSET_BITS=64 ${EXTRA_CFLAGS}' AR='ar ${EXTRA_ARFLAGS}'
1700 cp bzip2-$(BZIP2_VER)/libbz2.a .
1701
1702 libsnappy.a:
1703 -rm -rf snappy-$(SNAPPY_VER)
1704 curl -O -L ${CURL_SSL_OPTS} ${SNAPPY_DOWNLOAD_BASE}/$(SNAPPY_VER)/snappy-$(SNAPPY_VER).tar.gz
1705 SNAPPY_SHA256_ACTUAL=`$(SHA256_CMD) snappy-$(SNAPPY_VER).tar.gz | cut -d ' ' -f 1`; \
1706 if [ "$(SNAPPY_SHA256)" != "$$SNAPPY_SHA256_ACTUAL" ]; then \
1707 echo snappy-$(SNAPPY_VER).tar.gz checksum mismatch, expected=\"$(SNAPPY_SHA256)\" actual=\"$$SNAPPY_SHA256_ACTUAL\"; \
1708 exit 1; \
1709 fi
1710 tar xvzf snappy-$(SNAPPY_VER).tar.gz
1711 cd snappy-$(SNAPPY_VER) && CFLAGS='${EXTRA_CFLAGS}' CXXFLAGS='${EXTRA_CXXFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' ./configure --with-pic --enable-static --disable-shared
1712 cd snappy-$(SNAPPY_VER) && $(MAKE) ${SNAPPY_MAKE_TARGET}
1713 cp snappy-$(SNAPPY_VER)/.libs/libsnappy.a .
1714
1715 liblz4.a:
1716 -rm -rf lz4-$(LZ4_VER)
1717 curl -O -L ${CURL_SSL_OPTS} ${LZ4_DOWNLOAD_BASE}/v$(LZ4_VER).tar.gz
1718 mv v$(LZ4_VER).tar.gz lz4-$(LZ4_VER).tar.gz
1719 LZ4_SHA256_ACTUAL=`$(SHA256_CMD) lz4-$(LZ4_VER).tar.gz | cut -d ' ' -f 1`; \
1720 if [ "$(LZ4_SHA256)" != "$$LZ4_SHA256_ACTUAL" ]; then \
1721 echo lz4-$(LZ4_VER).tar.gz checksum mismatch, expected=\"$(LZ4_SHA256)\" actual=\"$$LZ4_SHA256_ACTUAL\"; \
1722 exit 1; \
1723 fi
1724 tar xvzf lz4-$(LZ4_VER).tar.gz
1725 cd lz4-$(LZ4_VER)/lib && $(MAKE) CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' all
1726 cp lz4-$(LZ4_VER)/lib/liblz4.a .
1727
1728 libzstd.a:
1729 -rm -rf zstd-$(ZSTD_VER)
1730 curl -O -L ${CURL_SSL_OPTS} ${ZSTD_DOWNLOAD_BASE}/v$(ZSTD_VER).tar.gz
1731 mv v$(ZSTD_VER).tar.gz zstd-$(ZSTD_VER).tar.gz
1732 ZSTD_SHA256_ACTUAL=`$(SHA256_CMD) zstd-$(ZSTD_VER).tar.gz | cut -d ' ' -f 1`; \
1733 if [ "$(ZSTD_SHA256)" != "$$ZSTD_SHA256_ACTUAL" ]; then \
1734 echo zstd-$(ZSTD_VER).tar.gz checksum mismatch, expected=\"$(ZSTD_SHA256)\" actual=\"$$ZSTD_SHA256_ACTUAL\"; \
1735 exit 1; \
1736 fi
1737 tar xvzf zstd-$(ZSTD_VER).tar.gz
1738 cd zstd-$(ZSTD_VER)/lib && DESTDIR=. PREFIX= $(MAKE) CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' install
1739 cp zstd-$(ZSTD_VER)/lib/libzstd.a .
1740
1741 # A version of each $(LIBOBJECTS) compiled with -fPIC and a fixed set of static compression libraries
1742 java_static_libobjects = $(patsubst %,jls/%,$(LIB_CC_OBJECTS))
1743 CLEAN_FILES += jls
1744 java_static_all_libobjects = $(java_static_libobjects)
1745
1746 ifneq ($(ROCKSDB_JAVA_NO_COMPRESSION), 1)
1747 JAVA_COMPRESSIONS = libz.a libbz2.a libsnappy.a liblz4.a libzstd.a
1748 endif
1749
1750 JAVA_STATIC_FLAGS = -DZLIB -DBZIP2 -DSNAPPY -DLZ4 -DZSTD
1751 JAVA_STATIC_INCLUDES = -I./zlib-$(ZLIB_VER) -I./bzip2-$(BZIP2_VER) -I./snappy-$(SNAPPY_VER) -I./lz4-$(LZ4_VER)/lib -I./zstd-$(ZSTD_VER)/lib/include
1752
1753 ifeq ($(HAVE_POWER8),1)
1754 JAVA_STATIC_C_LIBOBJECTS = $(patsubst %.c.o,jls/%.c.o,$(LIB_SOURCES_C:.c=.o))
1755 JAVA_STATIC_ASM_LIBOBJECTS = $(patsubst %.S.o,jls/%.S.o,$(LIB_SOURCES_ASM:.S=.o))
1756
1757 java_static_ppc_libobjects = $(JAVA_STATIC_C_LIBOBJECTS) $(JAVA_STATIC_ASM_LIBOBJECTS)
1758
1759 jls/util/crc32c_ppc.o: util/crc32c_ppc.c
1760 $(AM_V_CC)$(CC) $(CFLAGS) $(JAVA_STATIC_FLAGS) $(JAVA_STATIC_INCLUDES) -c $< -o $@
1761
1762 jls/util/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S
1763 $(AM_V_CC)$(CC) $(CFLAGS) $(JAVA_STATIC_FLAGS) $(JAVA_STATIC_INCLUDES) -c $< -o $@
1764
1765 java_static_all_libobjects += $(java_static_ppc_libobjects)
1766 endif
1767
1768 $(java_static_libobjects): jls/%.o: %.cc $(JAVA_COMPRESSIONS)
1769 $(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) $(JAVA_STATIC_FLAGS) $(JAVA_STATIC_INCLUDES) -fPIC -c $< -o $@ $(COVERAGEFLAGS)
1770
1771 rocksdbjavastatic: $(java_static_all_libobjects)
1772 cd java;$(MAKE) javalib;
1773 rm -f ./java/target/$(ROCKSDBJNILIB)
1774 $(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC \
1775 -o ./java/target/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) \
1776 $(java_static_all_libobjects) $(COVERAGEFLAGS) \
1777 $(JAVA_COMPRESSIONS) $(JAVA_STATIC_LDFLAGS)
1778 cd java/target;if [ "$(DEBUG_LEVEL)" == "0" ]; then \
1779 strip $(STRIPFLAGS) $(ROCKSDBJNILIB); \
1780 fi
1781 cd java;jar -cf target/$(ROCKSDB_JAR) HISTORY*.md
1782 cd java/target;jar -uf $(ROCKSDB_JAR) $(ROCKSDBJNILIB)
1783 cd java/target/classes;jar -uf ../$(ROCKSDB_JAR) org/rocksdb/*.class org/rocksdb/util/*.class
1784 cd java/target/apidocs;jar -cf ../$(ROCKSDB_JAVADOCS_JAR) *
1785 cd java/src/main/java;jar -cf ../../../target/$(ROCKSDB_SOURCES_JAR) org
1786
1787 rocksdbjavastaticrelease: rocksdbjavastatic
1788 cd java/crossbuild && vagrant destroy -f && vagrant up linux32 && vagrant halt linux32 && vagrant up linux64 && vagrant halt linux64
1789 cd java;jar -cf target/$(ROCKSDB_JAR_ALL) HISTORY*.md
1790 cd java/target;jar -uf $(ROCKSDB_JAR_ALL) librocksdbjni-*.so librocksdbjni-*.jnilib
1791 cd java/target/classes;jar -uf ../$(ROCKSDB_JAR_ALL) org/rocksdb/*.class org/rocksdb/util/*.class
1792
1793 rocksdbjavastaticreleasedocker: rocksdbjavastatic rocksdbjavastaticdockerx86 rocksdbjavastaticdockerx86_64
1794 cd java;jar -cf target/$(ROCKSDB_JAR_ALL) HISTORY*.md
1795 cd java/target;jar -uf $(ROCKSDB_JAR_ALL) librocksdbjni-*.so librocksdbjni-*.jnilib
1796 cd java/target/classes;jar -uf ../$(ROCKSDB_JAR_ALL) org/rocksdb/*.class org/rocksdb/util/*.class
1797
1798 rocksdbjavastaticdockerx86:
1799 mkdir -p java/target
1800 DOCKER_LINUX_X86_CONTAINER=`docker ps -aqf name=rocksdb_linux_x86-be`; \
1801 if [ -z "$$DOCKER_LINUX_X86_CONTAINER" ]; then \
1802 docker container create --attach stdin --attach stdout --attach stderr --volume `pwd`:/rocksdb-host --name rocksdb_linux_x86-be evolvedbinary/rocksjava:centos6_x86-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh; \
1803 fi
1804 docker start -a rocksdb_linux_x86-be
1805
1806 rocksdbjavastaticdockerx86_64:
1807 mkdir -p java/target
1808 DOCKER_LINUX_X64_CONTAINER=`docker ps -aqf name=rocksdb_linux_x64-be`; \
1809 if [ -z "$$DOCKER_LINUX_X64_CONTAINER" ]; then \
1810 docker container create --attach stdin --attach stdout --attach stderr --volume `pwd`:/rocksdb-host --name rocksdb_linux_x64-be evolvedbinary/rocksjava:centos6_x64-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh; \
1811 fi
1812 docker start -a rocksdb_linux_x64-be
1813
1814 rocksdbjavastaticdockerppc64le:
1815 mkdir -p java/target
1816 DOCKER_LINUX_PPC64LE_CONTAINER=`docker ps -aqf name=rocksdb_linux_ppc64le-be`; \
1817 if [ -z "$$DOCKER_LINUX_PPC64LE_CONTAINER" ]; then \
1818 docker container create --attach stdin --attach stdout --attach stderr --volume `pwd`:/rocksdb-host --name rocksdb_linux_ppc64le-be evolvedbinary/rocksjava:centos7_ppc64le-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh; \
1819 fi
1820 docker start -a rocksdb_linux_ppc64le-be
1821
1822 rocksdbjavastaticpublish: rocksdbjavastaticrelease rocksdbjavastaticpublishcentral
1823
1824 rocksdbjavastaticpublishdocker: rocksdbjavastaticreleasedocker rocksdbjavastaticpublishcentral
1825
1826 rocksdbjavastaticpublishcentral:
1827 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/rocksjni.pom -Dfile=java/target/rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-javadoc.jar -Dclassifier=javadoc
1828 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/rocksjni.pom -Dfile=java/target/rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-sources.jar -Dclassifier=sources
1829 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/rocksjni.pom -Dfile=java/target/rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-linux64.jar -Dclassifier=linux64
1830 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/rocksjni.pom -Dfile=java/target/rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-linux32.jar -Dclassifier=linux32
1831 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/rocksjni.pom -Dfile=java/target/rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-osx.jar -Dclassifier=osx
1832 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/rocksjni.pom -Dfile=java/target/rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-win64.jar -Dclassifier=win64
1833 mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/rocksjni.pom -Dfile=java/target/rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH).jar
1834
1835 # A version of each $(LIBOBJECTS) compiled with -fPIC
1836 ifeq ($(HAVE_POWER8),1)
1837 JAVA_CC_OBJECTS = $(SHARED_CC_OBJECTS)
1838 JAVA_C_OBJECTS = $(SHARED_C_OBJECTS)
1839 JAVA_ASM_OBJECTS = $(SHARED_ASM_OBJECTS)
1840
1841 JAVA_C_LIBOBJECTS = $(patsubst %.c.o,jl/%.c.o,$(JAVA_C_OBJECTS))
1842 JAVA_ASM_LIBOBJECTS = $(patsubst %.S.o,jl/%.S.o,$(JAVA_ASM_OBJECTS))
1843 endif
1844
1845 java_libobjects = $(patsubst %,jl/%,$(LIB_CC_OBJECTS))
1846 CLEAN_FILES += jl
1847 java_all_libobjects = $(java_libobjects)
1848
1849 ifeq ($(HAVE_POWER8),1)
1850 java_ppc_libobjects = $(JAVA_C_LIBOBJECTS) $(JAVA_ASM_LIBOBJECTS)
1851
1852 jl/crc32c_ppc.o: util/crc32c_ppc.c
1853 $(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
1854
1855 jl/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S
1856 $(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
1857 java_all_libobjects += $(java_ppc_libobjects)
1858 endif
1859
1860 $(java_libobjects): jl/%.o: %.cc
1861 $(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) -fPIC -c $< -o $@ $(COVERAGEFLAGS)
1862
1863
1864
1865 rocksdbjava: $(java_all_libobjects)
1866 $(AM_V_GEN)cd java;$(MAKE) javalib;
1867 $(AM_V_at)rm -f ./java/target/$(ROCKSDBJNILIB)
1868 $(AM_V_at)$(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC -o ./java/target/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) $(java_all_libobjects) $(JAVA_LDFLAGS) $(COVERAGEFLAGS)
1869 $(AM_V_at)cd java;jar -cf target/$(ROCKSDB_JAR) HISTORY*.md
1870 $(AM_V_at)cd java/target;jar -uf $(ROCKSDB_JAR) $(ROCKSDBJNILIB)
1871 $(AM_V_at)cd java/target/classes;jar -uf ../$(ROCKSDB_JAR) org/rocksdb/*.class org/rocksdb/util/*.class
1872
1873 jclean:
1874 cd java;$(MAKE) clean;
1875
1876 jtest_compile: rocksdbjava
1877 cd java;$(MAKE) java_test
1878
1879 jtest_run:
1880 cd java;$(MAKE) run_test
1881
1882 jtest: rocksdbjava
1883 cd java;$(MAKE) sample;$(MAKE) test;
1884
1885 jdb_bench:
1886 cd java;$(MAKE) db_bench;
1887
1888 commit_prereq: build_tools/rocksdb-lego-determinator \
1889 build_tools/precommit_checker.py
1890 J=$(J) build_tools/precommit_checker.py unit unit_481 clang_unit release release_481 clang_release tsan asan ubsan lite unit_non_shm
1891 $(MAKE) clean && $(MAKE) jclean && $(MAKE) rocksdbjava;
1892
1893 # ---------------------------------------------------------------------------
1894 # Platform-specific compilation
1895 # ---------------------------------------------------------------------------
1896
1897 ifeq ($(PLATFORM), IOS)
1898 # For iOS, create universal object files to be used on both the simulator and
1899 # a device.
1900 PLATFORMSROOT=/Applications/Xcode.app/Contents/Developer/Platforms
1901 SIMULATORROOT=$(PLATFORMSROOT)/iPhoneSimulator.platform/Developer
1902 DEVICEROOT=$(PLATFORMSROOT)/iPhoneOS.platform/Developer
1903 IOSVERSION=$(shell defaults read $(PLATFORMSROOT)/iPhoneOS.platform/version CFBundleShortVersionString)
1904
1905 .cc.o:
1906 mkdir -p ios-x86/$(dir $@)
1907 $(CXX) $(CXXFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@
1908 mkdir -p ios-arm/$(dir $@)
1909 xcrun -sdk iphoneos $(CXX) $(CXXFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -arch armv7s -arch arm64 -c $< -o ios-arm/$@
1910 lipo ios-x86/$@ ios-arm/$@ -create -output $@
1911
1912 .c.o:
1913 mkdir -p ios-x86/$(dir $@)
1914 $(CC) $(CFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@
1915 mkdir -p ios-arm/$(dir $@)
1916 xcrun -sdk iphoneos $(CC) $(CFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -arch armv7s -arch arm64 -c $< -o ios-arm/$@
1917 lipo ios-x86/$@ ios-arm/$@ -create -output $@
1918
1919 else
1920 ifeq ($(HAVE_POWER8),1)
1921 util/crc32c_ppc.o: util/crc32c_ppc.c
1922 $(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
1923
1924 util/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S
1925 $(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
1926 endif
1927 .cc.o:
1928 $(AM_V_CC)$(CXX) $(CXXFLAGS) -c $< -o $@ $(COVERAGEFLAGS)
1929
1930 .c.o:
1931 $(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
1932 endif
1933 # ---------------------------------------------------------------------------
1934 # Source files dependencies detection
1935 # ---------------------------------------------------------------------------
1936
1937 all_sources = $(LIB_SOURCES) $(MAIN_SOURCES) $(MOCK_LIB_SOURCES) $(TOOL_LIB_SOURCES) $(BENCH_LIB_SOURCES) $(TEST_LIB_SOURCES) $(EXP_LIB_SOURCES) $(ANALYZER_LIB_SOURCES)
1938 DEPFILES = $(all_sources:.cc=.cc.d)
1939
1940 # Add proper dependency support so changing a .h file forces a .cc file to
1941 # rebuild.
1942
1943 # The .d file indicates .cc file's dependencies on .h files. We generate such
1944 # dependency by g++'s -MM option, whose output is a make dependency rule.
1945 %.cc.d: %.cc
1946 @$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
1947 -MM -MT'$@' -MT'$(<:.cc=.o)' "$<" -o '$@'
1948
1949 ifeq ($(HAVE_POWER8),1)
1950 DEPFILES_C = $(LIB_SOURCES_C:.c=.c.d)
1951 DEPFILES_ASM = $(LIB_SOURCES_ASM:.S=.S.d)
1952
1953 %.c.d: %.c
1954 @$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
1955 -MM -MT'$@' -MT'$(<:.c=.o)' "$<" -o '$@'
1956
1957 %.S.d: %.S
1958 @$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
1959 -MM -MT'$@' -MT'$(<:.S=.o)' "$<" -o '$@'
1960
1961 $(DEPFILES_C): %.c.d
1962
1963 $(DEPFILES_ASM): %.S.d
1964 depend: $(DEPFILES) $(DEPFILES_C) $(DEPFILES_ASM)
1965 else
1966 depend: $(DEPFILES)
1967 endif
1968
1969 # if the make goal is either "clean" or "format", we shouldn't
1970 # try to import the *.d files.
1971 # TODO(kailiu) The unfamiliarity of Make's conditions leads to the ugly
1972 # working solution.
1973 ifneq ($(MAKECMDGOALS),clean)
1974 ifneq ($(MAKECMDGOALS),format)
1975 ifneq ($(MAKECMDGOALS),jclean)
1976 ifneq ($(MAKECMDGOALS),jtest)
1977 ifneq ($(MAKECMDGOALS),package)
1978 ifneq ($(MAKECMDGOALS),analyze)
1979 -include $(DEPFILES)
1980 endif
1981 endif
1982 endif
1983 endif
1984 endif
1985 endif