avr_gnu_base.rs 1.3 KB
Newer Older
1
use crate::spec::{LinkerFlavor, Target, TargetOptions};
2 3 4 5

/// A base target for AVR devices using the GNU toolchain.
///
/// Requires GNU avr-gcc and avr-binutils on the host system.
6 7
pub fn target(target_cpu: String) -> Target {
    Target {
8 9 10
        arch: "avr".to_string(),
        data_layout: "e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8".to_string(),
        llvm_target: "avr-unknown-unknown".to_string(),
11
        pointer_width: 16,
12
        options: TargetOptions {
13
            c_int_width: "16".to_string(),
14 15
            cpu: target_cpu.clone(),
            exe_suffix: ".elf".to_string(),
16

17
            linker: Some("avr-gcc".to_owned()),
18 19 20 21 22 23
            dynamic_linking: false,
            executables: true,
            linker_is_gnu: true,
            has_rpath: false,
            position_independent_executables: false,
            eh_frame_header: false,
24 25 26
            pre_link_args: vec![(LinkerFlavor::Gcc, vec![format!("-mmcu={}", target_cpu)])]
                .into_iter()
                .collect(),
27
            late_link_args: vec![(LinkerFlavor::Gcc, vec!["-lgcc".to_owned()])]
28 29
                .into_iter()
                .collect(),
M
Mara Bos 已提交
30 31
            max_atomic_width: Some(0),
            atomic_cas: false,
32
            ..TargetOptions::default()
33
        },
34
    }
35
}