diff mbox series

[PATCHv7] boost: Add support for building boost-asio as a shared library

Message ID 20260903094517.891670-1-gustali@axis.com
State New
Headers show
Series [PATCHv7] boost: Add support for building boost-asio as a shared library | expand

Commit Message

Gustav Lindberg Sept. 3, 2026, 9:45 a.m. UTC
This is needed to build boost asio as a shared library rather than a
header-only library, which is needed to save memory.

This can be enabled by adding `PACKAGECONFIG:append = " asio"` to
`boost_%.bbappend`.

Signed-off-by: Gustav Lindberg <gustali@axis.com>
---
 meta/recipes-support/boost/boost.inc          | 25 +++++++++++++++++++
 .../boost/boost/boost_asio.cpp                |  1 +
 2 files changed, 26 insertions(+)
 create mode 100644 meta/recipes-support/boost/boost/boost_asio.cpp

Comments

Alexander Kanavin Sept. 3, 2026, 9:58 a.m. UTC | #1
On Thu, 3 Sept 2026 at 11:45, Gustav Lindberg via
lists.openembedded.org <gustali=axis.com@lists.openembedded.org>
wrote:
> --- a/meta/recipes-support/boost/boost.inc
> +++ b/meta/recipes-support/boost/boost.inc
> @@ -44,6 +44,7 @@ BOOST_LIBS = "\
>         type_erasure \
>         url \
>         wave \
> +       ${@bb.utils.contains('PACKAGECONFIG', 'asio', 'asio', '', d)} \

Adding asio to BOOST_LIBS enables asio as a header-only install? Then
it should not be subject to PACKAGECONFIG, it can simply be added
unconditionally like all other libraries.

> +PACKAGECONFIG[asio] = ",,"

Then this should be named 'asio-shared' as it is also used to build
and install a shared library.

> +do_compile:append() {
> +       if ${@bb.utils.contains('PACKAGECONFIG', 'asio', 'true', 'false', d)}; then
> +               ${CXX} ${CPPFLAGS} ${CXXFLAGS} \
> +                       -DBOOST_ASIO_DYN_LINK=1 \
> +                       -I${S} \
> +                       -fPIC \
> +                       -shared \
> +                       -Wl,-soname,libboost_asio.so.${PV} \
> +                       ${UNPACKDIR}/boost_asio.cpp \
> +                       ${LDFLAGS} \
> +                       -o ${B}/libboost_asio.so.${PV}
> +       fi

No custom compiler executions please. Building a shared library should
be done by the boost build system itself, and enabled via a flag to it
during do_configure (e.g. via PACKAGECONFIG_CONFARGS or BJAM_EXTRA).
You probably need to patch boost to do this, and send the needed patch
upstream.

> +do_install:append() {
> +       if ${@bb.utils.contains('PACKAGECONFIG', 'asio', 'true', 'false', d)}; then
> +               install -Dm 0755 ${B}/libboost_asio.so.${PV} ${D}${libdir}/libboost_asio.so.${PV}
> +               ln -sf libboost_asio.so.${PV} ${D}${libdir}/libboost_asio.so
> +       fi
> +}

Same here: no custom installation, boost itself should do it if it was enabled.

Alex
diff mbox series

Patch

diff --git a/meta/recipes-support/boost/boost.inc b/meta/recipes-support/boost/boost.inc
index 64a57ddfb2..4ac3f7af5b 100644
--- a/meta/recipes-support/boost/boost.inc
+++ b/meta/recipes-support/boost/boost.inc
@@ -44,6 +44,7 @@  BOOST_LIBS = "\
 	type_erasure \
 	url \
 	wave \
+	${@bb.utils.contains('PACKAGECONFIG', 'asio', 'asio', '', d)} \
 	${@bb.utils.filter('PACKAGECONFIG', 'locale python', d)} \
 	${@bb.utils.contains('PACKAGECONFIG', 'graph_parallel', 'graph_parallel mpi', \
 			     bb.utils.filter('PACKAGECONFIG', 'mpi', d), d)} \
@@ -51,11 +52,14 @@  BOOST_LIBS = "\
 
 # optional libraries
 PACKAGECONFIG ??= "locale python"
+PACKAGECONFIG[asio] = ",,"
 PACKAGECONFIG[locale] = ",,icu"
 PACKAGECONFIG[graph_parallel] = ",,,boost-mpi mpich"
 PACKAGECONFIG[mpi] = ",,mpich"
 PACKAGECONFIG[python] = ",,python3"
 
+SRC_URI:append = " ${@bb.utils.contains('PACKAGECONFIG', 'asio', 'file://boost_asio.cpp', '', d)}"
+
 inherit python3-dir
 PYTHON_ROOT = "${STAGING_DIR_HOST}/${prefix}"
 
@@ -198,6 +202,20 @@  do_compile() {
 		--debug-configuration
 }
 
+do_compile:append() {
+	if ${@bb.utils.contains('PACKAGECONFIG', 'asio', 'true', 'false', d)}; then
+		${CXX} ${CPPFLAGS} ${CXXFLAGS} \
+			-DBOOST_ASIO_DYN_LINK=1 \
+			-I${S} \
+			-fPIC \
+			-shared \
+			-Wl,-soname,libboost_asio.so.${PV} \
+			${UNPACKDIR}/boost_asio.cpp \
+			${LDFLAGS} \
+			-o ${B}/libboost_asio.so.${PV}
+	fi
+}
+
 do_install() {
 	cd ${S}
 	b2 ${BJAM_OPTS} \
@@ -220,4 +238,11 @@  do_install() {
 
 }
 
+do_install:append() {
+	if ${@bb.utils.contains('PACKAGECONFIG', 'asio', 'true', 'false', d)}; then
+		install -Dm 0755 ${B}/libboost_asio.so.${PV} ${D}${libdir}/libboost_asio.so.${PV}
+		ln -sf libboost_asio.so.${PV} ${D}${libdir}/libboost_asio.so
+	fi
+}
+
 BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/boost/boost/boost_asio.cpp b/meta/recipes-support/boost/boost/boost_asio.cpp
new file mode 100644
index 0000000000..eb3b7262c3
--- /dev/null
+++ b/meta/recipes-support/boost/boost/boost_asio.cpp
@@ -0,0 +1 @@ 
+#include <boost/asio/impl/src.hpp>
\ No newline at end of file