3 use super::{LinkerFlavor, PanicStrategy, Target, TargetOptions};
5 pub fn target() -> Result<Target, String> {
6 const PRE_LINK_ARGS: &[&str] = &[
20 "-Wl,--error-unresolved-symbols",
21 "-Wl,--no-undefined-version",
23 "-Wl,--export-dynamic",
24 // The following symbols are needed by libunwind, which is linked after
25 // libstd. Make sure they're included in the link.
26 "-Wl,-u,__rust_abort",
27 "-Wl,-u,__rust_c_alloc",
28 "-Wl,-u,__rust_c_dealloc",
29 "-Wl,-u,__rust_print_err",
30 "-Wl,-u,__rust_rwlock_rdlock",
31 "-Wl,-u,__rust_rwlock_unlock",
32 "-Wl,-u,__rust_rwlock_wrlock",
35 const EXPORT_SYMBOLS: &[&str] = &[
49 let opts = TargetOptions {
50 dynamic_linking: false,
53 max_atomic_width: Some(64),
54 panic_strategy: PanicStrategy::Unwind,
56 features: "+rdrnd,+rdseed".into(),
57 position_independent_executables: true,
58 pre_link_args: iter::once((
60 PRE_LINK_ARGS.iter().cloned().map(String::from).collect(),
63 post_link_objects: vec!["libunwind.a".into()],
64 override_export_symbols: Some(EXPORT_SYMBOLS.iter().cloned().map(String::from).collect()),
68 llvm_target: "x86_64-unknown-linux-gnu".into(),
69 target_endian: "little".into(),
70 target_pointer_width: "64".into(),
71 target_c_int_width: "32".into(),
72 target_os: "unknown".into(),
73 target_env: "sgx".into(),
74 target_vendor: "fortanix".into(),
75 data_layout: "e-m:e-i64:64-f80:128-n8:16:32:64-S128".into(),
76 arch: "x86_64".into(),
77 linker_flavor: LinkerFlavor::Gcc,