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 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 +- scripts/clean-includes | 2 +- tests/tcg/plugins/meson.build | 18 +-- 13 files changed, 204 insertions(+), 87 deletions(-) rename include/{qemu => plugins}/qemu-plugin.h (99%) rename {contrib/plugins => plugins}/win32_linker.c (100%) create mode 100644 contrib/plugins/cpp.cpp -- 2.47.3
