fill in all those options.
This commit is contained in:
parent
48ec236c8c
commit
e190bdf710
1 changed files with 61 additions and 11 deletions
|
|
@ -1,12 +1,11 @@
|
|||
//! Targets the Nintendo Game Boy Advance (GBA).
|
||||
//! Targets the Nintendo Game Boy Advance (GBA), a handheld game device from 2001.
|
||||
//!
|
||||
//! The GBA is a handheld game device from 2001. Inside, the CPU is an ARM7TDMI.
|
||||
//! That's in the ARMv4T architecture family.
|
||||
//! Please ping @Lokathor if changes are needed.
|
||||
//!
|
||||
//! Technically the device has no OS, however we're going to copy the
|
||||
//! `mipsel_sony_psp` target setup and set the OS string to be "GBA". Other than
|
||||
//! the setting of the `target_os` and `target_vendor` values, this target is a
|
||||
//! fairly standard configuration for `thumbv4t`
|
||||
//! Important: This target **does not** specify a linker script or the ROM
|
||||
//! header. You'll still need to provide these yourself to construct a final
|
||||
//! binary. Generally you'd do this with something like
|
||||
//! `-Clink-arg=-Tmy_script.ld` and `-Clink-arg=my_crt.o`.
|
||||
|
||||
use crate::spec::{LinkerFlavor, LldFlavor, Target, TargetOptions, TargetResult};
|
||||
|
||||
|
|
@ -16,14 +15,65 @@ pub fn target() -> TargetResult {
|
|||
target_endian: "little".to_string(),
|
||||
target_pointer_width: "32".to_string(),
|
||||
target_c_int_width: "32".to_string(),
|
||||
target_os: "gba".to_string(),
|
||||
target_env: String::new(),
|
||||
target_os: "none".to_string(),
|
||||
target_env: "gba".to_string(),
|
||||
target_vendor: "nintendo".to_string(),
|
||||
arch: "arm".to_string(),
|
||||
data_layout: "TODO".to_string(),
|
||||
/* Data layout args are '-' separated:
|
||||
* little endian
|
||||
* stack is 64-bit aligned (EABI)
|
||||
* pointers are 32-bit
|
||||
* i64 must be 64-bit aligned (EABI)
|
||||
* mangle names with ELF style
|
||||
* native integers are 32-bit
|
||||
* All other elements are default
|
||||
*/
|
||||
data_layout: "e-S64-p:32:32-i64:64-m:e-n32".to_string(),
|
||||
linker_flavor: LinkerFlavor::Ld,
|
||||
options: TargetOptions {
|
||||
// TODO
|
||||
linker: Some("arm-none-eabi-ld".to_string()),
|
||||
linker_is_gnu: true,
|
||||
|
||||
// extra args passed to the external assembler
|
||||
asm_args: vec!["-mcpu=arm7tdmi".to_string(), "-mthumb-interwork".to_string()],
|
||||
|
||||
cpu: "arm7tdmi".to_string(),
|
||||
|
||||
// minimum extra features, these cannot be disabled via -C
|
||||
features: "+soft-float,+strict-align".to_string(),
|
||||
|
||||
executables: true,
|
||||
|
||||
relocation_model: RelocModel::Static,
|
||||
|
||||
//function_sections: bool,
|
||||
//exe_suffix: String,
|
||||
main_needs_argc_argv: false,
|
||||
|
||||
// if we have thread-local storage
|
||||
has_elf_tls: false,
|
||||
|
||||
// don't have atomic compare-and-swap
|
||||
atomic_cas: false,
|
||||
|
||||
// always just abort
|
||||
panic_strategy: PanicStrategy::Abort,
|
||||
|
||||
// ABIs to not use
|
||||
unsupported_abis: super::arm_base::unsupported_abis(),
|
||||
|
||||
// The minimum alignment for global symbols.
|
||||
min_global_align: Some(4),
|
||||
|
||||
// no threads here
|
||||
singlethread: true,
|
||||
|
||||
// GBA has no builtins
|
||||
no_builtins: true,
|
||||
|
||||
// this is off just like in the `thumb_base`
|
||||
emit_debug_gdb_scripts: false,
|
||||
|
||||
..TargetOptions::default()
|
||||
},
|
||||
})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue