rustc_target/spec/base/
windows_gnu.rs
1use std::borrow::Cow;
2
3use crate::spec::{
4 Cc, DebuginfoKind, LinkSelfContainedDefault, LinkerFlavor, Lld, SplitDebuginfo, TargetOptions,
5 add_link_args, crt_objects, 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 &[
12 "--dynamicbase",
14 "--disable-auto-image-base",
16 ],
17 );
18 add_link_args(
19 &mut pre_link_args,
20 LinkerFlavor::Gnu(Cc::Yes, Lld::No),
21 &[
22 "-fno-use-linker-plugin",
25 "-Wl,--dynamicbase",
26 "-Wl,--disable-auto-image-base",
27 ],
28 );
29
30 let mingw_libs = &[
33 "-lmsvcrt",
34 "-lmingwex",
35 "-lmingw32",
36 "-lgcc", "-lmsvcrt",
45 "-lmingwex",
48 "-luser32",
49 "-lkernel32",
50 ];
51 let mut late_link_args =
52 TargetOptions::link_args(LinkerFlavor::Gnu(Cc::No, Lld::No), mingw_libs);
53 add_link_args(&mut late_link_args, LinkerFlavor::Gnu(Cc::Yes, Lld::No), mingw_libs);
54 let dynamic_unwind_libs = &["-lgcc_s"];
58 let mut late_link_args_dynamic =
59 TargetOptions::link_args(LinkerFlavor::Gnu(Cc::No, Lld::No), dynamic_unwind_libs);
60 add_link_args(
61 &mut late_link_args_dynamic,
62 LinkerFlavor::Gnu(Cc::Yes, Lld::No),
63 dynamic_unwind_libs,
64 );
65 let static_unwind_libs = &["-lgcc_eh", "-l:libpthread.a"];
71 let mut late_link_args_static =
72 TargetOptions::link_args(LinkerFlavor::Gnu(Cc::No, Lld::No), static_unwind_libs);
73 add_link_args(
74 &mut late_link_args_static,
75 LinkerFlavor::Gnu(Cc::Yes, Lld::No),
76 static_unwind_libs,
77 );
78
79 TargetOptions {
80 os: "windows".into(),
81 env: "gnu".into(),
82 vendor: "pc".into(),
83 function_sections: false,
85 linker: Some("gcc".into()),
86 dynamic_linking: true,
87 dll_tls_export: false,
88 dll_prefix: "".into(),
89 dll_suffix: ".dll".into(),
90 exe_suffix: ".exe".into(),
91 families: cvs!["windows"],
92 is_like_windows: true,
93 allows_weak_linkage: false,
94 pre_link_args,
95 pre_link_objects: crt_objects::pre_mingw(),
96 post_link_objects: crt_objects::post_mingw(),
97 pre_link_objects_self_contained: crt_objects::pre_mingw_self_contained(),
98 post_link_objects_self_contained: crt_objects::post_mingw_self_contained(),
99 link_self_contained: LinkSelfContainedDefault::InferredForMingw,
100 late_link_args,
101 late_link_args_dynamic,
102 late_link_args_static,
103 abi_return_struct_as_int: true,
104 emit_debug_gdb_scripts: false,
105 requires_uwtable: true,
106 eh_frame_header: false,
107 debuginfo_kind: DebuginfoKind::Dwarf,
108 supported_split_debuginfo: Cow::Borrowed(&[SplitDebuginfo::Off]),
111 ..Default::default()
112 }
113}