rustc_target/spec/base/
cygwin.rs1use std::borrow::Cow;
2
3use crate::spec::{
4 BinaryFormat, Cc, DebuginfoKind, LinkerFlavor, Lld, SplitDebuginfo, TargetOptions, TlsModel,
5 cvs,
6};
7
8pub(crate) fn opts() -> TargetOptions {
9 let mut pre_link_args = TargetOptions::link_args(
10 LinkerFlavor::Gnu(Cc::No, Lld::No),
11 &["--disable-dynamicbase", "--enable-auto-image-base"],
12 );
13 crate::spec::add_link_args(
14 &mut pre_link_args,
15 LinkerFlavor::Gnu(Cc::Yes, Lld::No),
16 &["-Wl,--disable-dynamicbase", "-Wl,--enable-auto-image-base"],
17 );
18 let cygwin_libs = &["-lcygwin", "-lgcc", "-lcygwin", "-luser32", "-lkernel32", "-lgcc_s"];
19 let mut late_link_args =
20 TargetOptions::link_args(LinkerFlavor::Gnu(Cc::No, Lld::No), cygwin_libs);
21 crate::spec::add_link_args(
22 &mut late_link_args,
23 LinkerFlavor::Gnu(Cc::Yes, Lld::No),
24 cygwin_libs,
25 );
26 TargetOptions {
27 os: "cygwin".into(),
28 vendor: "pc".into(),
29 function_sections: false,
31 linker: Some("gcc".into()),
32 dynamic_linking: true,
33 dll_prefix: "".into(),
34 dll_suffix: ".dll".into(),
35 exe_suffix: ".exe".into(),
36 families: cvs!["unix"],
37 is_like_windows: true,
38 binary_format: BinaryFormat::Coff,
39 allows_weak_linkage: false,
40 pre_link_args,
41 late_link_args,
42 abi_return_struct_as_int: true,
43 emit_debug_gdb_scripts: false,
44 requires_uwtable: true,
45 eh_frame_header: false,
46 debuginfo_kind: DebuginfoKind::Dwarf,
47 supported_split_debuginfo: Cow::Borrowed(&[SplitDebuginfo::Off]),
48 tls_model: TlsModel::Emulated,
49 has_thread_local: true,
50 ..Default::default()
51 }
52}