]> git.lizzy.rs Git - rust.git/blob - compiler/rustc_target/src/spec/msvc_base.rs
Auto merge of #77618 - fusion-engineering-forks:windows-parker, r=Amanieu
[rust.git] / compiler / rustc_target / src / spec / msvc_base.rs
1 use crate::spec::{LinkArgs, LinkerFlavor, LldFlavor, TargetOptions};
2
3 pub fn opts() -> TargetOptions {
4     let pre_link_args_msvc = vec![
5         // Suppress the verbose logo and authorship debugging output, which would needlessly
6         // clog any log files.
7         "/NOLOGO".to_string(),
8         // Tell the compiler that non-code sections can be marked as non-executable,
9         // including stack pages.
10         // UEFI is fully compatible to non-executable data pages.
11         // In fact, firmware might enforce this, so we better let the linker know about this,
12         // so it will fail if the compiler ever tries placing code on the stack
13         // (e.g., trampoline constructs and alike).
14         "/NXCOMPAT".to_string(),
15     ];
16     let mut pre_link_args = LinkArgs::new();
17     pre_link_args.insert(LinkerFlavor::Msvc, pre_link_args_msvc.clone());
18     pre_link_args.insert(LinkerFlavor::Lld(LldFlavor::Link), pre_link_args_msvc);
19
20     TargetOptions {
21         linker_flavor: LinkerFlavor::Msvc,
22         executables: true,
23         is_like_windows: true,
24         is_like_msvc: true,
25         lld_flavor: LldFlavor::Link,
26         pre_link_args,
27         abi_return_struct_as_int: true,
28         emit_debug_gdb_scripts: false,
29
30         ..Default::default()
31     }
32 }