diff mbox series

[19/23] rust: do not use --generate-cstr

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

Commit Message

Paolo Bonzini Oct. 25, 2024, 4:02 p.m. UTC
--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(-)

Comments

Michael Tokarev Oct. 25, 2024, 8:03 p.m. UTC | #1
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
Pierrick Bouvier Oct. 25, 2024, 8:06 p.m. UTC | #2
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
>
Michael Tokarev Oct. 25, 2024, 8:10 p.m. UTC | #3
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
Paolo Bonzini Oct. 25, 2024, 8:11 p.m. UTC | #4
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
>
>
Pierrick Bouvier Oct. 25, 2024, 8:12 p.m. UTC | #5
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 mbox series

Patch

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;