rustc_target/spec/base/
cygwin.rs

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