Skip to main content

rustc_target/spec/base/
l4re.rs

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    // add ld- and cc-style args
8    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}