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 01/10] 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 0000000000000..74ecba489c197 --- /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 ef49fc8e968a8..a14a245480eea 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), diff --git a/src/doc/rustc/src/platform-support.md b/src/doc/rustc/src/platform-support.md index eb985803266e7..641fcb9d6f89e 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 From 60beb1a99509b6cab2810aad3bac3584652f010d Mon Sep 17 00:00:00 2001 From: leo60228 Date: Wed, 15 Sep 2021 15:17:40 -0400 Subject: [PATCH 02/10] Don't use host linker for switch --- src/bootstrap/util.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/bootstrap/util.rs b/src/bootstrap/util.rs index c5d62a8810a8b..1895e2901489e 100644 --- a/src/bootstrap/util.rs +++ b/src/bootstrap/util.rs @@ -298,7 +298,8 @@ pub fn use_host_linker(target: TargetSelection) -> bool { || target.contains("nvptx") || target.contains("fortanix") || target.contains("fuchsia") - || target.contains("bpf")) + || target.contains("bpf") + || target.contains("switch")) } pub fn is_valid_test_suite_arg<'a, P: AsRef>( From f688a56ef68ae5e726314e5a554e0057fdcb5b27 Mon Sep 17 00:00:00 2001 From: leo60228 Date: Wed, 15 Sep 2021 15:19:00 -0400 Subject: [PATCH 03/10] Remove unnecessary linker args --- .../rustc_target/src/spec/aarch64_nintendo_switch.rs | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs b/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs index 74ecba489c197..b6863d509f24c 100644 --- a/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs +++ b/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs @@ -19,15 +19,9 @@ pub fn target() -> Target { ..Default::default() }; - opts.pre_link_args.insert( - LinkerFlavor::Lld(LldFlavor::Ld), - vec![], - ); + 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()], - ); + opts.post_link_args.insert(LinkerFlavor::Lld(LldFlavor::Ld), vec![]); Target { llvm_target: "aarch64-unknown-none".into(), From 4bc8549cb3ea8bafd93c185cd99353e391967390 Mon Sep 17 00:00:00 2001 From: leo60228 Date: Wed, 15 Sep 2021 15:26:59 -0400 Subject: [PATCH 04/10] Add linker script for switch --- .../src/spec/aarch64_nintendo_switch.rs | 3 + .../aarch64_nintendo_switch_linker_script.ld | 83 +++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 compiler/rustc_target/src/spec/aarch64_nintendo_switch_linker_script.ld diff --git a/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs b/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs index b6863d509f24c..4e4cabe9bbf10 100644 --- a/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs +++ b/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs @@ -1,10 +1,13 @@ use super::{LinkerFlavor, LldFlavor, PanicStrategy, RelroLevel, Target, TargetOptions}; +const LINKER_SCRIPT: &str = include_str!("./aarch64_nintendo_switch_linker_script.ld"); + /// 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()), + link_script: Some(LINKER_SCRIPT.into()), os: "horizon".into(), max_atomic_width: Some(128), panic_strategy: PanicStrategy::Abort, diff --git a/compiler/rustc_target/src/spec/aarch64_nintendo_switch_linker_script.ld b/compiler/rustc_target/src/spec/aarch64_nintendo_switch_linker_script.ld new file mode 100644 index 0000000000000..7938f75e1396c --- /dev/null +++ b/compiler/rustc_target/src/spec/aarch64_nintendo_switch_linker_script.ld @@ -0,0 +1,83 @@ +OUTPUT_FORMAT(elf64-littleaarch64) +OUTPUT_ARCH(aarch64) +ENTRY(_start) + +PHDRS +{ + text PT_LOAD FLAGS(5); + rodata PT_LOAD FLAGS(4); + data PT_LOAD FLAGS(6); + bss PT_LOAD FLAGS(6); + dynamic PT_DYNAMIC; +} + +SECTIONS +{ + . = 0; + + .text : ALIGN(0x1000) { + HIDDEN(__text_start = .); + KEEP(*(.text.jmp)) + + . = 0x80; + + *(.text .text.*) + *(.plt .plt.*) + } + + /* Read-only sections */ + + . = ALIGN(0x1000); + + .module_name : { *(.module_name) } :rodata + + .rodata : { *(.rodata .rodata.*) } :rodata + .mod0 : { + KEEP(crt0.nso.o(.data.mod0)) + KEEP(crt0.nro.o(.data.mod0)) + KEEP(crt0.lib.nro.o(.data.mod0)) + } + .hash : { *(.hash) } + .dynsym : { *(.dynsym .dynsym.*) } + .dynstr : { *(.dynstr .dynstr.*) } + .rela.dyn : { *(.rela.dyn) } + + .eh_frame : { + HIDDEN(__eh_frame_start = .); + *(.eh_frame .eh_frame.*) + HIDDEN(__eh_frame_end = .); + } + + .eh_frame_hdr : { + HIDDEN(__eh_frame_hdr_start = .); + *(.eh_frame_hdr .eh_frame_hdr.*) + HIDDEN(__eh_frame_hdr_end = .); + } + + /* Read-write sections */ + + . = ALIGN(0x1000); + + .data : { + *(.data .data.*) + *(.got .got.*) + *(.got.plt .got.plt.*) + } :data + + .dynamic : { + HIDDEN(__dynamic_start = .); + *(.dynamic) + } + + /* BSS section */ + + . = ALIGN(0x1000); + + .bss : { + HIDDEN(__bss_start = .); + *(.bss .bss.*) + *(COMMON) + . = ALIGN(8); + HIDDEN(__bss_end = .); + } :bss +} From bee373c699073863a150b8e32e9912321850ddde Mon Sep 17 00:00:00 2001 From: leo60228 Date: Wed, 15 Sep 2021 15:30:00 -0400 Subject: [PATCH 05/10] Don't build std for switch --- src/bootstrap/config.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs index 62dd9a6b36502..ea0f78e2a6be9 100644 --- a/src/bootstrap/config.rs +++ b/src/bootstrap/config.rs @@ -411,7 +411,7 @@ pub struct Target { impl Target { pub fn from_triple(triple: &str) -> Self { let mut target: Self = Default::default(); - if triple.contains("-none") || triple.contains("nvptx") { + if triple.contains("-none") || triple.contains("nvptx") || triple.contains("switch") { target.no_std = true; } target From 7f8804915ef3b0749f03b0f49311674270612a64 Mon Sep 17 00:00:00 2001 From: jam1garner <8260240+jam1garner@users.noreply.github.com> Date: Wed, 15 Sep 2021 17:57:43 -0400 Subject: [PATCH 06/10] Remove unneeded options from Nintendo Switch target --- .../src/spec/aarch64_nintendo_switch.rs | 36 +++++++------------ 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs b/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs index 4e4cabe9bbf10..ae9a05b1a3849 100644 --- a/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs +++ b/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs @@ -4,33 +4,23 @@ const LINKER_SCRIPT: &str = include_str!("./aarch64_nintendo_switch_linker_scrip /// 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()), - link_script: Some(LINKER_SCRIPT.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![]); - 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, + options: TargetOptions { + linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld), + linker: Some("rust-lld".into()), + link_script: Some(LINKER_SCRIPT.into()), + os: "horizon".into(), + max_atomic_width: Some(128), + panic_strategy: PanicStrategy::Abort, + position_independent_executables: true, + dynamic_linking: true, + executables: true, + relro_level: RelroLevel::Off, + ..Default::default() + }, } } From c690db4024c880907092ecd44702646bf0f5f264 Mon Sep 17 00:00:00 2001 From: leo60228 Date: Wed, 15 Sep 2021 18:21:34 -0400 Subject: [PATCH 07/10] Remove obsolete crt0 references in linker script --- .../src/spec/aarch64_nintendo_switch_linker_script.ld | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/compiler/rustc_target/src/spec/aarch64_nintendo_switch_linker_script.ld b/compiler/rustc_target/src/spec/aarch64_nintendo_switch_linker_script.ld index 7938f75e1396c..f3441e6593782 100644 --- a/compiler/rustc_target/src/spec/aarch64_nintendo_switch_linker_script.ld +++ b/compiler/rustc_target/src/spec/aarch64_nintendo_switch_linker_script.ld @@ -30,13 +30,8 @@ SECTIONS . = ALIGN(0x1000); .module_name : { *(.module_name) } :rodata - + .rodata : { *(.rodata .rodata.*) } :rodata - .mod0 : { - KEEP(crt0.nso.o(.data.mod0)) - KEEP(crt0.nro.o(.data.mod0)) - KEEP(crt0.lib.nro.o(.data.mod0)) - } .hash : { *(.hash) } .dynsym : { *(.dynsym .dynsym.*) } .dynstr : { *(.dynstr .dynstr.*) } From fd81b99a999313caf7750b8223f80d83dd2881e3 Mon Sep 17 00:00:00 2001 From: leo60228 Date: Fri, 17 Sep 2021 10:11:19 -0400 Subject: [PATCH 08/10] Add docs for Switch target --- src/doc/rustc/src/platform-support.md | 2 +- .../aarch64-nintendo-switch.md | 49 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 src/doc/rustc/src/platform-support/aarch64-nintendo-switch.md diff --git a/src/doc/rustc/src/platform-support.md b/src/doc/rustc/src/platform-support.md index 641fcb9d6f89e..19f640f721b85 100644 --- a/src/doc/rustc/src/platform-support.md +++ b/src/doc/rustc/src/platform-support.md @@ -209,7 +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-nintendo-switch`](platform-support/aarch64-nintendo-switch.md) | * | | ARM64 Nintendo Switch, Horizon [`aarch64-pc-windows-gnullvm`](platform-support/pc-windows-gnullvm.md) | ✓ | ✓ | `aarch64-unknown-freebsd` | ✓ | ✓ | ARM64 FreeBSD `aarch64-unknown-hermit` | ✓ | | ARM64 HermitCore diff --git a/src/doc/rustc/src/platform-support/aarch64-nintendo-switch.md b/src/doc/rustc/src/platform-support/aarch64-nintendo-switch.md new file mode 100644 index 0000000000000..7eb3f21ea2692 --- /dev/null +++ b/src/doc/rustc/src/platform-support/aarch64-nintendo-switch.md @@ -0,0 +1,49 @@ +# aarch64-nintendo-switch + +**Tier: 3** + +Nintendo Switch with pure-Rust toolchain. + +## Designated Developers + +* [@leo60228](https://github.com/leo60228) +* [@jam1garner](https://github.com/jam1garner) + +## Requirements + +This target is cross-compiled. +It has no special requirements for the host. + +## Building + +The target can be built by enabling it for a `rustc` build: + +```toml +[build] +build-stage = 1 +target = ["aarch64-nintendo-switch"] +``` + +## Cross-compilation + +This target can be cross-compiled from any host. + +## Testing + +Currently there is no support to run the rustc test suite for this target. + +## Building Rust programs + +If `rustc` has support for that target and the library artifacts are available, +then Rust programs can be built for that target: + +```text +rustc --target aarch64-nintendo-switch your-code.rs +``` + +To generate binaries in the NRO format that can be easily run on-device, you +can use [cargo-nx](https://github.com/aarch64-switch-rs/cargo-nx): + +```text +cargo nx --triple=aarch64-nintendo-switch +``` From d04753e19e76dacf5138937875f232f43571e8c1 Mon Sep 17 00:00:00 2001 From: leo60228 Date: Fri, 17 Sep 2021 10:44:59 -0400 Subject: [PATCH 09/10] Add aarch64-nintendo-switch.md to SUMMARY.md I can't think of any other reason CI might be failing, and I should've done this anyway. --- src/doc/rustc/src/SUMMARY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/doc/rustc/src/SUMMARY.md b/src/doc/rustc/src/SUMMARY.md index 87dc513853968..1c8ba490f2dea 100644 --- a/src/doc/rustc/src/SUMMARY.md +++ b/src/doc/rustc/src/SUMMARY.md @@ -17,6 +17,7 @@ - [Template for Target-specific Documentation](platform-support/TEMPLATE.md) - [aarch64-apple-ios-sim](platform-support/aarch64-apple-ios-sim.md) - [\*-apple-watchos\*](platform-support/apple-watchos.md) + - [aarch64-nintendo-switch](platform-support/aarch64-nintendo-switch.md) - [armv6k-nintendo-3ds](platform-support/armv6k-nintendo-3ds.md) - [armv7-unknown-linux-uclibceabi](platform-support/armv7-unknown-linux-uclibceabi.md) - [armv7-unknown-linux-uclibceabihf](platform-support/armv7-unknown-linux-uclibceabihf.md) From 62aafb01b11db42e358d81c53719727c1daca33c Mon Sep 17 00:00:00 2001 From: leo60228 Date: Fri, 17 Sep 2021 13:29:49 -0400 Subject: [PATCH 10/10] Rename aarch64-nintendo-switch to aarch64-nintendo-switch-freestanding --- ..._switch.rs => aarch64_nintendo_switch_freestanding.rs} | 2 +- ...aarch64_nintendo_switch_freestanding_linker_script.ld} | 0 compiler/rustc_target/src/spec/mod.rs | 2 +- src/doc/rustc/src/SUMMARY.md | 2 +- src/doc/rustc/src/platform-support.md | 2 +- ...-switch.md => aarch64-nintendo-switch-freestanding.md} | 8 ++++---- 6 files changed, 8 insertions(+), 8 deletions(-) rename compiler/rustc_target/src/spec/{aarch64_nintendo_switch.rs => aarch64_nintendo_switch_freestanding.rs} (96%) rename compiler/rustc_target/src/spec/{aarch64_nintendo_switch_linker_script.ld => aarch64_nintendo_switch_freestanding_linker_script.ld} (100%) rename src/doc/rustc/src/platform-support/{aarch64-nintendo-switch.md => aarch64-nintendo-switch-freestanding.md} (80%) diff --git a/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs b/compiler/rustc_target/src/spec/aarch64_nintendo_switch_freestanding.rs similarity index 96% rename from compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs rename to compiler/rustc_target/src/spec/aarch64_nintendo_switch_freestanding.rs index ae9a05b1a3849..1b7161fbb85c5 100644 --- a/compiler/rustc_target/src/spec/aarch64_nintendo_switch.rs +++ b/compiler/rustc_target/src/spec/aarch64_nintendo_switch_freestanding.rs @@ -1,6 +1,6 @@ use super::{LinkerFlavor, LldFlavor, PanicStrategy, RelroLevel, Target, TargetOptions}; -const LINKER_SCRIPT: &str = include_str!("./aarch64_nintendo_switch_linker_script.ld"); +const LINKER_SCRIPT: &str = include_str!("./aarch64_nintendo_switch_freestanding_linker_script.ld"); /// A base target for Nintendo Switch devices using a pure LLVM toolchain. pub fn target() -> Target { diff --git a/compiler/rustc_target/src/spec/aarch64_nintendo_switch_linker_script.ld b/compiler/rustc_target/src/spec/aarch64_nintendo_switch_freestanding_linker_script.ld similarity index 100% rename from compiler/rustc_target/src/spec/aarch64_nintendo_switch_linker_script.ld rename to compiler/rustc_target/src/spec/aarch64_nintendo_switch_freestanding_linker_script.ld diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs index a14a245480eea..1a6bb4a2eaf34 100644 --- a/compiler/rustc_target/src/spec/mod.rs +++ b/compiler/rustc_target/src/spec/mod.rs @@ -1035,7 +1035,7 @@ supported_targets! { ("armv6k-nintendo-3ds", armv6k_nintendo_3ds), - ("aarch64-nintendo-switch", aarch64_nintendo_switch), + ("aarch64-nintendo-switch-freestanding", aarch64_nintendo_switch_freestanding), ("armv7-unknown-linux-uclibceabi", armv7_unknown_linux_uclibceabi), ("armv7-unknown-linux-uclibceabihf", armv7_unknown_linux_uclibceabihf), diff --git a/src/doc/rustc/src/SUMMARY.md b/src/doc/rustc/src/SUMMARY.md index 1c8ba490f2dea..f6348b2bddc88 100644 --- a/src/doc/rustc/src/SUMMARY.md +++ b/src/doc/rustc/src/SUMMARY.md @@ -17,7 +17,7 @@ - [Template for Target-specific Documentation](platform-support/TEMPLATE.md) - [aarch64-apple-ios-sim](platform-support/aarch64-apple-ios-sim.md) - [\*-apple-watchos\*](platform-support/apple-watchos.md) - - [aarch64-nintendo-switch](platform-support/aarch64-nintendo-switch.md) + - [aarch64-nintendo-switch-freestanding](platform-support/aarch64-nintendo-switch-freestanding.md) - [armv6k-nintendo-3ds](platform-support/armv6k-nintendo-3ds.md) - [armv7-unknown-linux-uclibceabi](platform-support/armv7-unknown-linux-uclibceabi.md) - [armv7-unknown-linux-uclibceabihf](platform-support/armv7-unknown-linux-uclibceabihf.md) diff --git a/src/doc/rustc/src/platform-support.md b/src/doc/rustc/src/platform-support.md index 19f640f721b85..7a03238f13dff 100644 --- a/src/doc/rustc/src/platform-support.md +++ b/src/doc/rustc/src/platform-support.md @@ -209,7 +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`](platform-support/aarch64-nintendo-switch.md) | * | | ARM64 Nintendo Switch, Horizon +[`aarch64-nintendo-switch-freestanding`](platform-support/aarch64-nintendo-switch-freestanding.md) | * | | ARM64 Nintendo Switch, Horizon [`aarch64-pc-windows-gnullvm`](platform-support/pc-windows-gnullvm.md) | ✓ | ✓ | `aarch64-unknown-freebsd` | ✓ | ✓ | ARM64 FreeBSD `aarch64-unknown-hermit` | ✓ | | ARM64 HermitCore diff --git a/src/doc/rustc/src/platform-support/aarch64-nintendo-switch.md b/src/doc/rustc/src/platform-support/aarch64-nintendo-switch-freestanding.md similarity index 80% rename from src/doc/rustc/src/platform-support/aarch64-nintendo-switch.md rename to src/doc/rustc/src/platform-support/aarch64-nintendo-switch-freestanding.md index 7eb3f21ea2692..308e1fe2f92a0 100644 --- a/src/doc/rustc/src/platform-support/aarch64-nintendo-switch.md +++ b/src/doc/rustc/src/platform-support/aarch64-nintendo-switch-freestanding.md @@ -1,4 +1,4 @@ -# aarch64-nintendo-switch +# aarch64-nintendo-switch-freestanding **Tier: 3** @@ -21,7 +21,7 @@ The target can be built by enabling it for a `rustc` build: ```toml [build] build-stage = 1 -target = ["aarch64-nintendo-switch"] +target = ["aarch64-nintendo-switch-freestanding"] ``` ## Cross-compilation @@ -38,12 +38,12 @@ If `rustc` has support for that target and the library artifacts are available, then Rust programs can be built for that target: ```text -rustc --target aarch64-nintendo-switch your-code.rs +rustc --target aarch64-nintendo-switch-freestanding your-code.rs ``` To generate binaries in the NRO format that can be easily run on-device, you can use [cargo-nx](https://github.com/aarch64-switch-rs/cargo-nx): ```text -cargo nx --triple=aarch64-nintendo-switch +cargo nx --triple=aarch64-nintendo-switch-freestanding ```