* [PULL v3 00/39] Rust changes for QEMU 9.2 soft freeze
@ 2024-11-06 18:07 Paolo Bonzini
2024-11-06 18:07 ` [PULL v3 37/39] rust: allow older version of bindgen Paolo Bonzini
2024-11-07 14:21 ` [PULL v3 00/39] Rust changes for QEMU 9.2 soft freeze Peter Maydell
0 siblings, 2 replies; 3+ messages in thread
From: Paolo Bonzini @ 2024-11-06 18:07 UTC (permalink / raw)
To: qemu-devel
The following changes since commit 11b8920ed2093848f79f93d106afe8a69a61a523:
Merge tag 'pull-request-2024-11-04' of https://gitlab.com/thuth/qemu into staging (2024-11-04 17:37:59 +0000)
are available in the Git repository at:
https://gitlab.com/bonzini/qemu.git tags/for-upstream-rust
for you to fetch changes up to 951f71ad67bd474aba6925529daf45b747aac86e:
dockerfiles: install bindgen from cargo on Ubuntu 22.04 (2024-11-06 17:12:17 +0100)
----------------------------------------------------------------
* rust: cleanups
* rust: integration tests
* rust/pl011: add support for migration
* rust/pl011: add TYPE_PL011_LUMINARY device
* rust: add support for older compilers and bindgen
----------------------------------------------------------------
v1->v2: wrap bindgen check with "if have_rust"
drop ci enablement
v2->v3: fix formatting of pull request
Junjie Mao (1):
rust: introduce alternative implementation of offset_of!
Manos Pitsidianakis (9):
rust/wrapper.h: define memory_order enum
Revert "rust: add PL011 device model"
rust: add PL011 device model
rust: add definitions for vmstate
rust/pl011: add support for migration
rust/pl011: move CLK_NAME static to function scope
rust/pl011: add TYPE_PL011_LUMINARY device
rust/pl011: remove commented out C code
rust/pl011: Use correct masks for IBRD and FBRD
Paolo Bonzini (29):
qdev: make properties array "const"
meson: import rust module into a global variable
meson: remove repeated search for rust_root_crate.sh
meson: pass rustc_args when building all crates
rust: do not always select X_PL011_RUST
rust: do not use --no-size_t-is-usize
rust: remove uses of #[no_mangle]
rust: modernize link_section usage for ELF platforms
rust: build integration test for the qemu_api crate
rust: cleanup module_init!, use it from #[derive(Object)]
rust: clean up define_property macro
rust: make properties array immutable
rust: provide safe wrapper for MaybeUninit::zeroed()
rust: do not use TYPE_CHARDEV unnecessarily
rust/pl011: fix default value for migrate-clock
rust: patch bilge-impl to allow compilation with 1.63.0
rust: fix cfgs of proc-macro2 for 1.63.0
rust: use std::os::raw instead of core::ffi
rust: introduce a c_str macro
rust: silence unknown warnings for the sake of old compilers
rust: synchronize dependencies between subprojects and Cargo.lock
rust: create a cargo workspace
rust: do not use MaybeUninit::zeroed()
rust: clean up detection of the language
rust: allow version 1.63.0 of rustc
rust: do not use --generate-cstr
rust: allow older version of bindgen
rust: make rustfmt optional
dockerfiles: install bindgen from cargo on Ubuntu 22.04
docs/about/build-platforms.rst | 12 +
meson.build | 137 +++++---
include/hw/qdev-core.h | 4 +-
include/hw/qdev-properties.h | 4 +-
rust/wrapper.h | 17 +
hw/core/qdev-properties.c | 26 +-
system/qdev-monitor.c | 2 +-
.gitattributes | 2 +
.gitlab-ci.d/buildtest.yml | 2 +-
meson_options.txt | 2 +
rust/{hw/char/pl011 => }/Cargo.lock | 4 +
rust/Cargo.toml | 7 +
rust/hw/char/Kconfig | 1 -
rust/hw/char/pl011/Cargo.toml | 3 -
rust/hw/char/pl011/src/device.rs | 162 +++++++---
rust/hw/char/pl011/src/device_class.rs | 80 ++++-
rust/hw/char/pl011/src/lib.rs | 6 +-
rust/hw/char/pl011/src/memory_ops.rs | 24 +-
rust/qemu-api-macros/Cargo.lock | 47 ---
rust/qemu-api-macros/Cargo.toml | 5 +-
rust/qemu-api-macros/meson.build | 2 +-
rust/qemu-api-macros/src/lib.rs | 103 ++++--
rust/qemu-api/Cargo.lock | 7 -
rust/qemu-api/Cargo.toml | 10 +-
rust/qemu-api/build.rs | 9 +
rust/qemu-api/meson.build | 44 ++-
rust/qemu-api/src/c_str.rs | 53 +++
rust/qemu-api/src/definitions.rs | 68 ++--
rust/qemu-api/src/device_class.rs | 114 ++-----
rust/qemu-api/src/lib.rs | 23 +-
rust/qemu-api/src/offset_of.rs | 161 +++++++++
rust/qemu-api/src/tests.rs | 49 ---
rust/qemu-api/src/vmstate.rs | 360 +++++++++++++++++++++
rust/qemu-api/src/zeroable.rs | 86 +++++
rust/qemu-api/tests/tests.rs | 79 +++++
scripts/ci/setup/ubuntu/ubuntu-2204-aarch64.yaml | 1 -
scripts/ci/setup/ubuntu/ubuntu-2204-s390x.yaml | 1 -
scripts/meson-buildoptions.sh | 4 +
subprojects/bilge-impl-0.2-rs.wrap | 1 +
subprojects/packagefiles/bilge-impl-1.63.0.patch | 45 +++
.../packagefiles/proc-macro2-1-rs/meson.build | 4 +-
subprojects/packagefiles/syn-2-rs/meson.build | 1 +
tests/docker/dockerfiles/ubuntu2204.docker | 6 +-
tests/lcitool/mappings.yml | 4 +
tests/lcitool/refresh | 11 +-
45 files changed, 1379 insertions(+), 414 deletions(-)
rename rust/{hw/char/pl011 => }/Cargo.lock (98%)
create mode 100644 rust/Cargo.toml
delete mode 100644 rust/qemu-api-macros/Cargo.lock
delete mode 100644 rust/qemu-api/Cargo.lock
create mode 100644 rust/qemu-api/src/c_str.rs
create mode 100644 rust/qemu-api/src/offset_of.rs
delete mode 100644 rust/qemu-api/src/tests.rs
create mode 100644 rust/qemu-api/src/vmstate.rs
create mode 100644 rust/qemu-api/src/zeroable.rs
create mode 100644 rust/qemu-api/tests/tests.rs
create mode 100644 subprojects/packagefiles/bilge-impl-1.63.0.patch
--
2.47.0
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PULL v3 37/39] rust: allow older version of bindgen
2024-11-06 18:07 [PULL v3 00/39] Rust changes for QEMU 9.2 soft freeze Paolo Bonzini
@ 2024-11-06 18:07 ` Paolo Bonzini
2024-11-07 14:21 ` [PULL v3 00/39] Rust changes for QEMU 9.2 soft freeze Peter Maydell
1 sibling, 0 replies; 3+ messages in thread
From: Paolo Bonzini @ 2024-11-06 18:07 UTC (permalink / raw)
To: qemu-devel
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 | 12 ++++++++++++
meson.build | 31 +++++++++++++++++++++++++++----
2 files changed, 39 insertions(+), 4 deletions(-)
diff --git a/docs/about/build-platforms.rst b/docs/about/build-platforms.rst
index b779eb54934..6102f00aec0 100644
--- a/docs/about/build-platforms.rst
+++ b/docs/about/build-platforms.rst
@@ -107,6 +107,18 @@ 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``.
+
+ Developers may want to use Cargo-based tools in the QEMU source tree;
+ this requires Cargo 1.74.0. Note that Cargo is not required in order
+ to build QEMU.
+
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 5b85d4275bb..11958c67b5f 100644
--- a/meson.build
+++ b/meson.build
@@ -100,6 +100,23 @@ if have_rust
endif
endif
+if have_rust
+ bindgen = find_program('bindgen', required: get_option('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
+endif
+
dtrace = not_found
stap = not_found
if 'dtrace' in get_option('trace_backends')
@@ -3963,15 +3980,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',
@@ -3980,6 +3995,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',
@@ -4015,7 +4036,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')
@@ -4481,6 +4502,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.47.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PULL v3 00/39] Rust changes for QEMU 9.2 soft freeze
2024-11-06 18:07 [PULL v3 00/39] Rust changes for QEMU 9.2 soft freeze Paolo Bonzini
2024-11-06 18:07 ` [PULL v3 37/39] rust: allow older version of bindgen Paolo Bonzini
@ 2024-11-07 14:21 ` Peter Maydell
1 sibling, 0 replies; 3+ messages in thread
From: Peter Maydell @ 2024-11-07 14:21 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: qemu-devel
On Wed, 6 Nov 2024 at 18:08, Paolo Bonzini <pbonzini@redhat.com> wrote:
>
> The following changes since commit 11b8920ed2093848f79f93d106afe8a69a61a523:
>
> Merge tag 'pull-request-2024-11-04' of https://gitlab.com/thuth/qemu into staging (2024-11-04 17:37:59 +0000)
>
> are available in the Git repository at:
>
> https://gitlab.com/bonzini/qemu.git tags/for-upstream-rust
>
> for you to fetch changes up to 951f71ad67bd474aba6925529daf45b747aac86e:
>
> dockerfiles: install bindgen from cargo on Ubuntu 22.04 (2024-11-06 17:12:17 +0100)
>
> ----------------------------------------------------------------
> * rust: cleanups
> * rust: integration tests
> * rust/pl011: add support for migration
> * rust/pl011: add TYPE_PL011_LUMINARY device
> * rust: add support for older compilers and bindgen
> ----------------------------------------------------------------
> v1->v2: wrap bindgen check with "if have_rust"
> drop ci enablement
>
> v2->v3: fix formatting of pull request
The msys2-64bit job seems to be failing on the test-aio test:
https://gitlab.com/qemu-project/qemu/-/jobs/8293985646
https://gitlab.com/qemu-project/qemu/-/jobs/8289460211
| 50/127 /aio/timer/schedule -
ERROR:../tests/unit/test-aio.c:413:test_timer_schedule: assertion
failed: (aio_poll(ctx, true)) FAIL
but it passed on the third retry
https://gitlab.com/qemu-project/qemu/-/jobs/8294803952
Since it doesn't obviously look like there's anything
in this pullreq that would have caused that I have
assumed this to be a pre-existing intermittent.
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/9.2
for any user-visible changes.
-- PMM
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-11-07 14:22 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-06 18:07 [PULL v3 00/39] Rust changes for QEMU 9.2 soft freeze Paolo Bonzini
2024-11-06 18:07 ` [PULL v3 37/39] rust: allow older version of bindgen Paolo Bonzini
2024-11-07 14:21 ` [PULL v3 00/39] Rust changes for QEMU 9.2 soft freeze Peter Maydell
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).