1use crate::spec::{
2 Cc, Env, LinkOutputKind, LinkSelfContainedComponents, LinkSelfContainedDefault, LinkerFlavor,
3 Os, PanicStrategy, TargetOptions, add_link_args, crt_objects, cvs,
4};
5
6pub(crate) fn opts() -> TargetOptions {
7 macro_rules! prepare_args {
9 ($($val:expr),+) => {{
10 let ld_args = &[$($val),+];
11 let cc_args = &[$(concat!("-Wl,", $val)),+];
12
13 let mut ret = TargetOptions::link_args(LinkerFlavor::Unix(Cc::No), ld_args);
14 add_link_args(&mut ret, LinkerFlavor::Unix(Cc::Yes), cc_args);
15 ret
16 }};
17 }
18
19 let pre_link_args = {
let ld_args = &["-nostdlib", "-dynamic-linker=rom/libld-l4.so"];
let cc_args = &["-Wl,-nostdlib", "-Wl,-dynamic-linker=rom/libld-l4.so"];
let mut ret =
TargetOptions::link_args(LinkerFlavor::Unix(Cc::No), ld_args);
add_link_args(&mut ret, LinkerFlavor::Unix(Cc::Yes), cc_args);
ret
}prepare_args!("-nostdlib", "-dynamic-linker=rom/libld-l4.so");
20
21 let late_link_args = {
let ld_args = &["-lc", "-lgcc_eh"];
let cc_args = &["-Wl,-lc", "-Wl,-lgcc_eh"];
let mut ret =
TargetOptions::link_args(LinkerFlavor::Unix(Cc::No), ld_args);
add_link_args(&mut ret, LinkerFlavor::Unix(Cc::Yes), cc_args);
ret
}prepare_args!("-lc", "-lgcc_eh");
22
23 let pre_link_objects_self_contained = crt_objects::new(&[
24 (LinkOutputKind::StaticNoPicExe, &["crt1.o", "crti.o", "crtbeginT.o"]),
25 (LinkOutputKind::StaticPicExe, &["crt1.p.o", "crti.o", "crtbegin.o"]),
26 (LinkOutputKind::DynamicNoPicExe, &["crt1.o", "crti.o", "crtbegin.o"]),
27 (LinkOutputKind::DynamicPicExe, &["crt1.s.o", "crti.o", "crtbeginS.o"]),
28 (LinkOutputKind::DynamicDylib, &["crti.s.o", "crtbeginS.o"]),
29 (LinkOutputKind::StaticDylib, &["crti.s.o", "crtbeginS.o"]),
30 ]);
31
32 let post_link_objects_self_contained = crt_objects::new(&[
33 (LinkOutputKind::StaticNoPicExe, &["crtendT.o", "crtn.o"]),
34 (LinkOutputKind::StaticPicExe, &["crtend.o", "crtn.o"]),
35 (LinkOutputKind::DynamicNoPicExe, &["crtend.o", "crtn.o"]),
36 (LinkOutputKind::DynamicPicExe, &["crtendS.o", "crtn.o"]),
37 (LinkOutputKind::DynamicDylib, &["crtendS.o", "crtn.s.o"]),
38 (LinkOutputKind::StaticDylib, &["crtendS.o", "crtn.s.o"]),
39 ]);
40
41 TargetOptions {
42 os: Os::L4Re,
43 env: Env::Uclibc,
44 families: ::std::borrow::Cow::Borrowed(&[::std::borrow::Cow::Borrowed("unix")])cvs!["unix"],
45 panic_strategy: PanicStrategy::Abort,
46 linker_flavor: LinkerFlavor::Unix(Cc::No),
47 dynamic_linking: true,
48 position_independent_executables: true,
49 has_thread_local: true,
50 pre_link_args,
51 late_link_args,
52 pre_link_objects_self_contained,
53 post_link_objects_self_contained,
54 link_self_contained: LinkSelfContainedDefault::WithComponents(
55 LinkSelfContainedComponents::LIBC | LinkSelfContainedComponents::CRT_OBJECTS,
56 ),
57 ..Default::default()
58 }
59}