@@ -102,11 +102,13 @@ impl Zig {
102
102
} else if arg == "-lwindows" || arg == "-l:libpthread.a" || arg == "-lgcc" {
103
103
return None ;
104
104
} else if arg == "-Wl,--disable-auto-image-base"
105
+ || arg == "-Wl,--dynamicbase"
105
106
|| arg == "-Wl,--large-address-aware"
106
107
{
107
108
// https://github.com/rust-lang/rust/blob/f0bc76ac41a0a832c9ee621e31aaf1f515d3d6a5/compiler/rustc_target/src/spec/windows_gnu_base.rs#L23
109
+ // https://github.com/rust-lang/rust/blob/2fb0e8d162a021f8a795fb603f5d8c0017855160/compiler/rustc_target/src/spec/windows_gnu_base.rs#L22
108
110
// https://github.com/rust-lang/rust/blob/f0bc76ac41a0a832c9ee621e31aaf1f515d3d6a5/compiler/rustc_target/src/spec/i686_pc_windows_gnu.rs#L16
109
- // zig doesn't support --disable-auto-image-base, --large-address-aware
111
+ // zig doesn't support --disable-auto-image-base, --dynamicbase, and -- large-address-aware
110
112
return None ;
111
113
}
112
114
} else if arg == "-Wl,--no-undefined-version" {
@@ -710,8 +712,20 @@ pub fn prepare_zig_linker(target: &str) -> Result<ZigWrapper> {
710
712
} ,
711
713
"armv5te" => ( "arm" , "-mcpu=generic+soft_float+strict_align" ) ,
712
714
"armv7" => ( "arm" , "-mcpu=generic+v7a+vfp3-d32+thumb2-neon" ) ,
713
- "i586" => ( "i386" , "-mcpu=pentium" ) ,
714
- "i686" => ( "i386" , "-mcpu=pentium4" ) ,
715
+ arch_str @ ( "i586" | "i686" ) => {
716
+ let cpu_arg = if arch_str == "i586" {
717
+ "-mcpu=pentium"
718
+ } else {
719
+ "-mcpu=pentium4"
720
+ } ;
721
+ let zig_version = Zig :: zig_version ( ) ?;
722
+ let zig_arch = if zig_version. major == 0 && zig_version. minor >= 11 {
723
+ "x86"
724
+ } else {
725
+ "i386"
726
+ } ;
727
+ ( zig_arch, cpu_arg)
728
+ }
715
729
"riscv64gc" => ( "riscv64" , "-mcpu=generic_rv64+m+a+f+d+c" ) ,
716
730
"s390x" => ( "s390x" , "-mcpu=z10-vector" ) ,
717
731
_ => ( arch. as_str ( ) , "" ) ,
0 commit comments