From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A0518CA0FE7 for ; Tue, 26 Aug 2025 15:23:40 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uqvWL-00011m-L7; Tue, 26 Aug 2025 11:23:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uqvWA-0000xn-Tx for qemu-rust@nongnu.org; Tue, 26 Aug 2025 11:23:32 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uqvVw-0006De-2W for qemu-rust@nongnu.org; Tue, 26 Aug 2025 11:23:25 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1756221780; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=uTl3wNhy5tnwPGP0Xk42Rh6ghQ5OYXj/BNnVIwoW/98=; b=RapxVsvJMi8I1AH8Sj2SpPtj6FZ89Xp5Mm029gYSohHD7s4G4l/itPv1vU363ZpQS0XNXO t4CEwDLwpVPyH3HAlyXiqaVoQJAcMKhB8nkoP76yVvTz5+BHfkjoU7TMSbKFM04R/MaVHi 7F7EahD5StgWSykFHG/lbJxaPzSZZxc= Received: from mail-pj1-f72.google.com (mail-pj1-f72.google.com [209.85.216.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-204-hYFiXU-jN56xU2FWWyRexQ-1; Tue, 26 Aug 2025 11:22:58 -0400 X-MC-Unique: hYFiXU-jN56xU2FWWyRexQ-1 X-Mimecast-MFC-AGG-ID: hYFiXU-jN56xU2FWWyRexQ_1756221778 Received: by mail-pj1-f72.google.com with SMTP id 98e67ed59e1d1-325b2959306so3716714a91.0 for ; Tue, 26 Aug 2025 08:22:58 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756221777; x=1756826577; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=uTl3wNhy5tnwPGP0Xk42Rh6ghQ5OYXj/BNnVIwoW/98=; b=OR50cxpRWXgw5fLpIBJ0yTr0m2MNuZGH608VJd3fzWp76kCgRo6FrxWc5jpF53z8nx TPWpqpo0Gbz/CxwtfQWT+17rD75i9zAWIEAxBaSp1R+Lb4URH+ruG1Gj2Yn9zDn1lNSh YcYCLhm7CI8wh28qZs+SPmqdy1TneAghC3syaTXE9PRumIADY2pc+D/N8Drk48Bo9l85 1F8HRoZt4jran/QubrdvYV7eh8pASrLFDQkPAfOufesxyEHW2EYR7HlNtu0NgdqHaaWX xjzpKjWI/iTjBnD42FBmIP0GRR/lGkfncOWEm+JPaZoKXjbhk2Z/ge1pmv4GCQ9z5UD+ w9AA== X-Forwarded-Encrypted: i=1; AJvYcCVqUrdsxtabIWqJmBt2H1b94w0Y4edtCXpKsJKUiQemOB78MvsybWlrjgxTiHGcmNp2nWEDM/uo4LM=@nongnu.org X-Gm-Message-State: AOJu0YzXhMRA7WNRnsa7SoYXMb7PTdnI83yBW01QR1VKQ8iSvO/ZU7nC 5tF5mpvl6Ef97fFuV80HayRtK2qGAbECPclnqDSeV0v4gikEqRkABiVy7wRuPXsyou8Kv3rU2oq EU0B29vNSWTzVVUhCkyO1/VM94Tu7ojBdcKF6eD2ZYj3k4OzKDxsmbPeFEfltT9PyB/maTQCFcq IJORa+Rj7PzB9yVdj+I2yUDqVDtm2nKg== X-Gm-Gg: ASbGncvb0FPXBbegPxCQ46MJOZRuJkSKuYH73gkEmhuu2hvmOSwWZRXFQ6XtJfBnDMP dMM3A0RK0D2f0cAjI5pJsqhYFvJeEhz5QIU93/8T911VG5csUpPim8H/Jd2bzPsfisA8z+/pnCc YX2wJ/XoEBLZk6HMomLaJxHnDGBoqCTokifYKr95EiRFNfJ0sNCKj8Aw== X-Received: by 2002:a17:90b:1b4c:b0:312:639:a064 with SMTP id 98e67ed59e1d1-32517d1f4d8mr20133791a91.28.1756221777424; Tue, 26 Aug 2025 08:22:57 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGis0wJPKNtOXdNJkIFKg3woV+XkrFlKh23iaT3c8snB4Rm4yw9ixWJYip2hiOuK55ZAqWdiE2PJjupoq8QGXY= X-Received: by 2002:a17:90b:1b4c:b0:312:639:a064 with SMTP id 98e67ed59e1d1-32517d1f4d8mr20133746a91.28.1756221776814; Tue, 26 Aug 2025 08:22:56 -0700 (PDT) MIME-Version: 1.0 References: <20250826140449.4190022-1-marcandre.lureau@redhat.com> In-Reply-To: From: =?UTF-8?B?TWFyYy1BbmRyw6kgTHVyZWF1?= Date: Tue, 26 Aug 2025 19:22:45 +0400 X-Gm-Features: Ac12FXzz1ar4aqy6rTZNITAJOhq5dUlDMgZcoXzMxzyRQAJd0i7lvtJIfA_uYkg Message-ID: Subject: Re: [RFC 00/18] rust: split qemu-api To: Manos Pitsidianakis Cc: Paolo Bonzini , qemu-devel@nongnu.org, =?UTF-8?Q?Daniel_P=2E_Berrang=C3=A9?= , qemu-rust@nongnu.org, =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: QeK2n4T3LsS9HX2AN4xaF3P5EIxCJMVnDjA4-Foq9HY_1756221778 X-Mimecast-Originator: redhat.com Content-Type: multipart/alternative; boundary="000000000000277b35063d463f13" Received-SPF: pass client-ip=170.10.133.124; envelope-from=mlureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -19 X-Spam_score: -2.0 X-Spam_bar: -- X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, HTML_OBFUSCATE_10_20=0.093, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-rust@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: QEMU Rust-related patches and discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-rust-bounces+qemu-rust=archiver.kernel.org@nongnu.org Sender: qemu-rust-bounces+qemu-rust=archiver.kernel.org@nongnu.org --000000000000277b35063d463f13 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi On Tue, Aug 26, 2025 at 6:56=E2=80=AFPM Manos Pitsidianakis < manos.pitsidianakis@linaro.org> wrote: > On Tue, Aug 26, 2025 at 5:44=E2=80=AFPM Paolo Bonzini wrote: > > > > On 8/26/25 16:04, marcandre.lureau@redhat.com wrote: > > > From: Marc-Andr=C3=A9 Lureau > > > > > > Hi, > > > > > > qemu-api is providing bindings for various internal libraries. > Instead, the > > > bindings requirements should match the various libraries and use the > minimal set > > > of dependencies. > > > > > > An initial Rust-only "common" crate is introduced, then "util" (for > libqemuutil, > > > without bql), "migration" (so it doesn't depend on bql), "bql", "qom" > (arguably, > > > bql shouldn't be required?), and "chardev", "system", "hwcore". > Finally the > > > qemu-api crates are renamed and repurposed. > > > > > > This involves a lot of code churn, so hopefully it can be reviewed an= d > merged > > > early and iterated upon :) > > > > The one comment that I would like to handle before merging, is that I'd > > prefer to keep the preludes and, in fact, even add more exports to them > > since they can now be chosen per-crate. Ideally, many of the crates > > you've crated would be accessed through many "use xyz::prelude::*" > > statements. > > I kind of agree with this sentiment. What this series basically does > is unwrapping most modules to standalone crates. Semantically, they > make sense to be their own crates just like they made sense being > their own modules before). But I'm not sure what developer benefit > Indeed, that's the point. The benefit is that you can compile and link only what you need, just like how qemu code and libraries are organized. Modules become quickly tangled between each other if you don't do it. > this brings, it's like splitting Rust's std crate to separate crates > (ergonomically speaking). Big crates like tokio split implementation > to crates and then re-export them under tokio::* to ease compilation > parallelism which we should definitely try to do as well. However in > our case our Rust wrappers are very small. Let's do this if they ever > end up growing unwieldy. > It will become difficult to manage. It's already hard to know which type comes from which library/header. Better to do the split early imho. It was nice to have a single crate in the early days, but we should prepare to scale up now. > > Also, if I understood correctly the split util/errno.rs can move to > > common/. While it has a dependency on libc, it doesn't need bindgen. > > > > There's a bunch of code duplication for the various bindings.rs and > > build.rs files, which is not ideal but shouldn't grow much more than > > this. I wonder if, later, common code across build.rs could be written > > just once by adding a new crate (e.g. "qemu_meson") to the workspace, > > that can be used as a build-dependency. > > > > Paolo > > > > > Marc-Andr=C3=A9 Lureau (18): > > > rust: remove unused global qemu "allocator" > > > rust: add workspace authors > > > rust: split Rust-only "common" crate > > > rust: split "util" crate > > > rust: move vmstate_clock!() to qdev module > > > rust: move VMState handling to QOM module > > > rust: move Cell vmstate impl > > > rust: split "migration" crate > > > rust: split "bql" crate > > > rust: split "qom" crate > > > rust: split "chardev" crate > > > rust: split "system" crate > > > rust: split "hwcore" crate > > > rust: rename qemu_api_macros -> qemu_macros > > > rust/hpet: drop now unneeded qemu_api dep > > > rust/pl011: drop dependency on qemu_api > > > rust: repurpose qemu_api -> tests > > > docs: update rust.rst > > > > > > MAINTAINERS | 12 +- > > > docs/devel/rust.rst | 51 +-- > > > meson.build | 4 - > > > rust/bql/wrapper.h | 27 ++ > > > rust/chardev/wrapper.h | 28 ++ > > > rust/hw/char/pl011/wrapper.h | 51 +++ > > > rust/hw/core/wrapper.h | 32 ++ > > > rust/{qemu-api =3D> migration}/wrapper.h | 20 -- > > > rust/qom/wrapper.h | 27 ++ > > > rust/system/wrapper.h | 29 ++ > > > rust/util/wrapper.h | 32 ++ > > > rust/Cargo.lock | 127 ++++++- > > > rust/Cargo.toml | 16 +- > > > rust/bits/Cargo.toml | 2 +- > > > rust/bits/meson.build | 2 +- > > > rust/bits/src/lib.rs | 4 +- > > > rust/{qemu-api =3D> bql}/Cargo.toml | 13 +- > > > rust/{qemu-api =3D> bql}/build.rs | 2 +- > > > rust/bql/meson.build | 52 +++ > > > rust/bql/src/bindings.rs | 25 ++ > > > rust/{qemu-api =3D> bql}/src/cell.rs | 333 > +++--------------- > > > rust/bql/src/lib.rs | 29 ++ > > > rust/chardev/Cargo.toml | 24 ++ > > > rust/chardev/build.rs | 43 +++ > > > rust/chardev/meson.build | 54 +++ > > > rust/chardev/src/bindings.rs | 36 ++ > > > rust/{qemu-api =3D> chardev}/src/chardev.rs | 35 +- > > > rust/chardev/src/lib.rs | 4 + > > > rust/common/Cargo.toml | 16 + > > > rust/common/meson.build | 32 ++ > > > rust/{qemu-api =3D> common}/src/assertions.rs | 16 +- > > > rust/{qemu-api =3D> common}/src/bitops.rs | 1 - > > > rust/{qemu-api =3D> common}/src/callbacks.rs | 12 +- > > > rust/common/src/lib.rs | 17 + > > > rust/common/src/opaque.rs | 240 +++++++++++++ > > > rust/{qemu-api =3D> common}/src/uninit.rs | 2 +- > > > rust/common/src/zeroable.rs | 18 + > > > rust/hw/char/pl011/Cargo.toml | 11 +- > > > rust/hw/char/pl011/build.rs | 43 +++ > > > rust/hw/char/pl011/meson.build | 39 +- > > > rust/hw/char/pl011/src/bindings.rs | 27 ++ > > > rust/hw/char/pl011/src/device.rs | 49 +-- > > > rust/hw/char/pl011/src/lib.rs | 1 + > > > rust/hw/char/pl011/src/registers.rs | 4 +- > > > rust/hw/core/Cargo.toml | 26 ++ > > > rust/hw/core/build.rs | 43 +++ > > > rust/{qemu-api =3D> hw/core}/meson.build | 86 ++--- > > > rust/hw/core/src/bindings.rs | 41 +++ > > > rust/{qemu-api =3D> hw/core}/src/irq.rs | 18 +- > > > rust/hw/core/src/lib.rs | 12 + > > > rust/{qemu-api =3D> hw/core}/src/qdev.rs | 81 +++-- > > > rust/{qemu-api =3D> hw/core}/src/sysbus.rs | 28 +- > > > rust/{qemu-api =3D> hw/core}/tests/tests.rs | 29 +- > > > rust/hw/timer/hpet/Cargo.toml | 10 +- > > > rust/hw/timer/hpet/meson.build | 12 +- > > > rust/hw/timer/hpet/src/device.rs | 56 ++- > > > rust/hw/timer/hpet/src/fw_cfg.rs | 6 +- > > > rust/meson.build | 12 +- > > > rust/migration/Cargo.toml | 21 ++ > > > rust/migration/build.rs | 43 +++ > > > rust/migration/meson.build | 57 +++ > > > rust/migration/src/bindings.rs | 48 +++ > > > rust/migration/src/lib.rs | 4 + > > > rust/{qemu-api =3D> migration}/src/vmstate.rs | 166 ++++----- > > > rust/qemu-api/.gitignore | 2 - > > > rust/qemu-api/README.md | 19 - > > > rust/qemu-api/src/lib.rs | 170 --------- > > > rust/qemu-api/src/prelude.rs | 31 -- > > > rust/qemu-api/src/zeroable.rs | 37 -- > > > .../Cargo.toml | 2 +- > > > .../meson.build | 10 +- > > > .../src/bits.rs | 0 > > > .../src/lib.rs | 20 +- > > > .../src/tests.rs | 8 +- > > > rust/qom/Cargo.toml | 23 ++ > > > rust/qom/build.rs | 43 +++ > > > rust/qom/meson.build | 61 ++++ > > > rust/qom/src/bindings.rs | 25 ++ > > > rust/qom/src/lib.rs | 4 + > > > rust/{qemu-api =3D> qom}/src/qom.rs | 27 +- > > > rust/qom/tests/tests.rs | 47 +++ > > > rust/system/Cargo.toml | 22 ++ > > > rust/system/build.rs | 43 +++ > > > rust/system/meson.build | 57 +++ > > > rust/{qemu-api =3D> system}/src/bindings.rs | 33 +- > > > rust/system/src/lib.rs | 4 + > > > rust/{qemu-api =3D> system}/src/memory.rs | 20 +- > > > rust/tests/Cargo.toml | 30 ++ > > > rust/tests/meson.build | 14 + > > > .../tests/vmstate_tests.rs | 18 +- > > > rust/util/Cargo.toml | 23 ++ > > > rust/util/build.rs | 43 +++ > > > rust/util/meson.build | 61 ++++ > > > rust/util/src/bindings.rs | 25 ++ > > > rust/{qemu-api =3D> util}/src/errno.rs | 11 +- > > > rust/{qemu-api =3D> util}/src/error.rs | 6 +- > > > rust/util/src/lib.rs | 10 + > > > rust/{qemu-api =3D> util}/src/log.rs | 12 +- > > > rust/{qemu-api =3D> util}/src/module.rs | 2 +- > > > rust/{qemu-api =3D> util}/src/timer.rs | 12 +- > > > 100 files changed, 2372 insertions(+), 1044 deletions(-) > > > create mode 100644 rust/bql/wrapper.h > > > create mode 100644 rust/chardev/wrapper.h > > > create mode 100644 rust/hw/char/pl011/wrapper.h > > > create mode 100644 rust/hw/core/wrapper.h > > > rename rust/{qemu-api =3D> migration}/wrapper.h (77%) > > > create mode 100644 rust/qom/wrapper.h > > > create mode 100644 rust/system/wrapper.h > > > create mode 100644 rust/util/wrapper.h > > > rename rust/{qemu-api =3D> bql}/Cargo.toml (52%) > > > rename rust/{qemu-api =3D> bql}/build.rs (96%) > > > create mode 100644 rust/bql/meson.build > > > create mode 100644 rust/bql/src/bindings.rs > > > rename rust/{qemu-api =3D> bql}/src/cell.rs (70%) > > > create mode 100644 rust/bql/src/lib.rs > > > create mode 100644 rust/chardev/Cargo.toml > > > create mode 100644 rust/chardev/build.rs > > > create mode 100644 rust/chardev/meson.build > > > create mode 100644 rust/chardev/src/bindings.rs > > > rename rust/{qemu-api =3D> chardev}/src/chardev.rs (91%) > > > create mode 100644 rust/chardev/src/lib.rs > > > create mode 100644 rust/common/Cargo.toml > > > create mode 100644 rust/common/meson.build > > > rename rust/{qemu-api =3D> common}/src/assertions.rs (92%) > > > rename rust/{qemu-api =3D> common}/src/bitops.rs (98%) > > > rename rust/{qemu-api =3D> common}/src/callbacks.rs (97%) > > > create mode 100644 rust/common/src/lib.rs > > > create mode 100644 rust/common/src/opaque.rs > > > rename rust/{qemu-api =3D> common}/src/uninit.rs (98%) > > > create mode 100644 rust/common/src/zeroable.rs > > > create mode 100644 rust/hw/char/pl011/build.rs > > > create mode 100644 rust/hw/char/pl011/src/bindings.rs > > > create mode 100644 rust/hw/core/Cargo.toml > > > create mode 100644 rust/hw/core/build.rs > > > rename rust/{qemu-api =3D> hw/core}/meson.build (52%) > > > create mode 100644 rust/hw/core/src/bindings.rs > > > rename rust/{qemu-api =3D> hw/core}/src/irq.rs (92%) > > > create mode 100644 rust/hw/core/src/lib.rs > > > rename rust/{qemu-api =3D> hw/core}/src/qdev.rs (86%) > > > rename rust/{qemu-api =3D> hw/core}/src/sysbus.rs (87%) > > > rename rust/{qemu-api =3D> hw/core}/tests/tests.rs (88%) > > > create mode 100644 rust/migration/Cargo.toml > > > create mode 100644 rust/migration/build.rs > > > create mode 100644 rust/migration/meson.build > > > create mode 100644 rust/migration/src/bindings.rs > > > create mode 100644 rust/migration/src/lib.rs > > > rename rust/{qemu-api =3D> migration}/src/vmstate.rs (80%) > > > delete mode 100644 rust/qemu-api/.gitignore > > > delete mode 100644 rust/qemu-api/README.md > > > delete mode 100644 rust/qemu-api/src/lib.rs > > > delete mode 100644 rust/qemu-api/src/prelude.rs > > > delete mode 100644 rust/qemu-api/src/zeroable.rs > > > rename rust/{qemu-api-macros =3D> qemu-macros}/Cargo.toml (94%) > > > rename rust/{qemu-api-macros =3D> qemu-macros}/meson.build (63%) > > > rename rust/{qemu-api-macros =3D> qemu-macros}/src/bits.rs (100%) > > > rename rust/{qemu-api-macros =3D> qemu-macros}/src/lib.rs (91%) > > > rename rust/{qemu-api-macros =3D> qemu-macros}/src/tests.rs (93%) > > > create mode 100644 rust/qom/Cargo.toml > > > create mode 100644 rust/qom/build.rs > > > create mode 100644 rust/qom/meson.build > > > create mode 100644 rust/qom/src/bindings.rs > > > create mode 100644 rust/qom/src/lib.rs > > > rename rust/{qemu-api =3D> qom}/src/qom.rs (98%) > > > create mode 100644 rust/qom/tests/tests.rs > > > create mode 100644 rust/system/Cargo.toml > > > create mode 100644 rust/system/build.rs > > > create mode 100644 rust/system/meson.build > > > rename rust/{qemu-api =3D> system}/src/bindings.rs (56%) > > > create mode 100644 rust/system/src/lib.rs > > > rename rust/{qemu-api =3D> system}/src/memory.rs (95%) > > > create mode 100644 rust/tests/Cargo.toml > > > create mode 100644 rust/tests/meson.build > > > rename rust/{qemu-api =3D> tests}/tests/vmstate_tests.rs (96%) > > > create mode 100644 rust/util/Cargo.toml > > > create mode 100644 rust/util/build.rs > > > create mode 100644 rust/util/meson.build > > > create mode 100644 rust/util/src/bindings.rs > > > rename rust/{qemu-api =3D> util}/src/errno.rs (98%) > > > rename rust/{qemu-api =3D> util}/src/error.rs (98%) > > > create mode 100644 rust/util/src/lib.rs > > > rename rust/{qemu-api =3D> util}/src/log.rs (93%) > > > rename rust/{qemu-api =3D> util}/src/module.rs (97%) > > > rename rust/{qemu-api =3D> util}/src/timer.rs (93%) > > > > > > > --000000000000277b35063d463f13 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi

On Tue, Aug 26, 2= 025 at 6:56=E2=80=AFPM Manos Pitsidianakis <manos.pitsidianakis@linaro.org> wrote:
On Tue, Aug 26, 2025 at= 5:44=E2=80=AFPM Paolo Bonzini <pbonzini@redhat.com> wrote:
>
> On 8/26/25 16:04, marcandre.lureau@redhat.com wrote:
> > From: Marc-Andr=C3=A9 Lureau <marcandre.lureau@redhat.com>
> >
> > Hi,
> >
> > qemu-api is providing bindings for various internal libraries. In= stead, the
> > bindings requirements should match the various libraries and use = the minimal set
> > of dependencies.
> >
> > An initial Rust-only "common" crate is introduced, then= "util" (for libqemuutil,
> > without bql), "migration" (so it doesn't depend on = bql), "bql", "qom" (arguably,
> > bql shouldn't be required?), and "chardev", "s= ystem", "hwcore". Finally the
> > qemu-api crates are renamed and repurposed.
> >
> > This involves a lot of code churn, so hopefully it can be reviewe= d and merged
> > early and iterated upon :)
>
> The one comment that I would like to handle before merging, is that I&= #39;d
> prefer to keep the preludes and, in fact, even add more exports to the= m
> since they can now be chosen per-crate.=C2=A0 Ideally, many of the cra= tes
> you've crated would be accessed through many "use xyz::prelud= e::*"
> statements.

I kind of agree with this sentiment. What this series basically does
is unwrapping most modules to standalone crates. Semantically, they
make sense to be their own crates just like they made sense being
their own modules before). But I'm not sure what developer benefit
<= /blockquote>

Indeed, that's the point. The benefit i= s that you can compile and link only what you need, just like how qemu code= and libraries are organized. Modules become quickly tangled between each o= ther if you don't do it.
=C2=A0
this brings, it's like splitting Rust's std crate to separate crate= s
(ergonomically speaking). Big crates like tokio split implementation
to crates and then re-export them under tokio::* to ease compilation
parallelism which we should definitely try to do as well. However in
our case our Rust wrappers are very small. Let's do this if they ever end up growing unwieldy.

It will become= difficult to manage. It's already hard to know which type comes from w= hich library/header. Better to do the split early imho. It was nice to have= a single crate in the early days, but we should prepare to scale up now.= =C2=A0

errno.rs can move to
> common/.=C2=A0 While it has a dependency on libc, it doesn't need = bindgen.
>
> There's a bunch of code duplication for the various bindings.rs and > build= .rs files, which is not ideal but shouldn't grow much more than
> this.=C2=A0 I wonder if, later, common code across build.rs could be written=
> just once by adding a new crate (e.g. "qemu_meson") to the w= orkspace,
> that can be used as a build-dependency.
>
> Paolo
>
> > Marc-Andr=C3=A9 Lureau (18):
> >=C2=A0 =C2=A0 rust: remove unused global qemu "allocator"= ;
> >=C2=A0 =C2=A0 rust: add workspace authors
> >=C2=A0 =C2=A0 rust: split Rust-only "common" crate
> >=C2=A0 =C2=A0 rust: split "util" crate
> >=C2=A0 =C2=A0 rust: move vmstate_clock!() to qdev module
> >=C2=A0 =C2=A0 rust: move VMState handling to QOM module
> >=C2=A0 =C2=A0 rust: move Cell vmstate impl
> >=C2=A0 =C2=A0 rust: split "migration" crate
> >=C2=A0 =C2=A0 rust: split "bql" crate
> >=C2=A0 =C2=A0 rust: split "qom" crate
> >=C2=A0 =C2=A0 rust: split "chardev" crate
> >=C2=A0 =C2=A0 rust: split "system" crate
> >=C2=A0 =C2=A0 rust: split "hwcore" crate
> >=C2=A0 =C2=A0 rust: rename qemu_api_macros -> qemu_macros
> >=C2=A0 =C2=A0 rust/hpet: drop now unneeded qemu_api dep
> >=C2=A0 =C2=A0 rust/pl011: drop dependency on qemu_api
> >=C2=A0 =C2=A0 rust: repurpose qemu_api -> tests
> >=C2=A0 =C2=A0 docs: update rust.rst
> >
> >=C2=A0 =C2=A0MAINTAINERS=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0|=C2=A0 12 +-
> >=C2=A0 =C2=A0docs/devel/rust.rst=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 51 += --
> >=C2=A0 =C2=A0meson.build=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0|=C2=A0 =C2=A04 -
> >=C2=A0 =C2=A0rust/bql/wrapper.h=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 27 += +
> >=C2=A0 =C2=A0rust/chardev/wrapper.h=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 28 ++
> >=C2=A0 =C2=A0rust/hw/char/pl011/wrapper.h=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 51 +++
> >=C2=A0 =C2=A0rust/hw/core/wrapper.h=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 32 ++
> >=C2=A0 =C2=A0rust/{qemu-api =3D> migration}/wrapper.h=C2=A0 =C2= =A0 =C2=A0 =C2=A0 |=C2=A0 20 --
> >=C2=A0 =C2=A0rust/qom/wrapper.h=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 27 += +
> >=C2=A0 =C2=A0rust/system/wrapper.h=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 29 ++ > >=C2=A0 =C2=A0rust/util/wrapper.h=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 32 += +
> >=C2=A0 =C2=A0rust/Cargo.lock=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| = 127 ++++++-
> >=C2=A0 =C2=A0rust/Cargo.toml=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|= =C2=A0 16 +-
> >=C2=A0 =C2=A0rust/bits/Cargo.toml=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 =C2=A02= +-
> >=C2=A0 =C2=A0rust/bits/meson.build=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 =C2=A02 = +-
> >=C2=A0 =C2=A0rust/bits/src/lib.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 =C2=A04 +-
> >=C2=A0 =C2=A0rust/{qemu-api =3D> bql}/Cargo.toml=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 13 +-
> >=C2=A0 =C2=A0rust/{qemu-api =3D> bql}/build.rs=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 =C2=A02 +-
> >=C2=A0 =C2=A0rust/bql/meson.build=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 52 +++<= br> > >=C2=A0 =C2=A0rust/bql/src/bindings.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 25 ++
> >=C2=A0 =C2=A0rust/{qemu-api =3D> bql}/src/cell.rs=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 | 333 +++---------------
> >=C2=A0 =C2=A0rust/bql/src/lib.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 29 ++
> >=C2=A0 =C2=A0rust/chardev/Cargo.toml=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 24 ++
> >=C2=A0 =C2=A0rust/chardev/build.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 43 +++
> >=C2=A0 =C2=A0rust/chardev/meson.build=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 54 +++
> >=C2=A0 =C2=A0rust/chardev/src/bindings.rs=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 36 ++
> >=C2=A0 =C2=A0rust/{qemu-api =3D> chardev}/src/chardev.rs=C2=A0 =C2= =A0 =C2=A0|=C2=A0 35 +-
> >=C2=A0 =C2=A0rust/chardev/src/lib.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 =C2=A04 +
> >=C2=A0 =C2=A0rust/common/Cargo.toml=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 16 +
> >=C2=A0 =C2=A0rust/common/meson.build=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 32 ++
> >=C2=A0 =C2=A0rust/{qemu-api =3D> common}/src/assertions.rs=C2=A0= =C2=A0|=C2=A0 16 +-
> >=C2=A0 =C2=A0rust/{qemu-api =3D> common}/src/bitops.rs=C2=A0 =C2=A0 = =C2=A0 =C2=A0|=C2=A0 =C2=A01 -
> >=C2=A0 =C2=A0rust/{qemu-api =3D> common}/src/callbacks.rs=C2=A0 = =C2=A0 |=C2=A0 12 +-
> >=C2=A0 =C2=A0rust/common/src/lib.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 17 +
> >=C2=A0 =C2=A0rust/common/src/opaque.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 240 +++++++++++++
> >=C2=A0 =C2=A0rust/{qemu-api =3D> common}/src/uninit.rs=C2=A0 =C2=A0 = =C2=A0 =C2=A0|=C2=A0 =C2=A02 +-
> >=C2=A0 =C2=A0rust/common/src/zeroable.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 18 +
> >=C2=A0 =C2=A0rust/hw/char/pl011/Cargo.toml=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 11 +-
> >=C2=A0 =C2=A0rust/hw/char/pl011/build.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 43 +++
> >=C2=A0 =C2=A0rust/hw/char/pl011/meson.build=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 39 +-
> >=C2=A0 =C2=A0rust/hw/char/pl011/src/bindings.rs=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 |=C2=A0 27 ++
> >=C2=A0 =C2=A0rust/hw/char/pl011/src/device.rs=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 49 +--
> >=C2=A0 =C2=A0rust/hw/char/pl011/src/lib.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 =C2=A01 +
> >=C2=A0 =C2=A0rust/hw/char/pl011/src/registers.rs=C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0|=C2=A0 =C2=A04 +-
> >=C2=A0 =C2=A0rust/hw/core/Cargo.toml=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 26 ++
> >=C2=A0 =C2=A0rust/hw/core/build.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 43 +++
> >=C2=A0 =C2=A0rust/{qemu-api =3D> hw/core}/meson.build=C2=A0 =C2= =A0 =C2=A0 =C2=A0 |=C2=A0 86 ++---
> >=C2=A0 =C2=A0rust/hw/core/src/bindings.rs=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 41 +++
> >=C2=A0 =C2=A0rust/{qemu-api =3D> hw/core}/src/irq.rs=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0|=C2=A0 18 +-
> >=C2=A0 =C2=A0rust/hw/core/src/lib.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 12 +
> >=C2=A0 =C2=A0rust/{qemu-api =3D> hw/core}/src/qdev.rs=C2=A0 =C2=A0 =C2= =A0 =C2=A0 |=C2=A0 81 +++--
> >=C2=A0 =C2=A0rust/{qemu-api =3D> hw/core}/src/sysbus.rs=C2=A0 =C2=A0= =C2=A0 |=C2=A0 28 +-
> >=C2=A0 =C2=A0rust/{qemu-api =3D> hw/core}/tests/tests.rs=C2=A0 =C2=A0= =C2=A0|=C2=A0 29 +-
> >=C2=A0 =C2=A0rust/hw/timer/hpet/Cargo.toml=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 10 +-
> >=C2=A0 =C2=A0rust/hw/timer/hpet/meson.build=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 12 +-
> >=C2=A0 =C2=A0rust/hw/timer/hpet/src/device.rs=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 56 ++-
> >=C2=A0 =C2=A0rust/hw/timer/hpet/src/fw_cfg.rs=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 =C2=A06 +-
> >=C2=A0 =C2=A0rust/meson.build=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2= =A0 12 +-
> >=C2=A0 =C2=A0rust/migration/Cargo.toml=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 21 ++
> >=C2=A0 =C2=A0rust/migration/build.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 43 +++
> >=C2=A0 =C2=A0rust/migration/meson.build=C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 57 +++
> >=C2=A0 =C2=A0rust/migration/src/bindings.rs=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 48 +++
> >=C2=A0 =C2=A0rust/migration/src/lib.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 =C2=A04 +
> >=C2=A0 =C2=A0rust/{qemu-api =3D> migration}/src/vmstate.rs=C2=A0 = =C2=A0| 166 ++++-----
> >=C2=A0 =C2=A0rust/qemu-api/.gitignore=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 =C2=A02 -
> >=C2=A0 =C2=A0rust/qemu-api/README.md=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 19 -
> >=C2=A0 =C2=A0rust/qemu-api/src/lib.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 170 ---------
> >=C2=A0 =C2=A0rust/qemu-api/src/prelude.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 31 --
> >=C2=A0 =C2=A0rust/qemu-api/src/zeroable.rs=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 37 --
> >=C2=A0 =C2=A0.../Cargo.toml=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |= =C2=A0 =C2=A02 +-
> >=C2=A0 =C2=A0.../meson.build=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|= =C2=A0 10 +-
> >=C2=A0 =C2=A0.../src/bits.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 = =C2=A00
> >=C2=A0 =C2=A0.../src/lib.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 = 20 +-
> >=C2=A0 =C2=A0.../src/tests.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 =C2= =A08 +-
> >=C2=A0 =C2=A0rust/qom/Cargo.toml=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 23 += +
> >=C2=A0 =C2=A0rust/qom/build.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 43 ++= +
> >=C2=A0 =C2=A0rust/qom/meson.build=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 61 ++++=
> >=C2=A0 =C2=A0rust/qom/src/bindings.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 25 ++
> >=C2=A0 =C2=A0rust/qom/src/lib.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 =C2=A04 + > >=C2=A0 =C2=A0rust/{qemu-api =3D> qom}/src/qom.rs=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 27 +-
> >=C2=A0 =C2=A0rust/qom/tests/tests.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 47 +++
> >=C2=A0 =C2=A0rust/system/Cargo.toml=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 22 ++
> >=C2=A0 =C2=A0rust/system/build.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 43 +++
> >=C2=A0 =C2=A0rust/system/meson.build=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 57 +++
> >=C2=A0 =C2=A0rust/{qemu-api =3D> system}/src/bindings.rs=C2=A0 =C2= =A0 =C2=A0|=C2=A0 33 +-
> >=C2=A0 =C2=A0rust/system/src/lib.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 =C2=A04 +
> >=C2=A0 =C2=A0rust/{qemu-api =3D> system}/src/memory.rs=C2=A0 =C2=A0 = =C2=A0 =C2=A0|=C2=A0 20 +-
> >=C2=A0 =C2=A0rust/tests/Cargo.toml=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 30 ++ > >=C2=A0 =C2=A0rust/tests/meson.build=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 14 +
> >=C2=A0 =C2=A0.../tests/vmstate_tests.rs=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 18 +-
> >=C2=A0 =C2=A0rust/util/Cargo.toml=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 23 ++ > >=C2=A0 =C2=A0rust/util/build.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 43 +++
> >=C2=A0 =C2=A0rust/util/meson.build=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 61 ++++<= br> > >=C2=A0 =C2=A0rust/util/src/bindings.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 25 ++
> >=C2=A0 =C2=A0rust/{qemu-api =3D> util}/src/errno.rs=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 |=C2=A0 11 +-
> >=C2=A0 =C2=A0rust/{qemu-api =3D> util}/src/error.rs=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 |=C2=A0 =C2=A06 +-
> >=C2=A0 =C2=A0rust/util/src/lib.rs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 10 +
> >=C2=A0 =C2=A0rust/{qemu-api =3D> util}/src/log.rs=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 |=C2=A0 12 +-
> >=C2=A0 =C2=A0rust/{qemu-api =3D> util}/src/module.rs=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0|=C2=A0 =C2=A02 +-
> >=C2=A0 =C2=A0rust/{qemu-api =3D> util}/src/timer.rs=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 |=C2=A0 12 +-
> >=C2=A0 =C2=A0100 files changed, 2372 insertions(+), 1044 deletions= (-)
> >=C2=A0 =C2=A0create mode 100644 rust/bql/wrapper.h
> >=C2=A0 =C2=A0create mode 100644 rust/chardev/wrapper.h
> >=C2=A0 =C2=A0create mode 100644 rust/hw/char/pl011/wrapper.h
> >=C2=A0 =C2=A0create mode 100644 rust/hw/core/wrapper.h
> >=C2=A0 =C2=A0rename rust/{qemu-api =3D> migration}/wrapper.h (7= 7%)
> >=C2=A0 =C2=A0create mode 100644 rust/qom/wrapper.h
> >=C2=A0 =C2=A0create mode 100644 rust/system/wrapper.h
> >=C2=A0 =C2=A0create mode 100644 rust/util/wrapper.h
> >=C2=A0 =C2=A0rename rust/{qemu-api =3D> bql}/Cargo.toml (52%) > >=C2=A0 =C2=A0rename rust/{qemu-api =3D> bql}/build.rs (96%)
> >=C2=A0 =C2=A0create mode 100644 rust/bql/meson.build
> >=C2=A0 =C2=A0create mode 100644 rust/bql/src/bindings.rs
> >=C2=A0 =C2=A0rename rust/{qemu-api =3D> bql}/src/cell.rs (70%)
> >=C2=A0 =C2=A0create mode 100644 rust/bql/src/lib.rs
> >=C2=A0 =C2=A0create mode 100644 rust/chardev/Cargo.toml
> >=C2=A0 =C2=A0create mode 100644 rust/chardev/build.rs
> >=C2=A0 =C2=A0create mode 100644 rust/chardev/meson.build
> >=C2=A0 =C2=A0create mode 100644 rust/chardev/src/bindings.rs
> >=C2=A0 =C2=A0rename rust/{qemu-api =3D> chardev}/src/chardev.rs (91= %)
> >=C2=A0 =C2=A0create mode 100644 rust/chardev/src/lib.rs
> >=C2=A0 =C2=A0create mode 100644 rust/common/Cargo.toml
> >=C2=A0 =C2=A0create mode 100644 rust/common/meson.build
> >=C2=A0 =C2=A0rename rust/{qemu-api =3D> common}/src/assertions.rs (92%)
> >=C2=A0 =C2=A0rename rust/{qemu-api =3D> common}/src/
bitops.rs (98%)<= br> > >=C2=A0 =C2=A0rename rust/{qemu-api =3D> common}/src/callbacks.rs = (97%)
> >=C2=A0 =C2=A0create mode 100644 rust/common/src/lib.rs
> >=C2=A0 =C2=A0create mode 100644 rust/common/src/opaque.rs
> >=C2=A0 =C2=A0rename rust/{qemu-api =3D> common}/src/uninit.rs (98%)<= br> > >=C2=A0 =C2=A0create mode 100644 rust/common/src/zeroable.rs
> >=C2=A0 =C2=A0create mode 100644 rust/hw/char/pl011/build.rs
> >=C2=A0 =C2=A0create mode 100644 rust/hw/char/pl011/src/bindings.rs > >=C2=A0 =C2=A0create mode 100644 rust/hw/core/Cargo.toml
> >=C2=A0 =C2=A0create mode 100644 rust/hw/core/build.rs
> >=C2=A0 =C2=A0rename rust/{qemu-api =3D> hw/core}/meson.build (5= 2%)
> >=C2=A0 =C2=A0create mode 100644 rust/hw/core/src/bindings.rs
> >=C2=A0 =C2=A0rename rust/{qemu-api =3D> hw/core}/src/irq.rs (92%)
> >=C2=A0 =C2=A0create mode 100644 rust/hw/core/src/lib.rs
> >=C2=A0 =C2=A0rename rust/{qemu-api =3D> hw/core}/src/qdev.rs (86%)
> >=C2=A0 =C2=A0rename rust/{qemu-api =3D> hw/core}/src/sysbus.rs (87%)=
> >=C2=A0 =C2=A0rename rust/{qemu-api =3D> hw/core}/tests/tests.rs (88%= )
> >=C2=A0 =C2=A0create mode 100644 rust/migration/Cargo.toml
> >=C2=A0 =C2=A0create mode 100644 rust/migration/build.rs
> >=C2=A0 =C2=A0create mode 100644 rust/migration/meson.build
> >=C2=A0 =C2=A0create mode 100644 rust/migration/src/bindings.rs
> >=C2=A0 =C2=A0create mode 100644 rust/migration/src/lib.rs
> >=C2=A0 =C2=A0rename rust/{qemu-api =3D> migration}/src/vmstate.rs = (80%)
> >=C2=A0 =C2=A0delete mode 100644 rust/qemu-api/.gitignore
> >=C2=A0 =C2=A0delete mode 100644 rust/qemu-api/README.md
> >=C2=A0 =C2=A0delete mode 100644 rust/qemu-api/src/lib.rs
> >=C2=A0 =C2=A0delete mode 100644 rust/qemu-api/src/prelude.rs
> >=C2=A0 =C2=A0delete mode 100644 rust/qemu-api/src/zeroable.rs
> >=C2=A0 =C2=A0rename rust/{qemu-api-macros =3D> qemu-macros}/Car= go.toml (94%)
> >=C2=A0 =C2=A0rename rust/{qemu-api-macros =3D> qemu-macros}/mes= on.build (63%)
> >=C2=A0 =C2=A0rename rust/{qemu-api-macros =3D> qemu-macros}/src= /bits.rs (100%)
> >=C2=A0 =C2=A0rename rust/{qemu-api-macros =3D> qemu-macros}/src= /
lib.rs = (91%)
> >=C2=A0 =C2=A0rename rust/{qemu-api-macros =3D> qemu-macros}/src= /tests.rs<= /a> (93%)
> >=C2=A0 =C2=A0create mode 100644 rust/qom/Cargo.toml
> >=C2=A0 =C2=A0create mode 100644 rust/qom/
build.rs
> >=C2=A0 =C2=A0create mode 100644 rust/qom/meson.build
> >=C2=A0 =C2=A0create mode 100644 rust/qom/src/bindings.rs
> >=C2=A0 =C2=A0create mode 100644 rust/qom/src/lib.rs
> >=C2=A0 =C2=A0rename rust/{qemu-api =3D> qom}/src/qom.rs (98%)
> >=C2=A0 =C2=A0create mode 100644 rust/qom/tests/tests.rs
> >=C2=A0 =C2=A0create mode 100644 rust/system/Cargo.toml
> >=C2=A0 =C2=A0create mode 100644 rust/system/build.rs
> >=C2=A0 =C2=A0create mode 100644 rust/system/meson.build
> >=C2=A0 =C2=A0rename rust/{qemu-api =3D> system}/src/bindings.rs (5= 6%)
> >=C2=A0 =C2=A0create mode 100644 rust/system/src/lib.rs
> >=C2=A0 =C2=A0rename rust/{qemu-api =3D> system}/src/memory.rs (95%)<= br> > >=C2=A0 =C2=A0create mode 100644 rust/tests/Cargo.toml
> >=C2=A0 =C2=A0create mode 100644 rust/tests/meson.build
> >=C2=A0 =C2=A0rename rust/{qemu-api =3D> tests}/tests/vmstate_test= s.rs (96%)
> >=C2=A0 =C2=A0create mode 100644 rust/util/Cargo.toml
> >=C2=A0 =C2=A0create mode 100644 rust/util/build.rs
> >=C2=A0 =C2=A0create mode 100644 rust/util/meson.build
> >=C2=A0 =C2=A0create mode 100644 rust/util/src/bindings.rs
> >=C2=A0 =C2=A0rename rust/{qemu-api =3D> util}/src/errno.rs (98%)
> >=C2=A0 =C2=A0rename rust/{qemu-api =3D> util}/src/error.rs (98%)
> >=C2=A0 =C2=A0create mode 100644 rust/util/src/lib.rs
> >=C2=A0 =C2=A0rename rust/{qemu-api =3D> util}/src/log.rs (93%)
> >=C2=A0 =C2=A0rename rust/{qemu-api =3D> util}/src/module.rs (97%) > >=C2=A0 =C2=A0rename rust/{qemu-api =3D> util}/src/timer.rs (93%)
> >
>

--000000000000277b35063d463f13--