mdbxmou 0.1.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +32 -0
- package/.github/workflows/publish.yml +27 -0
- package/.gitmodules +3 -0
- package/CMakeLists.txt +53 -0
- package/LICENSE +201 -0
- package/README.md +639 -0
- package/build.js +11 -0
- package/deps/libmdbx/.clang-format +3 -0
- package/deps/libmdbx/.cmake-format.yaml +3 -0
- package/deps/libmdbx/.le.ini +40 -0
- package/deps/libmdbx/CMakeLists.txt +1269 -0
- package/deps/libmdbx/COPYRIGHT +159 -0
- package/deps/libmdbx/ChangeLog.md +2786 -0
- package/deps/libmdbx/GNUmakefile +950 -0
- package/deps/libmdbx/LICENSE +177 -0
- package/deps/libmdbx/Makefile +16 -0
- package/deps/libmdbx/NOTICE +39 -0
- package/deps/libmdbx/README.md +863 -0
- package/deps/libmdbx/TODO.md +43 -0
- package/deps/libmdbx/cmake/compiler.cmake +1221 -0
- package/deps/libmdbx/cmake/profile.cmake +58 -0
- package/deps/libmdbx/cmake/utils.cmake +524 -0
- package/deps/libmdbx/conanfile.py +323 -0
- package/deps/libmdbx/docs/Doxyfile.in +2734 -0
- package/deps/libmdbx/docs/_preface.md +47 -0
- package/deps/libmdbx/docs/_restrictions.md +248 -0
- package/deps/libmdbx/docs/_starting.md +245 -0
- package/deps/libmdbx/docs/_toc.md +34 -0
- package/deps/libmdbx/docs/header.html +96 -0
- package/deps/libmdbx/example/CMakeLists.txt +6 -0
- package/deps/libmdbx/example/README.md +1 -0
- package/deps/libmdbx/example/example-mdbx.c +154 -0
- package/deps/libmdbx/example/sample-bdb.txt +77 -0
- package/deps/libmdbx/mdbx.h +6655 -0
- package/deps/libmdbx/mdbx.h++ +6428 -0
- package/deps/libmdbx/packages/buildroot/0001-package-libmdbx-new-package-library-database.patch +173 -0
- package/deps/libmdbx/src/alloy.c +54 -0
- package/deps/libmdbx/src/api-cold.c +543 -0
- package/deps/libmdbx/src/api-copy.c +912 -0
- package/deps/libmdbx/src/api-cursor.c +754 -0
- package/deps/libmdbx/src/api-dbi.c +315 -0
- package/deps/libmdbx/src/api-env.c +1434 -0
- package/deps/libmdbx/src/api-extra.c +165 -0
- package/deps/libmdbx/src/api-key-transform.c +197 -0
- package/deps/libmdbx/src/api-misc.c +286 -0
- package/deps/libmdbx/src/api-opts.c +575 -0
- package/deps/libmdbx/src/api-range-estimate.c +365 -0
- package/deps/libmdbx/src/api-txn-data.c +454 -0
- package/deps/libmdbx/src/api-txn.c +921 -0
- package/deps/libmdbx/src/atomics-ops.h +364 -0
- package/deps/libmdbx/src/atomics-types.h +97 -0
- package/deps/libmdbx/src/audit.c +109 -0
- package/deps/libmdbx/src/bits.md +34 -0
- package/deps/libmdbx/src/chk.c +1796 -0
- package/deps/libmdbx/src/cogs.c +309 -0
- package/deps/libmdbx/src/cogs.h +506 -0
- package/deps/libmdbx/src/coherency.c +170 -0
- package/deps/libmdbx/src/config.h.in +88 -0
- package/deps/libmdbx/src/cursor.c +2396 -0
- package/deps/libmdbx/src/cursor.h +391 -0
- package/deps/libmdbx/src/dbi.c +717 -0
- package/deps/libmdbx/src/dbi.h +142 -0
- package/deps/libmdbx/src/debug_begin.h +36 -0
- package/deps/libmdbx/src/debug_end.h +15 -0
- package/deps/libmdbx/src/dpl.c +486 -0
- package/deps/libmdbx/src/dpl.h +134 -0
- package/deps/libmdbx/src/dxb.c +1335 -0
- package/deps/libmdbx/src/env.c +607 -0
- package/deps/libmdbx/src/essentials.h +125 -0
- package/deps/libmdbx/src/gc-get.c +1345 -0
- package/deps/libmdbx/src/gc-put.c +970 -0
- package/deps/libmdbx/src/gc.h +40 -0
- package/deps/libmdbx/src/global.c +474 -0
- package/deps/libmdbx/src/internals.h +585 -0
- package/deps/libmdbx/src/layout-dxb.h +288 -0
- package/deps/libmdbx/src/layout-lck.h +289 -0
- package/deps/libmdbx/src/lck-posix.c +859 -0
- package/deps/libmdbx/src/lck-windows.c +607 -0
- package/deps/libmdbx/src/lck.c +174 -0
- package/deps/libmdbx/src/lck.h +110 -0
- package/deps/libmdbx/src/logging_and_debug.c +250 -0
- package/deps/libmdbx/src/logging_and_debug.h +159 -0
- package/deps/libmdbx/src/man1/mdbx_chk.1 +106 -0
- package/deps/libmdbx/src/man1/mdbx_copy.1 +95 -0
- package/deps/libmdbx/src/man1/mdbx_drop.1 +48 -0
- package/deps/libmdbx/src/man1/mdbx_dump.1 +101 -0
- package/deps/libmdbx/src/man1/mdbx_load.1 +105 -0
- package/deps/libmdbx/src/man1/mdbx_stat.1 +86 -0
- package/deps/libmdbx/src/mdbx.c++ +1837 -0
- package/deps/libmdbx/src/meta.c +656 -0
- package/deps/libmdbx/src/meta.h +168 -0
- package/deps/libmdbx/src/mvcc-readers.c +414 -0
- package/deps/libmdbx/src/node.c +365 -0
- package/deps/libmdbx/src/node.h +102 -0
- package/deps/libmdbx/src/ntdll.def +1246 -0
- package/deps/libmdbx/src/options.h +534 -0
- package/deps/libmdbx/src/osal.c +3485 -0
- package/deps/libmdbx/src/osal.h +587 -0
- package/deps/libmdbx/src/page-get.c +483 -0
- package/deps/libmdbx/src/page-iov.c +185 -0
- package/deps/libmdbx/src/page-iov.h +34 -0
- package/deps/libmdbx/src/page-ops.c +744 -0
- package/deps/libmdbx/src/page-ops.h +142 -0
- package/deps/libmdbx/src/pnl.c +236 -0
- package/deps/libmdbx/src/pnl.h +146 -0
- package/deps/libmdbx/src/preface.h +990 -0
- package/deps/libmdbx/src/proto.h +105 -0
- package/deps/libmdbx/src/refund.c +212 -0
- package/deps/libmdbx/src/sort.h +484 -0
- package/deps/libmdbx/src/spill.c +431 -0
- package/deps/libmdbx/src/spill.h +74 -0
- package/deps/libmdbx/src/table.c +107 -0
- package/deps/libmdbx/src/tls.c +551 -0
- package/deps/libmdbx/src/tls.h +43 -0
- package/deps/libmdbx/src/tools/chk.c +673 -0
- package/deps/libmdbx/src/tools/copy.c +166 -0
- package/deps/libmdbx/src/tools/drop.c +199 -0
- package/deps/libmdbx/src/tools/dump.c +515 -0
- package/deps/libmdbx/src/tools/load.c +831 -0
- package/deps/libmdbx/src/tools/stat.c +516 -0
- package/deps/libmdbx/src/tools/wingetopt.c +87 -0
- package/deps/libmdbx/src/tools/wingetopt.h +30 -0
- package/deps/libmdbx/src/tree-ops.c +1554 -0
- package/deps/libmdbx/src/tree-search.c +140 -0
- package/deps/libmdbx/src/txl.c +99 -0
- package/deps/libmdbx/src/txl.h +26 -0
- package/deps/libmdbx/src/txn.c +1083 -0
- package/deps/libmdbx/src/unaligned.h +205 -0
- package/deps/libmdbx/src/utils.c +32 -0
- package/deps/libmdbx/src/utils.h +76 -0
- package/deps/libmdbx/src/version.c.in +44 -0
- package/deps/libmdbx/src/walk.c +290 -0
- package/deps/libmdbx/src/walk.h +20 -0
- package/deps/libmdbx/src/windows-import.c +152 -0
- package/deps/libmdbx/src/windows-import.h +128 -0
- package/deps/libmdbx/test/CMakeLists.txt +317 -0
- package/deps/libmdbx/test/append.c++ +237 -0
- package/deps/libmdbx/test/base.h++ +92 -0
- package/deps/libmdbx/test/battery-tmux.sh +64 -0
- package/deps/libmdbx/test/cases.c++ +118 -0
- package/deps/libmdbx/test/chrono.c++ +134 -0
- package/deps/libmdbx/test/chrono.h++ +85 -0
- package/deps/libmdbx/test/config.c++ +643 -0
- package/deps/libmdbx/test/config.h++ +334 -0
- package/deps/libmdbx/test/copy.c++ +62 -0
- package/deps/libmdbx/test/dead.c++ +39 -0
- package/deps/libmdbx/test/dump-load.sh +40 -0
- package/deps/libmdbx/test/extra/crunched_delete.c++ +409 -0
- package/deps/libmdbx/test/extra/cursor_closing.c++ +410 -0
- package/deps/libmdbx/test/extra/dbi.c++ +229 -0
- package/deps/libmdbx/test/extra/doubtless_positioning.c++ +253 -0
- package/deps/libmdbx/test/extra/dupfix_addodd.c +94 -0
- package/deps/libmdbx/test/extra/dupfix_multiple.c++ +311 -0
- package/deps/libmdbx/test/extra/early_close_dbi.c++ +137 -0
- package/deps/libmdbx/test/extra/hex_base64_base58.c++ +118 -0
- package/deps/libmdbx/test/extra/maindb_ordinal.c++ +61 -0
- package/deps/libmdbx/test/extra/open.c++ +96 -0
- package/deps/libmdbx/test/extra/pcrf/README.md +2 -0
- package/deps/libmdbx/test/extra/pcrf/pcrf_test.c +380 -0
- package/deps/libmdbx/test/extra/probe.c++ +10 -0
- package/deps/libmdbx/test/extra/txn.c++ +407 -0
- package/deps/libmdbx/test/extra/upsert_alldups.c +193 -0
- package/deps/libmdbx/test/fork.c++ +263 -0
- package/deps/libmdbx/test/hill.c++ +447 -0
- package/deps/libmdbx/test/jitter.c++ +197 -0
- package/deps/libmdbx/test/keygen.c++ +393 -0
- package/deps/libmdbx/test/keygen.h++ +130 -0
- package/deps/libmdbx/test/log.c++ +358 -0
- package/deps/libmdbx/test/log.h++ +91 -0
- package/deps/libmdbx/test/main.c++ +706 -0
- package/deps/libmdbx/test/nested.c++ +318 -0
- package/deps/libmdbx/test/osal-unix.c++ +647 -0
- package/deps/libmdbx/test/osal-windows.c++ +440 -0
- package/deps/libmdbx/test/osal.h++ +41 -0
- package/deps/libmdbx/test/stochastic.sh +690 -0
- package/deps/libmdbx/test/stub/LICENSE +24 -0
- package/deps/libmdbx/test/stub/README.md +8 -0
- package/deps/libmdbx/test/stub/pthread_barrier.c +104 -0
- package/deps/libmdbx/test/stub/pthread_barrier.h +77 -0
- package/deps/libmdbx/test/test.c++ +1551 -0
- package/deps/libmdbx/test/test.h++ +298 -0
- package/deps/libmdbx/test/tmux.conf +3 -0
- package/deps/libmdbx/test/try.c++ +30 -0
- package/deps/libmdbx/test/ttl.c++ +240 -0
- package/deps/libmdbx/test/utils.c++ +203 -0
- package/deps/libmdbx/test/utils.h++ +326 -0
- package/deps/libmdbx/test/valgrind_suppress.txt +536 -0
- package/lib/mdbx_evn_async.js +211 -0
- package/lib/mdbx_worker.js +195 -0
- package/lib/nativemou.js +6 -0
- package/package.json +38 -0
- package/src/async/envmou_close.cpp +34 -0
- package/src/async/envmou_close.hpp +32 -0
- package/src/async/envmou_copy_to.cpp +29 -0
- package/src/async/envmou_copy_to.hpp +38 -0
- package/src/async/envmou_keys.cpp +201 -0
- package/src/async/envmou_keys.hpp +50 -0
- package/src/async/envmou_open.cpp +38 -0
- package/src/async/envmou_open.hpp +33 -0
- package/src/async/envmou_query.cpp +167 -0
- package/src/async/envmou_query.hpp +53 -0
- package/src/dbimou.cpp +522 -0
- package/src/dbimou.hpp +82 -0
- package/src/env_arg0.hpp +24 -0
- package/src/envmou.cpp +445 -0
- package/src/envmou.hpp +116 -0
- package/src/modulemou.cpp +113 -0
- package/src/querymou.cpp +177 -0
- package/src/querymou.hpp +93 -0
- package/src/txnmou.cpp +254 -0
- package/src/txnmou.hpp +122 -0
- package/src/typemou.hpp +239 -0
- package/src/valuemou.hpp +194 -0
- package/test/async.js +67 -0
- package/test/e3.js +38 -0
- package/test/e4.js +89 -0
- package/test/e5.js +162 -0
- package/test/test-batch-ops.js +243 -0
- package/test/test-cursor-mode.js +84 -0
- package/test/test-multi-mode.js +87 -0
|
@@ -0,0 +1,950 @@
|
|
|
1
|
+
# This makefile is for GNU Make 3.81 or above, and nowadays provided
|
|
2
|
+
# just for compatibility and preservation of traditions.
|
|
3
|
+
#
|
|
4
|
+
# Please use CMake in case of any difficulties or
|
|
5
|
+
# problems with this old-school's magic.
|
|
6
|
+
#
|
|
7
|
+
################################################################################
|
|
8
|
+
#
|
|
9
|
+
# Basic internal definitions. For a customizable variables and options see below.
|
|
10
|
+
#
|
|
11
|
+
$(info // The GNU Make $(MAKE_VERSION))
|
|
12
|
+
SHELL := $(shell env bash -c 'echo $$BASH')
|
|
13
|
+
MAKE_VERx3 := $(shell printf "%3s%3s%3s" $(subst ., ,$(MAKE_VERSION)))
|
|
14
|
+
make_lt_3_81 := $(shell expr "$(MAKE_VERx3)" "<" " 3 81")
|
|
15
|
+
ifneq ($(make_lt_3_81),0)
|
|
16
|
+
$(error Please use GNU Make 3.81 or above)
|
|
17
|
+
endif
|
|
18
|
+
make_ge_4_1 := $(shell expr "$(MAKE_VERx3)" ">=" " 4 1")
|
|
19
|
+
make_ge_4_4 := $(shell expr "$(MAKE_VERx3)" ">=" " 4 4")
|
|
20
|
+
SRC_PROBE_C := $(shell [ -f mdbx.c ] && echo mdbx.c || echo src/osal.c)
|
|
21
|
+
SRC_PROBE_CXX := $(shell [ -f mdbx.c++ ] && echo mdbx.c++ || echo src/mdbx.c++)
|
|
22
|
+
UNAME := $(shell uname -s 2>/dev/null || echo Unknown)
|
|
23
|
+
|
|
24
|
+
define cxx_filesystem_probe
|
|
25
|
+
int main(int argc, const char*argv[]) {
|
|
26
|
+
mdbx::filesystem::path probe(argv[0]);
|
|
27
|
+
if (argc != 1) throw mdbx::filesystem::filesystem_error(std::string("fake"), std::error_code());
|
|
28
|
+
return mdbx::filesystem::is_directory(probe.relative_path());
|
|
29
|
+
}
|
|
30
|
+
endef
|
|
31
|
+
#
|
|
32
|
+
################################################################################
|
|
33
|
+
#
|
|
34
|
+
# Use `make options` to list the available libmdbx build options.
|
|
35
|
+
#
|
|
36
|
+
# Note that the defaults should already be correct for most platforms;
|
|
37
|
+
# you should not need to change any of these. Read their descriptions
|
|
38
|
+
# in README and source code (see src/options.h) if you do.
|
|
39
|
+
#
|
|
40
|
+
|
|
41
|
+
# install sandbox
|
|
42
|
+
DESTDIR ?=
|
|
43
|
+
INSTALL ?= install
|
|
44
|
+
# install prefixes (inside sandbox)
|
|
45
|
+
prefix ?= /usr/local
|
|
46
|
+
mandir ?= $(prefix)/man
|
|
47
|
+
# lib/bin suffix for multiarch/biarch, e.g. '.x86_64'
|
|
48
|
+
suffix ?=
|
|
49
|
+
|
|
50
|
+
# toolchain
|
|
51
|
+
CC ?= gcc
|
|
52
|
+
CXX ?= g++
|
|
53
|
+
CFLAGS_EXTRA ?=
|
|
54
|
+
LD ?= ld
|
|
55
|
+
CMAKE ?= cmake
|
|
56
|
+
CMAKE_OPT ?=
|
|
57
|
+
CTEST ?= ctest
|
|
58
|
+
CTEST_OPT ?=
|
|
59
|
+
# target directory for `make dist`
|
|
60
|
+
DIST_DIR ?= dist
|
|
61
|
+
|
|
62
|
+
# build options
|
|
63
|
+
MDBX_BUILD_OPTIONS ?=-DNDEBUG=1
|
|
64
|
+
MDBX_BUILD_TIMESTAMP ?=$(if $(SOURCE_DATE_EPOCH),$(SOURCE_DATE_EPOCH),$(shell date +%Y-%m-%dT%H:%M:%S%z))
|
|
65
|
+
MDBX_BUILD_CXX ?=YES
|
|
66
|
+
MDBX_BUILD_METADATA ?=
|
|
67
|
+
|
|
68
|
+
# probe and compose common compiler flags with variable expansion trick (seems this work two times per session for GNU Make 3.81)
|
|
69
|
+
CFLAGS ?= $(strip $(eval CFLAGS := -std=gnu11 -O2 -g -Wall -Werror -Wextra -Wpedantic -ffunction-sections -fPIC -fvisibility=hidden -pthread -Wno-error=attributes $$(shell for opt in -fno-semantic-interposition -Wno-unused-command-line-argument -Wno-tautological-compare; do [ -z "$$$$($(CC) '-DMDBX_BUILD_FLAGS="probe"' $$$${opt} -c $(SRC_PROBE_C) -o /dev/null >/dev/null 2>&1 || echo failed)" ] && echo "$$$${opt} "; done)$(CFLAGS_EXTRA))$(CFLAGS))
|
|
70
|
+
|
|
71
|
+
# choosing C++ standard with variable expansion trick (seems this work two times per session for GNU Make 3.81)
|
|
72
|
+
CXXSTD ?= $(eval CXXSTD := $$(shell for std in gnu++23 c++23 gnu++2b c++2b gnu++20 c++20 gnu++2a c++2a gnu++17 c++17 gnu++1z c++1z gnu++14 c++14 gnu++1y c++1y gnu+11 c++11 gnu++0x c++0x; do $(CXX) -std=$$$${std} -DMDBX_BUILD_CXX=1 -c $(SRC_PROBE_CXX) -o /dev/null 2>probe4std-$$$${std}.err >/dev/null && echo "-std=$$$${std}" && exit; done))$(CXXSTD)
|
|
73
|
+
CXXFLAGS ?= $(strip $(CXXSTD) $(filter-out -std=gnu11,$(CFLAGS)))
|
|
74
|
+
|
|
75
|
+
# libraries and options for linking
|
|
76
|
+
EXE_LDFLAGS ?= -pthread
|
|
77
|
+
ifneq ($(make_ge_4_1),1)
|
|
78
|
+
# don't use variable expansion trick as workaround for bugs of GNU Make before 4.1
|
|
79
|
+
LIBS ?= $(shell $(uname2libs))
|
|
80
|
+
LDFLAGS ?= $(shell $(uname2ldflags))
|
|
81
|
+
LIB_STDCXXFS ?= $(shell echo '$(cxx_filesystem_probe)' | cat mdbx.h++ - | sed $$'1s/\xef\xbb\xbf//' | $(CXX) -x c++ $(CXXFLAGS) -Wno-error - -Wl,--allow-multiple-definition -lstdc++fs $(LIBS) $(LDFLAGS) $(EXE_LDFLAGS) -o /dev/null 2>probe4lstdfs.err >/dev/null && echo '-Wl,--allow-multiple-definition -lstdc++fs')
|
|
82
|
+
else
|
|
83
|
+
# using variable expansion trick to avoid repeaded probes
|
|
84
|
+
LIBS ?= $(eval LIBS := $$(shell $$(uname2libs)))$(LIBS)
|
|
85
|
+
LDFLAGS ?= $(eval LDFLAGS := $$(shell $$(uname2ldflags)))$(LDFLAGS)
|
|
86
|
+
LIB_STDCXXFS ?= $(eval LIB_STDCXXFS := $$(shell echo '$$(cxx_filesystem_probe)' | cat mdbx.h++ - | sed $$$$'1s/\xef\xbb\xbf//' | $(CXX) -x c++ $(CXXFLAGS) -Wno-error - -Wl,--allow-multiple-definition -lstdc++fs $(LIBS) $(LDFLAGS) $(EXE_LDFLAGS) -o /dev/null 2>probe4lstdfs.err >/dev/null && echo '-Wl,--allow-multiple-definition -lstdc++fs'))$(LIB_STDCXXFS)
|
|
87
|
+
endif
|
|
88
|
+
|
|
89
|
+
ifneq ($(make_ge_4_4),1)
|
|
90
|
+
.NOTPARALLEL:
|
|
91
|
+
WAIT =
|
|
92
|
+
else
|
|
93
|
+
WAIT = .WAIT
|
|
94
|
+
endif
|
|
95
|
+
|
|
96
|
+
################################################################################
|
|
97
|
+
|
|
98
|
+
define uname2sosuffix
|
|
99
|
+
case "$(UNAME)" in
|
|
100
|
+
Darwin*|Mach*) echo dylib;;
|
|
101
|
+
CYGWIN*|MINGW*|MSYS*|Windows*) echo dll;;
|
|
102
|
+
*) echo so;;
|
|
103
|
+
esac
|
|
104
|
+
endef
|
|
105
|
+
|
|
106
|
+
define uname2ldflags
|
|
107
|
+
case "$(UNAME)" in
|
|
108
|
+
CYGWIN*|MINGW*|MSYS*|Windows*)
|
|
109
|
+
echo '-Wl,--gc-sections,-O1';
|
|
110
|
+
;;
|
|
111
|
+
*)
|
|
112
|
+
$(LD) --help 2>/dev/null | grep -q -- --gc-sections && echo '-Wl,--gc-sections,-z,relro,-O1';
|
|
113
|
+
$(LD) --help 2>/dev/null | grep -q -- -dead_strip && echo '-Wl,-dead_strip';
|
|
114
|
+
;;
|
|
115
|
+
esac
|
|
116
|
+
endef
|
|
117
|
+
|
|
118
|
+
# TIP: try add the'-Wl, --no-as-needed,-lrt' for ability to built with modern glibc, but then use with the old.
|
|
119
|
+
define uname2libs
|
|
120
|
+
case "$(UNAME)" in
|
|
121
|
+
CYGWIN*|MINGW*|MSYS*|Windows*)
|
|
122
|
+
echo '-lm -lntdll -lwinmm';
|
|
123
|
+
;;
|
|
124
|
+
*SunOS*|*Solaris*)
|
|
125
|
+
echo '-lm -lkstat -lrt';
|
|
126
|
+
;;
|
|
127
|
+
*Darwin*|OpenBSD*)
|
|
128
|
+
echo '-lm';
|
|
129
|
+
;;
|
|
130
|
+
*)
|
|
131
|
+
echo '-lm -lrt';
|
|
132
|
+
;;
|
|
133
|
+
esac
|
|
134
|
+
endef
|
|
135
|
+
|
|
136
|
+
SO_SUFFIX := $(shell $(uname2sosuffix))
|
|
137
|
+
HEADERS := mdbx.h mdbx.h++
|
|
138
|
+
LIBRARIES := libmdbx.a libmdbx.$(SO_SUFFIX)
|
|
139
|
+
TOOLS := chk copy drop dump load stat
|
|
140
|
+
MDBX_TOOLS := $(addprefix mdbx_,$(TOOLS))
|
|
141
|
+
MANPAGES := mdbx_stat.1 mdbx_copy.1 mdbx_dump.1 mdbx_load.1 mdbx_chk.1 mdbx_drop.1
|
|
142
|
+
TIP := // TIP:
|
|
143
|
+
|
|
144
|
+
.PHONY: all help options lib libs tools clean install uninstall check_buildflags_tag tools-static
|
|
145
|
+
.PHONY: install-strip install-no-strip strip libmdbx mdbx show-options lib-static lib-shared cmake-build ninja
|
|
146
|
+
|
|
147
|
+
boolean = $(if $(findstring $(strip $($1)),YES Yes yes y ON On on 1 true True TRUE),1,$(if $(findstring $(strip $($1)),NO No no n OFF Off off 0 false False FALSE),,$(error Wrong value `$($1)` of $1 for YES/NO option)))
|
|
148
|
+
select_by = $(if $(call boolean,$(1)),$(2),$(3))
|
|
149
|
+
|
|
150
|
+
ifeq ("$(origin V)", "command line")
|
|
151
|
+
MDBX_BUILD_VERBOSE := $(V)
|
|
152
|
+
endif
|
|
153
|
+
ifndef MDBX_BUILD_VERBOSE
|
|
154
|
+
MDBX_BUILD_VERBOSE := 0
|
|
155
|
+
endif
|
|
156
|
+
|
|
157
|
+
ifeq ($(call boolean,MDBX_BUILD_VERBOSE),1)
|
|
158
|
+
QUIET :=
|
|
159
|
+
HUSH :=
|
|
160
|
+
$(info $(TIP) Use `make V=0` for quiet.)
|
|
161
|
+
else
|
|
162
|
+
QUIET := @
|
|
163
|
+
HUSH := >/dev/null
|
|
164
|
+
$(info $(TIP) Use `make V=1` for verbose.)
|
|
165
|
+
endif
|
|
166
|
+
|
|
167
|
+
ifeq ($(UNAME),Darwin)
|
|
168
|
+
$(info $(TIP) Use `brew install gnu-sed gnu-tar` and add ones to the beginning of the PATH.)
|
|
169
|
+
endif
|
|
170
|
+
|
|
171
|
+
all: show-options $(LIBRARIES) $(MDBX_TOOLS)
|
|
172
|
+
|
|
173
|
+
help:
|
|
174
|
+
@echo " make all - build libraries and tools"
|
|
175
|
+
@echo " make help - print this help"
|
|
176
|
+
@echo " make options - list build options"
|
|
177
|
+
@echo " make lib - build libraries, also lib-static and lib-shared"
|
|
178
|
+
@echo " make tools - build the tools"
|
|
179
|
+
@echo " make tools-static - build the tools with statically linking with system libraries and compiler runtime"
|
|
180
|
+
@echo " make clean "
|
|
181
|
+
@echo " make install "
|
|
182
|
+
@echo " make uninstall "
|
|
183
|
+
@echo " make cmake-build | ninja - build by CMake & Ninja"
|
|
184
|
+
@echo ""
|
|
185
|
+
@echo " make strip - strip debug symbols from binaries"
|
|
186
|
+
@echo " make install-no-strip - install explicitly without strip"
|
|
187
|
+
@echo " make install-strip - install explicitly with strip"
|
|
188
|
+
@echo ""
|
|
189
|
+
@echo " make bench - run ioarena-benchmark"
|
|
190
|
+
@echo " make bench-couple - run ioarena-benchmark for mdbx and lmdb"
|
|
191
|
+
@echo " make bench-triplet - run ioarena-benchmark for mdbx, lmdb, sqlite3"
|
|
192
|
+
@echo " make bench-quartet - run ioarena-benchmark for mdbx, lmdb, rocksdb, wiredtiger"
|
|
193
|
+
@echo " make bench-clean - remove temp database(s) after benchmark"
|
|
194
|
+
#> dist-cutoff-begin
|
|
195
|
+
@echo ""
|
|
196
|
+
@echo " make check - smoke test with amalgamation and installation checking"
|
|
197
|
+
@echo " make smoke - fast smoke test"
|
|
198
|
+
@echo " make smoke-memcheck - build with Valgrind support and run smoke test under memcheck tool"
|
|
199
|
+
@echo " make smoke-fault - execute transaction owner failure smoke testcase"
|
|
200
|
+
@echo " make smoke-singleprocess - execute single-process smoke test"
|
|
201
|
+
@echo " make test - basic test"
|
|
202
|
+
@echo " make test-memcheck - build with Valgrind support and run basic test under memcheck tool"
|
|
203
|
+
@echo " make test-long - execute long test which runs for several weeks, or until interruption"
|
|
204
|
+
@echo " make test-asan - build with AddressSanitizer and run basic test"
|
|
205
|
+
@echo " make test-leak - build with LeakSanitizer and run basic test"
|
|
206
|
+
@echo " make test-ubsan - build with UndefinedBehaviourSanitizer and run basic test"
|
|
207
|
+
@echo " make test-singleprocess - execute single-process basic test (also used by make cross-qemu)"
|
|
208
|
+
@echo " make cross-gcc - check cross-compilation without test execution"
|
|
209
|
+
@echo " make cross-qemu - run cross-compilation and execution basic test with QEMU"
|
|
210
|
+
@echo " make gcc-analyzer - run gcc-analyzer (mostly useless for now)"
|
|
211
|
+
@echo " make build-test - build test executable(s)"
|
|
212
|
+
@echo ""
|
|
213
|
+
@echo " make dist - build amalgamated source code"
|
|
214
|
+
@echo " make doxygen - build HTML documentation"
|
|
215
|
+
@echo " make release-assets - build release assets"
|
|
216
|
+
@echo " make reformat - reformat source code with clang-format"
|
|
217
|
+
#< dist-cutoff-end
|
|
218
|
+
|
|
219
|
+
show-options:
|
|
220
|
+
@echo " MDBX_BUILD_OPTIONS = $(MDBX_BUILD_OPTIONS)"
|
|
221
|
+
@echo " MDBX_BUILD_CXX = $(MDBX_BUILD_CXX)"
|
|
222
|
+
@echo " MDBX_BUILD_TIMESTAMP = $(MDBX_BUILD_TIMESTAMP)"
|
|
223
|
+
@echo " MDBX_BUILD_METADATA = $(MDBX_BUILD_METADATA)"
|
|
224
|
+
@echo '$(TIP) Use `make options` to listing available build options.'
|
|
225
|
+
@echo $(call select_by,MDBX_BUILD_CXX," CXX =`which $(CXX)` | `$(CXX) --version | head -1`"," CC =`which $(CC)` | `$(CC) --version | head -1`")
|
|
226
|
+
@echo $(call select_by,MDBX_BUILD_CXX," CXXFLAGS =$(CXXFLAGS)"," CFLAGS =$(CFLAGS)")
|
|
227
|
+
@echo $(call select_by,MDBX_BUILD_CXX," LDFLAGS =$(LDFLAGS) $(LIB_STDCXXFS) $(LIBS) $(EXE_LDFLAGS)"," LDFLAGS =$(LDFLAGS) $(LIBS) $(EXE_LDFLAGS)")
|
|
228
|
+
@echo '$(TIP) Use `make help` to listing available targets.'
|
|
229
|
+
|
|
230
|
+
options:
|
|
231
|
+
@echo " INSTALL =$(INSTALL)"
|
|
232
|
+
@echo " DESTDIR =$(DESTDIR)"
|
|
233
|
+
@echo " prefix =$(prefix)"
|
|
234
|
+
@echo " mandir =$(mandir)"
|
|
235
|
+
@echo " suffix =$(suffix)"
|
|
236
|
+
@echo ""
|
|
237
|
+
@echo " CC =$(CC)"
|
|
238
|
+
@echo " CFLAGS_EXTRA =$(CFLAGS_EXTRA)"
|
|
239
|
+
@echo " CFLAGS =$(CFLAGS)"
|
|
240
|
+
@echo " CXX =$(CXX)"
|
|
241
|
+
@echo " CXXSTD =$(CXXSTD)"
|
|
242
|
+
@echo " CXXFLAGS =$(CXXFLAGS)"
|
|
243
|
+
@echo ""
|
|
244
|
+
@echo " LD =$(LD)"
|
|
245
|
+
@echo " LDFLAGS =$(LDFLAGS)"
|
|
246
|
+
@echo " EXE_LDFLAGS =$(EXE_LDFLAGS)"
|
|
247
|
+
@echo " LIBS =$(LIBS)"
|
|
248
|
+
@echo ""
|
|
249
|
+
@echo " MDBX_BUILD_OPTIONS = $(MDBX_BUILD_OPTIONS)"
|
|
250
|
+
@echo " MDBX_BUILD_TIMESTAMP = $(MDBX_BUILD_TIMESTAMP)"
|
|
251
|
+
@echo " MDBX_BUILD_METADATA = $(MDBX_BUILD_METADATA)"
|
|
252
|
+
@echo ""
|
|
253
|
+
@echo "## Assortment items for MDBX_BUILD_OPTIONS:"
|
|
254
|
+
@echo "## Note that the defaults should already be correct for most platforms;"
|
|
255
|
+
@echo "## you should not need to change any of these. Read their descriptions"
|
|
256
|
+
#> dist-cutoff-begin
|
|
257
|
+
ifeq ($(wildcard mdbx.c),mdbx.c)
|
|
258
|
+
#< dist-cutoff-end
|
|
259
|
+
@echo "## in README and source code (see mdbx.c) if you do."
|
|
260
|
+
@grep -h '#ifndef MDBX_' mdbx.c | grep -v BUILD | sort -u | sed 's/#ifndef / /'
|
|
261
|
+
#> dist-cutoff-begin
|
|
262
|
+
else
|
|
263
|
+
@echo "## in README and source code (see src/options.h) if you do."
|
|
264
|
+
@grep -h '#ifndef MDBX_' src/*.h | grep -v BUILD | sort -u | sed 's/#ifndef / /'
|
|
265
|
+
endif
|
|
266
|
+
#< dist-cutoff-end
|
|
267
|
+
|
|
268
|
+
lib libs libmdbx mdbx: libmdbx.a libmdbx.$(SO_SUFFIX)
|
|
269
|
+
|
|
270
|
+
tools: $(MDBX_TOOLS)
|
|
271
|
+
tools-static: $(addsuffix .static,$(MDBX_TOOLS)) $(addsuffix .static-lto,$(MDBX_TOOLS))
|
|
272
|
+
|
|
273
|
+
strip: all
|
|
274
|
+
@echo ' STRIP libmdbx.$(SO_SUFFIX) $(MDBX_TOOLS)'
|
|
275
|
+
$(TRACE )strip libmdbx.$(SO_SUFFIX) $(MDBX_TOOLS)
|
|
276
|
+
|
|
277
|
+
clean:
|
|
278
|
+
@echo ' REMOVE ...'
|
|
279
|
+
$(QUIET)rm -rf $(MDBX_TOOLS) mdbx_test @* *.[ao] *.[ls]o *.$(SO_SUFFIX) *.dSYM *~ tmp.db/* \
|
|
280
|
+
*.gcov *.log *.err src/*.o test/*.o mdbx_example dist @dist-check \
|
|
281
|
+
config.h src/config.h src/version.c *.tar* @buildflags.tag @dist-checked.tag \
|
|
282
|
+
mdbx_*.static mdbx_*.static-lto CMakeFiles
|
|
283
|
+
|
|
284
|
+
MDBX_BUILD_FLAGS =$(strip MDBX_BUILD_CXX=$(MDBX_BUILD_CXX) $(MDBX_BUILD_OPTIONS) $(call select_by,MDBX_BUILD_CXX,$(CXXFLAGS) $(LDFLAGS) $(LIB_STDCXXFS) $(LIBS),$(CFLAGS) $(LDFLAGS) $(LIBS)))
|
|
285
|
+
check_buildflags_tag:
|
|
286
|
+
$(QUIET)if [ "$(MDBX_BUILD_FLAGS)" != "$$(cat @buildflags.tag 2>&1)" ]; then \
|
|
287
|
+
echo -n " CLEAN for build with specified flags..." && \
|
|
288
|
+
$(MAKE) IOARENA=false CXXSTD= -s clean >/dev/null && echo " Ok" && \
|
|
289
|
+
echo '$(MDBX_BUILD_FLAGS)' > @buildflags.tag; \
|
|
290
|
+
fi
|
|
291
|
+
|
|
292
|
+
@buildflags.tag: check_buildflags_tag
|
|
293
|
+
|
|
294
|
+
lib-static libmdbx.a: mdbx-static.o $(call select_by,MDBX_BUILD_CXX,mdbx++-static.o)
|
|
295
|
+
@echo ' AR $@'
|
|
296
|
+
$(QUIET)$(AR) rcs $@ $? $(HUSH)
|
|
297
|
+
|
|
298
|
+
lib-shared libmdbx.$(SO_SUFFIX): mdbx-dylib.o $(call select_by,MDBX_BUILD_CXX,mdbx++-dylib.o)
|
|
299
|
+
@echo ' LD $@'
|
|
300
|
+
$(QUIET)$(call select_by,MDBX_BUILD_CXX,$(CXX) $(CXXFLAGS),$(CC) $(CFLAGS)) $^ -pthread -shared $(LDFLAGS) $(call select_by,MDBX_BUILD_CXX,$(LIB_STDCXXFS)) $(LIBS) -o $@
|
|
301
|
+
|
|
302
|
+
ninja-assertions: CMAKE_OPT += -DMDBX_FORCE_ASSERTIONS=ON
|
|
303
|
+
ninja-assertions: cmake-build
|
|
304
|
+
ninja-debug: CMAKE_OPT += -DCMAKE_BUILD_TYPE=Debug
|
|
305
|
+
ninja-debug: cmake-build
|
|
306
|
+
ninja: cmake-build
|
|
307
|
+
cmake-build:
|
|
308
|
+
@echo " RUN: cmake -G Ninja && cmake --build"
|
|
309
|
+
$(QUIET)mkdir -p @cmake-ninja-build && $(CMAKE) $(CMAKE_OPT) -G Ninja -S . -B @cmake-ninja-build && $(CMAKE) --build @cmake-ninja-build
|
|
310
|
+
|
|
311
|
+
ctest: cmake-build
|
|
312
|
+
@echo " RUN: ctest .."
|
|
313
|
+
$(QUIET)$(CTEST) --test-dir @cmake-ninja-build --parallel `(nproc | sysctl -n hw.ncpu | echo 2) 2>/dev/null` --schedule-random $(CTEST_OPT)
|
|
314
|
+
|
|
315
|
+
#> dist-cutoff-begin
|
|
316
|
+
ifeq ($(wildcard mdbx.c),mdbx.c)
|
|
317
|
+
#< dist-cutoff-end
|
|
318
|
+
|
|
319
|
+
################################################################################
|
|
320
|
+
# Amalgamated source code, i.e. distributed after `make dist`
|
|
321
|
+
MAN_SRCDIR := man1/
|
|
322
|
+
|
|
323
|
+
config.h: @buildflags.tag $(WAIT) mdbx.c $(lastword $(MAKEFILE_LIST)) LICENSE NOTICE
|
|
324
|
+
@echo ' MAKE $@'
|
|
325
|
+
$(QUIET)(echo '#define MDBX_BUILD_TIMESTAMP "$(MDBX_BUILD_TIMESTAMP)"' \
|
|
326
|
+
&& echo "#define MDBX_BUILD_FLAGS \"$$(cat @buildflags.tag)\"" \
|
|
327
|
+
&& echo '#define MDBX_BUILD_COMPILER "$(shell (LC_ALL=C $(CC) --version || echo 'Please use GCC or CLANG compatible compiler') | head -1)"' \
|
|
328
|
+
&& echo '#define MDBX_BUILD_TARGET "$(shell set -o pipefail; (LC_ALL=C $(CC) -v 2>&1 | grep -i '^Target:' | cut -d ' ' -f 2- || (LC_ALL=C $(CC) --version | grep -qi e2k && echo E2K) || echo 'Please use GCC or CLANG compatible compiler') | head -1)"' \
|
|
329
|
+
&& echo '#define MDBX_BUILD_CXX $(call select_by,MDBX_BUILD_CXX,1,0)' \
|
|
330
|
+
&& echo '#define MDBX_BUILD_METADATA "$(MDBX_BUILD_METADATA)"' \
|
|
331
|
+
) >$@
|
|
332
|
+
|
|
333
|
+
mdbx-dylib.o: config.h mdbx.c mdbx.h $(lastword $(MAKEFILE_LIST)) LICENSE NOTICE
|
|
334
|
+
@echo ' CC $@'
|
|
335
|
+
$(QUIET)$(CC) $(CFLAGS) $(MDBX_BUILD_OPTIONS) '-DMDBX_CONFIG_H="config.h"' -DLIBMDBX_EXPORTS=1 -c mdbx.c -o $@
|
|
336
|
+
|
|
337
|
+
mdbx-static.o: config.h mdbx.c mdbx.h $(lastword $(MAKEFILE_LIST)) LICENSE NOTICE
|
|
338
|
+
@echo ' CC $@'
|
|
339
|
+
$(QUIET)$(CC) $(CFLAGS) $(MDBX_BUILD_OPTIONS) '-DMDBX_CONFIG_H="config.h"' -ULIBMDBX_EXPORTS -c mdbx.c -o $@
|
|
340
|
+
|
|
341
|
+
mdbx++-dylib.o: config.h mdbx.c++ mdbx.h mdbx.h++ $(lastword $(MAKEFILE_LIST)) LICENSE NOTICE
|
|
342
|
+
@echo ' CC $@'
|
|
343
|
+
$(QUIET)$(CXX) $(CXXFLAGS) $(MDBX_BUILD_OPTIONS) '-DMDBX_CONFIG_H="config.h"' -DLIBMDBX_EXPORTS=1 -c mdbx.c++ -o $@
|
|
344
|
+
|
|
345
|
+
mdbx++-static.o: config.h mdbx.c++ mdbx.h mdbx.h++ $(lastword $(MAKEFILE_LIST)) LICENSE NOTICE
|
|
346
|
+
@echo ' CC $@'
|
|
347
|
+
$(QUIET)$(CXX) $(CXXFLAGS) $(MDBX_BUILD_OPTIONS) '-DMDBX_CONFIG_H="config.h"' -ULIBMDBX_EXPORTS -c mdbx.c++ -o $@
|
|
348
|
+
|
|
349
|
+
mdbx_%: mdbx_%.c mdbx-static.o
|
|
350
|
+
@echo ' CC+LD $@'
|
|
351
|
+
$(QUIET)$(CC) $(CFLAGS) $(MDBX_BUILD_OPTIONS) '-DMDBX_CONFIG_H="config.h"' $^ $(EXE_LDFLAGS) $(LIBS) -o $@
|
|
352
|
+
|
|
353
|
+
mdbx_%.static: mdbx_%.c mdbx-static.o
|
|
354
|
+
@echo ' CC+LD $@'
|
|
355
|
+
$(QUIET)$(CC) $(CFLAGS) $(MDBX_BUILD_OPTIONS) '-DMDBX_CONFIG_H="config.h"' $^ $(EXE_LDFLAGS) -static -Wl,--strip-all -o $@
|
|
356
|
+
|
|
357
|
+
mdbx_%.static-lto: mdbx_%.c config.h mdbx.c mdbx.h
|
|
358
|
+
@echo ' CC+LD $@'
|
|
359
|
+
$(QUIET)$(CC) $(CFLAGS) -Os -flto $(MDBX_BUILD_OPTIONS) '-DLIBMDBX_API=' '-DMDBX_CONFIG_H="config.h"' \
|
|
360
|
+
$< mdbx.c $(EXE_LDFLAGS) $(LIBS) -static -Wl,--strip-all -o $@
|
|
361
|
+
|
|
362
|
+
#> dist-cutoff-begin
|
|
363
|
+
else
|
|
364
|
+
################################################################################
|
|
365
|
+
# Plain (non-amalgamated) sources with test
|
|
366
|
+
|
|
367
|
+
.PHONY: build-test build-test-with-valgrind check cross-gcc cross-qemu dist doxygen gcc-analyzer long-test
|
|
368
|
+
.PHONY: reformat release-assets tags smoke test test-asan smoke-fault test-leak
|
|
369
|
+
.PHONY: smoke-singleprocess test-singleprocess test-ubsan test-valgrind test-memcheck memcheck smoke-memcheck
|
|
370
|
+
.PHONY: smoke-assertion test-assertion long-test-assertion test-ci test-ci-extra
|
|
371
|
+
|
|
372
|
+
test-ci-extra: test-ci cross-gcc cross-qemu
|
|
373
|
+
|
|
374
|
+
test-ci: check \
|
|
375
|
+
smoke-singleprocess smoke-fault smoke-memcheck smoke \
|
|
376
|
+
test-leak test-asan test-ubsan test-singleprocess test test-memcheck
|
|
377
|
+
|
|
378
|
+
define uname2osal
|
|
379
|
+
case "$(UNAME)" in
|
|
380
|
+
CYGWIN*|MINGW*|MSYS*|Windows*) echo windows;;
|
|
381
|
+
*) echo unix;;
|
|
382
|
+
esac
|
|
383
|
+
endef
|
|
384
|
+
|
|
385
|
+
define uname2titer
|
|
386
|
+
case "$(UNAME)" in
|
|
387
|
+
CYGWIN*|MINGW*|MSYS*|Windows*) echo 2;;
|
|
388
|
+
Darwin*|Mach*) echo 2;;
|
|
389
|
+
*) if [ -z "${CI}" ]; then echo 7; else echo 3; fi;;
|
|
390
|
+
esac
|
|
391
|
+
endef
|
|
392
|
+
|
|
393
|
+
DIST_EXTRA := LICENSE NOTICE README.md CMakeLists.txt GNUmakefile Makefile ChangeLog.md VERSION.json config.h.in ntdll.def \
|
|
394
|
+
$(addprefix man1/, $(MANPAGES)) cmake/compiler.cmake cmake/profile.cmake cmake/utils.cmake .clang-format-ignore
|
|
395
|
+
DIST_SRC := mdbx.h mdbx.h++ mdbx.c mdbx.c++ $(addsuffix .c, $(MDBX_TOOLS))
|
|
396
|
+
|
|
397
|
+
TEST_DB ?= $(shell [ -d /dev/shm ] && echo /dev/shm || echo /tmp)/mdbx-test.db
|
|
398
|
+
TEST_LOG ?= $(shell [ -d /dev/shm ] && echo /dev/shm || echo /tmp)/mdbx-test.log
|
|
399
|
+
TEST_OSAL := $(shell $(uname2osal))
|
|
400
|
+
TEST_ITER := $(shell $(uname2titer))
|
|
401
|
+
TEST_SRC := test/osal-$(TEST_OSAL).c++ $(filter-out $(wildcard test/osal-*.c++),$(wildcard test/*.c++)) $(call select_by,MDBX_BUILD_CXX,,src/mdbx.c++)
|
|
402
|
+
TEST_INC := $(wildcard test/*.h++)
|
|
403
|
+
TEST_OBJ := $(patsubst %.c++,%.o,$(TEST_SRC))
|
|
404
|
+
ifndef SED
|
|
405
|
+
SED := $(shell which gnu-sed 2>&- || echo sed)
|
|
406
|
+
endif
|
|
407
|
+
TAR ?= $(shell which gnu-tar 2>&- || echo tar)
|
|
408
|
+
ZIP ?= $(shell which zip || echo "echo 'Please install zip'")
|
|
409
|
+
CLANG_FORMAT ?= $(shell (which clang-format-19 || which clang-format) 2>/dev/null)
|
|
410
|
+
|
|
411
|
+
reformat:
|
|
412
|
+
@echo ' RUNNING clang-format...'
|
|
413
|
+
$(QUIET)if [ -n "$(CLANG_FORMAT)" ]; then \
|
|
414
|
+
git ls-files | grep -E '\.(c|c++|h|h++)(\.in)?$$' | xargs -r $(CLANG_FORMAT) -i --style=file; \
|
|
415
|
+
else \
|
|
416
|
+
echo "clang-format version 19 not found for 'reformat'"; \
|
|
417
|
+
fi
|
|
418
|
+
|
|
419
|
+
MAN_SRCDIR := src/man1/
|
|
420
|
+
ALLOY_DEPS := $(shell git ls-files src/ | grep -e /tools -e /man -v)
|
|
421
|
+
MDBX_GIT_DIR := $(shell if [ -d .git ]; then echo .git; elif [ -s .git -a -f .git ]; then grep '^gitdir: ' .git | cut -d ':' -f 2; else echo git_directory_is_absent; fi)
|
|
422
|
+
MDBX_GIT_LASTVTAG := $(shell git describe --tags --dirty=-DIRTY --abbrev=0 '--match=v[0-9]*' 2>&- || echo 'Please fetch tags and/or install non-obsolete git version')
|
|
423
|
+
MDBX_GIT_3DOT := $(shell set -o pipefail; echo "$(MDBX_GIT_LASTVTAG)" | $(SED) -n 's|^v*\([0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}\)\(.*\)|\1|p' || echo 'Please fetch tags and/or use non-obsolete git version')
|
|
424
|
+
MDBX_GIT_TWEAK := $(shell set -o pipefail; git rev-list $(shell git describe --tags --abbrev=0 '--match=v[0-9]*')..HEAD --count 2>&- || echo 'Please fetch tags and/or use non-obsolete git version')
|
|
425
|
+
MDBX_GIT_TIMESTAMP := $(shell git show --no-patch --format=%cI HEAD 2>&- || echo 'Please install latest get version')
|
|
426
|
+
MDBX_GIT_DESCRIBE := $(shell git describe --tags --long --dirty '--match=v[0-9]*' 2>&- || echo 'Please fetch tags and/or install non-obsolete git version')
|
|
427
|
+
MDBX_GIT_PRERELEASE := $(shell echo "$(MDBX_GIT_LASTVTAG)" | $(SED) -n 's|^v*\([0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}\)\(.*\)-\([-.0-1a-zA-Z]\+\)|\3|p')
|
|
428
|
+
MDBX_VERSION_PURE = $(MDBX_GIT_3DOT)$(if $(filter-out 0,$(MDBX_GIT_TWEAK)),.$(MDBX_GIT_TWEAK),)$(if $(MDBX_GIT_PRERELEASE),-$(MDBX_GIT_PRERELEASE),)
|
|
429
|
+
MDBX_VERSION_IDENT = $(shell set -o pipefail; echo -n '$(MDBX_GIT_DESCRIBE)' | tr -c -s '[a-zA-Z0-9.]' _)
|
|
430
|
+
MDBX_VERSION_NODOT = $(subst .,_,$(MDBX_VERSION_IDENT))
|
|
431
|
+
MDBX_BUILD_SOURCERY = $(shell set -o pipefail; $(MAKE) IOARENA=false CXXSTD= -s src/version.c >/dev/null && (openssl dgst -r -sha256 src/version.c || sha256sum src/version.c || shasum -a 256 src/version.c) 2>/dev/null | cut -d ' ' -f 1 || (echo 'Please install openssl or sha256sum or shasum' >&2 && echo sha256sum_is_no_available))_$(MDBX_VERSION_NODOT)
|
|
432
|
+
MDBX_DIST_DIR = libmdbx-$(MDBX_VERSION_NODOT)
|
|
433
|
+
|
|
434
|
+
# Extra options mdbx_test utility
|
|
435
|
+
MDBX_SMOKE_EXTRA ?=
|
|
436
|
+
|
|
437
|
+
check: DESTDIR = $(shell pwd)/@check-install
|
|
438
|
+
check: CMAKE_OPT = -Werror=dev
|
|
439
|
+
check: smoke-assertion ninja-assertions dist install test ctest
|
|
440
|
+
|
|
441
|
+
smoke-assertion: MDBX_BUILD_OPTIONS:=$(strip $(MDBX_BUILD_OPTIONS) -DMDBX_FORCE_ASSERTIONS=1 -UNDEBUG -DMDBX_DEBUG=0)
|
|
442
|
+
smoke-assertion: smoke
|
|
443
|
+
test-assertion: MDBX_BUILD_OPTIONS:=$(strip $(MDBX_BUILD_OPTIONS) -DMDBX_FORCE_ASSERTIONS=1 -UNDEBUG -DMDBX_DEBUG=0)
|
|
444
|
+
test-assertion: smoke
|
|
445
|
+
long-test-assertion: MDBX_BUILD_OPTIONS:=$(strip $(MDBX_BUILD_OPTIONS) -DMDBX_FORCE_ASSERTIONS=1 -UNDEBUG -DMDBX_DEBUG=0)
|
|
446
|
+
long-test-assertion: smoke
|
|
447
|
+
|
|
448
|
+
smoke: build-test
|
|
449
|
+
@echo ' SMOKE `mdbx_test basic`...'
|
|
450
|
+
$(QUIET)rm -f $(TEST_DB) $(TEST_LOG).gz && (set -o pipefail; \
|
|
451
|
+
(./mdbx_test --table=+data.integer --keygen.split=29 --datalen.min=min --datalen.max=max --progress --console=no --repeat=$(TEST_ITER) --pathname=$(TEST_DB) --dont-cleanup-after $(MDBX_SMOKE_EXTRA) basic && \
|
|
452
|
+
./mdbx_test --mode=-writemap,-nosync-safe,-lifo --progress --console=no --repeat=$(TEST_ITER) --pathname=$(TEST_DB) --dont-cleanup-after $(MDBX_SMOKE_EXTRA) basic) \
|
|
453
|
+
| tee >(gzip --stdout >$(TEST_LOG).gz) | tail -n 42) \
|
|
454
|
+
&& ./mdbx_chk -vvn $(TEST_DB) && ./mdbx_chk -vvn $(TEST_DB)-copy
|
|
455
|
+
|
|
456
|
+
smoke-singleprocess: build-test
|
|
457
|
+
@echo ' SMOKE `mdbx_test --nested`...'
|
|
458
|
+
$(QUIET)rm -f $(TEST_DB) $(TEST_LOG).gz && (set -o pipefail; \
|
|
459
|
+
(./mdbx_test --table=+data.integer --keygen.split=29 --datalen.min=min --datalen.max=max --progress --console=no --repeat=42 --pathname=$(TEST_DB) --dont-cleanup-after $(MDBX_SMOKE_EXTRA) --hill && \
|
|
460
|
+
./mdbx_test --progress --console=no --repeat=2 --pathname=$(TEST_DB) --dont-cleanup-before --dont-cleanup-after --copy && \
|
|
461
|
+
./mdbx_test --mode=-writemap,-nosync-safe,-lifo --progress --console=no --repeat=42 --pathname=$(TEST_DB) --dont-cleanup-after $(MDBX_SMOKE_EXTRA) --nested) \
|
|
462
|
+
| tee >(gzip --stdout >$(TEST_LOG).gz) | tail -n 42) \
|
|
463
|
+
&& ./mdbx_chk -vvn $(TEST_DB) && ./mdbx_chk -vvn $(TEST_DB)-copy
|
|
464
|
+
|
|
465
|
+
smoke-fault: build-test
|
|
466
|
+
@echo ' SMOKE `mdbx_test --inject-writefault=42 basic`...'
|
|
467
|
+
$(QUIET)rm -f $(TEST_DB) $(TEST_LOG).gz && (set -o pipefail; ./mdbx_test --progress --console=no --pathname=$(TEST_DB) --inject-writefault=42 --dump-config --dont-cleanup-after $(MDBX_SMOKE_EXTRA) basic \
|
|
468
|
+
| tee >(gzip --stdout >$(TEST_LOG).gz) | tail -n 42) \
|
|
469
|
+
; ./mdbx_chk -vvnw $(TEST_DB) && ([ ! -e $(TEST_DB)-copy ] || ./mdbx_chk -vvn $(TEST_DB)-copy)
|
|
470
|
+
|
|
471
|
+
test: build-test
|
|
472
|
+
@echo ' RUNNING `test/stochastic.sh --loops 2`...'
|
|
473
|
+
$(QUIET)test/stochastic.sh --dont-check-ram-size --loops 2 --db-upto-mb 256 --skip-make --taillog >$(TEST_LOG) || (cat $(TEST_LOG) && false)
|
|
474
|
+
|
|
475
|
+
long-test: test-long
|
|
476
|
+
test-long: build-test
|
|
477
|
+
@echo ' RUNNING `test/stochastic.sh --loops 42`...'
|
|
478
|
+
$(QUIET)test/stochastic.sh --loops 42 --db-upto-mb 1024 --extra --skip-make --taillog
|
|
479
|
+
|
|
480
|
+
test-singleprocess: build-test
|
|
481
|
+
@echo ' RUNNING `test/stochastic.sh --single --loops 2`...'
|
|
482
|
+
$(QUIET)test/stochastic.sh --dont-check-ram-size --single --loops 2 --db-upto-mb 256 --skip-make --taillog >$(TEST_LOG) || (cat $(TEST_LOG) && false)
|
|
483
|
+
|
|
484
|
+
test-valgrind: test-memcheck
|
|
485
|
+
test-memcheck: CFLAGS_EXTRA=-Ofast -DENABLE_MEMCHECK
|
|
486
|
+
test-memcheck: build-test
|
|
487
|
+
@echo ' RUNNING `test/stochastic.sh --with-valgrind --loops 2`...'
|
|
488
|
+
$(QUIET)test/stochastic.sh --with-valgrind --loops 2 --db-upto-mb 256 --skip-make >$(TEST_LOG) || (cat $(TEST_LOG) && false)
|
|
489
|
+
|
|
490
|
+
memcheck: smoke-memcheck
|
|
491
|
+
smoke-memcheck: VALGRIND=valgrind --trace-children=yes --log-file=valgrind-%p.log --leak-check=full --track-origins=yes --read-var-info=yes --error-exitcode=42 --suppressions=test/valgrind_suppress.txt
|
|
492
|
+
smoke-memcheck: CFLAGS_EXTRA=-Ofast -DENABLE_MEMCHECK
|
|
493
|
+
smoke-memcheck: build-test
|
|
494
|
+
@echo " SMOKE \`mdbx_test basic\` under Valgrind's memcheck..."
|
|
495
|
+
$(QUIET)rm -f valgrind-*.log $(TEST_DB) $(TEST_LOG).gz && (set -o pipefail; ( \
|
|
496
|
+
$(VALGRIND) ./mdbx_test --table=+data.fixed --keygen.split=29 --datalen=35 --progress --console=no --repeat=2 --pathname=$(TEST_DB) --dont-cleanup-after $(MDBX_SMOKE_EXTRA) basic && \
|
|
497
|
+
$(VALGRIND) ./mdbx_test --progress --console=no --pathname=$(TEST_DB) --dont-cleanup-before --dont-cleanup-after --copy && \
|
|
498
|
+
$(VALGRIND) ./mdbx_test --mode=-writemap,-nosync-safe,-lifo --progress --console=no --repeat=4 --pathname=$(TEST_DB) --dont-cleanup-after $(MDBX_SMOKE_EXTRA) basic && \
|
|
499
|
+
$(VALGRIND) ./mdbx_chk -vvn $(TEST_DB) && \
|
|
500
|
+
$(VALGRIND) ./mdbx_chk -vvn $(TEST_DB)-copy \
|
|
501
|
+
) | tee >(gzip --stdout >$(TEST_LOG).gz) | tail -n 42)
|
|
502
|
+
|
|
503
|
+
gcc-analyzer:
|
|
504
|
+
@echo ' RE-BUILD with `-fanalyzer` option...'
|
|
505
|
+
@echo "NOTE: There a lot of false-positive warnings at 2020-05-01 by pre-release GCC-10 (20200328, Red Hat 10.0.1-0.11)"
|
|
506
|
+
$(QUIET)$(MAKE) IOARENA=false CXXSTD=$(CXXSTD) CFLAGS_EXTRA="-Og -fanalyzer -Wno-error" build-test
|
|
507
|
+
|
|
508
|
+
test-ubsan:
|
|
509
|
+
@echo ' RE-TEST with `-fsanitize=undefined` option...'
|
|
510
|
+
$(QUIET)$(MAKE) IOARENA=false CXXSTD=$(CXXSTD) CFLAGS_EXTRA="-DENABLE_UBSAN -Ofast -fsanitize=undefined -fsanitize-undefined-trap-on-error" test
|
|
511
|
+
|
|
512
|
+
test-asan:
|
|
513
|
+
@echo ' RE-TEST with `-fsanitize=address` option...'
|
|
514
|
+
$(QUIET)$(MAKE) IOARENA=false CXXSTD=$(CXXSTD) CFLAGS_EXTRA="-Os -fsanitize=address" test
|
|
515
|
+
|
|
516
|
+
test-leak:
|
|
517
|
+
@echo ' RE-TEST with `-fsanitize=leak` option...'
|
|
518
|
+
$(QUIET)$(MAKE) IOARENA=false CXXSTD=$(CXXSTD) CFLAGS_EXTRA="-fsanitize=leak" test
|
|
519
|
+
|
|
520
|
+
mdbx_example: mdbx.h example/example-mdbx.c libmdbx.$(SO_SUFFIX)
|
|
521
|
+
@echo ' CC+LD $@'
|
|
522
|
+
$(QUIET)$(CC) $(CFLAGS) -I. example/example-mdbx.c ./libmdbx.$(SO_SUFFIX) -o $@
|
|
523
|
+
|
|
524
|
+
build-test: all mdbx_example mdbx_test
|
|
525
|
+
|
|
526
|
+
define test-rule
|
|
527
|
+
$(patsubst %.c++,%.o,$(1)): $(1) $(TEST_INC) $(HEADERS) $(lastword $(MAKEFILE_LIST))
|
|
528
|
+
@echo ' CC $$@'
|
|
529
|
+
$(QUIET)$$(CXX) $$(CXXFLAGS) $$(MDBX_BUILD_OPTIONS) -DMDBX_BUILD_CXX=1 -DMDBX_WITHOUT_MSVC_CRT=0 -c $(1) -o $$@
|
|
530
|
+
|
|
531
|
+
endef
|
|
532
|
+
$(foreach file,$(TEST_SRC),$(eval $(call test-rule,$(file))))
|
|
533
|
+
|
|
534
|
+
define tool-rule
|
|
535
|
+
mdbx_$(1): src/tools/$(1).c libmdbx.a
|
|
536
|
+
@echo ' CC+LD $$@'
|
|
537
|
+
$(QUIET)$$(CC) $$(CFLAGS) $$(MDBX_BUILD_OPTIONS) -Isrc '-DMDBX_CONFIG_H="config.h"' $$^ $$(EXE_LDFLAGS) $$(LIBS) -o $$@
|
|
538
|
+
|
|
539
|
+
mdbx_$(1).static: src/tools/$(1).c mdbx-static.o
|
|
540
|
+
@echo ' CC+LD $$@'
|
|
541
|
+
$(QUIET)$$(CC) $$(CFLAGS) $$(MDBX_BUILD_OPTIONS) -Isrc '-DMDBX_CONFIG_H="config.h"' $$^ $$(EXE_LDFLAGS) $$(LIBS) -static -Wl,--strip-all -o $$@
|
|
542
|
+
|
|
543
|
+
mdbx_$(1).static-lto: src/tools/$(1).c src/config.h src/version.c src/alloy.c $(ALLOY_DEPS)
|
|
544
|
+
@echo ' CC+LD $$@'
|
|
545
|
+
$(QUIET)$$(CC) $$(CFLAGS) -Os -flto $$(MDBX_BUILD_OPTIONS) -Isrc '-DLIBMDBX_API=' '-DMDBX_CONFIG_H="config.h"' \
|
|
546
|
+
$$< src/alloy.c $$(EXE_LDFLAGS) $$(LIBS) -static -Wl,--strip-all -o $$@
|
|
547
|
+
|
|
548
|
+
endef
|
|
549
|
+
$(foreach file,$(TOOLS),$(eval $(call tool-rule,$(file))))
|
|
550
|
+
|
|
551
|
+
mdbx_test: $(TEST_OBJ) libmdbx.$(SO_SUFFIX)
|
|
552
|
+
@echo ' LD $@'
|
|
553
|
+
$(QUIET)$(CXX) $(CXXFLAGS) $(TEST_OBJ) -Wl,-rpath . -L . -l mdbx $(EXE_LDFLAGS) $(LIBS) -o $@
|
|
554
|
+
|
|
555
|
+
$(MDBX_GIT_DIR)/HEAD $(MDBX_GIT_DIR)/index $(MDBX_GIT_DIR)/refs/tags:
|
|
556
|
+
@echo '*** ' >&2
|
|
557
|
+
@echo '*** Please don''t use tarballs nor zips which are automatically provided by Github !' >&2
|
|
558
|
+
@echo '*** These archives do not contain version information and thus are unfit to build libmdbx.' >&2
|
|
559
|
+
@echo '*** ' >&2
|
|
560
|
+
@echo '*** Instead just follow the https://libmdbx.dqdkfa.ru/usage.html' >&2
|
|
561
|
+
@echo '*** PLEASE, AVOID USING ANY OTHER TECHNIQUES.' >&2
|
|
562
|
+
@echo '*** ' >&2
|
|
563
|
+
@false
|
|
564
|
+
|
|
565
|
+
src/version.c: src/version.c.in $(lastword $(MAKEFILE_LIST)) $(MDBX_GIT_DIR)/HEAD $(MDBX_GIT_DIR)/index $(MDBX_GIT_DIR)/refs/tags LICENSE NOTICE
|
|
566
|
+
@echo ' MAKE $@'
|
|
567
|
+
$(QUIET)$(SED) \
|
|
568
|
+
-e "s|@MDBX_GIT_TIMESTAMP@|$(MDBX_GIT_TIMESTAMP)|" \
|
|
569
|
+
-e "s|@MDBX_GIT_TREE@|$(shell git show --no-patch --format=%T HEAD || echo 'Please install latest get version')|" \
|
|
570
|
+
-e "s|@MDBX_GIT_COMMIT@|$(shell git show --no-patch --format=%H HEAD || echo 'Please install latest get version')|" \
|
|
571
|
+
-e "s|@MDBX_GIT_DESCRIBE@|$(MDBX_GIT_DESCRIBE)|" \
|
|
572
|
+
-e "s|\$${MDBX_VERSION_MAJOR}|$(shell echo '$(MDBX_GIT_3DOT)' | cut -d . -f 1)|" \
|
|
573
|
+
-e "s|\$${MDBX_VERSION_MINOR}|$(shell echo '$(MDBX_GIT_3DOT)' | cut -d . -f 2)|" \
|
|
574
|
+
-e "s|\$${MDBX_VERSION_PATCH}|$(shell echo '$(MDBX_GIT_3DOT)' | cut -d . -f 3)|" \
|
|
575
|
+
-e "s|\$${MDBX_VERSION_TWEAK}|$(MDBX_GIT_TWEAK)|" \
|
|
576
|
+
-e "s|@MDBX_VERSION_PRERELEASE@|$(MDBX_GIT_PRERELEASE)|" \
|
|
577
|
+
-e "s|@MDBX_VERSION_PURE@|$(MDBX_VERSION_PURE)|" \
|
|
578
|
+
src/version.c.in >$@
|
|
579
|
+
|
|
580
|
+
src/config.h: @buildflags.tag $(WAIT) src/version.c $(lastword $(MAKEFILE_LIST)) LICENSE NOTICE
|
|
581
|
+
@echo ' MAKE $@'
|
|
582
|
+
$(QUIET)(echo '#define MDBX_BUILD_TIMESTAMP "$(MDBX_BUILD_TIMESTAMP)"' \
|
|
583
|
+
&& echo "#define MDBX_BUILD_FLAGS \"$$(cat @buildflags.tag)\"" \
|
|
584
|
+
&& echo '#define MDBX_BUILD_COMPILER "$(shell (LC_ALL=C $(CC) --version || echo 'Please use GCC or CLANG compatible compiler') | head -1)"' \
|
|
585
|
+
&& echo '#define MDBX_BUILD_TARGET "$(shell set -o pipefail; (LC_ALL=C $(CC) -v 2>&1 | grep -i '^Target:' | cut -d ' ' -f 2- || (LC_ALL=C $(CC) --version | grep -qi e2k && echo E2K) || echo 'Please use GCC or CLANG compatible compiler') | head -1)"' \
|
|
586
|
+
&& echo '#define MDBX_BUILD_SOURCERY $(MDBX_BUILD_SOURCERY)' \
|
|
587
|
+
&& echo '#define MDBX_BUILD_CXX $(call select_by,MDBX_BUILD_CXX,1,0)' \
|
|
588
|
+
&& echo '#define MDBX_BUILD_METADATA "$(MDBX_BUILD_METADATA)"' \
|
|
589
|
+
) >$@
|
|
590
|
+
|
|
591
|
+
mdbx-dylib.o: src/config.h src/version.c src/alloy.c $(ALLOY_DEPS) $(lastword $(MAKEFILE_LIST)) LICENSE NOTICE
|
|
592
|
+
@echo ' CC $@'
|
|
593
|
+
$(QUIET)$(CC) $(CFLAGS) $(MDBX_BUILD_OPTIONS) '-DMDBX_CONFIG_H="config.h"' -DLIBMDBX_EXPORTS=1 -c src/alloy.c -o $@
|
|
594
|
+
|
|
595
|
+
mdbx-static.o: src/config.h src/version.c src/alloy.c $(ALLOY_DEPS) $(lastword $(MAKEFILE_LIST)) LICENSE NOTICE
|
|
596
|
+
@echo ' CC $@'
|
|
597
|
+
$(QUIET)$(CC) $(CFLAGS) $(MDBX_BUILD_OPTIONS) '-DMDBX_CONFIG_H="config.h"' -ULIBMDBX_EXPORTS -c src/alloy.c -o $@
|
|
598
|
+
|
|
599
|
+
docs/Doxyfile: docs/Doxyfile.in src/version.c $(lastword $(MAKEFILE_LIST))
|
|
600
|
+
@echo ' MAKE $@'
|
|
601
|
+
$(QUIET)$(SED) \
|
|
602
|
+
-e "s|@MDBX_GIT_TIMESTAMP@|$(MDBX_GIT_TIMESTAMP)|" \
|
|
603
|
+
-e "s|@MDBX_GIT_TREE@|$(shell git show --no-patch --format=%T HEAD || echo 'Please install latest get version')|" \
|
|
604
|
+
-e "s|@MDBX_GIT_COMMIT@|$(shell git show --no-patch --format=%H HEAD || echo 'Please install latest get version')|" \
|
|
605
|
+
-e "s|@MDBX_GIT_DESCRIBE@|$(MDBX_GIT_DESCRIBE)|" \
|
|
606
|
+
-e "s|\$${MDBX_VERSION_MAJOR}|$(shell echo '$(MDBX_GIT_3DOT)' | cut -d . -f 1)|" \
|
|
607
|
+
-e "s|\$${MDBX_VERSION_MINOR}|$(shell echo '$(MDBX_GIT_3DOT)' | cut -d . -f 2)|" \
|
|
608
|
+
-e "s|\$${MDBX_VERSION_PATCH}|$(shell echo '$(MDBX_GIT_3DOT)' | cut -d . -f 3)|" \
|
|
609
|
+
-e "s|\$${MDBX_VERSION_TWEAK}|$(MDBX_GIT_TWEAK)|" \
|
|
610
|
+
-e "s|@MDBX_VERSION_PRERELEASE@|$(MDBX_GIT_PRERELEASE)|" \
|
|
611
|
+
-e "s|@MDBX_VERSION_PURE@|$(MDBX_VERSION_PURE)|" \
|
|
612
|
+
docs/Doxyfile.in >$@
|
|
613
|
+
|
|
614
|
+
define md-extract-section
|
|
615
|
+
docs/__$(1).md: $(2) $(lastword $(MAKEFILE_LIST))
|
|
616
|
+
@echo ' EXTRACT $1'
|
|
617
|
+
$(QUIET)$(SED) -n '/<!-- section-begin $(1) -->/,/<!-- section-end -->/p' $(2) >$$@ && test -s $$@
|
|
618
|
+
|
|
619
|
+
endef
|
|
620
|
+
$(foreach section,overview mithril characteristics improvements history usage performance bindings,$(eval $(call md-extract-section,$(section),README.md)))
|
|
621
|
+
|
|
622
|
+
docs/contrib.fame: src/version.c $(lastword $(MAKEFILE_LIST))
|
|
623
|
+
@echo ' MAKE $@'
|
|
624
|
+
$(QUIET)echo "" > $@ && git fame --show-email --format=md --silent-progress -w -M -C | grep '^|' >> $@
|
|
625
|
+
|
|
626
|
+
docs/overall.md: docs/__overview.md docs/_toc.md docs/__mithril.md docs/__history.md COPYRIGHT LICENSE NOTICE $(lastword $(MAKEFILE_LIST))
|
|
627
|
+
@echo ' MAKE $@'
|
|
628
|
+
$(QUIET)echo -e "\\mainpage Overall\n\\section brief Brief" | cat - $(filter %.md, $^) >$@ && echo -e "\n\n\nLicense\n=======\n" | cat - LICENSE >>$@
|
|
629
|
+
|
|
630
|
+
docs/intro.md: docs/_preface.md docs/__characteristics.md docs/__improvements.md docs/_restrictions.md docs/__performance.md
|
|
631
|
+
@echo ' MAKE $@'
|
|
632
|
+
$(QUIET)cat $^ | $(SED) 's/^Performance comparison$$/Performance comparison {#performance}/;s/^Improvements beyond LMDB$$/Improvements beyond LMDB {#improvements}/' >$@
|
|
633
|
+
|
|
634
|
+
docs/usage.md: docs/__usage.md docs/_starting.md docs/__bindings.md
|
|
635
|
+
@echo ' MAKE $@'
|
|
636
|
+
$(QUIET)echo -e "\\page usage Usage\n\\section getting Building & Embedding" | cat - $^ | $(SED) 's/^Bindings$$/Bindings {#bindings}/' >$@
|
|
637
|
+
|
|
638
|
+
doxygen: docs/Doxyfile docs/overall.md docs/intro.md docs/usage.md mdbx.h mdbx.h++ src/options.h ChangeLog.md COPYRIGHT LICENSE NOTICE $(lastword $(MAKEFILE_LIST))
|
|
639
|
+
@echo ' RUNNING doxygen...'
|
|
640
|
+
$(QUIET)rm -rf docs/html && \
|
|
641
|
+
cat mdbx.h | tr '\n' '\r' | $(SED) -e 's/LIBMDBX_INLINE_API\s*(\s*\([^,]\+\),\s*\([^,]\+\),\s*(\s*\([^)]\+\)\s*)\s*)\s*{/inline \1 \2(\3) {/g' | tr '\r' '\n' >docs/mdbx.h && \
|
|
642
|
+
cp mdbx.h++ src/options.h ChangeLog.md docs/ && (cd docs && doxygen Doxyfile $(HUSH)) && cp COPYRIGHT LICENSE NOTICE docs/html/
|
|
643
|
+
|
|
644
|
+
mdbx++-dylib.o: src/config.h src/mdbx.c++ mdbx.h mdbx.h++ $(lastword $(MAKEFILE_LIST))
|
|
645
|
+
@echo ' CC $@'
|
|
646
|
+
$(QUIET)$(CXX) $(CXXFLAGS) $(MDBX_BUILD_OPTIONS) '-DMDBX_CONFIG_H="config.h"' -DLIBMDBX_EXPORTS=1 -c src/mdbx.c++ -o $@
|
|
647
|
+
|
|
648
|
+
mdbx++-static.o: src/config.h src/mdbx.c++ mdbx.h mdbx.h++ $(lastword $(MAKEFILE_LIST))
|
|
649
|
+
@echo ' CC $@'
|
|
650
|
+
$(QUIET)$(CXX) $(CXXFLAGS) $(MDBX_BUILD_OPTIONS) '-DMDBX_CONFIG_H="config.h"' -ULIBMDBX_EXPORTS -c src/mdbx.c++ -o $@
|
|
651
|
+
|
|
652
|
+
dist: tags $(WAIT) @dist-checked.tag libmdbx-sources-$(MDBX_VERSION_IDENT).tar.gz $(lastword $(MAKEFILE_LIST))
|
|
653
|
+
@echo ' AMALGAMATION is done'
|
|
654
|
+
|
|
655
|
+
tags:
|
|
656
|
+
@echo ' FETCH git tags...'
|
|
657
|
+
$(QUIET)git fetch --tags --force
|
|
658
|
+
|
|
659
|
+
release-assets: libmdbx-amalgamated-$(MDBX_GIT_3DOT).zpaq \
|
|
660
|
+
libmdbx-amalgamated-$(MDBX_GIT_3DOT).tar.xz \
|
|
661
|
+
libmdbx-amalgamated-$(MDBX_GIT_3DOT).tar.bz2 \
|
|
662
|
+
libmdbx-amalgamated-$(MDBX_GIT_3DOT).tar.gz \
|
|
663
|
+
libmdbx-amalgamated-$(subst .,_,$(MDBX_GIT_3DOT)).zip
|
|
664
|
+
$(QUIET)([ \
|
|
665
|
+
"$$(set -o pipefail; git describe | $(SED) -n '/^v[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}$$/p' || echo fail-left)" \
|
|
666
|
+
== \
|
|
667
|
+
"$$(git describe --tags --dirty=-dirty || echo fail-right)" ] \
|
|
668
|
+
|| (echo 'ERROR: Is not a valid release because not in the clean state with a suitable annotated tag!!!' >&2 && false)) \
|
|
669
|
+
&& echo ' RELEASE ASSETS are done'
|
|
670
|
+
|
|
671
|
+
@dist-checked.tag: $(addprefix $(DIST_DIR)/, $(DIST_SRC) $(DIST_EXTRA))
|
|
672
|
+
@echo -n ' VERIFY amalgamated sources...'
|
|
673
|
+
$(QUIET)rm -rf $@ $(DIST_DIR)/@tmp-essentials.inc $(DIST_DIR)/@tmp-internals.inc \
|
|
674
|
+
&& if grep -R "define xMDBX_ALLOY" dist | grep -q MDBX_BUILD_SOURCERY; then echo "sed output is WRONG!" >&2; exit 2; fi \
|
|
675
|
+
&& rm -rf @dist-check && cp -r -p $(DIST_DIR) @dist-check && ($(MAKE) -j IOARENA=false CXXSTD=$(CXXSTD) -C @dist-check all ninja-assertions >@dist-check.log 2>@dist-check.err || (cat @dist-check.err && exit 1)) \
|
|
676
|
+
&& touch $@ || (echo " FAILED! See @dist-check.log and @dist-check.err" >&2; exit 2) && echo " Ok"
|
|
677
|
+
|
|
678
|
+
%.tar.gz: @dist-checked.tag
|
|
679
|
+
@echo ' CREATE $@'
|
|
680
|
+
$(QUIET)$(TAR) -c $(shell LC_ALL=C $(TAR) --help | grep -q -- '--owner' && echo '--owner=0 --group=0') -f - -C dist $(DIST_SRC) $(DIST_EXTRA) | gzip -c -9 >$@
|
|
681
|
+
|
|
682
|
+
%.tar.xz: @dist-checked.tag
|
|
683
|
+
@echo ' CREATE $@'
|
|
684
|
+
$(QUIET)$(TAR) -c $(shell LC_ALL=C $(TAR) --help | grep -q -- '--owner' && echo '--owner=0 --group=0') -f - -C dist $(DIST_SRC) $(DIST_EXTRA) | xz -9 -z >$@
|
|
685
|
+
|
|
686
|
+
%.tar.bz2: @dist-checked.tag
|
|
687
|
+
@echo ' CREATE $@'
|
|
688
|
+
$(QUIET)$(TAR) -c $(shell LC_ALL=C $(TAR) --help | grep -q -- '--owner' && echo '--owner=0 --group=0') -f - -C dist $(DIST_SRC) $(DIST_EXTRA) | bzip2 -9 -z >$@
|
|
689
|
+
|
|
690
|
+
%.zip: @dist-checked.tag
|
|
691
|
+
@echo ' CREATE $@'
|
|
692
|
+
$(QUIET)rm -rf $@ && (cd dist && $(ZIP) -9 ../$@ $(DIST_SRC) $(DIST_EXTRA)) &>@zip.log
|
|
693
|
+
|
|
694
|
+
%.zpaq: @dist-checked.tag
|
|
695
|
+
@echo ' CREATE $@'
|
|
696
|
+
$(QUIET)rm -rf $@ && (cd dist && zpaq a ../$@ $(DIST_SRC) $(DIST_EXTRA) -m59) &>@zpaq.log
|
|
697
|
+
|
|
698
|
+
$(DIST_DIR)/@tmp-essentials.inc: src/version.c $(ALLOY_DEPS) $(lastword $(MAKEFILE_LIST))
|
|
699
|
+
@echo ' ALLOYING...'
|
|
700
|
+
$(QUIET)mkdir -p dist \
|
|
701
|
+
&& (grep -v '#include ' src/alloy.c && echo '#define MDBX_BUILD_SOURCERY $(MDBX_BUILD_SOURCERY)' \
|
|
702
|
+
&& $(SED) \
|
|
703
|
+
-e 's|#include "../mdbx.h"|@INCLUDE "mdbx.h"|' \
|
|
704
|
+
-e '/#include "preface.h"/r src/preface.h' \
|
|
705
|
+
-e '/#include "osal.h"/r src/osal.h' \
|
|
706
|
+
-e '/#include "options.h"/r src/options.h' \
|
|
707
|
+
-e '/#include "atomics-types.h"/r src/atomics-types.h' \
|
|
708
|
+
-e '/#include "layout-dxb.h"/r src/layout-dxb.h' \
|
|
709
|
+
-e '/#include "layout-lck.h"/r src/layout-lck.h' \
|
|
710
|
+
-e '/#include "logging_and_debug.h"/r src/logging_and_debug.h' \
|
|
711
|
+
-e '/#include "utils.h"/r src/utils.h' \
|
|
712
|
+
-e '/#include "pnl.h"/r src/pnl.h' \
|
|
713
|
+
src/essentials.h \
|
|
714
|
+
| $(SED) \
|
|
715
|
+
-e '/#pragma once/d' -e '/#include "/d' \
|
|
716
|
+
-e '/ clang-format o/d' -e '/ \*INDENT-O/d' \
|
|
717
|
+
| grep -v '^/// ') >$@
|
|
718
|
+
|
|
719
|
+
$(DIST_DIR)/@tmp-internals.inc: $(DIST_DIR)/@tmp-essentials.inc src/version.c $(ALLOY_DEPS) $(lastword $(MAKEFILE_LIST))
|
|
720
|
+
$(QUIET)(cat $(DIST_DIR)/@tmp-essentials.inc \
|
|
721
|
+
&& $(SED) \
|
|
722
|
+
-e '/#include "essentials.h"/d' \
|
|
723
|
+
-e '/#include "atomics-ops.h"/r src/atomics-ops.h' \
|
|
724
|
+
-e '/#include "proto.h"/r src/proto.h' \
|
|
725
|
+
-e '/#include "txl.h"/r src/txl.h' \
|
|
726
|
+
-e '/#include "unaligned.h"/r src/unaligned.h' \
|
|
727
|
+
-e '/#include "cogs.h"/r src/cogs.h' \
|
|
728
|
+
-e '/#include "cursor.h"/r src/cursor.h' \
|
|
729
|
+
-e '/#include "dbi.h"/r src/dbi.h' \
|
|
730
|
+
-e '/#include "dpl.h"/r src/dpl.h' \
|
|
731
|
+
-e '/#include "gc.h"/r src/gc.h' \
|
|
732
|
+
-e '/#include "lck.h"/r src/lck.h' \
|
|
733
|
+
-e '/#include "meta.h"/r src/meta.h' \
|
|
734
|
+
-e '/#include "node.h"/r src/node.h' \
|
|
735
|
+
-e '/#include "page-iov.h"/r src/page-iov.h' \
|
|
736
|
+
-e '/#include "page-ops.h"/r src/page-ops.h' \
|
|
737
|
+
-e '/#include "spill.h"/r src/spill.h' \
|
|
738
|
+
-e '/#include "sort.h"/r src/sort.h' \
|
|
739
|
+
-e '/#include "tls.h"/r src/tls.h' \
|
|
740
|
+
-e '/#include "walk.h"/r src/walk.h' \
|
|
741
|
+
-e '/#include "windows-import.h"/r src/windows-import.h' \
|
|
742
|
+
src/internals.h \
|
|
743
|
+
| $(SED) \
|
|
744
|
+
-e '/#pragma once/d' -e '/#include "/d' \
|
|
745
|
+
-e '/ clang-format o/d' -e '/ \*INDENT-O/d' \
|
|
746
|
+
| grep -v '^/// ') >$@
|
|
747
|
+
|
|
748
|
+
$(DIST_DIR)/mdbx.c: $(DIST_DIR)/@tmp-internals.inc $(lastword $(MAKEFILE_LIST))
|
|
749
|
+
@echo ' MAKE $@'
|
|
750
|
+
$(QUIET)(cat $(DIST_DIR)/@tmp-internals.inc $(shell git ls-files src/*.c | grep -v alloy) src/version.c | $(SED) \
|
|
751
|
+
-e '/#include "debug_begin.h"/r src/debug_begin.h' \
|
|
752
|
+
-e '/#include "debug_end.h"/r src/debug_end.h' \
|
|
753
|
+
) | $(SED) -e '/#include "/d;/#pragma once/d' -e 's|@INCLUDE|#include|' \
|
|
754
|
+
-e '/ clang-format o/d;/ \*INDENT-O/d' -e '3i /* clang-format off */' | cat -s >$@
|
|
755
|
+
|
|
756
|
+
$(DIST_DIR)/mdbx.c++: $(DIST_DIR)/@tmp-essentials.inc src/mdbx.c++ $(lastword $(MAKEFILE_LIST))
|
|
757
|
+
@echo ' MAKE $@'
|
|
758
|
+
$(QUIET)cat $(DIST_DIR)/@tmp-essentials.inc src/mdbx.c++ | $(SED) \
|
|
759
|
+
-e '/#define xMDBX_ALLOY/d' \
|
|
760
|
+
-e '/#include "/d;/#pragma once/d' \
|
|
761
|
+
-e 's|@INCLUDE|#include|;s|"mdbx.h"|"mdbx.h++"|' \
|
|
762
|
+
-e '/ clang-format o/d;/ \*INDENT-O/d' -e '3i /* clang-format off */' | cat -s >$@
|
|
763
|
+
|
|
764
|
+
define dist-tool-rule
|
|
765
|
+
$(DIST_DIR)/mdbx_$(1).c: src/tools/$(1).c src/tools/wingetopt.h src/tools/wingetopt.c \
|
|
766
|
+
$(DIST_DIR)/@tmp-internals.inc $(lastword $(MAKEFILE_LIST))
|
|
767
|
+
@echo ' MAKE $$@'
|
|
768
|
+
$(QUIET)mkdir -p dist && $(SED) \
|
|
769
|
+
-e '/#include "essentials.h"/r $(DIST_DIR)/@tmp-essentials.inc' \
|
|
770
|
+
-e '/#include "wingetopt.h"/r src/tools/wingetopt.c' \
|
|
771
|
+
-e '/ clang-format o/d' -e '/ \*INDENT-O/d' \
|
|
772
|
+
src/tools/$(1).c \
|
|
773
|
+
| $(SED) -e '/#include "/d;/#pragma once/d;/#define xMDBX_ALLOY/d' -e 's|@INCLUDE|#include|' \
|
|
774
|
+
-e '/ clang-format o/d;/ \*INDENT-O/d' -e '9i /* clang-format off */' | cat -s >$$@
|
|
775
|
+
|
|
776
|
+
endef
|
|
777
|
+
$(foreach file,$(TOOLS),$(eval $(call dist-tool-rule,$(file))))
|
|
778
|
+
|
|
779
|
+
define dist-extra-rule
|
|
780
|
+
$(DIST_DIR)/$(1): $(1) src/version.c $(lastword $(MAKEFILE_LIST))
|
|
781
|
+
@echo ' REFINE $$@'
|
|
782
|
+
$(QUIET)mkdir -p $$(dir $$@) && $(SED) -e '/^#> dist-cutoff-begin/,/^#< dist-cutoff-end/d' $$< | cat -s >$$@
|
|
783
|
+
|
|
784
|
+
endef
|
|
785
|
+
$(foreach file,mdbx.h mdbx.h++ $(filter-out man1/% VERSION.json .clang-format-ignore %.in ntdll.def,$(DIST_EXTRA)),$(eval $(call dist-extra-rule,$(file))))
|
|
786
|
+
|
|
787
|
+
$(DIST_DIR)/VERSION.json: src/version.c
|
|
788
|
+
@echo ' MAKE $@'
|
|
789
|
+
$(QUIET)mkdir -p $(DIST_DIR)/ && echo "{ \"git_describe\": \"$(MDBX_GIT_DESCRIBE)\", \"git_timestamp\": \"$(MDBX_GIT_TIMESTAMP)\", \"git_tree\": \"$(shell git show --no-patch --format=%T HEAD 2>&1)\", \"git_commit\": \"$(shell git show --no-patch --format=%H HEAD 2>&1)\", \"semver\": \"$(MDBX_VERSION_PURE)\" }" >$@
|
|
790
|
+
|
|
791
|
+
$(DIST_DIR)/.clang-format-ignore: $(lastword $(MAKEFILE_LIST))
|
|
792
|
+
@echo ' MAKE $@'
|
|
793
|
+
$(QUIET)echo "$(filter-out %.h %h++,$(DIST_SRC))" | tr ' ' \\n > $@
|
|
794
|
+
|
|
795
|
+
$(DIST_DIR)/ntdll.def: src/ntdll.def
|
|
796
|
+
@echo ' COPY $@'
|
|
797
|
+
$(QUIET)mkdir -p $(DIST_DIR)/ && cp $< $@
|
|
798
|
+
|
|
799
|
+
$(DIST_DIR)/config.h.in: src/config.h.in
|
|
800
|
+
@echo ' COPY $@'
|
|
801
|
+
$(QUIET)mkdir -p $(DIST_DIR)/ && cp $< $@
|
|
802
|
+
|
|
803
|
+
$(DIST_DIR)/man1/mdbx_%.1: src/man1/mdbx_%.1
|
|
804
|
+
@echo ' COPY $@'
|
|
805
|
+
$(QUIET)mkdir -p $(DIST_DIR)/man1/ && cp $< $@
|
|
806
|
+
|
|
807
|
+
endif
|
|
808
|
+
|
|
809
|
+
################################################################################
|
|
810
|
+
# Cross-compilation simple test
|
|
811
|
+
|
|
812
|
+
CROSS_LIST = \
|
|
813
|
+
aarch64-linux-gnu-gcc \
|
|
814
|
+
arm-linux-gnueabihf-gcc \
|
|
815
|
+
hppa-linux-gnu-gcc \
|
|
816
|
+
mips64-linux-gnuabi64-gcc \
|
|
817
|
+
mips-linux-gnu-gcc \
|
|
818
|
+
powerpc64-linux-gnu-gcc\
|
|
819
|
+
riscv64-linux-gnu-gcc \
|
|
820
|
+
s390x-linux-gnu-gcc \
|
|
821
|
+
sh4-linux-gnu-gcc
|
|
822
|
+
|
|
823
|
+
## On Ubuntu Noble (24.04.2) with QEMU 8.2 (8.2.2+ds-0ubuntu1.7) & GCC 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04)
|
|
824
|
+
# sparc64-linux-gnu-gcc - fails mmap/BAD_ADDRESS (previously: qemu-coredump sice mmap-troubles, qemu fails fcntl for F_SETLK/F_GETLK)
|
|
825
|
+
# alpha-linux-gnu-gcc - qemu-coredump (qemu mmap-troubles)
|
|
826
|
+
# powerpc-linux-gnu-gcc - fails mmap/BAD_ADDRESS (previously: qemu-coredump sice mmap-troubles, qemu fails fcntl for F_SETLK/F_GETLK)
|
|
827
|
+
CROSS_LIST_NOQEMU = sparc64-linux-gnu-gcc alpha-linux-gnu-gcc powerpc-linux-gnu-gcc
|
|
828
|
+
|
|
829
|
+
cross-gcc:
|
|
830
|
+
@echo ' Re-building by cross-compiler for: $(CROSS_LIST_NOQEMU) $(CROSS_LIST)'
|
|
831
|
+
@echo "CORRESPONDING CROSS-COMPILERs ARE REQUIRED."
|
|
832
|
+
@echo "FOR INSTANCE: sudo apt install \$$(apt list 'g++-*' | grep 'g++-[a-z0-9]\+-linux-gnu/' | cut -f 1 -d / | sort -u)"
|
|
833
|
+
$(QUIET)for CC in $(CROSS_LIST_NOQEMU) $(CROSS_LIST); do \
|
|
834
|
+
echo "===================== $$CC"; \
|
|
835
|
+
$(MAKE) IOARENA=false CXXSTD= clean && CC=$$CC CXX=$$(echo $$CC | $(SED) 's/-gcc/-g++/') EXE_LDFLAGS=-static $(MAKE) IOARENA=false all || exit $$?; \
|
|
836
|
+
done
|
|
837
|
+
|
|
838
|
+
# Unfortunately qemu don't provide robust support for futexes.
|
|
839
|
+
# Therefore it is impossible to run full multi-process tests.
|
|
840
|
+
cross-qemu:
|
|
841
|
+
@echo ' Re-building by cross-compiler and re-check by QEMU for: $(CROSS_LIST)'
|
|
842
|
+
@echo "CORRESPONDING CROSS-COMPILERs AND QEMUs ARE REQUIRED."
|
|
843
|
+
@echo "FOR INSTANCE: "
|
|
844
|
+
@echo " 1) sudo apt install \$$(apt list 'g++-*' | grep 'g++-[a-z0-9]\+-linux-gnu/' | cut -f 1 -d / | sort -u)"
|
|
845
|
+
@echo " 2) sudo apt install binfmt-support qemu-user-static qemu-user \$$(apt list 'qemu-system-*' | grep 'qemu-system-[a-z0-9]\+/' | cut -f 1 -d / | sort -u)"
|
|
846
|
+
$(QUIET)for CC in $(CROSS_LIST); do \
|
|
847
|
+
echo "===================== $$CC + qemu"; \
|
|
848
|
+
$(MAKE) IOARENA=false CXXSTD= clean && \
|
|
849
|
+
CC=$$CC CXX=$$(echo $$CC | $(SED) 's/-gcc/-g++/') EXE_LDFLAGS=-static MDBX_BUILD_OPTIONS="-DMDBX_LOCKING=5 -DMDBX_SAFE4QEMU $(MDBX_BUILD_OPTIONS)" \
|
|
850
|
+
$(MAKE) IOARENA=false smoke-singleprocess test-singleprocess || exit $$?; \
|
|
851
|
+
done
|
|
852
|
+
|
|
853
|
+
#< dist-cutoff-end
|
|
854
|
+
|
|
855
|
+
install: $(LIBRARIES) $(MDBX_TOOLS) $(HEADERS)
|
|
856
|
+
@echo ' INSTALLING...'
|
|
857
|
+
$(QUIET)mkdir -p $(DESTDIR)$(prefix)/bin$(suffix) && \
|
|
858
|
+
$(INSTALL) -p $(EXE_INSTALL_FLAGS) $(MDBX_TOOLS) $(DESTDIR)$(prefix)/bin$(suffix)/ && \
|
|
859
|
+
mkdir -p $(DESTDIR)$(prefix)/lib$(suffix)/ && \
|
|
860
|
+
$(INSTALL) -p $(EXE_INSTALL_FLAGS) $(filter-out libmdbx.a,$(LIBRARIES)) $(DESTDIR)$(prefix)/lib$(suffix)/ && \
|
|
861
|
+
mkdir -p $(DESTDIR)$(prefix)/lib$(suffix)/ && \
|
|
862
|
+
$(INSTALL) -p libmdbx.a $(DESTDIR)$(prefix)/lib$(suffix)/ && \
|
|
863
|
+
mkdir -p $(DESTDIR)$(prefix)/include/ && \
|
|
864
|
+
$(INSTALL) -p -m 444 $(HEADERS) $(DESTDIR)$(prefix)/include/ && \
|
|
865
|
+
mkdir -p $(DESTDIR)$(mandir)/man1/ && \
|
|
866
|
+
$(INSTALL) -p -m 444 $(addprefix $(MAN_SRCDIR), $(MANPAGES)) $(DESTDIR)$(mandir)/man1/
|
|
867
|
+
|
|
868
|
+
install-strip: EXE_INSTALL_FLAGS = -s
|
|
869
|
+
install-strip: install
|
|
870
|
+
|
|
871
|
+
install-no-strip: EXE_INSTALL_FLAGS =
|
|
872
|
+
install-no-strip: install
|
|
873
|
+
|
|
874
|
+
uninstall:
|
|
875
|
+
@echo ' UNINSTALLING/REMOVE...'
|
|
876
|
+
$(QUIET)rm -f $(addprefix $(DESTDIR)$(prefix)/bin$(suffix)/,$(MDBX_TOOLS)) \
|
|
877
|
+
$(addprefix $(DESTDIR)$(prefix)/lib$(suffix)/,$(LIBRARIES)) \
|
|
878
|
+
$(addprefix $(DESTDIR)$(prefix)/include/,$(HEADERS)) \
|
|
879
|
+
$(addprefix $(DESTDIR)$(mandir)/man1/,$(MANPAGES))
|
|
880
|
+
|
|
881
|
+
################################################################################
|
|
882
|
+
# Benchmarking by ioarena
|
|
883
|
+
|
|
884
|
+
ifeq ($(origin IOARENA),undefined)
|
|
885
|
+
IOARENA := $(shell \
|
|
886
|
+
(test -x ../ioarena/@BUILD/src/ioarena && echo ../ioarena/@BUILD/src/ioarena) || \
|
|
887
|
+
(test -x ../../@BUILD/src/ioarena && echo ../../@BUILD/src/ioarena) || \
|
|
888
|
+
(test -x ../../src/ioarena && echo ../../src/ioarena) || which ioarena 2>&- || \
|
|
889
|
+
(echo false && echo '$(TIP) Clone and build the https://abf.io/erthink/ioarena.git within a neighbouring directory for availability of benchmarking.' >&2))
|
|
890
|
+
endif
|
|
891
|
+
NN ?= 25000000
|
|
892
|
+
BENCH_CRUD_MODE ?= nosync
|
|
893
|
+
|
|
894
|
+
bench-clean:
|
|
895
|
+
@echo ' REMOVE bench-*.txt _ioarena/*'
|
|
896
|
+
$(QUIET)rm -rf bench-*.txt _ioarena/*
|
|
897
|
+
|
|
898
|
+
re-bench: bench-clean bench
|
|
899
|
+
|
|
900
|
+
ifeq ($(or $(IOARENA),false),false)
|
|
901
|
+
bench bench-quartet bench-triplet bench-couple:
|
|
902
|
+
$(QUIET)echo 'The `ioarena` benchmark is required.' >&2 && \
|
|
903
|
+
echo 'Please clone and build the https://abf.io/erthink/ioarena.git within a neighbouring `ioarena` directory.' >&2 && \
|
|
904
|
+
false
|
|
905
|
+
|
|
906
|
+
else
|
|
907
|
+
|
|
908
|
+
.PHONY: bench bench-clean bench-couple re-bench bench-quartet bench-triplet
|
|
909
|
+
|
|
910
|
+
define bench-rule
|
|
911
|
+
bench-$(1)_$(2).txt: $(3) $(IOARENA) $(lastword $(MAKEFILE_LIST))
|
|
912
|
+
@echo ' RUNNING ioarena for $1/$2...'
|
|
913
|
+
$(QUIET)(export LD_LIBRARY_PATH="./:$$$${LD_LIBRARY_PATH}"; \
|
|
914
|
+
ldd $(IOARENA) | grep -i $(1) && \
|
|
915
|
+
$(IOARENA) -D $(1) -B batch -m $(BENCH_CRUD_MODE) -n $(2) \
|
|
916
|
+
| tee $$@ | grep throughput | $(SED) 's/throughput/batch×N/' && \
|
|
917
|
+
$(IOARENA) -D $(1) -B crud -m $(BENCH_CRUD_MODE) -n $(2) \
|
|
918
|
+
| tee -a $$@ | grep throughput | $(SED) 's/throughput/ crud/' && \
|
|
919
|
+
$(IOARENA) -D $(1) -B iterate,get,iterate,get,iterate -m $(BENCH_CRUD_MODE) -r 4 -n $(2) \
|
|
920
|
+
| tee -a $$@ | grep throughput | $(SED) '0,/throughput/{s/throughput/iterate/};s/throughput/ get/' && \
|
|
921
|
+
$(IOARENA) -D $(1) -B delete -m $(BENCH_CRUD_MODE) -n $(2) \
|
|
922
|
+
| tee -a $$@ | grep throughput | $(SED) 's/throughput/ delete/' && \
|
|
923
|
+
true) || mv -f $$@ $$@.error
|
|
924
|
+
|
|
925
|
+
endef
|
|
926
|
+
|
|
927
|
+
|
|
928
|
+
$(eval $(call bench-rule,mdbx,$(NN),libmdbx.$(SO_SUFFIX)))
|
|
929
|
+
|
|
930
|
+
$(eval $(call bench-rule,sophia,$(NN)))
|
|
931
|
+
$(eval $(call bench-rule,leveldb,$(NN)))
|
|
932
|
+
$(eval $(call bench-rule,rocksdb,$(NN)))
|
|
933
|
+
$(eval $(call bench-rule,wiredtiger,$(NN)))
|
|
934
|
+
$(eval $(call bench-rule,forestdb,$(NN)))
|
|
935
|
+
$(eval $(call bench-rule,lmdb,$(NN)))
|
|
936
|
+
$(eval $(call bench-rule,nessdb,$(NN)))
|
|
937
|
+
$(eval $(call bench-rule,sqlite3,$(NN)))
|
|
938
|
+
$(eval $(call bench-rule,ejdb,$(NN)))
|
|
939
|
+
$(eval $(call bench-rule,vedisdb,$(NN)))
|
|
940
|
+
$(eval $(call bench-rule,dummy,$(NN)))
|
|
941
|
+
bench: bench-mdbx_$(NN).txt
|
|
942
|
+
bench-quartet: bench-mdbx_$(NN).txt bench-lmdb_$(NN).txt bench-rocksdb_$(NN).txt bench-wiredtiger_$(NN).txt
|
|
943
|
+
bench-triplet: bench-mdbx_$(NN).txt bench-lmdb_$(NN).txt bench-sqlite3_$(NN).txt
|
|
944
|
+
bench-couple: bench-mdbx_$(NN).txt bench-lmdb_$(NN).txt
|
|
945
|
+
|
|
946
|
+
# $(eval $(call bench-rule,debug,10))
|
|
947
|
+
# .PHONY: bench-debug
|
|
948
|
+
# bench-debug: bench-debug_10.txt
|
|
949
|
+
|
|
950
|
+
endif
|