| Message ID | 20260904100208.3052527-1-gustali@axis.com |
|---|---|
| State | Under Review |
| Headers | show |
| Series | [PATCHv8] boost: Add support for building boost-asio as a shared library | expand |
On Fri, 4 Sept 2026 at 12:02, Gustav Lindberg via lists.openembedded.org <gustali=axis.com@lists.openembedded.org> wrote: > > 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. > > I spent a day trying to get that to work, but it doesn't seem to be possible. Everything I tried either breaks > the header-only version or doesn't build the shared library. The next step is to ask boost upstream to help, maybe by filing a ticket, and/or continue maintaining a .bbappend with these changes. I know boost is horrible, and has a convoluted non-standard boost-specific build system, but we should not be bypassing that entirely, especially when no one else is asking for asio-shared for now. Adding asio to BOOST_LIBS is fine, and can go in as a separate patch. Can you send that please? Alex
diff --git a/meta/recipes-support/boost/boost.inc b/meta/recipes-support/boost/boost.inc index 64a57ddfb2..0267d8e819 100644 --- a/meta/recipes-support/boost/boost.inc +++ b/meta/recipes-support/boost/boost.inc @@ -16,6 +16,7 @@ do_configure[cleandirs] = "${B}" BOOST_LIBS = "\ atomic \ + asio \ charconv \ chrono \ container \ @@ -51,11 +52,14 @@ BOOST_LIBS = "\ # optional libraries PACKAGECONFIG ??= "locale python" +PACKAGECONFIG[asio-shared] = ",," PACKAGECONFIG[locale] = ",,icu" PACKAGECONFIG[graph_parallel] = ",,,boost-mpi mpich" PACKAGECONFIG[mpi] = ",,mpich" PACKAGECONFIG[python] = ",,python3" +SRC_URI:append = " ${@bb.utils.contains('PACKAGECONFIG', 'asio-shared', '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-shared', '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-shared', '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
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-shared"` 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