[Buildroot] [git commit] package/drogon: new package
Julien Olivain via buildroot <[email protected]>
| Newsgroups | net.busybox.buildroot |
|---|---|
| Message-ID | <[email protected]> |
commit: https://gitlab.com/buildroot.org/buildroot/-/commit/d38b4915e9437c5492836914c0a0fff12b4f1031 branch: https://gitlab.com/buildroot.org/buildroot/-/tree/master Drogon is a C++17/20 based HTTP application framework. It can be used to easily build various types of web application server programs using C++. Project page: https://github.com/drogonframework/drogon Signed-off-by: Dario Binacchi <[email protected]> Reviewed-by: Petr Vorel <[email protected]> Signed-off-by: Julien Olivain <[email protected]> --- DEVELOPERS | 1 + package/Config.in | 1 + ...HUP-POLLRDHUP-mismatch-on-Linux-SPARC-SPA.patch | 93 ++++++++++++++++++++++ package/drogon/Config.in | 52 ++++++++++++ package/drogon/drogon.hash | 3 + package/drogon/drogon.mk | 63 +++++++++++++++ 6 files changed, 213 insertions(+) diff --git a/DEVELOPERS b/DEVELOPERS index b7749df319..75607183c6 100644 --- a/DEVELOPERS +++ b/DEVELOPERS @@ -820,6 +820,7 @@ F: package/babeld/ F: package/bc/ F: package/cmocka/ F: package/connman/ +F: package/drogon/ F: package/empty/ F: package/iana-assignments/ F: package/inih/ diff --git a/package/Config.in b/package/Config.in index e4deb5f00e..6058800682 100644 --- a/package/Config.in +++ b/package/Config.in @@ -2001,6 +2001,7 @@ menu "Networking" source "package/davici/Config.in" source "package/dht/Config.in" source "package/dpdk/Config.in" + source "package/drogon/Config.in" source "package/enet/Config.in" source "package/filemq/Config.in" source "package/fmlib/Config.in" diff --git a/package/drogon/0001-Fix-EPOLLRDHUP-POLLRDHUP-mismatch-on-Linux-SPARC-SPA.patch b/package/drogon/0001-Fix-EPOLLRDHUP-POLLRDHUP-mismatch-on-Linux-SPARC-SPA.patch new file mode 100644 index 0000000000..7a9fab389f --- /dev/null +++ b/package/drogon/0001-Fix-EPOLLRDHUP-POLLRDHUP-mismatch-on-Linux-SPARC-SPA.patch @@ -0,0 +1,93 @@ +From 9ecfb965e6ea02583874e534f8936ebb43a9db29 Mon Sep 17 00:00:00 2001 +From: Dario Binacchi <[email protected]> +Date: Mon, 20 Jul 2026 16:16:22 +0200 +Subject: [PATCH] Fix EPOLLRDHUP/POLLRDHUP mismatch on Linux SPARC/SPARC64 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Fix a build failure reported by Buildroot autobuild for the +bootlin-sparc64-glibc configuration: + + EpollPoller.cc:41:26: error: static assertion failed: + EPOLLRDHUP != POLLRDHUP + +On SPARC/SPARC64, EPOLLRDHUP (0x2000) and POLLRDHUP (0x0800) are +different bits, breaking the assumption elsewhere in this file that +epoll and poll flags are interchangeable. + +Introduce a combined RDHUP value for this architecture and translate +it before epoll_ctl() and after epoll_wait(), since revents_ is later +tested against POLLRDHUP in Channel::handleEvent() — otherwise +half-close detection would silently break at runtime. + +This patch is inspired by the equivalent fix in lighttpd: +https://redmine.lighttpd.net/issues/3251 + +Signed-off-by: Dario Binacchi <[email protected]> +Upstream: https://github.com/an-tao/trantor/pull/407 +--- + trantor/trantor/net/inner/poller/EpollPoller.cc | 25 ++++++++++++++++++++++++- + 1 file changed, 24 insertions(+), 1 deletion(-) + +diff --git a/trantor/trantor/net/inner/poller/EpollPoller.cc b/trantor/trantor/net/inner/poller/EpollPoller.cc +index c9c4f7d481b4..812b48c30d79 100644 +--- a/trantor/trantor/net/inner/poller/EpollPoller.cc ++++ b/trantor/trantor/net/inner/poller/EpollPoller.cc +@@ -22,6 +22,9 @@ + #include <assert.h> + #include <strings.h> + #include <iostream> ++#if (defined(__sparc__) || defined(__sparc)) ++#define TRANTOR_RDHUP 0x2800 /* EPOLLRDHUP | POLLRDHUP */ ++#endif + #elif defined _WIN32 + #include "Wepoll.h" + #include <assert.h> +@@ -38,7 +41,12 @@ namespace trantor + static_assert(EPOLLIN == POLLIN, "EPOLLIN != POLLIN"); + static_assert(EPOLLPRI == POLLPRI, "EPOLLPRI != POLLPRI"); + static_assert(EPOLLOUT == POLLOUT, "EPOLLOUT != POLLOUT"); ++#if (defined(__sparc__) || defined(__sparc)) ++static_assert(EPOLLRDHUP & TRANTOR_RDHUP, ++ "EPOLLRDHUP not included in TRANTOR_RDHUP"); ++#else + static_assert(EPOLLRDHUP == POLLRDHUP, "EPOLLRDHUP != POLLRDHUP"); ++#endif + static_assert(EPOLLERR == POLLERR, "EPOLLERR != POLLERR"); + static_assert(EPOLLHUP == POLLHUP, "EPOLLHUP != POLLHUP"); + #endif +@@ -127,7 +135,15 @@ void EpollPoller::fillActiveChannels(int numEvents, + assert(it != channels_.end()); + assert(it->second == channel); + #endif +- channel->setRevents(events_[i].events); ++ int revents = events_[i].events; ++#if defined(__linux__) && (defined(__sparc__) || defined(__sparc)) ++ if (revents & EPOLLRDHUP) ++ { ++ revents &= ~EPOLLRDHUP; ++ revents |= POLLRDHUP; ++ } ++#endif ++ channel->setRevents(revents); + activeChannels->push_back(channel); + } + // LOG_TRACE<<"active Channels num:"<<activeChannels->size(); +@@ -205,6 +221,13 @@ void EpollPoller::update(int operation, Channel *channel) + struct epoll_event event; + memset(&event, 0, sizeof(event)); + event.events = channel->events(); ++#if defined(__linux__) && (defined(__sparc__) || defined(__sparc)) ++ if (event.events & TRANTOR_RDHUP) ++ { ++ event.events &= ~TRANTOR_RDHUP; ++ event.events |= EPOLLRDHUP; ++ } ++#endif + event.data.ptr = channel; + int fd = channel->fd(); + if (::epoll_ctl(epollfd_, operation, fd, &event) < 0) +-- +2.43.0 + diff --git a/package/drogon/Config.in b/package/drogon/Config.in new file mode 100644 index 0000000000..ce8a8313bd --- /dev/null +++ b/package/drogon/Config.in @@ -0,0 +1,52 @@ +config BR2_PACKAGE_DROGON + bool "drogon" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_11 # C++17/20 + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_JSONCPP + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + select BR2_PACKAGE_ZLIB + help + Drogon is a C++17/20 based HTTP application framework. + Drogon can be used to easily build various types of web + application server programs using C++. + + https://github.com/drogonframework/drogon + +if BR2_PACKAGE_DROGON + +config BR2_PACKAGE_DROGON_BROTLI + bool "build Brotli" + select BR2_PACKAGE_BROTLI + help + Add support for brotli compression. + +config BR2_PACKAGE_DROGON_CTL + bool "build drogon_ctl" + help + drogon_ctl is a command-line tool used to generate + project skeletons and source code. + +config BR2_PACKAGE_DROGON_EXAMPLES + bool "build examples" + +config BR2_PACKAGE_DROGON_ORM + bool "build orm" + help + Enable the ORM module for typed database access. + +config BR2_PACKAGE_DROGON_YAML_CONFIG + bool "build yaml config" + select BR2_PACKAGE_YAML_CPP + help + Add support for YAML configuration via yaml-cpp. + +endif + +comment "drogon needs a toolchain w/ C++, threads, gcc >= 11" + depends on BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_11 || \ + !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/drogon/drogon.hash b/package/drogon/drogon.hash new file mode 100644 index 0000000000..997fd519e1 --- /dev/null +++ b/package/drogon/drogon.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 1d7dc4591b61c34903362209e58a3f92903c76ce6514ffba5ccfaa86a2e3227c drogon-v1.9.13-git4.tar.gz +sha256 7e1ed2ca339c384279f1e195e99916eb0145a0d87659969c7e22f8fdd53e11fd LICENSE diff --git a/package/drogon/drogon.mk b/package/drogon/drogon.mk new file mode 100644 index 0000000000..89b1b2720c --- /dev/null +++ b/package/drogon/drogon.mk @@ -0,0 +1,63 @@ +################################################################################ +# +# drogon +# +################################################################################ + +DROGON_VERSION = v1.9.13 +DROGON_SITE = https://github.com/drogonframework/drogon +DROGON_SITE_METHOD = git +DROGON_GIT_SUBMODULES = YES +DROGON_LICENSE = MIT +DROGON_LICENSE_FILES = LICENSE +DROGON_INSTALL_STAGING = YES + +DROGON_DEPENDENCIES = jsoncpp util-linux zlib +HOST_DROGON_DEPENDENCIES = host-jsoncpp host-util-linux host-zlib + +DROGON_CONF_OPTS = \ + -DBUILD_TESTS=OFF + +HOST_DROGON_CONF_OPTS = \ + -DBUILD_CTL=ON \ + -DBUILD_EXAMPLES=OFF \ + -DBUILD_TESTS=OFF + +ifeq ($(BR2_PACKAGE_DROGON_BROTLI),y) +DROGON_DEPENDENCIES += brotli +DROGON_CONF_OPTS += -DBUILD_BROTLI=ON +else +DROGON_CONF_OPTS += -DBUILD_BROTLI=OFF +endif + +ifeq ($(BR2_PACKAGE_DROGON_CTL),y) +# When we have drogon_ctl for the target, we need to build the +# _drogon_ctl tool with host-drogon support so that it can be +# run during the building process +DROGON_DEPENDENCIES += host-drogon +DROGON_CONF_OPTS += -DBUILD_CTL=ON +else +DROGON_CONF_OPTS += -DBUILD_CTL=OFF +endif + +ifeq ($(BR2_PACKAGE_DROGON_EXAMPLES),y) +DROGON_CONF_OPTS += -DBUILD_EXAMPLES=ON +else +DROGON_CONF_OPTS += -DBUILD_EXAMPLES=OFF +endif + +ifeq ($(BR2_PACKAGE_DROGON_ORM),y) +DROGON_CONF_OPTS += -DBUILD_ORM=ON +else +DROGON_CONF_OPTS += -DBUILD_ORM=OFF +endif + +ifeq ($(BR2_PACKAGE_DROGON_YAML_CONFIG),y) +DROGON_DEPENDENCIES += yaml-cpp +DROGON_CONF_OPTS += -DBUILD_YAML_CONFIG=ON +else +DROGON_CONF_OPTS += -DBUILD_YAML_CONFIG=OFF +endif + +$(eval $(cmake-package)) +$(eval $(host-cmake-package)) _______________________________________________ buildroot mailing list [email protected] https://lists.buildroot.org/mailman/listinfo/buildroot