]>
Commit | Line | Data |
---|---|---|
f20569fa XL |
1 | use 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. | |
6 | pub 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 | } |