Message ID | 20241025160209.194307-20-pbonzini@redhat.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | rust: fix CI + allow older versions of rustc and bindgen | expand |
25.10.2024 19:02, Paolo Bonzini wrote: > --generate-cstr is a good idea and generally the right thing to do, > but it is not available in Debian 12 and Ubuntu 22.04. Work around > the absence. Can't we just install a more recent bindgen and use all the current features of it, like it's done in patch 22 for ubuntu? /mjt
On 10/25/24 13:03, Michael Tokarev wrote: > 25.10.2024 19:02, Paolo Bonzini wrote: >> --generate-cstr is a good idea and generally the right thing to do, >> but it is not available in Debian 12 and Ubuntu 22.04. Work around >> the absence. > > Can't we just install a more recent bindgen and use all the current > features of it, like it's done in patch 22 for ubuntu? > Users yes, but distros expect to be able to use their packaged version. > /mjt >
25.10.2024 23:06, Pierrick Bouvier wrote: > On 10/25/24 13:03, Michael Tokarev wrote: >> 25.10.2024 19:02, Paolo Bonzini wrote: >>> --generate-cstr is a good idea and generally the right thing to do, >>> but it is not available in Debian 12 and Ubuntu 22.04. Work around >>> the absence. >> >> Can't we just install a more recent bindgen and use all the current >> features of it, like it's done in patch 22 for ubuntu? > > Users yes, but distros expect to be able to use their packaged version. Pretty please do not target rust in qemu for *currently* supported distros. For debian bookworm it is already way too late, - for bookworm as a distro, qemu with rust is hopeless, it is possible only with trixie and up. Users wishing to experiment can install more recent packages, for qemu ci it is the way to go too using the way in patch 22, and that's it. There's no need to sacrifice qemu rust code for current debian stable. rust is already too volatile by its own, and targeting that wide range of versions is insane. /mjt
Il ven 25 ott 2024, 22:03 Michael Tokarev <mjt@tls.msk.ru> ha scritto: > 25.10.2024 19:02, Paolo Bonzini wrote: > > --generate-cstr is a good idea and generally the right thing to do, > > but it is not available in Debian 12 and Ubuntu 22.04. Work around > > the absence. > > Can't we just install a more recent bindgen and use all the current > features of it, like it's done in patch 22 for ubuntu? > The idea is that Ubuntu will get the memo and add an updated bindgen, since they did update rustc to 1.75.0... so hopefully even that change in patch 22 is temporary. This patch is only a minor nuisance and we'll only need it for about a year. Paolo /mjt > >
On 10/25/24 13:10, Michael Tokarev wrote: > 25.10.2024 23:06, Pierrick Bouvier wrote: >> On 10/25/24 13:03, Michael Tokarev wrote: >>> 25.10.2024 19:02, Paolo Bonzini wrote: >>>> --generate-cstr is a good idea and generally the right thing to do, >>>> but it is not available in Debian 12 and Ubuntu 22.04. Work around >>>> the absence. >>> >>> Can't we just install a more recent bindgen and use all the current >>> features of it, like it's done in patch 22 for ubuntu? >> >> Users yes, but distros expect to be able to use their packaged version. > > Pretty please do not target rust in qemu for *currently* supported > distros. For debian bookworm it is already way too late, - for > bookworm as a distro, qemu with rust is hopeless, it is possible > only with trixie and up. > > Users wishing to experiment can install more recent packages, for > qemu ci it is the way to go too using the way in patch 22, and that's > it. There's no need to sacrifice qemu rust code for current debian > stable. rust is already too volatile by its own, and targeting > that wide range of versions is insane. > It's the goal of this series, and with changes included, it can be built on debian stable (with packaged rustc/bindgen). > /mjt >
diff --git a/meson.build b/meson.build index ab0613f353c..bfd04294850 100644 --- a/meson.build +++ b/meson.build @@ -3941,13 +3941,15 @@ common_all = static_library('common', dependencies: common_ss.all_dependencies()) 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). bindgen_args = [ '--disable-header-comment', '--raw-line', '// @generated', '--ctypes-prefix', 'std::os::raw', '--formatter', 'rustfmt', '--generate-block', - '--generate-cstr', '--impl-debug', '--merge-extern-blocks', '--no-doc-comments', diff --git a/rust/hw/char/pl011/src/device.rs b/rust/hw/char/pl011/src/device.rs index bca727e37f0..2a85960b81f 100644 --- a/rust/hw/char/pl011/src/device.rs +++ b/rust/hw/char/pl011/src/device.rs @@ -12,6 +12,7 @@ bindings::{self, *}, c_str, definitions::ObjectImpl, + device_class::TYPE_SYS_BUS_DEVICE, }; use crate::{ diff --git a/rust/qemu-api/src/device_class.rs b/rust/qemu-api/src/device_class.rs index 56608c7f7fc..0ba798d3e3c 100644 --- a/rust/qemu-api/src/device_class.rs +++ b/rust/qemu-api/src/device_class.rs @@ -2,6 +2,10 @@ // Author(s): Manos Pitsidianakis <manos.pitsidianakis@linaro.org> // SPDX-License-Identifier: GPL-2.0-or-later +use std::ffi::CStr; + +use crate::bindings; + #[macro_export] macro_rules! device_class_init { ($func:ident, props => $props:ident, realize_fn => $realize_fn:expr, legacy_reset_fn => $legacy_reset_fn:expr, vmsd => $vmsd:ident$(,)*) => { @@ -62,3 +66,9 @@ macro_rules! declare_properties { ]; }; } + +// workaround until we can use --generate-cstr in bindgen. +pub const TYPE_DEVICE: &CStr = + unsafe { CStr::from_bytes_with_nul_unchecked(bindings::TYPE_DEVICE) }; +pub const TYPE_SYS_BUS_DEVICE: &CStr = + unsafe { CStr::from_bytes_with_nul_unchecked(bindings::TYPE_SYS_BUS_DEVICE) }; diff --git a/rust/qemu-api/tests/tests.rs b/rust/qemu-api/tests/tests.rs index 7442f695646..43a4827de12 100644 --- a/rust/qemu-api/tests/tests.rs +++ b/rust/qemu-api/tests/tests.rs @@ -8,7 +8,7 @@ bindings::*, c_str, declare_properties, define_property, definitions::{Class, ObjectImpl}, - device_class_init, + device_class, device_class_init, zeroable::Zeroable, }; @@ -57,7 +57,7 @@ impl ObjectImpl for DummyState { type Class = DummyClass; const TYPE_INFO: qemu_api::bindings::TypeInfo = qemu_api::type_info! { Self }; const TYPE_NAME: &'static CStr = c_str!("dummy"); - const PARENT_TYPE_NAME: Option<&'static CStr> = Some(TYPE_DEVICE); + const PARENT_TYPE_NAME: Option<&'static CStr> = Some(device_class::TYPE_DEVICE); const ABSTRACT: bool = false; const INSTANCE_INIT: Option<unsafe extern "C" fn(obj: *mut Object)> = None; const INSTANCE_POST_INIT: Option<unsafe extern "C" fn(obj: *mut Object)> = None;
--generate-cstr is a good idea and generally the right thing to do, but it is not available in Debian 12 and Ubuntu 22.04. Work around the absence. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- meson.build | 4 +++- rust/hw/char/pl011/src/device.rs | 1 + rust/qemu-api/src/device_class.rs | 10 ++++++++++ rust/qemu-api/tests/tests.rs | 4 ++-- 4 files changed, 16 insertions(+), 3 deletions(-)