diff mbox series

[v5,1/1] package/libmdbx: new package (library/database).

Message ID 20201127134713.1103936-2-leo@yuriev.ru
State Not Applicable
Headers show
Series cover letter for package/libmdbx: new package (library/database) | expand

Commit Message

Леонид Юрьев (Leonid Yuriev) Nov. 27, 2020, 1:47 p.m. UTC
This patch adds libmdbx v0.9.2:
 - libmdbx is one of the fastest compact embeddable key-value ACID database.
 - libmdbx has a specific set of properties and capabilities,
   focused on creating unique lightweight solutions.
 - libmdbx surpasses the legendary LMDB (Lightning Memory-Mapped Database)
   in terms of reliability, features and performance.
 - https://github.com/erthink/libmdbx

Signed-off-by: Leonid Yuriev <leo@yuriev.ru>

---
Changes v1 -> v2:
  - libmdbx version v0.8.2 -> v0.9.1 (released 2020-09-30)

Changes v2 -> v3:
  - removed outcommented stuff (suggested by Heiko Thiery).
  - cleaned up and simplified the makefile (suggested by Heiko Thiery).
  - added patch for C++ header installation.
  - added patch with fix minor copy&paste typo.
  - added patch with pthread workaround for buggy toolchain/cmake/buildroot.
  - added patch for `pthread_yield()`.
  - passed `utils/check-package package/libmdbx/*` (suggested by Heiko Thiery)
  - passed `utils/test-pkg -a -p libmdbx`,
    except w/o threads & w/o MMU (suggested by Heiko Thiery).

Changes v3 -> v4:
  - fix passing BR2_PACKAGE_LIBMDBX_TOOLS option to cmake.
  - fix using `depend on` instead of `select`,
    and add `comment` for C++ toolchain (suggested by Heiko Thiery).
  - fix minor help typo.

Changes v4 -> v5:
  - libmdbx version v0.9.1 -> v0.9.2 (released 2020-11-27)
  - dropped all patch since not needed.
  - cosmetic changes (suggested by Thomas Petazzoni <thomas.petazzoni@bootlin.com>).
  - added dependence of BR2_TOOLCHAIN_HAS_SYNC_4 (suggested by Thomas Petazzoni <thomas.petazzoni@bootlin.com>).
  - added dependence of !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 (suggested by Thomas Petazzoni <thomas.petazzoni@bootlin.com>).
  - take in account the BR2_SHARED_STATIC_LIBS (suggested by Thomas Petazzoni <thomas.petazzoni@bootlin.com>).

Signed-off-by: Leonid Yuriev <leo@yuriev.ru>
---
 DEVELOPERS                   |  3 +++
 package/Config.in            |  1 +
 package/libmdbx/Config.in    | 45 ++++++++++++++++++++++++++++++++++++
 package/libmdbx/libmdbx.hash |  5 ++++
 package/libmdbx/libmdbx.mk   | 33 ++++++++++++++++++++++++++
 5 files changed, 87 insertions(+)
 create mode 100644 package/libmdbx/Config.in
 create mode 100644 package/libmdbx/libmdbx.hash
 create mode 100644 package/libmdbx/libmdbx.mk
diff mbox series

Patch

diff --git a/DEVELOPERS b/DEVELOPERS
index 9ab1e125f4..758ff6a2d5 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -1482,6 +1482,9 @@  N:	Leon Anavi <leon.anavi@konsulko.com>
 F:	board/olimex/a10_olinuxino
 F:	configs/olimex_a10_olinuxino_lime_defconfig
 
+N:	Leonid Yuriev <leo@yuriev.ru>
+F:	package/libmdbx/
+
 N:	Lionel Flandrin <lionel@svkt.org>
 F:	package/python-babel/
 F:	package/python-daemonize/
diff --git a/package/Config.in b/package/Config.in
index 016a99ed1a..a6f95bfaa9 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -1372,6 +1372,7 @@  menu "Database"
 	source "package/kompexsqlite/Config.in"
 	source "package/leveldb/Config.in"
 	source "package/libgit2/Config.in"
+	source "package/libmdbx/Config.in"
 	source "package/libodb/Config.in"
 	source "package/libodb-boost/Config.in"
 	source "package/libodb-mysql/Config.in"
diff --git a/package/libmdbx/Config.in b/package/libmdbx/Config.in
new file mode 100644
index 0000000000..d13f73938f
--- /dev/null
+++ b/package/libmdbx/Config.in
@@ -0,0 +1,45 @@ 
+config BR2_PACKAGE_LIBMDBX
+	bool "libmdbx"
+	depends on BR2_USE_MMU
+	depends on BR2_TOOLCHAIN_HAS_SYNC_4
+	depends on BR2_TOOLCHAIN_HAS_THREADS
+	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_4
+	help
+	  One of the fastest compact key-value ACID database
+	  without WAL. libmdbx has a specific set of properties
+	  and capabilities, focused on creating unique lightweight
+	  solutions.
+
+	  libmdbx surpasses the legendary LMDB in terms of
+	  reliability, features and performance.
+
+	  https://github.com/erthink/libmdbx
+
+if BR2_PACKAGE_LIBMDBX
+
+config BR2_PACKAGE_LIBMDBX_TOOLS
+	bool "install tools"
+	help
+	  Install libmdbx tools for checking, dump, restore
+	  and show statistics of databases.
+
+config BR2_PACKAGE_LIBMDBX_CXX
+	bool "C++ API"
+	depends on BR2_INSTALL_LIBSTDCPP
+	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
+	depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735
+	help
+	  Enable modern C++11/14/17/20 API for libmdbx.
+
+comment "libmdbx C++ support needs a toolchain w/ C++11, gcc >= 4.8 w/o bug#64735"
+	depends on !BR2_INSTALL_LIBSTDCPP || \
+		!BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 || \
+		BR2_TOOLCHAIN_HAS_GCC_BUG_64735
+
+endif
+
+comment "libmdbx needs MMU, a toolchain w/ threads, gcc >= 4.4 w/ 4-byte atomics"
+	depends on BR2_USE_MMU
+	depends on !BR2_TOOLCHAIN_HAS_THREADS || \
+		!BR2_TOOLCHAIN_HAS_SYNC_4 || \
+		!BR2_TOOLCHAIN_GCC_AT_LEAST_4_4
diff --git a/package/libmdbx/libmdbx.hash b/package/libmdbx/libmdbx.hash
new file mode 100644
index 0000000000..0d3501f1d9
--- /dev/null
+++ b/package/libmdbx/libmdbx.hash
@@ -0,0 +1,5 @@ 
+# Hashes from: https://github.com/erthink/libmdbx/releases/
+sha256  c35cc53d66d74ebfc86e39441ba26276541ac7892bf91dba1e70c83665a02767  libmdbx-amalgamated-0.9.2.tar.gz
+
+# Locally calculated
+sha256  310fe25c858a9515fc8c8d7d1f24a67c9496f84a91e0a0e41ea9975b1371e569  LICENSE
diff --git a/package/libmdbx/libmdbx.mk b/package/libmdbx/libmdbx.mk
new file mode 100644
index 0000000000..f3720130ec
--- /dev/null
+++ b/package/libmdbx/libmdbx.mk
@@ -0,0 +1,33 @@ 
+################################################################################
+#
+# libmdbx
+#
+################################################################################
+
+LIBMDBX_VERSION = 0.9.2
+LIBMDBX_SOURCE = libmdbx-amalgamated-$(LIBMDBX_VERSION).tar.gz
+LIBMDBX_SITE = https://github.com/erthink/libmdbx/releases/download/v$(LIBMDBX_VERSION)
+LIBMDBX_SUPPORTS_IN_SOURCE_BUILD = NO
+LIBMDBX_LICENSE = OLDAP-2.8
+LIBMDBX_LICENSE_FILES = LICENSE
+LIBMDBX_REDISTRIBUTE = YES
+LIBMDBX_STRIP_COMPONENTS = 0
+LIBMDBX_INSTALL_STAGING = YES
+
+LIBMDBX_CONF_OPTS = -DMDBX_INSTALL_MANPAGES=OFF -DBUILD_FOR_NATIVE_CPU=OFF \
+	-DMDBX_BUILD_CXX=$(if $(BR2_PACKAGE_LIBMDBX_CXX),ON,OFF) \
+	-DMDBX_BUILD_TOOLS=$(if $(BR2_PACKAGE_LIBMDBX_TOOLS),ON,OFF)
+
+ifeq ($(BR2_STATIC_LIBS)$(BR2_SHARED_STATIC_LIBS),y)
+LIBMDBX_CONF_OPTS += -DMDBX_INSTALL_STATIC=ON
+else
+LIBMDBX_CONF_OPTS += -DMDBX_INSTALL_STATIC=OFF
+endif
+
+ifeq ($(BR2_SHARED_LIBS)$(BR2_SHARED_STATIC_LIBS),y)
+LIBMDBX_CONF_OPTS += -DMDBX_BUILD_SHARED_LIBRARY=ON -DMDBX_LINK_TOOLS_NONSTATIC=ON
+else
+LIBMDBX_CONF_OPTS += -DMDBX_BUILD_SHARED_LIBRARY=OFF -DMDBX_LINK_TOOLS_NONSTATIC=OFF
+endif
+
+$(eval $(cmake-package))