Rollup merge of #112527 - bdbai:fix/winarm32, r=ChrisDenton

Add windows_sys type definitions for ARM32 manually

`windows_sys` bindings do not include platform-specific type definitions for ARM 32 architecture, so it breaks `thumbv7a-pc-windows-msvc` and `thumbv7a-uwp-windows-msvc` targets. This PR tries to add them back by manually inserting them together with the generated ones.

`WSADATA` is copied from the generated definition for `x86`. `CONTEXT` is copied from the definition before `windows_sys` is introduced (which is just an empty enum): 4a18324a4d/library/std/src/sys/windows/c.rs (L802).

Fixes #112265.
This commit is contained in:
Matthias Krüger 2023-06-12 17:44:38 +02:00 committed by GitHub
commit 9c4cff424e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 44 additions and 0 deletions

View File

@ -4275,3 +4275,23 @@ fn clone(&self) -> Self {
*self *self
} }
} }
// Begin of ARM32 shim
// The raw content of this file should be processed by `generate-windows-sys`
// to be merged with the generated binding. It is not supposed to be used as
// a normal Rust module.
cfg_if::cfg_if! {
if #[cfg(target_arch = "arm")] {
#[repr(C)]
pub struct WSADATA {
pub wVersion: u16,
pub wHighVersion: u16,
pub szDescription: [u8; 257],
pub szSystemStatus: [u8; 129],
pub iMaxSockets: u16,
pub iMaxUdpDg: u16,
pub lpVendorInfo: PSTR,
}
pub enum CONTEXT {}
}
}
// End of ARM32 shim

View File

@ -0,0 +1,20 @@
// Begin of ARM32 shim
// The raw content of this file should be processed by `generate-windows-sys`
// to be merged with the generated binding. It is not supposed to be used as
// a normal Rust module.
cfg_if::cfg_if! {
if #[cfg(target_arch = "arm")] {
#[repr(C)]
pub struct WSADATA {
pub wVersion: u16,
pub wHighVersion: u16,
pub szDescription: [u8; 257],
pub szSystemStatus: [u8; 129],
pub iMaxSockets: u16,
pub iMaxUdpDg: u16,
pub lpVendorInfo: PSTR,
}
pub enum CONTEXT {}
}
}
// End of ARM32 shim

View File

@ -11,6 +11,9 @@
// ignore-tidy-filelength // ignore-tidy-filelength
"#; "#;
/// This is a shim for the ARM (32-bit) architecture, which is no longer supported by windows-rs.
const ARM_SHIM: &str = include_str!("arm_shim.rs");
fn main() -> io::Result<()> { fn main() -> io::Result<()> {
let mut path: PathBuf = let mut path: PathBuf =
std::env::args_os().nth(1).expect("a path to the rust repository is required").into(); std::env::args_os().nth(1).expect("a path to the rust repository is required").into();
@ -32,6 +35,7 @@ fn main() -> io::Result<()> {
let mut f = std::fs::File::create(&path)?; let mut f = std::fs::File::create(&path)?;
f.write_all(PRELUDE.as_bytes())?; f.write_all(PRELUDE.as_bytes())?;
f.write_all(bindings.as_bytes())?; f.write_all(bindings.as_bytes())?;
f.write_all(ARM_SHIM.as_bytes())?;
Ok(()) Ok(())
} }