From e6aedf6056b8800a26b18e15a05e3dd166723c43 Mon Sep 17 00:00:00 2001 From: jam1garner <8260240+jam1garner@users.noreply.github.com> Date: Wed, 15 Sep 2021 13:56:20 -0400 Subject: [PATCH] Add Nintendo Switch tier 3 target --- .../src/spec/aarch64_nintendo_switch.rs | 39 +++++++++++++++++++ compiler/rustc_target/src/spec/mod.rs | 2 + src/doc/rustc/src/platform-support.md | 1 + 3 files changed, 42 insertions(+) create mode 100644 compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs 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 @@ fn $module() { ("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), diff --git a/src/doc/rustc/src/platform-support.md b/src/doc/rustc/src/platform-support.md index eb985803266..641fcb9d6f8 100644 --- a/src/doc/rustc/src/platform-support.md +++ b/src/doc/rustc/src/platform-support.md @@ -209,6 +209,7 @@ target | std | host | notes `aarch64-apple-tvos` | * | | ARM64 tvOS [`aarch64-apple-watchos-sim`](platform-support/apple-watchos.md) | ✓ | | ARM64 Apple WatchOS Simulator [`aarch64-kmc-solid_asp3`](platform-support/kmc-solid.md) | ✓ | | ARM64 SOLID with TOPPERS/ASP3 +`aarch64-nintendo-switch` | * | | ARM64 Nintendo Switch, Horizon [`aarch64-pc-windows-gnullvm`](platform-support/pc-windows-gnullvm.md) | ✓ | ✓ | `aarch64-unknown-freebsd` | ✓ | ✓ | ARM64 FreeBSD `aarch64-unknown-hermit` | ✓ | | ARM64 HermitCore