On 1/24/26 10:29 AM, Pierrick Bouvier wrote:
> Writing plugins in C can be sometimes tedious, especially when using Glib to
> keep track of execution state. We can directly use the same C API but write our
> plugin in C++, benefiting from its great standard library offering strings,
> smart pointers, data structures and synchronization mechanisms.
>
> It's common for downstream QEMU forks to provide C++ for plugins, like this:
> - https://github.com/panda-re/panda/tree/dev/panda/plugins
> - https://github.com/FlorentRevest/DejaView/tree/main/src/qemu_plugin
>
> Hopefully this will help more people to use upstream QEMU, and as a benefit, get
> their contribution back and help to develop plugins ecosystem upstream directly.
>
> This series first cleans up build system for plugins, factorizing details
> between contrib/plugins and tests/tcg/plugins folders.
> Then, we perform codebase cleanups to fix conflicts between existing headers
> and C++ headers.
> After that, we can update the C++ standard used by QEMU, to benefit fully
> from latest updates of the language.
> Finally, we define an empty C++ plugin, making sure we can keep track of
> possible regression in qemu-plugin header.
>
> Note: This series is *not* a trojan horse to bring C++ in QEMU
> codebase, nor to define an alternative C++ API for plugins. It's just enabling
> more users to get the most out of existing C plugin API.
>
> CI: https://gitlab.com/pbo-linaro/qemu/-/pipelines/2242427013
>
> v4
> --
>
> rebase on top of master (new conflict with ./scripts/clean-includes)
>
> v3
> --
>
> - fix indentation in patch 2
>
> v2
> --
>
> - drop coroutine.h rename patch as it's not needed
> - drop ctype.h rename patch, and move qemu-plugin.h to include/plugins
> - fix mem.c to not depend on other QEMU headers
>
> Pierrick Bouvier (11):
> plugins: move win32_linker.c file to plugins directory
> plugins: factorize plugin dependencies and library details
> plugins: use complete filename for defining plugins sources
> plugins: define plugin API symbols as extern "C" when compiling in C++
> tests/tcg/plugins/mem.c: remove dependency on qemu headers
> plugins: move qemu-plugin.h to include/plugins/
> meson: fix supported compiler arguments in other languages than C
> meson: enable cpp (optionally) for plugins
> qga/vss-win32: fix clang warning with C++20
> meson: update C++ standard to C++23
> contrib/plugins: add empty cpp plugin
>
> docs/devel/tcg-plugins.rst | 4 +-
> meson.build | 26 +++--
> include/{qemu => plugins}/qemu-plugin.h | 11 +-
> include/qemu/plugin.h | 2 +-
> plugins/core.c | 2 +-
> {contrib/plugins => plugins}/win32_linker.c | 0
> tests/tcg/plugins/mem.c | 59 ++++------
> contrib/plugins/cpp.cpp | 119 ++++++++++++++++++++
> contrib/plugins/meson.build | 25 ++--
> plugins/meson.build | 17 ++-
> qga/vss-win32/requester.cpp | 6 +-
> tests/tcg/plugins/meson.build | 18 +--
> 12 files changed, 203 insertions(+), 86 deletions(-)
> rename include/{qemu => plugins}/qemu-plugin.h (99%)
> rename {contrib/plugins => plugins}/win32_linker.c (100%)
> create mode 100644 contrib/plugins/cpp.cpp
>
This was merged into master (a8e6997ef).
Regards,
Pierrick