On Fri, 02 Jan 2026 23:47, Pierrick Bouvier <pierrick.bouvier@linaro.org> wrote:
>This plugin makes sure we can compile in C++ while including qemu-plugin
>header. It includes all C++ standard headers, up to C++23 standard,
>minus the ones that are missing in the oldest environments we need to
>build for.
>
>Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
>---
Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
> contrib/plugins/cpp.cpp | 119 ++++++++++++++++++++++++++++++++++++
> contrib/plugins/meson.build | 4 ++
> 2 files changed, 123 insertions(+)
> create mode 100644 contrib/plugins/cpp.cpp
>
>diff --git a/contrib/plugins/cpp.cpp b/contrib/plugins/cpp.cpp
>new file mode 100644
>index 00000000000..1ff54896d97
>--- /dev/null
>+++ b/contrib/plugins/cpp.cpp
>@@ -0,0 +1,119 @@
>+/*
>+ * SPDX-License-Identifier: GPL-2.0-or-later
>+ *
>+ * This C++ plugin ensures we don't have regression when compiling C++.
>+ */
>+
>+#include <qemu-plugin.h>
>+
>+/* https://en.cppreference.com/w/cpp/headers.html */
>+#include <algorithm>
>+#include <any>
>+#include <array>
>+#include <atomic>
>+#include <barrier>
>+#include <bit>
>+#include <bitset>
>+#include <cassert>
>+#include <cctype>
>+#include <cerrno>
>+#include <cfenv>
>+#include <cfloat>
>+#include <charconv>
>+#include <chrono>
>+#include <cinttypes>
>+#include <climits>
>+#include <clocale>
>+#include <cmath>
>+#include <codecvt>
>+#include <compare>
>+#include <complex>
>+#include <concepts>
>+#include <condition_variable>
>+#include <coroutine>
>+#include <csetjmp>
>+#include <csignal>
>+#include <cstdarg>
>+#include <cstddef>
>+#include <cstdint>
>+#include <cstdio>
>+#include <cstdlib>
>+#include <cstring>
>+#include <ctime>
>+#include <cuchar>
>+#include <cwchar>
>+#include <cwctype>
>+#include <deque>
>+#include <exception>
>+#include <execution>
>+#include <filesystem>
>+#include <forward_list>
>+#include <fstream>
>+#include <functional>
>+#include <future>
>+#include <initializer_list>
>+#include <iomanip>
>+#include <ios>
>+#include <iosfwd>
>+#include <iostream>
>+#include <istream>
>+#include <iterator>
>+#include <latch>
>+#include <limits>
>+#include <list>
>+#include <locale>
>+#include <map>
>+#include <memory>
>+#include <memory_resource>
>+#include <mutex>
>+#include <new>
>+#include <numbers>
>+#include <numeric>
>+#include <optional>
>+#include <ostream>
>+#include <queue>
>+#include <random>
>+#include <ranges>
>+#include <ratio>
>+#include <regex>
>+#include <scoped_allocator>
>+#include <semaphore>
>+#include <set>
>+#include <shared_mutex>
>+#include <source_location>
>+#include <span>
>+#include <sstream>
>+#include <stack>
>+#include <stdexcept>
>+#include <stop_token>
>+#include <streambuf>
>+#include <string>
>+#include <string_view>
>+#include <syncstream>
>+#include <system_error>
>+#include <thread>
>+#include <tuple>
>+#include <typeindex>
>+#include <typeinfo>
>+#include <type_traits>
>+#include <unordered_map>
>+#include <unordered_set>
>+#include <utility>
>+#include <valarray>
>+#include <variant>
>+#include <vector>
>+#include <version>
>+
>+QEMU_PLUGIN_EXPORT int qemu_plugin_version = QEMU_PLUGIN_VERSION;
>+
>+static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
>+{
>+}
>+
>+QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
>+ const qemu_info_t *info,
>+ int argc, char **argv)
>+{
>+ qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
>+ return 0;
>+}
>diff --git a/contrib/plugins/meson.build b/contrib/plugins/meson.build
>index 3d2d7862e0c..53d52c97967 100644
>--- a/contrib/plugins/meson.build
>+++ b/contrib/plugins/meson.build
>@@ -6,6 +6,10 @@ if host_os != 'windows'
> contrib_plugins += 'lockstep.c'
> endif
>
>+if 'cpp' in all_languages
>+ contrib_plugins += 'cpp.cpp'
>+endif
>+
> t = []
> if get_option('plugins')
> foreach i : contrib_plugins
>--
>2.47.3
>