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