forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rollup merge of rust-lang#134999 - Berrysoft:dev/new-cygwin-target, r…
…=chenyukang,workingjubilee Add cygwin target. This PR simply adds cygwin target together with msys2 target, based on ``@ookiineko`` 's (the account has been deleted) [work](https://github.com/ookiineko-cygport/rust) on cygwin target. My full work is here: rust-lang/rust@master...Berrysoft:rust:dev/cygwin I have succeeded in building a new rustc for cygwin target, and eventually distributed a new version of [fish-shell](https://github.com/Berrysoft/fish-shell/releases) (rewritten by Rust) for MSYS2. I will open a new PR to fix std if this PR is accepted.
- Loading branch information
Showing
10 changed files
with
125 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
use std::borrow::Cow; | ||
|
||
use crate::spec::{Cc, DebuginfoKind, LinkerFlavor, Lld, SplitDebuginfo, TargetOptions, cvs}; | ||
|
||
pub(crate) fn opts() -> TargetOptions { | ||
let mut pre_link_args = TargetOptions::link_args( | ||
LinkerFlavor::Gnu(Cc::No, Lld::No), | ||
&["--disable-dynamicbase", "--enable-auto-image-base"], | ||
); | ||
crate::spec::add_link_args( | ||
&mut pre_link_args, | ||
LinkerFlavor::Gnu(Cc::Yes, Lld::No), | ||
&["-Wl,--disable-dynamicbase", "-Wl,--enable-auto-image-base"], | ||
); | ||
let cygwin_libs = &["-lcygwin", "-lgcc", "-lcygwin", "-luser32", "-lkernel32", "-lgcc_s"]; | ||
let mut late_link_args = | ||
TargetOptions::link_args(LinkerFlavor::Gnu(Cc::No, Lld::No), cygwin_libs); | ||
crate::spec::add_link_args( | ||
&mut late_link_args, | ||
LinkerFlavor::Gnu(Cc::Yes, Lld::No), | ||
cygwin_libs, | ||
); | ||
TargetOptions { | ||
os: "cygwin".into(), | ||
vendor: "pc".into(), | ||
// FIXME(#13846) this should be enabled for cygwin | ||
function_sections: false, | ||
linker: Some("gcc".into()), | ||
dynamic_linking: true, | ||
dll_prefix: "".into(), | ||
dll_suffix: ".dll".into(), | ||
exe_suffix: ".exe".into(), | ||
families: cvs!["unix"], | ||
is_like_windows: true, | ||
allows_weak_linkage: false, | ||
pre_link_args, | ||
late_link_args, | ||
abi_return_struct_as_int: true, | ||
emit_debug_gdb_scripts: false, | ||
requires_uwtable: true, | ||
eh_frame_header: false, | ||
debuginfo_kind: DebuginfoKind::Dwarf, | ||
supported_split_debuginfo: Cow::Borrowed(&[SplitDebuginfo::Off]), | ||
..Default::default() | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
24 changes: 24 additions & 0 deletions
24
compiler/rustc_target/src/spec/targets/x86_64_pc_cygwin.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
use crate::spec::{Cc, LinkerFlavor, Lld, Target, base}; | ||
|
||
pub(crate) fn target() -> Target { | ||
let mut base = base::cygwin::opts(); | ||
base.cpu = "x86-64".into(); | ||
base.add_pre_link_args(LinkerFlavor::Gnu(Cc::No, Lld::No), &["-m", "i386pep"]); | ||
base.add_pre_link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-m64"]); | ||
base.max_atomic_width = Some(64); | ||
base.linker = Some("x86_64-pc-cygwin-gcc".into()); | ||
Target { | ||
llvm_target: "x86_64-pc-cygwin".into(), | ||
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, | ||
metadata: crate::spec::TargetMetadata { | ||
description: Some("64-bit x86 Cygwin".into()), | ||
tier: Some(3), | ||
host_tools: Some(false), | ||
std: None, | ||
}, | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
# `x86_64-pc-cygwin` | ||
|
||
**Tier: 3** | ||
|
||
Windows targets supporting Cygwin. | ||
The `*-cygwin` targets are **not** intended as native target for applications, | ||
a developer writing Windows applications should use the `*-pc-windows-*` targets instead, which are *native* Windows. | ||
|
||
Cygwin is only intended as an emulation layer for Unix-only programs which do not support the native Windows targets. | ||
|
||
## Target maintainers | ||
|
||
- [Berrysoft](https://github.com/Berrysoft) | ||
|
||
## Requirements | ||
|
||
This target is cross compiled. It needs `x86_64-pc-cygwin-gcc` as linker. | ||
|
||
The `target_os` of the target is `cygwin`, and it is `unix`. | ||
|
||
## Building the target | ||
|
||
For cross-compilation you want LLVM with [llvm/llvm-project#121439 (merged)](https://github.com/llvm/llvm-project/pull/121439) applied to fix the LLVM codegen on importing external global variables from DLLs. | ||
No native builds on Cygwin now. It should be possible theoretically though, but might need a lot of patches. | ||
|
||
## Building Rust programs | ||
|
||
Rust does not yet 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 of `core` by using | ||
`build-std` or similar. | ||
|
||
## Testing | ||
|
||
Created binaries work fine on Windows with Cygwin. | ||
|
||
## Cross-compilation toolchains and C code | ||
|
||
Compatible C code can be built with GCC shipped with Cygwin. Clang is untested. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters