From 0e807b51cab260535a3e1136efed8eccdf47b6c7 Mon Sep 17 00:00:00 2001 From: messense Date: Sun, 12 Mar 2023 10:16:48 +0800 Subject: [PATCH 1/2] Fix i686-pc-windows-gnu build on zig 0.11 --- .github/workflows/CI.yml | 4 +++- src/zig.rs | 15 ++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index f53f70f7..c4d0f689 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -61,7 +61,7 @@ jobs: - run: cargo build - name: Install Rust targets run: | - rustup target add aarch64-unknown-linux-gnu x86_64-unknown-linux-gnu aarch64-apple-darwin x86_64-apple-darwin x86_64-pc-windows-gnu + rustup target add aarch64-unknown-linux-gnu x86_64-unknown-linux-gnu aarch64-apple-darwin x86_64-apple-darwin x86_64-pc-windows-gnu i686-pc-windows-gnu - name: Test bindgen shell: bash run: | @@ -145,6 +145,8 @@ jobs: run: | cargo run zigbuild --target x86_64-pc-windows-gnu cargo run zigbuild --target x86_64-pc-windows-gnu --manifest-path tests/hello-windows/Cargo.toml + cargo run zigbuild --target i686-pc-windows-gnu + cargo run zigbuild --target i686-pc-windows-gnu --manifest-path tests/hello-windows/Cargo.toml - name: Windows - Test build curl if: matrix.os == 'windows-latest' run: | diff --git a/src/zig.rs b/src/zig.rs index e2f233e2..09b7721b 100644 --- a/src/zig.rs +++ b/src/zig.rs @@ -101,9 +101,11 @@ impl Zig { return Some("-lc++".to_string()); } else if arg == "-lwindows" || arg == "-l:libpthread.a" || arg == "-lgcc" { return None; - } else if arg == "-Wl,--disable-auto-image-base" { + } else if arg == "-Wl,--disable-auto-image-base" + || arg == "-Wl,--large-address-aware" + { // https://github.com/rust-lang/rust/blob/f0bc76ac41a0a832c9ee621e31aaf1f515d3d6a5/compiler/rustc_target/src/spec/windows_gnu_base.rs#L23 - // zig doesn't support --disable-auto-image-base + // zig doesn't support --disable-auto-image-base, --large-address-aware return None; } } @@ -713,7 +715,14 @@ pub fn prepare_zig_linker(target: &str) -> Result { } OperatingSystem::Windows { .. } => { let zig_arch = match arch.as_str() { - "i686" => "i386", + "i686" => { + let zig_version = Zig::zig_version()?; + if zig_version.major == 0 && zig_version.minor >= 11 { + "x86" + } else { + "i386" + } + } arch => arch, }; format!("-target {zig_arch}-windows-{target_env}{abi_suffix} {cc_args}",) From cae0eda9635ccb1554c39c7184aaa343ee685f52 Mon Sep 17 00:00:00 2001 From: messense Date: Sun, 12 Mar 2023 10:30:46 +0800 Subject: [PATCH 2/2] Filter out unsupported `-Wl,--no-undefined-version` --- src/zig.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/zig.rs b/src/zig.rs index 09b7721b..777cdfb5 100644 --- a/src/zig.rs +++ b/src/zig.rs @@ -103,11 +103,17 @@ impl Zig { return None; } else if arg == "-Wl,--disable-auto-image-base" || arg == "-Wl,--large-address-aware" + || arg == "-Wl,--no-undefined-version" { // https://github.com/rust-lang/rust/blob/f0bc76ac41a0a832c9ee621e31aaf1f515d3d6a5/compiler/rustc_target/src/spec/windows_gnu_base.rs#L23 + // https://github.com/rust-lang/rust/blob/f0bc76ac41a0a832c9ee621e31aaf1f515d3d6a5/compiler/rustc_target/src/spec/i686_pc_windows_gnu.rs#L16 // zig doesn't support --disable-auto-image-base, --large-address-aware return None; } + } else if arg == "-Wl,--no-undefined-version" { + // https://github.com/rust-lang/rust/blob/542ed2bf72b232b245ece058fc11aebb1ca507d7/compiler/rustc_codegen_ssa/src/back/linker.rs#L723 + // zig doesn't support --no-undefined-version + return None; } if is_musl { // Avoids duplicated symbols with both zig musl libc and the libc crate