]> git.proxmox.com Git - rustc.git/blame - vendor/rustc-ap-rustc_target/src/spec/avr_gnu_base.rs
Update upstream source from tag 'upstream/1.52.1+dfsg1'
[rustc.git] / vendor / rustc-ap-rustc_target / src / spec / avr_gnu_base.rs
CommitLineData
f20569fa
XL
1use crate::spec::{LinkerFlavor, Target, TargetOptions};
2
3/// A base target for AVR devices using the GNU toolchain.
4///
5/// Requires GNU avr-gcc and avr-binutils on the host system.
6pub fn target(target_cpu: String) -> Target {
7 Target {
8 arch: "avr".to_string(),
9 data_layout: "e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8".to_string(),
10 llvm_target: "avr-unknown-unknown".to_string(),
11 pointer_width: 16,
12 options: TargetOptions {
13 c_int_width: "16".to_string(),
14 cpu: target_cpu.clone(),
15 exe_suffix: ".elf".to_string(),
16
17 linker: Some("avr-gcc".to_owned()),
18 dynamic_linking: false,
19 executables: true,
20 linker_is_gnu: true,
21 has_rpath: false,
22 position_independent_executables: false,
23 eh_frame_header: false,
24 pre_link_args: vec![(
25 LinkerFlavor::Gcc,
26 vec![
27 format!("-mmcu={}", target_cpu),
28 // We want to be able to strip as much executable code as possible
29 // from the linker command line, and this flag indicates to the
30 // linker that it can avoid linking in dynamic libraries that don't
31 // actually satisfy any symbols up to that point (as with many other
32 // resolutions the linker does). This option only applies to all
33 // following libraries so we're sure to pass it as one of the first
34 // arguments.
35 "-Wl,--as-needed".to_string(),
36 ],
37 )]
38 .into_iter()
39 .collect(),
40 late_link_args: vec![(LinkerFlavor::Gcc, vec!["-lgcc".to_owned()])]
41 .into_iter()
42 .collect(),
43 max_atomic_width: Some(0),
44 atomic_cas: false,
45 ..TargetOptions::default()
46 },
47 }
48}