blob: 8cd6735a8c1ecbdac14ec6d5f8a09794f1359324 [file] [log] [blame]
use crate::spec::{LinkArgs, LinkerFlavor, LldFlavor, TargetOptions};
pub fn opts() -> TargetOptions {
let pre_link_args_msvc = vec![
// Suppress the verbose logo and authorship debugging output, which would needlessly
// clog any log files.
"/NOLOGO".to_string(),
// Tell the compiler that non-code sections can be marked as non-executable,
// including stack pages.
// UEFI is fully compatible to non-executable data pages.
// In fact, firmware might enforce this, so we better let the linker know about this,
// so it will fail if the compiler ever tries placing code on the stack
// (e.g., trampoline constructs and alike).
"/NXCOMPAT".to_string(),
];
let mut pre_link_args = LinkArgs::new();
pre_link_args.insert(LinkerFlavor::Msvc, pre_link_args_msvc.clone());
pre_link_args.insert(LinkerFlavor::Lld(LldFlavor::Link), pre_link_args_msvc);
TargetOptions {
linker_flavor: LinkerFlavor::Msvc,
executables: true,
is_like_windows: true,
is_like_msvc: true,
lld_flavor: LldFlavor::Link,
pre_link_args,
abi_return_struct_as_int: true,
emit_debug_gdb_scripts: false,
..Default::default()
}
}