All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 00/11] plugins: enable C++ plugins
@ 2026-01-02 21:47 Pierrick Bouvier
  2026-01-02 21:47 ` [PATCH v2 01/11] plugins: move win32_linker.c file to plugins directory Pierrick Bouvier
                   ` (13 more replies)
  0 siblings, 14 replies; 36+ messages in thread
From: Pierrick Bouvier @ 2026-01-02 21:47 UTC (permalink / raw)
  To: qemu-devel
  Cc: Gustavo Bueno Romero, Richard Henderson, Phil Mathieu-Daudé,
	Manos Pitsidianakis, Alex Bennée, Paolo Bonzini,
	Daniel P . Berrangé, Pierrick Bouvier

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



^ permalink raw reply	[flat|nested] 36+ messages in thread

end of thread, other threads:[~2026-01-19 19:14 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-02 21:47 [PATCH v2 00/11] plugins: enable C++ plugins Pierrick Bouvier
2026-01-02 21:47 ` [PATCH v2 01/11] plugins: move win32_linker.c file to plugins directory Pierrick Bouvier
2026-01-03 12:46   ` Manos Pitsidianakis
2026-01-05  4:33   ` Richard Henderson
2026-01-02 21:47 ` [PATCH v2 02/11] plugins: factorize plugin dependencies and library details Pierrick Bouvier
2026-01-16 12:22   ` Daniel P. Berrangé
2026-01-17  0:02     ` Pierrick Bouvier
2026-01-19  8:09       ` Daniel P. Berrangé
2026-01-19 16:52         ` Pierrick Bouvier
2026-01-02 21:47 ` [PATCH v2 03/11] plugins: use complete filename for defining plugins sources Pierrick Bouvier
2026-01-03 12:47   ` Manos Pitsidianakis
2026-01-02 21:47 ` [PATCH v2 04/11] plugins: define plugin API symbols as extern "C" when compiling in C++ Pierrick Bouvier
2026-01-05  5:10   ` Richard Henderson
2026-01-18 18:30   ` Philippe Mathieu-Daudé
2026-01-02 21:47 ` [PATCH v2 05/11] tests/tcg/plugins/mem.c: remove dependency on qemu headers Pierrick Bouvier
2026-01-03 12:49   ` Manos Pitsidianakis
2026-01-18 18:30   ` Philippe Mathieu-Daudé
2026-01-02 21:47 ` [PATCH v2 06/11] plugins: move qemu-plugin.h to include/plugins/ Pierrick Bouvier
2026-01-03 12:53   ` Manos Pitsidianakis
2026-01-05  5:13   ` Richard Henderson
2026-01-02 21:47 ` [PATCH v2 07/11] meson: fix supported compiler arguments in other languages than C Pierrick Bouvier
2026-01-03 12:54   ` Manos Pitsidianakis
2026-01-03 20:39     ` Pierrick Bouvier
2026-01-04 10:03       ` Manos Pitsidianakis
2026-01-02 21:47 ` [PATCH v2 08/11] meson: enable cpp (optionally) for plugins Pierrick Bouvier
2026-01-03 13:02   ` Manos Pitsidianakis
2026-01-02 21:47 ` [PATCH v2 09/11] qga/vss-win32: fix clang warning with C++20 Pierrick Bouvier
2026-01-03 13:03   ` Manos Pitsidianakis
2026-01-02 21:47 ` [PATCH v2 10/11] meson: update C++ standard to C++23 Pierrick Bouvier
2026-01-03 13:04   ` Manos Pitsidianakis
2026-01-02 21:47 ` [PATCH v2 11/11] contrib/plugins: add empty cpp plugin Pierrick Bouvier
2026-01-03 13:05   ` Manos Pitsidianakis
2026-01-15 20:53 ` [PATCH v2 00/11] plugins: enable C++ plugins Pierrick Bouvier
2026-01-16 12:35 ` Daniel P. Berrangé
2026-01-16 18:52   ` Pierrick Bouvier
2026-01-19 19:13 ` Pierrick Bouvier

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.