2020-10-05 12:37:55 +00:00
|
|
|
use crate::spec::{LinkerFlavor, Target, TargetOptions};
|
2020-07-26 11:58:37 +00:00
|
|
|
|
|
|
|
/// A base target for AVR devices using the GNU toolchain.
|
|
|
|
///
|
|
|
|
/// Requires GNU avr-gcc and avr-binutils on the host system.
|
2020-10-05 12:37:55 +00:00
|
|
|
pub fn target(target_cpu: String) -> Target {
|
|
|
|
Target {
|
2020-07-26 11:58:37 +00:00
|
|
|
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(),
|
|
|
|
target_endian: "little".to_string(),
|
|
|
|
target_pointer_width: "16".to_string(),
|
|
|
|
linker_flavor: LinkerFlavor::Gcc,
|
|
|
|
target_os: "unknown".to_string(),
|
|
|
|
target_env: "".to_string(),
|
|
|
|
target_vendor: "unknown".to_string(),
|
|
|
|
target_c_int_width: 16.to_string(),
|
|
|
|
options: TargetOptions {
|
|
|
|
cpu: target_cpu.clone(),
|
|
|
|
exe_suffix: ".elf".to_string(),
|
2020-07-30 16:04:26 +00:00
|
|
|
|
2020-07-26 11:58:37 +00:00
|
|
|
linker: Some("avr-gcc".to_owned()),
|
2020-07-30 16:04:26 +00:00
|
|
|
dynamic_linking: false,
|
|
|
|
executables: true,
|
|
|
|
linker_is_gnu: true,
|
|
|
|
has_rpath: false,
|
|
|
|
position_independent_executables: false,
|
|
|
|
eh_frame_header: false,
|
|
|
|
pre_link_args: vec![(
|
|
|
|
LinkerFlavor::Gcc,
|
|
|
|
vec![
|
|
|
|
format!("-mmcu={}", target_cpu),
|
|
|
|
// We want to be able to strip as much executable code as possible
|
|
|
|
// from the linker command line, and this flag indicates to the
|
|
|
|
// linker that it can avoid linking in dynamic libraries that don't
|
|
|
|
// actually satisfy any symbols up to that point (as with many other
|
|
|
|
// resolutions the linker does). This option only applies to all
|
|
|
|
// following libraries so we're sure to pass it as one of the first
|
|
|
|
// arguments.
|
|
|
|
"-Wl,--as-needed".to_string(),
|
|
|
|
],
|
2020-07-26 11:58:37 +00:00
|
|
|
)]
|
|
|
|
.into_iter()
|
|
|
|
.collect(),
|
2020-07-30 15:57:20 +00:00
|
|
|
late_link_args: vec![(LinkerFlavor::Gcc, vec!["-lgcc".to_owned()])]
|
2020-07-26 11:58:37 +00:00
|
|
|
.into_iter()
|
|
|
|
.collect(),
|
2020-09-05 09:33:01 +00:00
|
|
|
max_atomic_width: Some(0),
|
|
|
|
atomic_cas: false,
|
2020-07-30 16:04:26 +00:00
|
|
|
..TargetOptions::default()
|
2020-07-26 11:58:37 +00:00
|
|
|
},
|
2020-10-05 12:37:55 +00:00
|
|
|
}
|
2020-07-26 11:58:37 +00:00
|
|
|
}
|