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 { 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() } }