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,1269 @@
|
|
|
1
|
+
# Copyright (c) 2020-2025 Леонид Юрьев aka Leonid Yuriev <leo@yuriev.ru> ###############################################
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
#
|
|
4
|
+
# Donations are welcome to ETH `0xD104d8f8B2dC312aaD74899F83EBf3EEBDC1EA3A`. Всё будет хорошо!
|
|
5
|
+
|
|
6
|
+
# libmdbx = { Revised and extended descendant of Symas LMDB. } Please see README.md at
|
|
7
|
+
# https://gitflic.ru/project/erthink/libmdbx
|
|
8
|
+
#
|
|
9
|
+
# Libmdbx is superior to LMDB in terms of features and reliability, not inferior in performance. libmdbx works on Linux,
|
|
10
|
+
# FreeBSD, MacOS X and other systems compliant with POSIX.1-2008, but also support Windows as a complementary platform.
|
|
11
|
+
#
|
|
12
|
+
# The next version is under active non-public development and will be released as MithrilDB and libmithrildb for
|
|
13
|
+
# libraries & packages. Admittedly mythical Mithril is resembling silver but being stronger and lighter than steel.
|
|
14
|
+
# Therefore MithrilDB is rightly relevant name.
|
|
15
|
+
#
|
|
16
|
+
# MithrilDB will be radically different from libmdbx by the new database format and API based on C++17, as well as the
|
|
17
|
+
# Apache 2.0 License. The goal of this revolution is to provide a clearer and robust API, add more features and new
|
|
18
|
+
# valuable properties of database.
|
|
19
|
+
|
|
20
|
+
if(CMAKE_VERSION VERSION_LESS 3.8.2)
|
|
21
|
+
cmake_minimum_required(VERSION 3.0.2)
|
|
22
|
+
elseif(CMAKE_VERSION VERSION_LESS 3.12)
|
|
23
|
+
cmake_minimum_required(VERSION 3.8.2)
|
|
24
|
+
else()
|
|
25
|
+
cmake_minimum_required(VERSION 3.12)
|
|
26
|
+
endif()
|
|
27
|
+
|
|
28
|
+
cmake_policy(PUSH)
|
|
29
|
+
cmake_policy(VERSION ${CMAKE_MINIMUM_REQUIRED_VERSION})
|
|
30
|
+
if(NOT CMAKE_VERSION VERSION_LESS 3.21)
|
|
31
|
+
cmake_policy(SET CMP0126 NEW)
|
|
32
|
+
endif()
|
|
33
|
+
if(NOT CMAKE_VERSION VERSION_LESS 3.17)
|
|
34
|
+
cmake_policy(SET CMP0102 NEW)
|
|
35
|
+
endif()
|
|
36
|
+
if(NOT CMAKE_VERSION VERSION_LESS 3.15)
|
|
37
|
+
cmake_policy(SET CMP0091 NEW)
|
|
38
|
+
endif()
|
|
39
|
+
if(NOT CMAKE_VERSION VERSION_LESS 3.13)
|
|
40
|
+
cmake_policy(SET CMP0077 NEW)
|
|
41
|
+
endif()
|
|
42
|
+
if(NOT CMAKE_VERSION VERSION_LESS 3.12)
|
|
43
|
+
cmake_policy(SET CMP0075 NEW)
|
|
44
|
+
endif()
|
|
45
|
+
if(NOT CMAKE_VERSION VERSION_LESS 3.9)
|
|
46
|
+
cmake_policy(SET CMP0068 NEW)
|
|
47
|
+
cmake_policy(SET CMP0069 NEW)
|
|
48
|
+
include(CheckIPOSupported)
|
|
49
|
+
check_ipo_supported(RESULT CMAKE_INTERPROCEDURAL_OPTIMIZATION_AVAILABLE)
|
|
50
|
+
else()
|
|
51
|
+
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_AVAILABLE FALSE)
|
|
52
|
+
endif()
|
|
53
|
+
|
|
54
|
+
cmake_policy(SET CMP0054 NEW)
|
|
55
|
+
|
|
56
|
+
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git"
|
|
57
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/COPYRIGHT"
|
|
58
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE"
|
|
59
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/NOTICE"
|
|
60
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/README.md"
|
|
61
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx.h"
|
|
62
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx.h++"
|
|
63
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/alloy.c"
|
|
64
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-cold.c"
|
|
65
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-copy.c"
|
|
66
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-cursor.c"
|
|
67
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-dbi.c"
|
|
68
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-env.c"
|
|
69
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-extra.c"
|
|
70
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-key-transform.c"
|
|
71
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-misc.c"
|
|
72
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-opts.c"
|
|
73
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-range-estimate.c"
|
|
74
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-txn-data.c"
|
|
75
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-txn.c"
|
|
76
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/atomics-ops.h"
|
|
77
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/atomics-types.h"
|
|
78
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/audit.c"
|
|
79
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/chk.c"
|
|
80
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/cogs.c"
|
|
81
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/cogs.h"
|
|
82
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/coherency.c"
|
|
83
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in"
|
|
84
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/cursor.c"
|
|
85
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/cursor.h"
|
|
86
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/dbi.c"
|
|
87
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/dbi.h"
|
|
88
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/debug_begin.h"
|
|
89
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/debug_end.h"
|
|
90
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/dpl.c"
|
|
91
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/dpl.h"
|
|
92
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/dxb.c"
|
|
93
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/env.c"
|
|
94
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/essentials.h"
|
|
95
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/gc-get.c"
|
|
96
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/gc-put.c"
|
|
97
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/gc.h"
|
|
98
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/global.c"
|
|
99
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/internals.h"
|
|
100
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/layout-dxb.h"
|
|
101
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/layout-lck.h"
|
|
102
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/lck-posix.c"
|
|
103
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/lck-windows.c"
|
|
104
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/lck.c"
|
|
105
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/lck.h"
|
|
106
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/logging_and_debug.c"
|
|
107
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/logging_and_debug.h"
|
|
108
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/man1/mdbx_chk.1"
|
|
109
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/man1/mdbx_copy.1"
|
|
110
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/man1/mdbx_drop.1"
|
|
111
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/man1/mdbx_dump.1"
|
|
112
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/man1/mdbx_load.1"
|
|
113
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/man1/mdbx_stat.1"
|
|
114
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/mdbx.c++"
|
|
115
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/meta.c"
|
|
116
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/meta.h"
|
|
117
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/mvcc-readers.c"
|
|
118
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/node.c"
|
|
119
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/node.h"
|
|
120
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/ntdll.def"
|
|
121
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/options.h"
|
|
122
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/osal.c"
|
|
123
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/osal.h"
|
|
124
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/page-get.c"
|
|
125
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/page-iov.c"
|
|
126
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/page-iov.h"
|
|
127
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/page-ops.c"
|
|
128
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/page-ops.h"
|
|
129
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tree-search.c"
|
|
130
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/pnl.c"
|
|
131
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/pnl.h"
|
|
132
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/preface.h"
|
|
133
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/proto.h"
|
|
134
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/refund.c"
|
|
135
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/sort.h"
|
|
136
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/spill.c"
|
|
137
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/spill.h"
|
|
138
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/table.c"
|
|
139
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tls.c"
|
|
140
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tls.h"
|
|
141
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tools/chk.c"
|
|
142
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tools/copy.c"
|
|
143
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tools/drop.c"
|
|
144
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tools/dump.c"
|
|
145
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tools/load.c"
|
|
146
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tools/stat.c"
|
|
147
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tools/wingetopt.c"
|
|
148
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tools/wingetopt.h"
|
|
149
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tree-ops.c"
|
|
150
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/txl.c"
|
|
151
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/txl.h"
|
|
152
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/txn.c"
|
|
153
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/unaligned.h"
|
|
154
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/utils.c"
|
|
155
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/utils.h"
|
|
156
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/version.c.in"
|
|
157
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/walk.c"
|
|
158
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/walk.h"
|
|
159
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/windows-import.c"
|
|
160
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/windows-import.h"
|
|
161
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt")
|
|
162
|
+
set(MDBX_AMALGAMATED_SOURCE FALSE)
|
|
163
|
+
find_program(GIT git)
|
|
164
|
+
if(NOT GIT)
|
|
165
|
+
message(SEND_ERROR "Git command-line tool not found")
|
|
166
|
+
endif()
|
|
167
|
+
set(MDBX_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src")
|
|
168
|
+
elseif(
|
|
169
|
+
EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/VERSION.json"
|
|
170
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE"
|
|
171
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/NOTICE"
|
|
172
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx.c"
|
|
173
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx.c++"
|
|
174
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx.h"
|
|
175
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx.h++"
|
|
176
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx_chk.c"
|
|
177
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx_copy.c"
|
|
178
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx_dump.c"
|
|
179
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx_load.c"
|
|
180
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx_stat.c"
|
|
181
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx_drop.c"
|
|
182
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ntdll.def"
|
|
183
|
+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/config.h.in")
|
|
184
|
+
set(MDBX_AMALGAMATED_SOURCE TRUE)
|
|
185
|
+
set(MDBX_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
186
|
+
else()
|
|
187
|
+
message(
|
|
188
|
+
FATAL_ERROR
|
|
189
|
+
"\nThe set of libmdbx source code files is incomplete! "
|
|
190
|
+
"Instead just follow the https://libmdbx.dqdkfa.ru/usage.html " "PLEASE, AVOID USING ANY OTHER TECHNIQUES.")
|
|
191
|
+
endif()
|
|
192
|
+
|
|
193
|
+
# Provide version
|
|
194
|
+
include(cmake/utils.cmake)
|
|
195
|
+
set(MDBX_BUILD_METADATA
|
|
196
|
+
"${MDBX_BUILD_METADATA}"
|
|
197
|
+
CACHE STRING "An extra/custom information provided during libmdbx build")
|
|
198
|
+
semver_provide(MDBX "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" "${MDBX_BUILD_METADATA}" FALSE)
|
|
199
|
+
message(STATUS "libmdbx version is ${MDBX_VERSION}")
|
|
200
|
+
|
|
201
|
+
if(DEFINED PROJECT_NAME)
|
|
202
|
+
option(MDBX_FORCE_BUILD_AS_MAIN_PROJECT
|
|
203
|
+
"Force libmdbx to full control build options even it added as a subdirectory to your project." OFF)
|
|
204
|
+
endif()
|
|
205
|
+
|
|
206
|
+
if(DEFINED PROJECT_NAME AND NOT MDBX_FORCE_BUILD_AS_MAIN_PROJECT)
|
|
207
|
+
set(SUBPROJECT ON)
|
|
208
|
+
set(NOT_SUBPROJECT OFF)
|
|
209
|
+
if(NOT MDBX_AMALGAMATED_SOURCE AND NOT DEFINED BUILD_TESTING)
|
|
210
|
+
set(BUILD_TESTING OFF)
|
|
211
|
+
endif()
|
|
212
|
+
enable_language(C)
|
|
213
|
+
else()
|
|
214
|
+
set(SUBPROJECT OFF)
|
|
215
|
+
set(NOT_SUBPROJECT ON)
|
|
216
|
+
|
|
217
|
+
# Setup Apple stuff which should be set prior to the first project() or enable_language()
|
|
218
|
+
if(APPLE)
|
|
219
|
+
# Enable universal binaries for macOS (target arm64 and x86_64)
|
|
220
|
+
if(NOT DEFINED CMAKE_OSX_ARCHITECTURES)
|
|
221
|
+
set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64")
|
|
222
|
+
endif()
|
|
223
|
+
|
|
224
|
+
# Set the minimum macOS deployment target if not already defined
|
|
225
|
+
if(NOT DEFINED CMAKE_OSX_DEPLOYMENT_TARGET)
|
|
226
|
+
set(CMAKE_OSX_DEPLOYMENT_TARGET "13.0")
|
|
227
|
+
endif()
|
|
228
|
+
endif()
|
|
229
|
+
|
|
230
|
+
project(libmdbx C)
|
|
231
|
+
if(NOT MDBX_AMALGAMATED_SOURCE AND NOT DEFINED BUILD_TESTING)
|
|
232
|
+
set(BUILD_TESTING ON)
|
|
233
|
+
endif()
|
|
234
|
+
endif()
|
|
235
|
+
|
|
236
|
+
if(NOT MDBX_AMALGAMATED_SOURCE)
|
|
237
|
+
include(CTest)
|
|
238
|
+
option(MDBX_ENABLE_TESTS "Build libmdbx tests." ${BUILD_TESTING})
|
|
239
|
+
elseif(DEFINED MDBX_ENABLE_TESTS AND MDBX_ENABLE_TESTS)
|
|
240
|
+
message(WARNING "MDBX_ENABLE_TESTS=${MDBX_ENABLE_TESTS}: But amalgamated source code don't includes tests.")
|
|
241
|
+
set(MDBX_ENABLE_TESTS OFF)
|
|
242
|
+
endif()
|
|
243
|
+
|
|
244
|
+
# Try to find a C++ compiler unless sure that this is unnecessary.
|
|
245
|
+
if(NOT CMAKE_CXX_COMPILER_LOADED)
|
|
246
|
+
include(CheckLanguage)
|
|
247
|
+
if(NOT DEFINED MDBX_BUILD_CXX
|
|
248
|
+
OR MDBX_BUILD_CXX
|
|
249
|
+
OR (NOT MDBX_AMALGAMATED_SOURCE AND (NOT DEFINED MDBX_ENABLE_TESTS OR MDBX_ENABLE_TESTS)))
|
|
250
|
+
check_language(CXX)
|
|
251
|
+
if(CMAKE_CXX_COMPILER)
|
|
252
|
+
enable_language(CXX)
|
|
253
|
+
endif()
|
|
254
|
+
endif()
|
|
255
|
+
else()
|
|
256
|
+
enable_language(CXX)
|
|
257
|
+
endif()
|
|
258
|
+
|
|
259
|
+
# Set default build type to Release. This is to ease a User's life.
|
|
260
|
+
if(NOT CMAKE_BUILD_TYPE)
|
|
261
|
+
set(CMAKE_BUILD_TYPE
|
|
262
|
+
Release
|
|
263
|
+
CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE)
|
|
264
|
+
endif()
|
|
265
|
+
string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UPPERCASE)
|
|
266
|
+
|
|
267
|
+
if(NOT_SUBPROJECT AND (CMAKE_CROSSCOMPILING OR IOS))
|
|
268
|
+
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
|
|
269
|
+
endif()
|
|
270
|
+
|
|
271
|
+
if(NOT "$ENV{TEAMCITY_PROCESS_FLOW_ID}" STREQUAL "")
|
|
272
|
+
set(CI TEAMCITY)
|
|
273
|
+
message(STATUS "TeamCity CI")
|
|
274
|
+
elseif(NOT "$ENV{TRAVIS}" STREQUAL "")
|
|
275
|
+
set(CI TRAVIS)
|
|
276
|
+
message(STATUS "Travis CI")
|
|
277
|
+
elseif(NOT "$ENV{CIRCLECI}" STREQUAL "")
|
|
278
|
+
set(CI CIRCLE)
|
|
279
|
+
message(STATUS "Circle CI")
|
|
280
|
+
elseif(NOT "$ENV{APPVEYOR}" STREQUAL "")
|
|
281
|
+
set(CI APPVEYOR)
|
|
282
|
+
message(STATUS "AppVeyor CI")
|
|
283
|
+
elseif(NOT "$ENV{CI}" STREQUAL "")
|
|
284
|
+
set(CI "$ENV{CI}")
|
|
285
|
+
message(STATUS "Other CI (${CI})")
|
|
286
|
+
else()
|
|
287
|
+
message(STATUS "Assume No any CI environment")
|
|
288
|
+
unset(CI)
|
|
289
|
+
endif()
|
|
290
|
+
|
|
291
|
+
# output all mdbx-related targets in single directory
|
|
292
|
+
if(NOT DEFINED MDBX_OUTPUT_DIR)
|
|
293
|
+
set(MDBX_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
|
|
294
|
+
endif()
|
|
295
|
+
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${MDBX_OUTPUT_DIR})
|
|
296
|
+
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${MDBX_OUTPUT_DIR})
|
|
297
|
+
set(CMAKE_PDB_OUTPUT_DIRECTORY ${MDBX_OUTPUT_DIR})
|
|
298
|
+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${MDBX_OUTPUT_DIR})
|
|
299
|
+
|
|
300
|
+
include(CheckFunctionExists)
|
|
301
|
+
include(FindPackageMessage)
|
|
302
|
+
include(GNUInstallDirs)
|
|
303
|
+
|
|
304
|
+
if(CMAKE_C_COMPILER_ID STREQUAL "MSVC" AND MSVC_VERSION LESS 1900)
|
|
305
|
+
message(
|
|
306
|
+
SEND_ERROR "MSVC compiler ${MSVC_VERSION} is too old for building MDBX."
|
|
307
|
+
" At least \"Microsoft C/C++ Compiler\" version 19.0.24234.1 (Visual Studio 2015 Update 3) is required.")
|
|
308
|
+
endif()
|
|
309
|
+
|
|
310
|
+
if(NOT DEFINED THREADS_PREFER_PTHREAD_FLAG)
|
|
311
|
+
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
|
|
312
|
+
endif()
|
|
313
|
+
find_package(Threads REQUIRED)
|
|
314
|
+
|
|
315
|
+
include(cmake/compiler.cmake)
|
|
316
|
+
include(cmake/profile.cmake)
|
|
317
|
+
|
|
318
|
+
# Workaround for `-pthread` toolchain/cmake bug
|
|
319
|
+
if(NOT APPLE
|
|
320
|
+
AND NOT MSVC
|
|
321
|
+
AND CMAKE_USE_PTHREADS_INIT
|
|
322
|
+
AND NOT CMAKE_THREAD_LIBS_INIT
|
|
323
|
+
AND (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG))
|
|
324
|
+
check_compiler_flag("-pthread" CC_HAS_PTHREAD)
|
|
325
|
+
if(CC_HAS_PTHREAD AND NOT CMAKE_EXE_LINKER_FLAGS MATCHES "-pthread")
|
|
326
|
+
message(STATUS "Force add -pthread for linker flags to avoid troubles")
|
|
327
|
+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread")
|
|
328
|
+
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -pthread")
|
|
329
|
+
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -pthread")
|
|
330
|
+
endif()
|
|
331
|
+
endif()
|
|
332
|
+
|
|
333
|
+
check_function_exists(pow NOT_NEED_LIBM)
|
|
334
|
+
if(NOT_NEED_LIBM)
|
|
335
|
+
set(LIB_MATH "")
|
|
336
|
+
else()
|
|
337
|
+
set(CMAKE_REQUIRED_LIBRARIES m)
|
|
338
|
+
check_function_exists(pow HAVE_LIBM)
|
|
339
|
+
if(HAVE_LIBM)
|
|
340
|
+
set(LIB_MATH m)
|
|
341
|
+
else()
|
|
342
|
+
message(FATAL_ERROR "No libm found for math support")
|
|
343
|
+
endif()
|
|
344
|
+
endif()
|
|
345
|
+
|
|
346
|
+
if(SUBPROJECT)
|
|
347
|
+
if(NOT DEFINED BUILD_SHARED_LIBS)
|
|
348
|
+
option(BUILD_SHARED_LIBS "Build shared libraries (DLLs)" OFF)
|
|
349
|
+
endif()
|
|
350
|
+
if(NOT DEFINED CMAKE_POSITION_INDEPENDENT_CODE)
|
|
351
|
+
option(CMAKE_POSITION_INDEPENDENT_CODE "Generate position independent (PIC)" ON)
|
|
352
|
+
endif()
|
|
353
|
+
set(MDBX_MANAGE_BUILD_FLAGS_DEFAULT OFF)
|
|
354
|
+
else()
|
|
355
|
+
option(BUILD_SHARED_LIBS "Build shared libraries (DLLs)" ON)
|
|
356
|
+
option(CMAKE_POSITION_INDEPENDENT_CODE "Generate position independent (PIC)" ON)
|
|
357
|
+
if(CC_HAS_ARCH_NATIVE)
|
|
358
|
+
option(BUILD_FOR_NATIVE_CPU "Generate code for the compiling machine CPU" OFF)
|
|
359
|
+
endif()
|
|
360
|
+
|
|
361
|
+
if(CMAKE_INTERPROCEDURAL_OPTIMIZATION_AVAILABLE
|
|
362
|
+
OR GCC_LTO_AVAILABLE
|
|
363
|
+
OR MSVC_LTO_AVAILABLE
|
|
364
|
+
OR CLANG_LTO_AVAILABLE)
|
|
365
|
+
if((CMAKE_CONFIGURATION_TYPES OR NOT CMAKE_BUILD_TYPE_UPPERCASE STREQUAL "DEBUG")
|
|
366
|
+
AND ((MSVC_LTO_AVAILABLE AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 19)
|
|
367
|
+
OR (GCC_LTO_AVAILABLE AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 7)
|
|
368
|
+
OR (CLANG_LTO_AVAILABLE AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5)))
|
|
369
|
+
set(INTERPROCEDURAL_OPTIMIZATION_DEFAULT ON)
|
|
370
|
+
else()
|
|
371
|
+
set(INTERPROCEDURAL_OPTIMIZATION_DEFAULT OFF)
|
|
372
|
+
endif()
|
|
373
|
+
option(INTERPROCEDURAL_OPTIMIZATION "Enable interprocedural/LTO optimization."
|
|
374
|
+
${INTERPROCEDURAL_OPTIMIZATION_DEFAULT})
|
|
375
|
+
endif()
|
|
376
|
+
|
|
377
|
+
if(INTERPROCEDURAL_OPTIMIZATION)
|
|
378
|
+
if(GCC_LTO_AVAILABLE)
|
|
379
|
+
set(LTO_ENABLED TRUE)
|
|
380
|
+
set(CMAKE_AR
|
|
381
|
+
${CMAKE_GCC_AR}
|
|
382
|
+
CACHE PATH "Path to ar program with LTO-plugin" FORCE)
|
|
383
|
+
set(CMAKE_C_COMPILER_AR
|
|
384
|
+
${CMAKE_AR}
|
|
385
|
+
CACHE PATH "Path to ar program with LTO-plugin" FORCE)
|
|
386
|
+
set(CMAKE_CXX_COMPILER_AR
|
|
387
|
+
${CMAKE_AR}
|
|
388
|
+
CACHE PATH "Path to ar program with LTO-plugin" FORCE)
|
|
389
|
+
set(CMAKE_NM
|
|
390
|
+
${CMAKE_GCC_NM}
|
|
391
|
+
CACHE PATH "Path to nm program with LTO-plugin" FORCE)
|
|
392
|
+
set(CMAKE_RANLIB
|
|
393
|
+
${CMAKE_GCC_RANLIB}
|
|
394
|
+
CACHE PATH "Path to ranlib program with LTO-plugin" FORCE)
|
|
395
|
+
set(CMAKE_C_COMPILER_RANLIB
|
|
396
|
+
${CMAKE_RANLIB}
|
|
397
|
+
CACHE PATH "Path to ranlib program with LTO-plugin" FORCE)
|
|
398
|
+
set(CMAKE_CXX_COMPILER_RANLIB
|
|
399
|
+
${CMAKE_RANLIB}
|
|
400
|
+
CACHE PATH "Path to ranlib program with LTO-plugin" FORCE)
|
|
401
|
+
message(STATUS "MDBX indulge Link-Time Optimization by GCC")
|
|
402
|
+
elseif(CLANG_LTO_AVAILABLE)
|
|
403
|
+
set(LTO_ENABLED TRUE)
|
|
404
|
+
if(CMAKE_CLANG_LD)
|
|
405
|
+
set(CMAKE_LINKER
|
|
406
|
+
${CMAKE_CLANG_LD}
|
|
407
|
+
CACHE PATH "Path to lld or ld program with LTO-plugin" FORCE)
|
|
408
|
+
endif()
|
|
409
|
+
set(CMAKE_AR
|
|
410
|
+
${CMAKE_CLANG_AR}
|
|
411
|
+
CACHE PATH "Path to ar program with LTO-plugin" FORCE)
|
|
412
|
+
set(CMAKE_C_COMPILER_AR
|
|
413
|
+
${CMAKE_AR}
|
|
414
|
+
CACHE PATH "Path to ar program with LTO-plugin" FORCE)
|
|
415
|
+
set(CMAKE_CXX_COMPILER_AR
|
|
416
|
+
${CMAKE_AR}
|
|
417
|
+
CACHE PATH "Path to ar program with LTO-plugin" FORCE)
|
|
418
|
+
set(CMAKE_NM
|
|
419
|
+
${CMAKE_CLANG_NM}
|
|
420
|
+
CACHE PATH "Path to nm program with LTO-plugin" FORCE)
|
|
421
|
+
set(CMAKE_RANLIB
|
|
422
|
+
${CMAKE_CLANG_RANLIB}
|
|
423
|
+
CACHE PATH "Path to ranlib program with LTO-plugin" FORCE)
|
|
424
|
+
set(CMAKE_C_COMPILER_RANLIB
|
|
425
|
+
${CMAKE_RANLIB}
|
|
426
|
+
CACHE PATH "Path to ranlib program with LTO-plugin" FORCE)
|
|
427
|
+
set(CMAKE_CXX_COMPILER_RANLIB
|
|
428
|
+
${CMAKE_RANLIB}
|
|
429
|
+
CACHE PATH "Path to ranlib program with LTO-plugin" FORCE)
|
|
430
|
+
message(STATUS "MDBX indulge Link-Time Optimization by CLANG")
|
|
431
|
+
elseif(MSVC_LTO_AVAILABLE)
|
|
432
|
+
set(LTO_ENABLED TRUE)
|
|
433
|
+
message(STATUS "MDBX indulge Link-Time Optimization by MSVC")
|
|
434
|
+
elseif(CMAKE_INTERPROCEDURAL_OPTIMIZATION_AVAILABLE)
|
|
435
|
+
message(STATUS "MDBX indulge Interprocedural Optimization by CMake")
|
|
436
|
+
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
|
|
437
|
+
set(LTO_ENABLED TRUE)
|
|
438
|
+
else()
|
|
439
|
+
message(WARNING "Unable to engage interprocedural/LTO optimization.")
|
|
440
|
+
endif()
|
|
441
|
+
else()
|
|
442
|
+
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION FALSE)
|
|
443
|
+
set(LTO_ENABLED FALSE)
|
|
444
|
+
endif()
|
|
445
|
+
|
|
446
|
+
if(NOT MDBX_AMALGAMATED_SOURCE)
|
|
447
|
+
find_program(VALGRIND valgrind)
|
|
448
|
+
if(VALGRIND)
|
|
449
|
+
# (LY) cmake is ugly and nasty. Therefore memcheck-options should be defined before including ctest. Otherwise
|
|
450
|
+
# ctest may ignore it.
|
|
451
|
+
set(MEMORYCHECK_SUPPRESSIONS_FILE
|
|
452
|
+
"${CMAKE_CURRENT_SOURCE_DIR}/test/valgrind_suppress.txt"
|
|
453
|
+
CACHE FILEPATH "Suppressions file for Valgrind" FORCE)
|
|
454
|
+
set(MEMORYCHECK_COMMAND_OPTIONS
|
|
455
|
+
"--trace-children=yes --leak-check=full --track-origins=yes --track-origins=yes --error-exitcode=42 --error-markers=@ --errors-for-leak-kinds=definite --fair-sched=yes --suppressions=${MEMORYCHECK_SUPPRESSIONS_FILE}"
|
|
456
|
+
CACHE STRING "Valgrind options" FORCE)
|
|
457
|
+
set(VALGRIND_COMMAND_OPTIONS
|
|
458
|
+
"${MEMORYCHECK_COMMAND_OPTIONS}"
|
|
459
|
+
CACHE STRING "Valgrind options" FORCE)
|
|
460
|
+
endif()
|
|
461
|
+
|
|
462
|
+
# Enable 'make tags' target.
|
|
463
|
+
find_program(CTAGS ctags)
|
|
464
|
+
if(CTAGS)
|
|
465
|
+
add_custom_target(
|
|
466
|
+
tags
|
|
467
|
+
COMMAND ${CTAGS} -R -f tags
|
|
468
|
+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
|
469
|
+
add_custom_target(ctags DEPENDS tags)
|
|
470
|
+
endif(CTAGS)
|
|
471
|
+
|
|
472
|
+
if(UNIX)
|
|
473
|
+
find_program(CLANG_FORMAT NAMES clang-format-13 clang-format)
|
|
474
|
+
if(CLANG_FORMAT)
|
|
475
|
+
execute_process(COMMAND ${CLANG_FORMAT} "--version" OUTPUT_VARIABLE clang_format_version_info)
|
|
476
|
+
string(REGEX MATCH "version ([0-9]+)\\.([0-9]+)\\.([0-9]+)(.*)?" clang_format_version_info CLANG_FORMAT_VERSION)
|
|
477
|
+
if(clang_format_version_info AND NOT CLANG_FORMAT_VERSION VERSION_LESS 13.0)
|
|
478
|
+
# Enable 'make reformat' target.
|
|
479
|
+
add_custom_target(
|
|
480
|
+
reformat
|
|
481
|
+
VERBATIM
|
|
482
|
+
COMMAND git ls-files | grep -E \\.\(c|cxx|cc|cpp|h|hxx|hpp\)\(\\.in\)?\$ | xargs ${CLANG_FORMAT} -i
|
|
483
|
+
--style=file
|
|
484
|
+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
|
|
485
|
+
endif()
|
|
486
|
+
endif()
|
|
487
|
+
endif()
|
|
488
|
+
|
|
489
|
+
if(NOT "${PROJECT_BINARY_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}")
|
|
490
|
+
add_custom_target(distclean)
|
|
491
|
+
add_custom_command(
|
|
492
|
+
TARGET distclean
|
|
493
|
+
POST_BUILD
|
|
494
|
+
COMMAND ${CMAKE_COMMAND} -E remove_directory "${PROJECT_BINARY_DIR}"
|
|
495
|
+
COMMENT "Removing the build directory and its content")
|
|
496
|
+
elseif(IS_DIRECTORY .git AND GIT)
|
|
497
|
+
add_custom_target(distclean)
|
|
498
|
+
add_custom_command(
|
|
499
|
+
TARGET distclean
|
|
500
|
+
POST_BUILD
|
|
501
|
+
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
|
502
|
+
COMMAND ${GIT} submodule foreach --recursive git clean -f -X -d
|
|
503
|
+
COMMAND ${GIT} clean -f -X -d
|
|
504
|
+
COMMENT "Removing all build files from the source directory")
|
|
505
|
+
endif()
|
|
506
|
+
endif(NOT MDBX_AMALGAMATED_SOURCE)
|
|
507
|
+
|
|
508
|
+
set(MDBX_MANAGE_BUILD_FLAGS_DEFAULT ON)
|
|
509
|
+
endif(SUBPROJECT)
|
|
510
|
+
|
|
511
|
+
option(MDBX_MANAGE_BUILD_FLAGS "Allow libmdbx to configure/manage/override its own build flags"
|
|
512
|
+
${MDBX_MANAGE_BUILD_FLAGS_DEFAULT})
|
|
513
|
+
if(MDBX_MANAGE_BUILD_FLAGS)
|
|
514
|
+
setup_compile_flags()
|
|
515
|
+
endif()
|
|
516
|
+
|
|
517
|
+
list(FIND CMAKE_CXX_COMPILE_FEATURES cxx_std_11 HAS_CXX11)
|
|
518
|
+
list(FIND CMAKE_CXX_COMPILE_FEATURES cxx_std_14 HAS_CXX14)
|
|
519
|
+
list(FIND CMAKE_CXX_COMPILE_FEATURES cxx_std_17 HAS_CXX17)
|
|
520
|
+
list(FIND CMAKE_CXX_COMPILE_FEATURES cxx_std_20 HAS_CXX20)
|
|
521
|
+
list(FIND CMAKE_CXX_COMPILE_FEATURES cxx_std_23 HAS_CXX23)
|
|
522
|
+
if(NOT DEFINED MDBX_CXX_STANDARD)
|
|
523
|
+
if(DEFINED ENV{CMAKE_CXX_STANDARD})
|
|
524
|
+
set(CMAKE_CXX_STANDARD $ENV{CMAKE_CXX_STANDARD})
|
|
525
|
+
endif()
|
|
526
|
+
if(DEFINED CMAKE_CXX_STANDARD)
|
|
527
|
+
set(MDBX_CXX_STANDARD ${CMAKE_CXX_STANDARD})
|
|
528
|
+
elseif(NOT HAS_CXX23 LESS 0 AND NOT (CMAKE_COMPILER_IS_CLANG AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12))
|
|
529
|
+
set(MDBX_CXX_STANDARD 23)
|
|
530
|
+
elseif(NOT HAS_CXX20 LESS 0 AND NOT (CMAKE_COMPILER_IS_CLANG AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10))
|
|
531
|
+
set(MDBX_CXX_STANDARD 20)
|
|
532
|
+
elseif(NOT HAS_CXX17 LESS 0 AND NOT (CMAKE_COMPILER_IS_CLANG AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5))
|
|
533
|
+
set(MDBX_CXX_STANDARD 17)
|
|
534
|
+
elseif(NOT HAS_CXX14 LESS 0)
|
|
535
|
+
set(MDBX_CXX_STANDARD 14)
|
|
536
|
+
elseif(NOT HAS_CXX11 LESS 0)
|
|
537
|
+
set(MDBX_CXX_STANDARD 11)
|
|
538
|
+
elseif(CXX_FALLBACK_GNU11 OR CXX_FALLBACK_11)
|
|
539
|
+
set(MDBX_CXX_STANDARD 11)
|
|
540
|
+
else()
|
|
541
|
+
set(MDBX_CXX_STANDARD 98)
|
|
542
|
+
endif()
|
|
543
|
+
endif()
|
|
544
|
+
|
|
545
|
+
list(FIND CMAKE_C_COMPILE_FEATURES c_std_11 HAS_C11)
|
|
546
|
+
list(FIND CMAKE_C_COMPILE_FEATURES c_std_23 HAS_C23)
|
|
547
|
+
if(NOT DEFINED MDBX_C_STANDARD)
|
|
548
|
+
if(DEFINED ENV{CMAKE_C_STANDARD})
|
|
549
|
+
set(CMAKE_C_STANDARD $ENV{CMAKE_C_STANDARD})
|
|
550
|
+
endif()
|
|
551
|
+
if(DEFINED CMAKE_C_STANDARD)
|
|
552
|
+
set(MDBX_C_STANDARD ${CMAKE_C_STANDARD})
|
|
553
|
+
elseif(
|
|
554
|
+
MSVC
|
|
555
|
+
# MSVC >= 19.28 (Microsoft Visual Studio 16.8) is mad! It unable process Windows SDK headers in the C11 mode!
|
|
556
|
+
AND MSVC_VERSION GREATER 1927
|
|
557
|
+
AND NOT MSVC_VERSION GREATER 1929)
|
|
558
|
+
set(MDBX_C_STANDARD 99)
|
|
559
|
+
set(C_FALLBACK_11 OFF)
|
|
560
|
+
set(C_FALLBACK_GNU11 OFF)
|
|
561
|
+
elseif(NOT HAS_C23 LESS 0)
|
|
562
|
+
set(MDBX_C_STANDARD 23)
|
|
563
|
+
elseif(
|
|
564
|
+
HAS_C11 LESS 0
|
|
565
|
+
AND NOT C_FALLBACK_GNU11
|
|
566
|
+
AND NOT C_FALLBACK_11)
|
|
567
|
+
set(MDBX_C_STANDARD 99)
|
|
568
|
+
else()
|
|
569
|
+
set(MDBX_C_STANDARD 11)
|
|
570
|
+
endif()
|
|
571
|
+
endif()
|
|
572
|
+
|
|
573
|
+
if(WIN32 AND EXISTS "${MDBX_SOURCE_DIR}/ntdll.def")
|
|
574
|
+
if(MSVC)
|
|
575
|
+
if(NOT MSVC_LIB_EXE)
|
|
576
|
+
# Find lib.exe
|
|
577
|
+
get_filename_component(CL_NAME ${CMAKE_C_COMPILER} NAME)
|
|
578
|
+
string(REPLACE cl.exe lib.exe MSVC_LIB_EXE ${CL_NAME})
|
|
579
|
+
find_program(MSVC_LIB_EXE ${MSVC_LIB_EXE})
|
|
580
|
+
endif()
|
|
581
|
+
if(MSVC_LIB_EXE)
|
|
582
|
+
message(STATUS "Found MSVC's lib tool: ${MSVC_LIB_EXE}")
|
|
583
|
+
set(MDBX_NTDLL_EXTRA_IMPLIB "${CMAKE_CURRENT_BINARY_DIR}/mdbx_ntdll_extra.lib")
|
|
584
|
+
add_custom_command(
|
|
585
|
+
OUTPUT "${MDBX_NTDLL_EXTRA_IMPLIB}"
|
|
586
|
+
COMMENT "Create extra-import-library for ntdll.dll"
|
|
587
|
+
MAIN_DEPENDENCY "${MDBX_SOURCE_DIR}/ntdll.def"
|
|
588
|
+
COMMAND ${MSVC_LIB_EXE} /def:"${MDBX_SOURCE_DIR}/ntdll.def" /out:"${MDBX_NTDLL_EXTRA_IMPLIB}"
|
|
589
|
+
${INITIAL_CMAKE_STATIC_LINKER_FLAGS})
|
|
590
|
+
else()
|
|
591
|
+
message(WARNING "MSVC's lib tool not found")
|
|
592
|
+
endif()
|
|
593
|
+
elseif(MINGW OR MINGW64)
|
|
594
|
+
if(NOT DLLTOOL)
|
|
595
|
+
# Find dlltool
|
|
596
|
+
get_filename_component(GCC_NAME ${CMAKE_C_COMPILER} NAME)
|
|
597
|
+
string(REPLACE gcc dlltool DLLTOOL_NAME ${GCC_NAME})
|
|
598
|
+
find_program(DLLTOOL NAMES ${DLLTOOL_NAME})
|
|
599
|
+
endif()
|
|
600
|
+
if(DLLTOOL)
|
|
601
|
+
message(STATUS "Found dlltool: ${DLLTOOL}")
|
|
602
|
+
set(MDBX_NTDLL_EXTRA_IMPLIB "${CMAKE_CURRENT_BINARY_DIR}/mdbx_ntdll_extra.a")
|
|
603
|
+
add_custom_command(
|
|
604
|
+
OUTPUT "${MDBX_NTDLL_EXTRA_IMPLIB}"
|
|
605
|
+
COMMENT "Create extra-import-library for ntdll.dll"
|
|
606
|
+
MAIN_DEPENDENCY "${MDBX_SOURCE_DIR}/ntdll.def"
|
|
607
|
+
COMMAND ${DLLTOOL} -d "${MDBX_SOURCE_DIR}/ntdll.def" -l "${MDBX_NTDLL_EXTRA_IMPLIB}")
|
|
608
|
+
else()
|
|
609
|
+
message(WARNING "dlltool not found")
|
|
610
|
+
endif()
|
|
611
|
+
endif()
|
|
612
|
+
|
|
613
|
+
if(MDBX_NTDLL_EXTRA_IMPLIB)
|
|
614
|
+
# Sometimes CMake requires a nightmarish magic for simple things.
|
|
615
|
+
#
|
|
616
|
+
# (1) create a target out of the library compilation result
|
|
617
|
+
add_custom_target(ntdll_extra_target DEPENDS "${MDBX_NTDLL_EXTRA_IMPLIB}")
|
|
618
|
+
# (2) create an library target out of the library compilation result
|
|
619
|
+
add_library(ntdll_extra STATIC IMPORTED GLOBAL)
|
|
620
|
+
add_dependencies(ntdll_extra ntdll_extra_target)
|
|
621
|
+
# (3) specify where the library is (and where to find the headers)
|
|
622
|
+
set_target_properties(ntdll_extra PROPERTIES IMPORTED_LOCATION "${MDBX_NTDLL_EXTRA_IMPLIB}")
|
|
623
|
+
endif()
|
|
624
|
+
endif()
|
|
625
|
+
|
|
626
|
+
# ######################################################################################################################
|
|
627
|
+
# ~~~
|
|
628
|
+
#
|
|
629
|
+
# #### ##### ##### # #### # # ####
|
|
630
|
+
# # # # # # # # # ## # #
|
|
631
|
+
# # # # # # # # # # # # ####
|
|
632
|
+
# # # ##### # # # # # # # #
|
|
633
|
+
# # # # # # # # # ## # #
|
|
634
|
+
# #### # # # #### # # ####
|
|
635
|
+
#
|
|
636
|
+
# ~~~
|
|
637
|
+
# ######################################################################################################################
|
|
638
|
+
|
|
639
|
+
set(MDBX_BUILD_OPTIONS ENABLE_UBSAN ENABLE_ASAN ENABLE_MEMCHECK ENABLE_GPROF ENABLE_GCOV)
|
|
640
|
+
|
|
641
|
+
if(IOS)
|
|
642
|
+
set(MDBX_BUILD_TOOLS_DEFAULT OFF)
|
|
643
|
+
if(NOT_SUBPROJECT)
|
|
644
|
+
cmake_policy(SET CMP0006 OLD)
|
|
645
|
+
set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED NO)
|
|
646
|
+
endif()
|
|
647
|
+
else()
|
|
648
|
+
set(MDBX_BUILD_TOOLS_DEFAULT ON)
|
|
649
|
+
endif()
|
|
650
|
+
|
|
651
|
+
add_option(MDBX INSTALL_STATIC "Build and install libmdbx for static linking" OFF)
|
|
652
|
+
add_option(MDBX BUILD_SHARED_LIBRARY "Build libmdbx as shared library (DLL)" ${BUILD_SHARED_LIBS})
|
|
653
|
+
add_option(MDBX BUILD_TOOLS "Build MDBX tools (mdbx_chk/stat/dump/load/copy/drop)" ${MDBX_BUILD_TOOLS_DEFAULT})
|
|
654
|
+
cmake_dependent_option(MDBX_INSTALL_MANPAGES "Install man-pages for MDBX tools (mdbx_chk/stat/dump/load/copy)" ON
|
|
655
|
+
MDBX_BUILD_TOOLS OFF)
|
|
656
|
+
add_option(MDBX TXN_CHECKOWNER "Checking transaction matches the calling thread inside libmdbx's API" ON)
|
|
657
|
+
add_option(MDBX ENV_CHECKPID "Checking PID inside libmdbx's API against reuse DB environment after the fork()" AUTO)
|
|
658
|
+
mark_as_advanced(MDBX_ENV_CHECKPID)
|
|
659
|
+
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
|
660
|
+
add_option(MDBX DISABLE_GNU_SOURCE "Don't use GNU/Linux libc extensions" OFF)
|
|
661
|
+
mark_as_advanced(MDBX_DISABLE_GNU_SOURCE)
|
|
662
|
+
endif()
|
|
663
|
+
if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" OR IOS)
|
|
664
|
+
add_option(MDBX APPLE_SPEED_INSTEADOF_DURABILITY "Disable use fcntl(F_FULLFSYNC) in favor of speed" OFF)
|
|
665
|
+
mark_as_advanced(MDBX_APPLE_SPEED_INSTEADOF_DURABILITY)
|
|
666
|
+
endif()
|
|
667
|
+
if(WIN32)
|
|
668
|
+
if(MDBX_NTDLL_EXTRA_IMPLIB)
|
|
669
|
+
add_option(MDBX WITHOUT_MSVC_CRT "Avoid dependence from MSVC CRT and use ntdll.dll instead" OFF)
|
|
670
|
+
endif()
|
|
671
|
+
set(MDBX_AVOID_MSYNC_DEFAULT ON)
|
|
672
|
+
else()
|
|
673
|
+
add_option(MDBX USE_OFDLOCKS "Use Open file description locks (aka OFD locks, non-POSIX)" AUTO)
|
|
674
|
+
mark_as_advanced(MDBX_USE_OFDLOCKS)
|
|
675
|
+
add_option(MDBX USE_MINCORE "Use Unix' mincore() to determine whether DB-pages are resident in memory" ON)
|
|
676
|
+
mark_as_advanced(MDBX_USE_MINCORE)
|
|
677
|
+
set(MDBX_AVOID_MSYNC_DEFAULT OFF)
|
|
678
|
+
endif()
|
|
679
|
+
add_option(
|
|
680
|
+
MDBX AVOID_MSYNC
|
|
681
|
+
"Disable in-memory database updating with consequent flush-to-disk/msync syscall in `MDBX_WRITEMAP` mode"
|
|
682
|
+
${MDBX_AVOID_MSYNC_DEFAULT})
|
|
683
|
+
add_option(MDBX MMAP_NEEDS_JOLT "Assume system needs explicit syscall to sync/flush/write modified mapped memory" AUTO)
|
|
684
|
+
mark_as_advanced(MDBX_MMAP_NEEDS_JOLT)
|
|
685
|
+
add_option(MDBX LOCKING "Locking method (Windows=-1, SystemV=5, POSIX=1988, POSIX=2001, POSIX=2008)" AUTO)
|
|
686
|
+
mark_as_advanced(MDBX_LOCKING)
|
|
687
|
+
add_option(MDBX TRUST_RTC "Does a system have battery-backed Real-Time Clock or just a fake" AUTO)
|
|
688
|
+
mark_as_advanced(MDBX_TRUST_RTC)
|
|
689
|
+
add_option(MDBX FORCE_ASSERTIONS "Force enable assertion checking" OFF)
|
|
690
|
+
add_option(
|
|
691
|
+
MDBX
|
|
692
|
+
DISABLE_VALIDATION
|
|
693
|
+
"Disable some checks to reduce an overhead and detection probability of database corruption to a values closer to the LMDB"
|
|
694
|
+
OFF)
|
|
695
|
+
mark_as_advanced(MDBX_DISABLE_VALIDATION)
|
|
696
|
+
add_option(MDBX ENABLE_REFUND "Zerocost auto-compactification during write-transactions" ON)
|
|
697
|
+
add_option(MDBX ENABLE_BIGFOOT
|
|
698
|
+
"Chunking long list of retired pages during huge transactions commit to avoid use sequences of pages" ON)
|
|
699
|
+
add_option(MDBX ENABLE_PGOP_STAT "Gathering statistics for page operations" ON)
|
|
700
|
+
add_option(MDBX ENABLE_PROFGC "Profiling of GC search and updates" OFF)
|
|
701
|
+
mark_as_advanced(MDBX_ENABLE_PROFGC)
|
|
702
|
+
add_option(MDBX ENABLE_DBI_SPARSE
|
|
703
|
+
"Support for sparse sets of DBI handles to reduce overhead when starting and processing transactions" ON)
|
|
704
|
+
add_option(MDBX ENABLE_DBI_LOCKFREE "Support for deferred releasing and a lockfree path to quickly open DBI handles" ON)
|
|
705
|
+
|
|
706
|
+
if(NOT MDBX_AMALGAMATED_SOURCE)
|
|
707
|
+
if(CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE_UPPERCASE STREQUAL "DEBUG")
|
|
708
|
+
set(MDBX_ALLOY_BUILD_DEFAULT OFF)
|
|
709
|
+
else()
|
|
710
|
+
set(MDBX_ALLOY_BUILD_DEFAULT ON)
|
|
711
|
+
endif()
|
|
712
|
+
add_option(MDBX ALLOY_BUILD "Build MDBX library through single/alloyed object file" ${MDBX_ALLOY_BUILD_DEFAULT})
|
|
713
|
+
endif()
|
|
714
|
+
|
|
715
|
+
if((MDBX_BUILD_TOOLS OR MDBX_ENABLE_TESTS) AND MDBX_BUILD_SHARED_LIBRARY)
|
|
716
|
+
add_option(MDBX LINK_TOOLS_NONSTATIC "Link MDBX tools with non-static libmdbx" OFF)
|
|
717
|
+
else()
|
|
718
|
+
unset(MDBX_LINK_TOOLS_NONSTATIC CACHE)
|
|
719
|
+
endif()
|
|
720
|
+
|
|
721
|
+
if(CMAKE_CXX_COMPILER_LOADED
|
|
722
|
+
AND MDBX_CXX_STANDARD LESS 83
|
|
723
|
+
AND NOT MDBX_CXX_STANDARD LESS 11)
|
|
724
|
+
if(NOT MDBX_AMALGAMATED_SOURCE)
|
|
725
|
+
option(MDBX_ENABLE_TESTS "Build MDBX tests" ${BUILD_TESTING})
|
|
726
|
+
endif()
|
|
727
|
+
if(NOT MDBX_WITHOUT_MSVC_CRT
|
|
728
|
+
AND NOT (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
|
|
729
|
+
AND NOT (CMAKE_COMPILER_IS_CLANG AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.9)
|
|
730
|
+
AND NOT (MSVC AND MSVC_VERSION LESS 1900))
|
|
731
|
+
option(MDBX_BUILD_CXX "Build C++ portion" ON)
|
|
732
|
+
else()
|
|
733
|
+
set(MDBX_BUILD_CXX FALSE)
|
|
734
|
+
endif()
|
|
735
|
+
else()
|
|
736
|
+
set(MDBX_BUILD_CXX FALSE)
|
|
737
|
+
set(MDBX_ENABLE_TESTS FALSE)
|
|
738
|
+
endif()
|
|
739
|
+
|
|
740
|
+
if(CI)
|
|
741
|
+
add_definitions(-DMDBX_CI="${CI}")
|
|
742
|
+
endif()
|
|
743
|
+
|
|
744
|
+
# ######################################################################################################################
|
|
745
|
+
|
|
746
|
+
if(MDBX_BUILD_CXX AND NOT CMAKE_CXX_COMPILER_LOADED)
|
|
747
|
+
message(FATAL_ERROR "MDBX_BUILD_CXX=${MDBX_BUILD_CXX}: The C++ compiler is required to build the C++API.")
|
|
748
|
+
endif()
|
|
749
|
+
|
|
750
|
+
if(MDBX_BUILD_CXX)
|
|
751
|
+
# determine library for C++ std::filesystem
|
|
752
|
+
probe_libcxx_filesystem()
|
|
753
|
+
endif()
|
|
754
|
+
|
|
755
|
+
# sources list
|
|
756
|
+
set(LIBMDBX_PUBLIC_HEADERS mdbx.h)
|
|
757
|
+
set(LIBMDBX_SOURCES mdbx.h "${CMAKE_CURRENT_BINARY_DIR}/config.h")
|
|
758
|
+
if(MDBX_AMALGAMATED_SOURCE)
|
|
759
|
+
list(APPEND LIBMDBX_SOURCES mdbx.c)
|
|
760
|
+
else()
|
|
761
|
+
# generate version file
|
|
762
|
+
configure_file("${MDBX_SOURCE_DIR}/version.c.in" "${CMAKE_CURRENT_BINARY_DIR}/version.c" ESCAPE_QUOTES)
|
|
763
|
+
file(SHA256 "${CMAKE_CURRENT_BINARY_DIR}/version.c" MDBX_SOURCERY_DIGEST)
|
|
764
|
+
string(MAKE_C_IDENTIFIER "${MDBX_GIT_DESCRIBE}" MDBX_SOURCERY_SUFFIX)
|
|
765
|
+
set(MDBX_BUILD_SOURCERY "${MDBX_SOURCERY_DIGEST}_${MDBX_SOURCERY_SUFFIX}")
|
|
766
|
+
|
|
767
|
+
if(MDBX_ALLOY_BUILD)
|
|
768
|
+
list(APPEND LIBMDBX_SOURCES "${MDBX_SOURCE_DIR}/alloy.c")
|
|
769
|
+
include_directories("${MDBX_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}")
|
|
770
|
+
else()
|
|
771
|
+
list(
|
|
772
|
+
APPEND
|
|
773
|
+
LIBMDBX_SOURCES
|
|
774
|
+
"${MDBX_SOURCE_DIR}/api-cold.c"
|
|
775
|
+
"${MDBX_SOURCE_DIR}/api-copy.c"
|
|
776
|
+
"${MDBX_SOURCE_DIR}/api-cursor.c"
|
|
777
|
+
"${MDBX_SOURCE_DIR}/api-dbi.c"
|
|
778
|
+
"${MDBX_SOURCE_DIR}/api-env.c"
|
|
779
|
+
"${MDBX_SOURCE_DIR}/api-extra.c"
|
|
780
|
+
"${MDBX_SOURCE_DIR}/api-key-transform.c"
|
|
781
|
+
"${MDBX_SOURCE_DIR}/api-misc.c"
|
|
782
|
+
"${MDBX_SOURCE_DIR}/api-opts.c"
|
|
783
|
+
"${MDBX_SOURCE_DIR}/api-range-estimate.c"
|
|
784
|
+
"${MDBX_SOURCE_DIR}/api-txn-data.c"
|
|
785
|
+
"${MDBX_SOURCE_DIR}/api-txn.c"
|
|
786
|
+
"${MDBX_SOURCE_DIR}/atomics-ops.h"
|
|
787
|
+
"${MDBX_SOURCE_DIR}/atomics-types.h"
|
|
788
|
+
"${MDBX_SOURCE_DIR}/audit.c"
|
|
789
|
+
"${MDBX_SOURCE_DIR}/chk.c"
|
|
790
|
+
"${MDBX_SOURCE_DIR}/cogs.c"
|
|
791
|
+
"${MDBX_SOURCE_DIR}/cogs.h"
|
|
792
|
+
"${MDBX_SOURCE_DIR}/coherency.c"
|
|
793
|
+
"${MDBX_SOURCE_DIR}/cursor.c"
|
|
794
|
+
"${MDBX_SOURCE_DIR}/cursor.h"
|
|
795
|
+
"${MDBX_SOURCE_DIR}/dbi.c"
|
|
796
|
+
"${MDBX_SOURCE_DIR}/dbi.h"
|
|
797
|
+
"${MDBX_SOURCE_DIR}/dpl.c"
|
|
798
|
+
"${MDBX_SOURCE_DIR}/dpl.h"
|
|
799
|
+
"${MDBX_SOURCE_DIR}/dxb.c"
|
|
800
|
+
"${MDBX_SOURCE_DIR}/env.c"
|
|
801
|
+
"${MDBX_SOURCE_DIR}/essentials.h"
|
|
802
|
+
"${MDBX_SOURCE_DIR}/gc-get.c"
|
|
803
|
+
"${MDBX_SOURCE_DIR}/gc-put.c"
|
|
804
|
+
"${MDBX_SOURCE_DIR}/gc.h"
|
|
805
|
+
"${MDBX_SOURCE_DIR}/global.c"
|
|
806
|
+
"${MDBX_SOURCE_DIR}/internals.h"
|
|
807
|
+
"${MDBX_SOURCE_DIR}/layout-dxb.h"
|
|
808
|
+
"${MDBX_SOURCE_DIR}/layout-lck.h"
|
|
809
|
+
"${MDBX_SOURCE_DIR}/lck.c"
|
|
810
|
+
"${MDBX_SOURCE_DIR}/lck.h"
|
|
811
|
+
"${MDBX_SOURCE_DIR}/logging_and_debug.c"
|
|
812
|
+
"${MDBX_SOURCE_DIR}/logging_and_debug.h"
|
|
813
|
+
"${MDBX_SOURCE_DIR}/meta.c"
|
|
814
|
+
"${MDBX_SOURCE_DIR}/meta.h"
|
|
815
|
+
"${MDBX_SOURCE_DIR}/mvcc-readers.c"
|
|
816
|
+
"${MDBX_SOURCE_DIR}/node.c"
|
|
817
|
+
"${MDBX_SOURCE_DIR}/node.h"
|
|
818
|
+
"${MDBX_SOURCE_DIR}/options.h"
|
|
819
|
+
"${MDBX_SOURCE_DIR}/osal.c"
|
|
820
|
+
"${MDBX_SOURCE_DIR}/osal.h"
|
|
821
|
+
"${MDBX_SOURCE_DIR}/page-get.c"
|
|
822
|
+
"${MDBX_SOURCE_DIR}/page-iov.c"
|
|
823
|
+
"${MDBX_SOURCE_DIR}/page-iov.h"
|
|
824
|
+
"${MDBX_SOURCE_DIR}/page-ops.c"
|
|
825
|
+
"${MDBX_SOURCE_DIR}/page-ops.h"
|
|
826
|
+
"${MDBX_SOURCE_DIR}/tree-search.c"
|
|
827
|
+
"${MDBX_SOURCE_DIR}/pnl.c"
|
|
828
|
+
"${MDBX_SOURCE_DIR}/pnl.h"
|
|
829
|
+
"${MDBX_SOURCE_DIR}/preface.h"
|
|
830
|
+
"${MDBX_SOURCE_DIR}/proto.h"
|
|
831
|
+
"${MDBX_SOURCE_DIR}/refund.c"
|
|
832
|
+
"${MDBX_SOURCE_DIR}/sort.h"
|
|
833
|
+
"${MDBX_SOURCE_DIR}/spill.c"
|
|
834
|
+
"${MDBX_SOURCE_DIR}/spill.h"
|
|
835
|
+
"${MDBX_SOURCE_DIR}/table.c"
|
|
836
|
+
"${MDBX_SOURCE_DIR}/tls.c"
|
|
837
|
+
"${MDBX_SOURCE_DIR}/tls.h"
|
|
838
|
+
"${MDBX_SOURCE_DIR}/tree-ops.c"
|
|
839
|
+
"${MDBX_SOURCE_DIR}/txl.c"
|
|
840
|
+
"${MDBX_SOURCE_DIR}/txl.h"
|
|
841
|
+
"${MDBX_SOURCE_DIR}/txn.c"
|
|
842
|
+
"${MDBX_SOURCE_DIR}/unaligned.h"
|
|
843
|
+
"${MDBX_SOURCE_DIR}/utils.c"
|
|
844
|
+
"${MDBX_SOURCE_DIR}/utils.h"
|
|
845
|
+
"${MDBX_SOURCE_DIR}/walk.c"
|
|
846
|
+
"${MDBX_SOURCE_DIR}/walk.h"
|
|
847
|
+
"${CMAKE_CURRENT_BINARY_DIR}/version.c")
|
|
848
|
+
if(NOT MSVC)
|
|
849
|
+
list(APPEND LIBMDBX_SOURCES "${MDBX_SOURCE_DIR}/lck-posix.c")
|
|
850
|
+
endif()
|
|
851
|
+
if(NOT APPLE)
|
|
852
|
+
list(APPEND LIBMDBX_SOURCES "${MDBX_SOURCE_DIR}/windows-import.h" "${MDBX_SOURCE_DIR}/windows-import.c"
|
|
853
|
+
"${MDBX_SOURCE_DIR}/lck-windows.c")
|
|
854
|
+
endif()
|
|
855
|
+
include_directories("${MDBX_SOURCE_DIR}")
|
|
856
|
+
endif()
|
|
857
|
+
endif(MDBX_AMALGAMATED_SOURCE)
|
|
858
|
+
if(MDBX_BUILD_CXX)
|
|
859
|
+
message(STATUS "Use C${MDBX_C_STANDARD} and C++${MDBX_CXX_STANDARD} for libmdbx")
|
|
860
|
+
list(APPEND LIBMDBX_PUBLIC_HEADERS mdbx.h++)
|
|
861
|
+
list(APPEND LIBMDBX_SOURCES "${MDBX_SOURCE_DIR}/mdbx.c++" mdbx.h++)
|
|
862
|
+
else()
|
|
863
|
+
message(STATUS "Use C${MDBX_C_STANDARD} for libmdbx but C++ portion is disabled")
|
|
864
|
+
endif()
|
|
865
|
+
|
|
866
|
+
if(MSVC)
|
|
867
|
+
add_compile_options("/utf-8")
|
|
868
|
+
endif()
|
|
869
|
+
|
|
870
|
+
macro(target_setup_options TARGET)
|
|
871
|
+
if(DEFINED INTERPROCEDURAL_OPTIMIZATION)
|
|
872
|
+
set_target_properties(${TARGET} PROPERTIES INTERPROCEDURAL_OPTIMIZATION $<BOOL:${INTERPROCEDURAL_OPTIMIZATION}>)
|
|
873
|
+
endif()
|
|
874
|
+
if(NOT C_FALLBACK_GNU11 AND NOT C_FALLBACK_11)
|
|
875
|
+
set_target_properties(${TARGET} PROPERTIES C_STANDARD ${MDBX_C_STANDARD} C_STANDARD_REQUIRED ON)
|
|
876
|
+
endif()
|
|
877
|
+
if(MDBX_BUILD_CXX)
|
|
878
|
+
if(NOT CXX_FALLBACK_GNU11 AND NOT CXX_FALLBACK_11)
|
|
879
|
+
set_target_properties(${TARGET} PROPERTIES CXX_STANDARD ${MDBX_CXX_STANDARD} CXX_STANDARD_REQUIRED ON)
|
|
880
|
+
endif()
|
|
881
|
+
if(MSVC AND NOT MSVC_VERSION LESS 1910)
|
|
882
|
+
target_compile_options(${TARGET} INTERFACE "/Zc:__cplusplus")
|
|
883
|
+
endif()
|
|
884
|
+
endif()
|
|
885
|
+
if(CC_HAS_FASTMATH AND NOT (CMAKE_COMPILER_IS_CLANG AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10))
|
|
886
|
+
target_compile_options(${TARGET} PRIVATE "-ffast-math")
|
|
887
|
+
endif()
|
|
888
|
+
if(CC_HAS_VISIBILITY)
|
|
889
|
+
target_compile_options(${TARGET} PRIVATE "-fvisibility=hidden")
|
|
890
|
+
endif()
|
|
891
|
+
if(BUILD_FOR_NATIVE_CPU AND CC_HAS_ARCH_NATIVE)
|
|
892
|
+
target_compile_options(${TARGET} PRIVATE "-march=native")
|
|
893
|
+
endif()
|
|
894
|
+
endmacro()
|
|
895
|
+
|
|
896
|
+
macro(libmdbx_setup_libs TARGET MODE)
|
|
897
|
+
if(CMAKE_VERSION VERSION_LESS 3.1)
|
|
898
|
+
target_link_libraries(${TARGET} ${MODE} ${CMAKE_THREAD_LIBS_INIT})
|
|
899
|
+
else()
|
|
900
|
+
target_link_libraries(${TARGET} ${MODE} Threads::Threads)
|
|
901
|
+
endif()
|
|
902
|
+
if(WIN32)
|
|
903
|
+
target_link_libraries(
|
|
904
|
+
${TARGET}
|
|
905
|
+
${MODE}
|
|
906
|
+
ntdll
|
|
907
|
+
user32
|
|
908
|
+
kernel32
|
|
909
|
+
advapi32
|
|
910
|
+
ole32)
|
|
911
|
+
if(MDBX_NTDLL_EXTRA_IMPLIB AND MDBX_WITHOUT_MSVC_CRT)
|
|
912
|
+
target_link_libraries(${TARGET} ${MODE} ntdll_extra)
|
|
913
|
+
endif()
|
|
914
|
+
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "SunOS" OR ${CMAKE_SYSTEM_NAME} STREQUAL "Solaris")
|
|
915
|
+
target_link_libraries(${TARGET} ${MODE} kstat)
|
|
916
|
+
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Android")
|
|
917
|
+
target_link_libraries(${TARGET} ${MODE} log)
|
|
918
|
+
endif()
|
|
919
|
+
if(LIBCXX_FILESYSTEM AND MDBX_BUILD_CXX)
|
|
920
|
+
if(CMAKE_COMPILER_IS_ELBRUSCXX
|
|
921
|
+
AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 1.25.23
|
|
922
|
+
AND NOT CMAKE_VERSION VERSION_LESS 3.13)
|
|
923
|
+
target_link_options(${TARGET} PUBLIC "-Wl,--allow-multiple-definition")
|
|
924
|
+
endif()
|
|
925
|
+
target_link_libraries(${TARGET} PUBLIC ${LIBCXX_FILESYSTEM})
|
|
926
|
+
endif()
|
|
927
|
+
endmacro()
|
|
928
|
+
|
|
929
|
+
# build static library
|
|
930
|
+
if(MDBX_INSTALL_STATIC)
|
|
931
|
+
add_library(mdbx-static STATIC ${LIBMDBX_SOURCES})
|
|
932
|
+
else()
|
|
933
|
+
add_library(mdbx-static STATIC EXCLUDE_FROM_ALL ${LIBMDBX_SOURCES})
|
|
934
|
+
endif()
|
|
935
|
+
set_target_properties(mdbx-static PROPERTIES PUBLIC_HEADER "${LIBMDBX_PUBLIC_HEADERS}")
|
|
936
|
+
target_compile_definitions(mdbx-static PRIVATE MDBX_BUILD_SHARED_LIBRARY=0)
|
|
937
|
+
target_setup_options(mdbx-static)
|
|
938
|
+
libmdbx_setup_libs(mdbx-static INTERFACE)
|
|
939
|
+
if(MDBX_BUILD_SHARED_LIBRARY)
|
|
940
|
+
set_target_properties(mdbx-static PROPERTIES OUTPUT_NAME mdbx-static)
|
|
941
|
+
else()
|
|
942
|
+
set_target_properties(mdbx-static PROPERTIES OUTPUT_NAME mdbx)
|
|
943
|
+
endif()
|
|
944
|
+
target_include_directories(mdbx-static INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
945
|
+
|
|
946
|
+
# ######################################################################################################################
|
|
947
|
+
|
|
948
|
+
# build shared library
|
|
949
|
+
if(MDBX_BUILD_SHARED_LIBRARY)
|
|
950
|
+
add_library(mdbx SHARED ${LIBMDBX_SOURCES})
|
|
951
|
+
set_target_properties(mdbx PROPERTIES PUBLIC_HEADER "${LIBMDBX_PUBLIC_HEADERS}")
|
|
952
|
+
target_compile_definitions(
|
|
953
|
+
mdbx
|
|
954
|
+
PRIVATE LIBMDBX_EXPORTS MDBX_BUILD_SHARED_LIBRARY=1
|
|
955
|
+
INTERFACE LIBMDBX_IMPORTS)
|
|
956
|
+
target_setup_options(mdbx)
|
|
957
|
+
libmdbx_setup_libs(mdbx PRIVATE)
|
|
958
|
+
if(MSVC)
|
|
959
|
+
if(MDBX_NTDLL_EXTRA_IMPLIB AND MDBX_WITHOUT_MSVC_CRT)
|
|
960
|
+
set_property(TARGET mdbx PROPERTY LINKER_FLAGS "/NODEFAULTLIB")
|
|
961
|
+
else()
|
|
962
|
+
set_property(TARGET mdbx PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
|
|
963
|
+
endif()
|
|
964
|
+
endif()
|
|
965
|
+
if(CC_HAS_VISIBILITY AND (LTO_ENABLED OR INTERPROCEDURAL_OPTIMIZATION))
|
|
966
|
+
set_target_properties(mdbx PROPERTIES LINK_FLAGS "-fvisibility=hidden")
|
|
967
|
+
endif()
|
|
968
|
+
list(APPEND MDBX_BUILD_FLAGS ${CMAKE_SHARED_LINKER_FLAGS})
|
|
969
|
+
target_include_directories(mdbx INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
970
|
+
endif()
|
|
971
|
+
|
|
972
|
+
if(MDBX_BUILD_SHARED_LIBRARY AND MDBX_LINK_TOOLS_NONSTATIC)
|
|
973
|
+
set(TOOL_MDBX_LIB mdbx)
|
|
974
|
+
|
|
975
|
+
# use, i.e. don't skip the full RPATH for the build tree
|
|
976
|
+
set(CMAKE_SKIP_BUILD_RPATH FALSE)
|
|
977
|
+
|
|
978
|
+
# when building, don't use the install RPATH already (but later on when installing)
|
|
979
|
+
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
|
|
980
|
+
|
|
981
|
+
# add the automatically determined parts of the RPATH which point to directories outside the build tree to the install
|
|
982
|
+
# RPATH
|
|
983
|
+
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
|
984
|
+
|
|
985
|
+
# the RPATH to be used when installing, but only if it's not a system directory
|
|
986
|
+
list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
|
|
987
|
+
if(isSystemDir EQUAL -1)
|
|
988
|
+
if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
|
|
989
|
+
set(CMAKE_INSTALL_RPATH "@executable_path/../lib")
|
|
990
|
+
else()
|
|
991
|
+
set(CMAKE_INSTALL_RPATH "\$ORIGIN/../lib")
|
|
992
|
+
endif()
|
|
993
|
+
endif()
|
|
994
|
+
|
|
995
|
+
if(WIN32)
|
|
996
|
+
# Windows don't have RPATH feature, therefore we should prepare PATH or copy DLL(s)
|
|
997
|
+
set(TOOL_MDBX_DLLCRUTCH "Crutch for ${CMAKE_SYSTEM_NAME}")
|
|
998
|
+
if(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_VERSION VERSION_LESS 3.0)
|
|
999
|
+
# will use LOCATION property to compose DLLPATH
|
|
1000
|
+
cmake_policy(SET CMP0026 OLD)
|
|
1001
|
+
endif()
|
|
1002
|
+
else()
|
|
1003
|
+
set(TOOL_MDBX_DLLCRUTCH FALSE)
|
|
1004
|
+
endif()
|
|
1005
|
+
else()
|
|
1006
|
+
set(TOOL_MDBX_LIB mdbx-static)
|
|
1007
|
+
set(TOOL_MDBX_DLLCRUTCH FALSE)
|
|
1008
|
+
endif()
|
|
1009
|
+
|
|
1010
|
+
# build mdbx-tools
|
|
1011
|
+
if(MDBX_BUILD_TOOLS)
|
|
1012
|
+
set(WINGETOPT_SRC "")
|
|
1013
|
+
if(WIN32)
|
|
1014
|
+
set(WINGETOPT_SRC ${MDBX_SOURCE_DIR}/tools/wingetopt.c ${MDBX_SOURCE_DIR}/tools/wingetopt.h)
|
|
1015
|
+
endif()
|
|
1016
|
+
|
|
1017
|
+
foreach(TOOL chk copy stat dump load drop)
|
|
1018
|
+
if(MDBX_AMALGAMATED_SOURCE)
|
|
1019
|
+
add_executable(mdbx_${TOOL} mdbx.h ${MDBX_SOURCE_DIR}/mdbx_${TOOL}.c)
|
|
1020
|
+
else()
|
|
1021
|
+
add_executable(mdbx_${TOOL} mdbx.h ${MDBX_SOURCE_DIR}/tools/${TOOL}.c ${WINGETOPT_SRC})
|
|
1022
|
+
endif()
|
|
1023
|
+
if(NOT C_FALLBACK_GNU11 AND NOT C_FALLBACK_11)
|
|
1024
|
+
set_target_properties(mdbx_${TOOL} PROPERTIES C_STANDARD ${MDBX_C_STANDARD} C_STANDARD_REQUIRED ON)
|
|
1025
|
+
endif()
|
|
1026
|
+
target_setup_options(mdbx_${TOOL})
|
|
1027
|
+
target_link_libraries(mdbx_${TOOL} ${TOOL_MDBX_LIB})
|
|
1028
|
+
endforeach()
|
|
1029
|
+
if(LIB_MATH)
|
|
1030
|
+
target_link_libraries(mdbx_chk ${LIB_MATH})
|
|
1031
|
+
target_link_libraries(mdbx_stat ${LIB_MATH})
|
|
1032
|
+
endif()
|
|
1033
|
+
endif()
|
|
1034
|
+
|
|
1035
|
+
# ######################################################################################################################
|
|
1036
|
+
|
|
1037
|
+
# mdbx-shared-lib installation
|
|
1038
|
+
if(NOT DEFINED MDBX_DLL_INSTALL_DESTINATION)
|
|
1039
|
+
if(WIN32)
|
|
1040
|
+
set(MDBX_DLL_INSTALL_DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
1041
|
+
else()
|
|
1042
|
+
set(MDBX_DLL_INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
1043
|
+
endif()
|
|
1044
|
+
endif()
|
|
1045
|
+
if(MDBX_BUILD_SHARED_LIBRARY)
|
|
1046
|
+
if(CMAKE_VERSION VERSION_LESS 3.12)
|
|
1047
|
+
install(
|
|
1048
|
+
TARGETS mdbx
|
|
1049
|
+
EXPORT libmdbx
|
|
1050
|
+
LIBRARY DESTINATION ${MDBX_DLL_INSTALL_DESTINATION} COMPONENT runtime
|
|
1051
|
+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT devel
|
|
1052
|
+
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT devel
|
|
1053
|
+
INCLUDES
|
|
1054
|
+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
|
1055
|
+
COMPONENT devel)
|
|
1056
|
+
else()
|
|
1057
|
+
install(
|
|
1058
|
+
TARGETS mdbx
|
|
1059
|
+
EXPORT libmdbx
|
|
1060
|
+
LIBRARY DESTINATION ${MDBX_DLL_INSTALL_DESTINATION}
|
|
1061
|
+
COMPONENT runtime
|
|
1062
|
+
NAMELINK_COMPONENT devel
|
|
1063
|
+
OBJECTS DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT devel
|
|
1064
|
+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT devel
|
|
1065
|
+
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT devel
|
|
1066
|
+
INCLUDES
|
|
1067
|
+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
|
1068
|
+
COMPONENT devel)
|
|
1069
|
+
endif()
|
|
1070
|
+
endif(MDBX_BUILD_SHARED_LIBRARY)
|
|
1071
|
+
|
|
1072
|
+
# mdbx-tools installation
|
|
1073
|
+
if(MDBX_BUILD_TOOLS)
|
|
1074
|
+
if(NOT DEFINED MDBX_TOOLS_INSTALL_DESTINATION)
|
|
1075
|
+
set(MDBX_TOOLS_INSTALL_DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
1076
|
+
endif()
|
|
1077
|
+
install(TARGETS mdbx_chk mdbx_stat mdbx_copy mdbx_dump mdbx_load mdbx_drop
|
|
1078
|
+
RUNTIME DESTINATION ${MDBX_TOOLS_INSTALL_DESTINATION} COMPONENT runtime)
|
|
1079
|
+
if(MDBX_INSTALL_MANPAGES)
|
|
1080
|
+
if(NOT DEFINED MDBX_MAN_INSTALL_DESTINATION)
|
|
1081
|
+
set(MDBX_MAN_INSTALL_DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
|
|
1082
|
+
endif()
|
|
1083
|
+
install(
|
|
1084
|
+
FILES "${MDBX_SOURCE_DIR}/man1/mdbx_chk.1" "${MDBX_SOURCE_DIR}/man1/mdbx_stat.1"
|
|
1085
|
+
"${MDBX_SOURCE_DIR}/man1/mdbx_copy.1" "${MDBX_SOURCE_DIR}/man1/mdbx_dump.1"
|
|
1086
|
+
"${MDBX_SOURCE_DIR}/man1/mdbx_load.1" "${MDBX_SOURCE_DIR}/man1/mdbx_drop.1"
|
|
1087
|
+
DESTINATION ${MDBX_MAN_INSTALL_DESTINATION}
|
|
1088
|
+
COMPONENT doc)
|
|
1089
|
+
endif()
|
|
1090
|
+
endif(MDBX_BUILD_TOOLS)
|
|
1091
|
+
|
|
1092
|
+
# mdbx-static-lib installation
|
|
1093
|
+
if(MDBX_INSTALL_STATIC)
|
|
1094
|
+
if(CMAKE_VERSION VERSION_LESS 3.12)
|
|
1095
|
+
install(
|
|
1096
|
+
TARGETS mdbx-static
|
|
1097
|
+
EXPORT libmdbx
|
|
1098
|
+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT devel
|
|
1099
|
+
OBJECTS DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT devel
|
|
1100
|
+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT devel
|
|
1101
|
+
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT devel
|
|
1102
|
+
INCLUDES
|
|
1103
|
+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
|
1104
|
+
COMPONENT devel)
|
|
1105
|
+
else()
|
|
1106
|
+
install(
|
|
1107
|
+
TARGETS mdbx-static
|
|
1108
|
+
EXPORT libmdbx
|
|
1109
|
+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
1110
|
+
COMPONENT devel
|
|
1111
|
+
NAMELINK_COMPONENT devel
|
|
1112
|
+
OBJECTS DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT devel
|
|
1113
|
+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT devel
|
|
1114
|
+
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT devel
|
|
1115
|
+
INCLUDES
|
|
1116
|
+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
|
1117
|
+
COMPONENT devel)
|
|
1118
|
+
endif()
|
|
1119
|
+
endif(MDBX_INSTALL_STATIC)
|
|
1120
|
+
|
|
1121
|
+
# ######################################################################################################################
|
|
1122
|
+
|
|
1123
|
+
# collect options & build info
|
|
1124
|
+
if(NOT DEFINED MDBX_BUILD_TIMESTAMP)
|
|
1125
|
+
if(NOT "$ENV{SOURCE_DATE_EPOCH}" STREQUAL "")
|
|
1126
|
+
set(MDBX_BUILD_TIMESTAMP "$ENV{SOURCE_DATE_EPOCH}")
|
|
1127
|
+
else()
|
|
1128
|
+
string(TIMESTAMP MDBX_BUILD_TIMESTAMP UTC)
|
|
1129
|
+
endif()
|
|
1130
|
+
endif()
|
|
1131
|
+
set(MDBX_BUILD_FLAGS ${CMAKE_C_FLAGS})
|
|
1132
|
+
if(MDBX_BUILD_CXX)
|
|
1133
|
+
set(MDBX_BUILD_FLAGS ${CMAKE_CXX_FLAGS})
|
|
1134
|
+
endif()
|
|
1135
|
+
|
|
1136
|
+
# append cmake's build-type flags and defines
|
|
1137
|
+
if(NOT CMAKE_CONFIGURATION_TYPES)
|
|
1138
|
+
list(APPEND MDBX_BUILD_FLAGS ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE_UPPERCASE}})
|
|
1139
|
+
if(MDBX_BUILD_CXX)
|
|
1140
|
+
list(APPEND MDBX_BUILD_FLAGS ${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE_UPPERCASE}})
|
|
1141
|
+
endif()
|
|
1142
|
+
endif()
|
|
1143
|
+
|
|
1144
|
+
# choice target to fetch definitions and options
|
|
1145
|
+
if(MDBX_BUILD_SHARED_LIBRARY)
|
|
1146
|
+
set(target4fetch mdbx)
|
|
1147
|
+
else()
|
|
1148
|
+
set(target4fetch mdbx-static)
|
|
1149
|
+
endif()
|
|
1150
|
+
|
|
1151
|
+
# get definitions
|
|
1152
|
+
get_target_property(defs_list ${target4fetch} COMPILE_DEFINITIONS)
|
|
1153
|
+
if(defs_list)
|
|
1154
|
+
list(APPEND MDBX_BUILD_FLAGS ${defs_list})
|
|
1155
|
+
endif()
|
|
1156
|
+
|
|
1157
|
+
# get target compile options
|
|
1158
|
+
get_target_property(options_list ${target4fetch} COMPILE_OPTIONS)
|
|
1159
|
+
if(options_list)
|
|
1160
|
+
list(APPEND MDBX_BUILD_FLAGS ${options_list})
|
|
1161
|
+
endif()
|
|
1162
|
+
|
|
1163
|
+
list(REMOVE_DUPLICATES MDBX_BUILD_FLAGS)
|
|
1164
|
+
string(REPLACE ";" " " MDBX_BUILD_FLAGS "${MDBX_BUILD_FLAGS}")
|
|
1165
|
+
if(CMAKE_CONFIGURATION_TYPES)
|
|
1166
|
+
# add dynamic part via per-configuration define
|
|
1167
|
+
message(STATUS "MDBX Compile Flags: ${MDBX_BUILD_FLAGS} <AND CONFIGURATION DEPENDENT>")
|
|
1168
|
+
add_definitions(
|
|
1169
|
+
-DMDBX_BUILD_FLAGS_CONFIG="$<$<CONFIG:Debug>:${CMAKE_C_FLAGS_DEBUG} ${CMAKE_C_DEFINES_DEBUG}>$<$<CONFIG:Release>:${CMAKE_C_FLAGS_RELEASE} ${CMAKE_C_DEFINES_RELEASE}>$<$<CONFIG:RelWithDebInfo>:${CMAKE_C_FLAGS_RELWITHDEBINFO} ${CMAKE_C_DEFINES_RELWITHDEBINFO}>$<$<CONFIG:MinSizeRel>:${CMAKE_C_FLAGS_MINSIZEREL} ${CMAKE_C_DEFINES_MINSIZEREL}>"
|
|
1170
|
+
)
|
|
1171
|
+
else()
|
|
1172
|
+
message(STATUS "MDBX Compile Flags: ${MDBX_BUILD_FLAGS}")
|
|
1173
|
+
endif()
|
|
1174
|
+
|
|
1175
|
+
# get compiler info
|
|
1176
|
+
execute_process(
|
|
1177
|
+
COMMAND sh -c "${CMAKE_C_COMPILER} --version | head -1"
|
|
1178
|
+
OUTPUT_VARIABLE MDBX_BUILD_COMPILER
|
|
1179
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET
|
|
1180
|
+
RESULT_VARIABLE rc)
|
|
1181
|
+
if(rc OR NOT MDBX_BUILD_COMPILER)
|
|
1182
|
+
string(STRIP "${CMAKE_C_COMPILER_ID}-${CMAKE_C_COMPILER_VERSION}" MDBX_BUILD_COMPILER)
|
|
1183
|
+
endif()
|
|
1184
|
+
|
|
1185
|
+
# make a build-target triplet
|
|
1186
|
+
if(CMAKE_C_COMPILER_TARGET)
|
|
1187
|
+
set(MDBX_BUILD_TARGET "${CMAKE_C_COMPILER_TARGET}")
|
|
1188
|
+
else()
|
|
1189
|
+
if(CMAKE_C_COMPILER_ARCHITECTURE_ID)
|
|
1190
|
+
string(STRIP "${CMAKE_C_COMPILER_ARCHITECTURE_ID}" MDBX_BUILD_TARGET)
|
|
1191
|
+
elseif(CMAKE_GENERATOR_PLATFORM AND NOT CMAKE_GENERATOR_PLATFORM STREQUAL CMAKE_SYSTEM_NAME)
|
|
1192
|
+
string(STRIP "${CMAKE_GENERATOR_PLATFORM}" MDBX_BUILD_TARGET)
|
|
1193
|
+
elseif(CMAKE_SYSTEM_ARCH)
|
|
1194
|
+
string(STRIP "${CMAKE_SYSTEM_ARCH}" MDBX_BUILD_TARGET)
|
|
1195
|
+
elseif(CMAKE_LIBRARY_ARCHITECTURE)
|
|
1196
|
+
string(STRIP "${CMAKE_LIBRARY_ARCHITECTURE}" MDBX_BUILD_TARGET)
|
|
1197
|
+
elseif(CMAKE_SYSTEM_PROCESSOR)
|
|
1198
|
+
string(STRIP "${CMAKE_SYSTEM_PROCESSOR}" MDBX_BUILD_TARGET)
|
|
1199
|
+
else()
|
|
1200
|
+
set(MDBX_BUILD_TARGET "unknown")
|
|
1201
|
+
endif()
|
|
1202
|
+
if(CMAKE_C_COMPILER_ABI AND NOT (CMAKE_C_COMPILER_ABI MATCHES ".*${MDBX_BUILD_TARGET}.*"
|
|
1203
|
+
OR MDBX_BUILD_TARGET MATCHES ".*${CMAKE_C_COMPILER_ABI}.*"))
|
|
1204
|
+
string(CONCAT MDBX_BUILD_TARGET "${MDBX_BUILD_TARGET}-${CMAKE_C_COMPILER_ABI}")
|
|
1205
|
+
endif()
|
|
1206
|
+
if(CMAKE_C_PLATFORM_ID
|
|
1207
|
+
AND NOT (CMAKE_SYSTEM_NAME AND (CMAKE_C_PLATFORM_ID MATCHES ".*${CMAKE_SYSTEM_NAME}.*"
|
|
1208
|
+
OR CMAKE_SYSTEM_NAME MATCHES ".*${CMAKE_C_PLATFORM_ID}.*"))
|
|
1209
|
+
AND NOT (CMAKE_C_PLATFORM_ID MATCHES ".*${CMAKE_C_PLATFORM_ID}.*" OR MDBX_BUILD_TARGET MATCHES
|
|
1210
|
+
".*${CMAKE_C_PLATFORM_ID}.*"))
|
|
1211
|
+
string(CONCAT MDBX_BUILD_TARGET "${MDBX_BUILD_TARGET}-${CMAKE_C_COMPILER_ABI}")
|
|
1212
|
+
endif()
|
|
1213
|
+
if(CMAKE_SYSTEM_NAME)
|
|
1214
|
+
string(CONCAT MDBX_BUILD_TARGET "${MDBX_BUILD_TARGET}-${CMAKE_SYSTEM_NAME}")
|
|
1215
|
+
endif()
|
|
1216
|
+
endif()
|
|
1217
|
+
|
|
1218
|
+
# provide build-type
|
|
1219
|
+
if(CMAKE_CONFIGURATION_TYPES)
|
|
1220
|
+
# via per-configuration define
|
|
1221
|
+
add_definitions(-DMDBX_BUILD_TYPE="$<CONFIG>")
|
|
1222
|
+
set(MDBX_BUILD_TYPE "<CONFIGURATION DEPENDENT>")
|
|
1223
|
+
else()
|
|
1224
|
+
set(MDBX_BUILD_TYPE ${CMAKE_BUILD_TYPE})
|
|
1225
|
+
endif()
|
|
1226
|
+
|
|
1227
|
+
# options
|
|
1228
|
+
set(options VERSION C_COMPILER CXX_COMPILER MDBX_BUILD_TARGET MDBX_BUILD_TYPE ${MDBX_BUILD_OPTIONS})
|
|
1229
|
+
foreach(item IN LISTS options)
|
|
1230
|
+
if(DEFINED ${item})
|
|
1231
|
+
set(value "${${item}}")
|
|
1232
|
+
elseif(DEFINED MDBX_${item})
|
|
1233
|
+
set(item MDBX_${item})
|
|
1234
|
+
set(value "${${item}}")
|
|
1235
|
+
elseif(DEFINED CMAKE_${item})
|
|
1236
|
+
set(item CMAKE_${item})
|
|
1237
|
+
set(value "${${item}}")
|
|
1238
|
+
else()
|
|
1239
|
+
set(value "AUTO (not pre-defined explicitly)")
|
|
1240
|
+
endif()
|
|
1241
|
+
message(STATUS "${item}: ${value}")
|
|
1242
|
+
endforeach(item)
|
|
1243
|
+
|
|
1244
|
+
# provide config.h for library build info
|
|
1245
|
+
configure_file("${MDBX_SOURCE_DIR}/config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/config.h" ESCAPE_QUOTES)
|
|
1246
|
+
add_definitions(-DMDBX_CONFIG_H="${CMAKE_CURRENT_BINARY_DIR}/config.h")
|
|
1247
|
+
|
|
1248
|
+
# ######################################################################################################################
|
|
1249
|
+
|
|
1250
|
+
if(NOT MDBX_AMALGAMATED_SOURCE AND MDBX_ENABLE_TESTS)
|
|
1251
|
+
if(NOT CMAKE_CXX_COMPILER_LOADED)
|
|
1252
|
+
message(FATAL_ERROR "MDBX_ENABLE_TESTS=${MDBX_ENABLE_TESTS}: The C++ compiler is required to build the tests.")
|
|
1253
|
+
endif()
|
|
1254
|
+
add_subdirectory(test)
|
|
1255
|
+
endif()
|
|
1256
|
+
|
|
1257
|
+
# ######################################################################################################################
|
|
1258
|
+
|
|
1259
|
+
if(NOT SUBPROJECT)
|
|
1260
|
+
set(PACKAGE "libmdbx")
|
|
1261
|
+
set(CPACK_PACKAGE_VERSION_MAJOR ${MDBX_VERSION_MAJOR})
|
|
1262
|
+
set(CPACK_PACKAGE_VERSION_MINOR ${MDBX_VERSION_MINOR})
|
|
1263
|
+
set(CPACK_PACKAGE_VERSION_PATCH ${MDBX_VERSION_PATCH})
|
|
1264
|
+
set(CPACK_PACKAGE_VERSION_TWEAK ${MDBX_VERSION_TWEAK})
|
|
1265
|
+
set(PACKAGE_VERSION ${MDBX_VERSION})
|
|
1266
|
+
message(STATUS "libmdbx package version is ${PACKAGE_VERSION}")
|
|
1267
|
+
endif()
|
|
1268
|
+
|
|
1269
|
+
cmake_policy(POP)
|