]> git.proxmox.com Git - rustc.git/blob - src/librustc_target/spec/mipsel_sony_psp.rs
New upstream version 1.47.0+dfsg1
[rustc.git] / src / librustc_target / spec / mipsel_sony_psp.rs
1 use crate::spec::{LinkArgs, LinkerFlavor, LldFlavor, RelocModel};
2 use crate::spec::{Target, TargetOptions, TargetResult};
3
4 // The PSP has custom linker requirements.
5 const LINKER_SCRIPT: &str = include_str!("./mipsel_sony_psp_linker_script.ld");
6
7 pub fn target() -> TargetResult {
8 let mut pre_link_args = LinkArgs::new();
9 pre_link_args.insert(LinkerFlavor::Lld(LldFlavor::Ld), vec!["--emit-relocs".to_string()]);
10
11 Ok(Target {
12 llvm_target: "mipsel-sony-psp".to_string(),
13 target_endian: "little".to_string(),
14 target_pointer_width: "32".to_string(),
15 target_c_int_width: "32".to_string(),
16 data_layout: "e-m:m-p:32:32-i8:8:32-i16:16:32-i64:64-n32-S64".to_string(),
17 arch: "mips".to_string(),
18 target_os: "psp".to_string(),
19 target_env: "".to_string(),
20 target_vendor: "sony".to_string(),
21 linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld),
22
23 options: TargetOptions {
24 cpu: "mips2".to_string(),
25 executables: true,
26 linker: Some("rust-lld".to_owned()),
27 linker_is_gnu: true,
28 relocation_model: RelocModel::Static,
29
30 // PSP FPU only supports single precision floats.
31 features: "+single-float".to_string(),
32
33 // PSP does not support trap-on-condition instructions.
34 llvm_args: vec!["-mno-check-zero-division".to_string()],
35 pre_link_args,
36 link_script: Some(LINKER_SCRIPT.to_string()),
37 ..Default::default()
38 },
39 })
40 }