From: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH v4 1/1] package/libmdbx: new package (library/database).
Date: Wed, 14 Oct 2020 23:50:42 +0200 [thread overview]
Message-ID: <20201014235042.1a27b09f@windsurf> (raw)
In-Reply-To: <20201006192709.8265-2-leo@yuriev.ru>
Hello Leonid,
Thanks for this contribution and new iteration!
On Tue, 6 Oct 2020 22:27:09 +0300
Leonid Yuriev <leo@yuriev.ru> wrote:
> This patch adds libmdbx v0.9.1:
> - 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
>
Your Signed-off-by line should be here... and not after the changelog.
> ---
> 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.
>
> Signed-off-by: Leonid Yuriev <leo@yuriev.ru>
> +N: Leonid Yuriev <leo@yuriev.ru>
> +F: package/libmdbx
Final / missing.
> diff --git a/package/libmdbx/Config.in b/package/libmdbx/Config.in
> new file mode 100644
> index 0000000000..dc36f12348
> --- /dev/null
> +++ b/package/libmdbx/Config.in
> @@ -0,0 +1,42 @@
> +config BR2_PACKAGE_LIBMDBX
> + bool "libmdbx"
> + depends on BR2_USE_MMU
> + depends on BR2_TOOLCHAIN_HAS_THREADS
> + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_4
> + depends on BR2_TOOLCHAIN_HAS_SYNC_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
I don't think this option is needed, just enable C++ support in the .mk
file when the relevant conditions are met.
> + bool "C++ API"
> + depends on BR2_INSTALL_LIBSTDCPP
> + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
> + help
> + Enable modern C++11/14/17/20 API for libmdbx.
> +
> +comment "libmdbx C++ support needs a toolchain w/ C++11, gcc >= 4.8"
> + depends on !BR2_INSTALL_LIBSTDCPP || \
> + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
> +
> +endif
> +
> +comment "libmdbx needs a toolchain w/ threads, gcc >= 4.4"
> + depends on BR2_USE_MMU
depends on BR2_TOOLCHAIN_HAS_SYNC_4
should be added here as well.
> + depends on !BR2_TOOLCHAIN_HAS_THREADS || \
> + !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..f48cd81a7d
> --- /dev/null
> +++ b/package/libmdbx/libmdbx.hash
> @@ -0,0 +1,2 @@
# Locally calculated
> +sha256 310fe25c858a9515fc8c8d7d1f24a67c9496f84a91e0a0e41ea9975b1371e569 LICENSE
> +sha256 c7fb24381eb4d92f2e2edc17e577cb721269683c816c6cca307c58f6f346e786 libmdbx-amalgamated-0.9.1.tar.gz
Please put the tarball hash before the license hash.
> diff --git a/package/libmdbx/libmdbx.mk b/package/libmdbx/libmdbx.mk
> new file mode 100644
> index 0000000000..be0c2d7b06
> --- /dev/null
> +++ b/package/libmdbx/libmdbx.mk
> @@ -0,0 +1,24 @@
> +################################################################################
> +#
> +# libmdbx
> +#
> +################################################################################
> +
> +LIBMDBX_VERSION = 0.9.1
> +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
Not needed, this is the default.
> +LIBMDBX_STRIP_COMPONENTS = 0
Quite odd, why do you generate your tarballs like this ?
> +LIBMDBX_INSTALL_STAGING = YES
> +
> +LIBMDBX_CONF_OPTS = -DMDBX_INSTALL_MANPAGES=OFF -DBUILD_FOR_NATIVE_CPU=OFF \
> + -DMDBX_INSTALL_STATIC=$(if $(BR2_STATIC_LIBS),ON,OFF) \
> + -DMDBX_BUILD_SHARED_LIBRARY=$(if $(BR2_SHARED_LIBS),ON,OFF) \
This is not good as it doesn't account for the BR2_SHARED_STATIC_LIBS
situation. So it should be:
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
else
LIBMDBX_CONF_OPTS += -DMDBX_BUILD_SHARED_LIBRARY=OFF
endif
> + -DMDBX_BUILD_CXX=$(if $(BR2_PACKAGE_LIBMDBX_CXX),ON,OFF) \
> + -DMDBX_BUILD_TOOLS=$(if $(BR2_PACKAGE_LIBMDBX_TOOLS),ON,OFF) \
> + -DMDBX_LINK_TOOLS_NONSTATIC=$(if $(BR2_SHARED_LIBS),ON,OFF)
Ditto here.
However, the bigger problem is that it doesn't build for me. I used the
following defconfig:
BR2_arm=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-arm-full-2020.02.tar.bz2"
BR2_TOOLCHAIN_EXTERNAL_GCC_5=y
BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_14=y
BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
BR2_TOOLCHAIN_EXTERNAL_CXX=y
BR2_INIT_NONE=y
BR2_SYSTEM_BIN_SH_NONE=y
# BR2_PACKAGE_BUSYBOX is not set
BR2_PACKAGE_LIBMDBX=y
BR2_PACKAGE_LIBMDBX_TOOLS=y
BR2_PACKAGE_LIBMDBX_CXX=y
# BR2_TARGET_ROOTFS_TAR is not set
And it fails like this:
In file included from /home/thomas/projets/buildroot/output/build/libmdbx-0.9.1/mdbx.c++:105:0:
/home/thomas/projets/buildroot/output/build/libmdbx-0.9.1/mdbx.h++:223:10: error: ?exception_ptr? in namespace ?std? does not name a type
::std::exception_ptr captured_;
^
/home/thomas/projets/buildroot/output/build/libmdbx-0.9.1/mdbx.h++: In member function ?bool mdbx::exception_thunk::is_clean() const?:
/home/thomas/projets/buildroot/output/build/libmdbx-0.9.1/mdbx.h++:2730:66: error: ?captured_? was not declared in this scope
inline bool exception_thunk::is_clean() const noexcept { return !captured_; }
^
/home/thomas/projets/buildroot/output/build/libmdbx-0.9.1/mdbx.h++: In member function ?void mdbx::exception_thunk::capture()?:
/home/thomas/projets/buildroot/output/build/libmdbx-0.9.1/mdbx.h++:2734:3: error: ?captured_? was not declared in this scope
captured_ = ::std::current_exception();
^
/home/thomas/projets/buildroot/output/build/libmdbx-0.9.1/mdbx.h++:2734:15: error: ?current_exception? is not a member of ?std?
captured_ = ::std::current_exception();
^
/home/thomas/projets/buildroot/output/build/libmdbx-0.9.1/mdbx.h++: In member function ?void mdbx::exception_thunk::rethrow_captured() const?:
/home/thomas/projets/buildroot/output/build/libmdbx-0.9.1/mdbx.h++:2738:7: error: ?captured_? was not declared in this scope
if (captured_)
^
/home/thomas/projets/buildroot/output/build/libmdbx-0.9.1/mdbx.h++:2739:25: error: ?rethrow_exception? is not a member of ?std?
MDBX_CXX20_UNLIKELY ::std::rethrow_exception(captured_);
^
make[3]: *** [CMakeFiles/mdbx.dir/build.make:96: CMakeFiles/mdbx.dir/mdbx.c++.o] Error 1
Some older versions of gcc had an issue with exception_ptr, see
BR2_TOOLCHAIN_HAS_GCC_BUG_64735. You might need to depend on
!BR2_TOOLCHAIN_HAS_GCC_BUG_64735. See other packages that have this
dependency in Buildroot.
Thanks!
Thomas
--
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
next prev parent reply other threads:[~2020-10-14 21:50 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-02 11:21 [Buildroot] [PATCH v2 0/1] package/libmdbx: new package (library/database) Leonid Yuriev
2020-10-02 11:21 ` [Buildroot] [PATCH v2 1/1] " Leonid Yuriev
2020-10-03 6:21 ` Heiko Thiery
2020-10-05 20:15 ` [Buildroot] [PATCH v3 0/1] " Leonid Yuriev
2020-10-05 20:15 ` [Buildroot] [PATCH v3 1/1] " Leonid Yuriev
2020-10-06 6:40 ` Heiko Thiery
2020-10-06 19:06 ` Леонид Юрьев
2020-10-06 19:27 ` [Buildroot] [PATCH v4 0/1] " Leonid Yuriev
2020-10-06 19:27 ` [Buildroot] [PATCH v4 1/1] " Leonid Yuriev
2020-10-07 18:00 ` Heiko Thiery
2020-10-14 21:50 ` Thomas Petazzoni [this message]
2020-11-02 12:32 ` Леонид Юрьев (Leonid Yuriev)
2020-11-27 13:47 ` [Buildroot] [PATCH v5 0/1] cover letter for " Leonid Yuriev
2020-11-27 13:47 ` [Buildroot] [PATCH v5 1/1] " Leonid Yuriev
2020-10-05 20:28 ` [Buildroot] [PATCH v2 " Леонид Юрьев
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201014235042.1a27b09f@windsurf \
--to=thomas.petazzoni@bootlin.com \
--cc=buildroot@busybox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox