about summary refs log tree commit diff
path: root/compiler
diff options
context:
space:
mode:
authorjam1garner <8260240+jam1garner@users.noreply.github.com>2021-09-15 13:56:20 -0400
committerleo60228 <leo@60228.dev>2022-07-14 15:55:58 -0400
commite6aedf6056b8800a26b18e15a05e3dd166723c43 (patch)
treea50b09cc4b78fa8fe7ad06fdf9a574842942a40d /compiler
parent74621c764e737a1a430bac088b5507a8854ec460 (diff)
downloadrust-e6aedf6056b8800a26b18e15a05e3dd166723c43.tar.gz
rust-e6aedf6056b8800a26b18e15a05e3dd166723c43.zip
Add Nintendo Switch tier 3 target
Diffstat (limited to 'compiler')
-rw-r--r--compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs39
-rw-r--r--compiler/rustc_target/src/spec/mod.rs2
2 files changed, 41 insertions, 0 deletions
diff --git a/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs b/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs
new file mode 100644
index 00000000000..74ecba489c1
--- /dev/null
+++ b/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs
@@ -0,0 +1,39 @@
+use super::{LinkerFlavor, LldFlavor, PanicStrategy, RelroLevel, Target, TargetOptions};
+
+/// A base target for Nintendo Switch devices using a pure LLVM toolchain.
+pub fn target() -> Target {
+    let mut opts = TargetOptions {
+        linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld),
+        linker: Some("rust-lld".into()),
+        os: "horizon".into(),
+        max_atomic_width: Some(128),
+        panic_strategy: PanicStrategy::Abort,
+        position_independent_executables: true,
+        crt_static_default: false,
+        crt_static_respected: false,
+        dynamic_linking: true,
+        executables: true,
+        has_elf_tls: false,
+        has_rpath: false,
+        relro_level: RelroLevel::Off,
+        ..Default::default()
+    };
+
+    opts.pre_link_args.insert(
+        LinkerFlavor::Lld(LldFlavor::Ld),
+        vec![],
+    );
+
+    opts.post_link_args.insert(
+        LinkerFlavor::Lld(LldFlavor::Ld),
+        vec!["--no-gc-sections".to_string(), "--eh-frame-hdr".to_string()],
+    );
+
+    Target {
+        llvm_target: "aarch64-unknown-none".into(),
+        pointer_width: 64,
+        data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".into(),
+        arch: "aarch64".into(),
+        options: opts,
+    }
+}
diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs
index ef49fc8e968..a14a245480e 100644
--- a/compiler/rustc_target/src/spec/mod.rs
+++ b/compiler/rustc_target/src/spec/mod.rs
@@ -1035,6 +1035,8 @@ supported_targets! {
 
     ("armv6k-nintendo-3ds", armv6k_nintendo_3ds),
 
+    ("aarch64-nintendo-switch", aarch64_nintendo_switch),
+
     ("armv7-unknown-linux-uclibceabi", armv7_unknown_linux_uclibceabi),
     ("armv7-unknown-linux-uclibceabihf", armv7_unknown_linux_uclibceabihf),