]> git.lizzy.rs Git - rust.git/blob - compiler/rustc_target/src/spec/avr_gnu_base.rs
Rollup merge of #80567 - lukaslueg:intersperse_with, r=m-ou-se
[rust.git] / compiler / rustc_target / src / spec / avr_gnu_base.rs
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 }