[RFC 07/26] subprojects: Add winapi crate

Zhao Liu posted 26 patches 4 months, 1 week ago
Maintainers: Paolo Bonzini <pbonzini@redhat.com>, Peter Xu <peterx@redhat.com>, David Hildenbrand <david@redhat.com>, "Philippe Mathieu-Daudé" <philmd@linaro.org>, Manos Pitsidianakis <manos.pitsidianakis@linaro.org>, "Alex Bennée" <alex.bennee@linaro.org>, Thomas Huth <thuth@redhat.com>
[RFC 07/26] subprojects: Add winapi crate
Posted by Zhao Liu 4 months, 1 week ago
Signed-off-by: Zhao Liu <zhao1.liu@intel.com>
---
 scripts/archive-source.sh                     |  3 +-
 scripts/make-release                          |  3 +-
 subprojects/.gitignore                        |  1 +
 .../packagefiles/winapi-0.3-rs/meson.build    | 46 +++++++++++++++++++
 subprojects/winapi-0.3-rs.wrap                | 10 ++++
 5 files changed, 61 insertions(+), 2 deletions(-)
 create mode 100644 subprojects/packagefiles/winapi-0.3-rs/meson.build
 create mode 100644 subprojects/winapi-0.3-rs.wrap

diff --git a/scripts/archive-source.sh b/scripts/archive-source.sh
index 4caf6078f1ac..99d0d898d010 100755
--- a/scripts/archive-source.sh
+++ b/scripts/archive-source.sh
@@ -32,7 +32,8 @@ subprojects="keycodemapdb libvfio-user berkeley-softfloat-3
   libc-0.2-rs proc-macro2-1-rs
   proc-macro-error-1-rs proc-macro-error-attr-1-rs quote-1-rs
   syn-2-rs thiserror-1-rs thiserror-impl-1-rs unicode-ident-1-rs
-  winapi-i686-pc-windows-gnu-0.4-rs winapi-x86_64-pc-windows-gnu-0.4-rs"
+  winapi-0.3-rs winapi-i686-pc-windows-gnu-0.4-rs
+  winapi-x86_64-pc-windows-gnu-0.4-rs"
 sub_deinit=""
 
 function cleanup() {
diff --git a/scripts/make-release b/scripts/make-release
index eb8b2446ad3a..c53dfa0a7f4f 100755
--- a/scripts/make-release
+++ b/scripts/make-release
@@ -45,7 +45,8 @@ SUBPROJECTS="libvfio-user keycodemapdb berkeley-softfloat-3
   libc-0.2-rs proc-macro2-1-rs
   proc-macro-error-1-rs proc-macro-error-attr-1-rs quote-1-rs
   syn-2-rs thiserror-1-rs thiserror-impl-1-rs unicode-ident-1-rs
-  winapi-i686-pc-windows-gnu-0.4-rs winapi-x86_64-pc-windows-gnu-0.4-rs"
+  winapi-0.3-rs winapi-i686-pc-windows-gnu-0.4-rs
+  winapi-x86_64-pc-windows-gnu-0.4-rs"
 
 src="$1"
 version="$2"
diff --git a/subprojects/.gitignore b/subprojects/.gitignore
index ed51f2012e2c..c42adaa928ec 100644
--- a/subprojects/.gitignore
+++ b/subprojects/.gitignore
@@ -22,5 +22,6 @@
 /thiserror-1.0.65
 /thiserror-impl-1.0.65
 /unicode-ident-1.0.12
+/winapi-0.3.9
 /winapi-i686-pc-windows-gnu-0.4.0
 /winapi-x86_64-pc-windows-gnu-0.4.0
diff --git a/subprojects/packagefiles/winapi-0.3-rs/meson.build b/subprojects/packagefiles/winapi-0.3-rs/meson.build
new file mode 100644
index 000000000000..e2cee17ec2d5
--- /dev/null
+++ b/subprojects/packagefiles/winapi-0.3-rs/meson.build
@@ -0,0 +1,46 @@
+project('winapi-0.3-rs', 'rust',
+  meson_version: '>=1.5.0',
+  version: '0.3.9',
+  license: 'MIT OR Apache-2.0'
+)
+
+if host_machine.cpu_family() == 'x86_64'
+  winapi_arch = 'winapi-x86_64-pc-windows-gnu-0.4-rs'
+elif host_machine.cpu_family() == 'x86'
+  winapi_arch = 'winapi-i686-pc-windows-gnu-0.4-rs'
+else
+  error('Unsupported CPU family for winapi: ' + host_machine.cpu_family())
+endif
+
+subproject(winapi_arch, required: true)
+winapi_arch_dep = dependency(winapi_arch)
+
+winapi_features = [
+  '--cfg', 'feature="errhandlingapi"',
+  '--cfg', 'feature="sysinfoapi"',
+  '--cfg', 'feature="excpt"',
+  '--cfg', 'feature="minwinbase"',
+  '--cfg', 'feature="ntstatus"',
+  '--cfg', 'feature="winnt"',
+  '--cfg', 'feature="basetsd"',
+  '--cfg', 'feature="ktmtypes"',
+  '--cfg', 'feature="minwindef"',
+  '--cfg', 'feature="ntdef"',
+  '--cfg', 'feature="guiddef"',
+  '--cfg', 'feature="vcruntime"'
+]
+
+lib = static_library(
+  'winapi',
+  'src/lib.rs',
+  override_options : ['rust_std=2021'],
+  rust_abi : 'rust',
+  rust_args: ['--cap-lints', 'allow'] + winapi_features,
+  dependencies: [winapi_arch_dep]
+)
+
+dep = declare_dependency(
+  link_with: lib,
+)
+
+meson.override_dependency('winapi-0.3-rs', dep)
diff --git a/subprojects/winapi-0.3-rs.wrap b/subprojects/winapi-0.3-rs.wrap
new file mode 100644
index 000000000000..49a5954ec225
--- /dev/null
+++ b/subprojects/winapi-0.3-rs.wrap
@@ -0,0 +1,10 @@
+[wrap-file]
+directory = winapi-0.3.9
+source_url = https://crates.io/api/v1/crates/winapi/0.3.9/download
+source_filename = winapi-0.3.9.tar.gz
+source_hash = 5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419
+#method = cargo
+patch_directory = winapi-0.3-rs
+
+# bump this version number on every change to meson.build or the patches:
+# v2
-- 
2.34.1
Re: [RFC 07/26] subprojects: Add winapi crate
Posted by Paolo Bonzini 4 months, 1 week ago
On 8/7/25 14:30, Zhao Liu wrote:
> Signed-off-by: Zhao Liu <zhao1.liu@intel.com>

I created https://github.com/rust-vmm/vm-memory/pull/335 so this is not 
needed.

Paolo
Re: [RFC 07/26] subprojects: Add winapi crate
Posted by Zhao Liu 4 months, 1 week ago
On Thu, Aug 07, 2025 at 03:17:52PM +0200, Paolo Bonzini wrote:
> Date: Thu, 7 Aug 2025 15:17:52 +0200
> From: Paolo Bonzini <pbonzini@redhat.com>
> Subject: Re: [RFC 07/26] subprojects: Add winapi crate
> 
> On 8/7/25 14:30, Zhao Liu wrote:
> > Signed-off-by: Zhao Liu <zhao1.liu@intel.com>
> 
> I created https://github.com/rust-vmm/vm-memory/pull/335 so this is not
> needed.

Nice! This is better than what I had previously considered for fixing
Windows compilation. Thanks.

-Zhao