Add new {x86_64,i686}-win7-windows-gnu targets

These are in symmetry with `{x86_64,i686}-win7-windows-msvc`.
This commit is contained in:
Tobias Bucher 2025-01-06 15:32:17 +01:00
parent 4bc6b76871
commit 8630234ebc
8 changed files with 133 additions and 3 deletions

View file

@ -1812,9 +1812,11 @@ supported_targets! {
("aarch64-unknown-illumos", aarch64_unknown_illumos),
("x86_64-pc-windows-gnu", x86_64_pc_windows_gnu),
("x86_64-uwp-windows-gnu", x86_64_uwp_windows_gnu),
("x86_64-win7-windows-gnu", x86_64_win7_windows_gnu),
("i686-pc-windows-gnu", i686_pc_windows_gnu),
("i686-uwp-windows-gnu", i686_uwp_windows_gnu),
("x86_64-uwp-windows-gnu", x86_64_uwp_windows_gnu),
("i686-win7-windows-gnu", i686_win7_windows_gnu),
("aarch64-pc-windows-gnullvm", aarch64_pc_windows_gnullvm),
("i686-pc-windows-gnullvm", i686_pc_windows_gnullvm),

View file

@ -0,0 +1,35 @@
use crate::spec::{Cc, FramePointer, LinkerFlavor, Lld, Target, base};
pub(crate) fn target() -> Target {
let mut base = base::windows_gnu::opts();
base.vendor = "win7".into();
base.cpu = "pentium4".into();
base.max_atomic_width = Some(64);
base.frame_pointer = FramePointer::Always; // Required for backtraces
base.linker = Some("i686-w64-mingw32-gcc".into());
// Mark all dynamic libraries and executables as compatible with the larger 4GiB address
// space available to x86 Windows binaries on x86_64.
base.add_pre_link_args(LinkerFlavor::Gnu(Cc::No, Lld::No), &[
"-m",
"i386pe",
"--large-address-aware",
]);
base.add_pre_link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-Wl,--large-address-aware"]);
Target {
llvm_target: "i686-pc-windows-gnu".into(),
metadata: crate::spec::TargetMetadata {
description: Some("32-bit MinGW (Windows 7+)".into()),
tier: Some(3),
host_tools: Some(false),
std: Some(true),
},
pointer_width: 32,
data_layout: "e-m:x-p:32:32-p270:32:32-p271:32:32-p272:64:64-\
i64:64-i128:128-f80:32-n8:16:32-a:0:32-S32"
.into(),
arch: "x86".into(),
options: base,
}
}

View file

@ -0,0 +1,32 @@
use crate::spec::{Cc, LinkerFlavor, Lld, Target, base};
pub(crate) fn target() -> Target {
let mut base = base::windows_gnu::opts();
base.vendor = "win7".into();
base.cpu = "x86-64".into();
base.plt_by_default = false;
// Use high-entropy 64 bit address space for ASLR
base.add_pre_link_args(LinkerFlavor::Gnu(Cc::No, Lld::No), &[
"-m",
"i386pep",
"--high-entropy-va",
]);
base.add_pre_link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-m64", "-Wl,--high-entropy-va"]);
base.max_atomic_width = Some(64);
base.linker = Some("x86_64-w64-mingw32-gcc".into());
Target {
llvm_target: "x86_64-pc-windows-gnu".into(),
metadata: crate::spec::TargetMetadata {
description: Some("64-bit MinGW (Windows 7+)".into()),
tier: Some(3),
host_tools: Some(false),
std: Some(true),
},
pointer_width: 64,
data_layout:
"e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128".into(),
arch: "x86_64".into(),
options: base,
}
}

View file

@ -98,6 +98,7 @@
- [wasm32-unknown-unknown](platform-support/wasm32-unknown-unknown.md)
- [wasm32v1-none](platform-support/wasm32v1-none.md)
- [wasm64-unknown-unknown](platform-support/wasm64-unknown-unknown.md)
- [\*-win7-windows-gnu](platform-support/win7-windows-gnu.md)
- [\*-win7-windows-msvc](platform-support/win7-windows-msvc.md)
- [x86_64-fortanix-unknown-sgx](platform-support/x86_64-fortanix-unknown-sgx.md)
- [x86_64-pc-solaris](platform-support/solaris.md)

View file

@ -313,6 +313,7 @@ target | std | host | notes
[`i686-unknown-redox`](platform-support/redox.md) | ✓ | | i686 Redox OS
`i686-uwp-windows-gnu` | ✓ | | [^x86_32-floats-return-ABI]
[`i686-uwp-windows-msvc`](platform-support/uwp-windows-msvc.md) | ✓ | | [^x86_32-floats-return-ABI]
[`i686-win7-windows-gnu`](platform-support/win7-windows-gnu.md) | ✓ | | 32-bit Windows 7 support [^x86_32-floats-return-ABI]
[`i686-win7-windows-msvc`](platform-support/win7-windows-msvc.md) | ✓ | | 32-bit Windows 7 support [^x86_32-floats-return-ABI]
[`i686-wrs-vxworks`](platform-support/vxworks.md) | ✓ | | [^x86_32-floats-return-ABI]
[`loongarch64-unknown-linux-ohos`](platform-support/openharmony.md) | ✓ | | LoongArch64 OpenHarmony
@ -410,6 +411,7 @@ target | std | host | notes
[`x86_64-unknown-trusty`](platform-support/trusty.md) | ? | |
`x86_64-uwp-windows-gnu` | ✓ | |
[`x86_64-uwp-windows-msvc`](platform-support/uwp-windows-msvc.md) | ✓ | |
[`x86_64-win7-windows-gnu`](platform-support/win7-windows-gnu.md) | ✓ | | 64-bit Windows 7 support
[`x86_64-win7-windows-msvc`](platform-support/win7-windows-msvc.md) | ✓ | | 64-bit Windows 7 support
[`x86_64-wrs-vxworks`](platform-support/vxworks.md) | ✓ | |
[`x86_64h-apple-darwin`](platform-support/x86_64h-apple-darwin.md) | ✓ | ✓ | macOS with late-gen Intel (at least Haswell)

View file

@ -0,0 +1,48 @@
# \*-win7-windows-gnu
**Tier: 3**
Windows targets continuing support of Windows 7.
Target triples:
- `i686-win7-windows-gnu`
- `x86_64-win7-windows-gnu`
## Target maintainers
- @tbu-
## Requirements
This target supports all of core, alloc, std and test. Host
tools may also work, though those are not currently tested.
Those targets follow Windows calling convention for extern "C".
Like any other Windows target, the created binaries are in PE format.
## Building the target
You can build Rust with support for the targets by adding it to the target list in config.toml:
```toml
[build]
build-stage = 1
target = ["x86_64-win7-windows-gnu"]
```
## Building Rust programs
Rust does not ship pre-compiled artifacts for this target. To compile for this
target, you will either need to build Rust with the target enabled (see
"Building the target" above), or build your own copy by using `build-std` or
similar.
## Testing
Created binaries work fine on Windows or Wine using native hardware. Remote
testing is possible using the `remote-test-server` described [here](https://rustc-dev-guide.rust-lang.org/tests/running.html#running-tests-on-a-remote-machine).
## Cross-compilation toolchains and C code
Compatible C code can be built with gcc's `{i686,x86_64}-w64-mingw32-gcc`.

View file

@ -1,8 +1,12 @@
# *-win7-windows-msvc
# \*-win7-windows-msvc
**Tier: 3**
Windows targets continuing support of windows7.
Windows targets continuing support of Windows 7.
Target triples:
- `i686-win7-windows-msvc`
- `x86_64-win7-windows-msvc`
## Target maintainers

View file

@ -39,6 +39,9 @@
//@ revisions: i686_uwp_windows_gnu
//@ [i686_uwp_windows_gnu] compile-flags: --target i686-uwp-windows-gnu
//@ [i686_uwp_windows_gnu] needs-llvm-components: x86
//@ revisions: i686_win7_windows_gnu
//@ [i686_win7_windows_gnu] compile-flags: --target i686-win7-windows-gnu
//@ [i686_win7_windows_gnu] needs-llvm-components: x86
//@ revisions: i686_unknown_uefi
//@ [i686_unknown_uefi] compile-flags: --target i686-unknown-uefi
//@ [i686_unknown_uefi] needs-llvm-components: x86
@ -72,6 +75,9 @@
//@ revisions: x86_64_uwp_windows_gnu
//@ [x86_64_uwp_windows_gnu] compile-flags: --target x86_64-uwp-windows-gnu
//@ [x86_64_uwp_windows_gnu] needs-llvm-components: x86
//@ revisions: x86_64_win7_windows_gnu
//@ [x86_64_win7_windows_gnu] compile-flags: --target x86_64-win7-windows-gnu
//@ [x86_64_win7_windows_gnu] needs-llvm-components: x86
//@ revisions: x86_64_uwp_windows_msvc
//@ [x86_64_uwp_windows_msvc] compile-flags: --target x86_64-uwp-windows-msvc
//@ [x86_64_uwp_windows_msvc] needs-llvm-components: x86