]> git.proxmox.com Git - rustc.git/blobdiff - 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
diff --git a/vendor/rustc-ap-rustc_target/src/spec/avr_gnu_base.rs b/vendor/rustc-ap-rustc_target/src/spec/avr_gnu_base.rs
new file mode 100644 (file)
index 0000000..67a7684
--- /dev/null
@@ -0,0 +1,48 @@
+use crate::spec::{LinkerFlavor, Target, TargetOptions};
+
+/// A base target for AVR devices using the GNU toolchain.
+///
+/// Requires GNU avr-gcc and avr-binutils on the host system.
+pub fn target(target_cpu: String) -> Target {
+    Target {
+        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(),
+        pointer_width: 16,
+        options: TargetOptions {
+            c_int_width: "16".to_string(),
+            cpu: target_cpu.clone(),
+            exe_suffix: ".elf".to_string(),
+
+            linker: Some("avr-gcc".to_owned()),
+            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(),
+                ],
+            )]
+            .into_iter()
+            .collect(),
+            late_link_args: vec![(LinkerFlavor::Gcc, vec!["-lgcc".to_owned()])]
+                .into_iter()
+                .collect(),
+            max_atomic_width: Some(0),
+            atomic_cas: false,
+            ..TargetOptions::default()
+        },
+    }
+}