From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: berrange@redhat.com, kwolf@redhat.com, junjie.mao@hotmail.com,
manos.pitsidianakis@linaro.org
Subject: [PATCH v2 12/14] rust: allow older version of bindgen
Date: Tue, 22 Oct 2024 12:09:53 +0200 [thread overview]
Message-ID: <20241022100956.196657-13-pbonzini@redhat.com> (raw)
In-Reply-To: <20241022100956.196657-1-pbonzini@redhat.com>
Cope with the old version that is provided in Debian 12.
--size_t-is-usize is needed on bindgen <0.61.0, and it was removed in
bindgen 0.65.0, so check for it in meson.build.
--merge-extern-blocks was added in 0.61.0.
--formatter rustfmt was added in 0.65.0 and is the default, so remove it.
Apart from Debian 12 and Ubuntu 22.04, all other supported distros have
version 0.66.x of bindgen or newer (or do not have bindgen at all).
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
docs/about/build-platforms.rst | 8 ++++++++
meson.build | 29 +++++++++++++++++++++++++----
2 files changed, 33 insertions(+), 4 deletions(-)
diff --git a/docs/about/build-platforms.rst b/docs/about/build-platforms.rst
index 8fd7da140a3..8173830c17a 100644
--- a/docs/about/build-platforms.rst
+++ b/docs/about/build-platforms.rst
@@ -107,6 +107,14 @@ Python build dependencies
required, it may be necessary to fetch python modules from the Python
Package Index (PyPI) via ``pip``, in order to build QEMU.
+Rust build dependencies
+ QEMU is generally conservative in adding new Rust dependencies, and all
+ of them are included in the distributed tarballs. One exception is the
+ bindgen tool, which is too big to package and distribute. The minimum
+ supported version of bindgen is 0.60.x. For distributions that do not
+ include bindgen or have an older version, it is recommended to install
+ a newer version using ``cargo install bindgen-cli``.
+
Optional build dependencies
Build components whose absence does not affect the ability to build
QEMU may not be available in distros, or may be too old for QEMU's
diff --git a/meson.build b/meson.build
index a083e3434b3..d78afb79d67 100644
--- a/meson.build
+++ b/meson.build
@@ -100,6 +100,21 @@ if have_rust
endif
endif
+bindgen = find_program('bindgen', required: get_option('rust').disable_auto_if(not have_rust))
+if not bindgen.found() or bindgen.version().version_compare('<0.60.0')
+ if get_option('rust').enabled()
+ error('bindgen version ' + bindgen.version() + ' is unsupported. You can install a new version with "cargo install bindgen-cli"')
+ else
+ if bindgen.found()
+ warning('bindgen version ' + bindgen.version() + ' is unsupported, disabling Rust compilation.')
+ else
+ warning('bindgen not found, disabling Rust compilation.')
+ endif
+ message('To use Rust you can install a new version with "cargo install bindgen-cli"')
+ have_rust = false
+ endif
+endif
+
dtrace = not_found
stap = not_found
if 'dtrace' in get_option('trace_backends')
@@ -3943,15 +3958,13 @@ common_all = static_library('common',
if have_rust
# We would like to use --generate-cstr, but it is only available
# starting with bindgen 0.66.0. The oldest supported versions
- # are in Ubuntu 22.04 (0.59.1) and Debian 12 (0.60.1).
+ # is 0.60.x (Debian 12 has 0.60.1) which introduces --allowlist-file.
bindgen_args = [
'--disable-header-comment',
'--raw-line', '// @generated',
'--ctypes-prefix', 'std::os::raw',
- '--formatter', 'rustfmt',
'--generate-block',
'--impl-debug',
- '--merge-extern-blocks',
'--no-doc-comments',
'--with-derive-default',
'--no-layout-tests',
@@ -3960,6 +3973,12 @@ if have_rust
'--allowlist-file', meson.project_source_root() + '/.*',
'--allowlist-file', meson.project_build_root() + '/.*'
]
+ if bindgen.version().version_compare('<0.61.0')
+ # default in 0.61+
+ bindgen_args += ['--size_t-is-usize']
+ else
+ bindgen_args += ['--merge-extern-blocks']
+ endif
c_enums = [
'DeviceCategory',
'GpioPolarity',
@@ -3995,7 +4014,7 @@ if have_rust
dependencies: common_ss.all_dependencies(),
output: 'bindings.rs',
include_directories: include_directories('.', 'include'),
- bindgen_version: ['>=0.69.4'],
+ bindgen_version: ['>=0.60.0'],
args: bindgen_args,
)
subdir('rust')
@@ -4461,6 +4480,8 @@ if have_rust
summary_info += {'Rust target': config_host['RUST_TARGET_TRIPLE']}
summary_info += {'rustc': ' '.join(rustc.cmd_array())}
summary_info += {'rustc version': rustc.version()}
+ summary_info += {'bindgen': bindgen.full_path()}
+ summary_info += {'bindgen version': bindgen.version()}
endif
option_cflags = (get_option('debug') ? ['-g'] : [])
if get_option('optimization') != 'plain'
--
2.46.2
next prev parent reply other threads:[~2024-10-22 10:11 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-22 10:09 [PATCH v2 00/14] rust: allow older versions of rustc and bindgen Paolo Bonzini
2024-10-22 10:09 ` [PATCH v2 01/14] rust: patch bilge-impl to allow compilation with 1.63.0 Paolo Bonzini
2024-10-24 2:12 ` Junjie Mao
2024-10-24 10:43 ` Alex Bennée
2024-10-22 10:09 ` [PATCH v2 02/14] rust: fix cfgs of proc-macro2 for 1.63.0 Paolo Bonzini
2024-10-24 2:33 ` Junjie Mao
2024-10-24 9:02 ` Paolo Bonzini
2024-10-24 9:09 ` Paolo Bonzini
2024-10-22 10:09 ` [PATCH v2 03/14] rust: use std::os::raw instead of core::ffi Paolo Bonzini
2024-10-22 10:09 ` [PATCH v2 04/14] rust: introduce a c_str macro Paolo Bonzini
2024-10-22 10:09 ` [PATCH v2 05/14] rust: silence unknown warnings for the sake of old compilers Paolo Bonzini
2024-10-22 10:09 ` [PATCH v2 06/14] rust: synchronize dependencies between subprojects and Cargo.lock Paolo Bonzini
2024-10-24 2:53 ` Junjie Mao
2024-10-24 9:04 ` Paolo Bonzini
2024-10-22 10:09 ` [PATCH v2 07/14] rust: introduce alternative implementation of offset_of! Paolo Bonzini
2024-10-22 10:09 ` [PATCH v2 08/14] rust: do not use MaybeUninit::zeroed() Paolo Bonzini
2024-10-22 10:09 ` [PATCH v2 09/14] rust: clean up detection of the language Paolo Bonzini
2024-10-22 10:09 ` [PATCH v2 10/14] rust: allow version 1.63.0 of rustc Paolo Bonzini
2024-10-22 10:09 ` [PATCH v2 11/14] rust: do not use --generate-cstr Paolo Bonzini
2024-10-22 10:09 ` Paolo Bonzini [this message]
2024-10-22 10:09 ` [PATCH v2 13/14] rust: make rustfmt optional Paolo Bonzini
2024-10-22 10:09 ` [PATCH v2 14/14] dockerfiles: install bindgen from cargo on Ubuntu 22.04 Paolo Bonzini
2024-10-24 11:28 ` [PATCH v2 00/14] rust: allow older versions of rustc and bindgen Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241022100956.196657-13-pbonzini@redhat.com \
--to=pbonzini@redhat.com \
--cc=berrange@redhat.com \
--cc=junjie.mao@hotmail.com \
--cc=kwolf@redhat.com \
--cc=manos.pitsidianakis@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).