|
| 1 | +From e33c31028fe7163aeb6b04cae50f23181ebacae9 Mon Sep 17 00:00:00 2001 |
| 2 | +From: Richard Muzik < [email protected]> |
| 3 | +Date: Tue, 13 Aug 2024 17:27:22 +0200 |
| 4 | +Subject: [PATCH] rust: add powerpc-unknown-linux-muslspe compile target |
| 5 | + |
| 6 | +--- |
| 7 | + ...unknown-linux-muslspe-compile-target.patch | 149 ++++++++++++++++++ |
| 8 | + 1 file changed, 149 insertions(+) |
| 9 | + create mode 100644 lang/rust/patches/0004-Add-powerpc-unknown-linux-muslspe-compile-target.patch |
| 10 | + |
| 11 | +diff --git a/lang/rust/patches/0004-Add-powerpc-unknown-linux-muslspe-compile-target.patch b/lang/rust/patches/0004-Add-powerpc-unknown-linux-muslspe-compile-target.patch |
| 12 | +new file mode 100644 |
| 13 | +index 000000000..cf640ae66 |
| 14 | +--- /dev/null |
| 15 | ++++ b/lang/rust/patches/0004-Add-powerpc-unknown-linux-muslspe-compile-target.patch |
| 16 | +@@ -0,0 +1,149 @@ |
| 17 | ++From 89f3064e344dd1ea2046c05e070fbc3a4ee7f7f7 Mon Sep 17 00:00:00 2001 |
| 18 | ++From: Josef Schlehofer <[email protected]> |
| 19 | ++Date: Tue, 9 Aug 2022 01:28:42 +0200 |
| 20 | ++Subject: [PATCH] Add powerpc-unknown-linux-muslspe compile target |
| 21 | ++ |
| 22 | ++This is almost identical to already existing targets: |
| 23 | ++- powerpc_unknown_linux_musl.rs |
| 24 | ++- powerpc_unknown_linux_gnuspe.rs |
| 25 | ++ |
| 26 | ++It has support for PowerPC SPE (muslspe), which |
| 27 | ++can be used with GCC version up to 8. It is useful for Freescale or IBM |
| 28 | ++cores like e500. |
| 29 | ++ |
| 30 | ++This was verified to be working with OpenWrt build system for CZ.NIC's |
| 31 | ++Turris 1.x routers, which are using Freescale P2020, e500v2, so add it as |
| 32 | ++a Tier 3 target. |
| 33 | ++--- |
| 34 | ++ compiler/rustc_target/src/spec/mod.rs | 1 + |
| 35 | ++ .../targets/powerpc_unknown_linux_muslspe.rs | 28 ++++++++++++++++ |
| 36 | ++ src/doc/rustc/src/SUMMARY.md | 1 + |
| 37 | ++ src/doc/rustc/src/platform-support.md | 1 + |
| 38 | ++ .../powerpc-unknown-linux-muslspe.md | 32 +++++++++++++++++++ |
| 39 | ++ tests/assembly/targets/targets-elf.rs | 3 ++ |
| 40 | ++ 6 files changed, 66 insertions(+) |
| 41 | ++ create mode 100644 compiler/rustc_target/src/spec/targets/powerpc_unknown_linux_muslspe.rs |
| 42 | ++ create mode 100644 src/doc/rustc/src/platform-support/powerpc-unknown-linux-muslspe.md |
| 43 | ++ |
| 44 | ++diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs |
| 45 | ++index 607eeac7ccdc3..e5ffc94d083ce 100644 |
| 46 | ++--- a/compiler/rustc_target/src/spec/mod.rs |
| 47 | +++++ b/compiler/rustc_target/src/spec/mod.rs |
| 48 | ++@@ -1558,6 +1558,7 @@ supported_targets! { |
| 49 | ++ ("powerpc-unknown-linux-gnu", powerpc_unknown_linux_gnu), |
| 50 | ++ ("powerpc-unknown-linux-gnuspe", powerpc_unknown_linux_gnuspe), |
| 51 | ++ ("powerpc-unknown-linux-musl", powerpc_unknown_linux_musl), |
| 52 | +++ ("powerpc-unknown-linux-muslspe", powerpc_unknown_linux_muslspe), |
| 53 | ++ ("powerpc64-ibm-aix", powerpc64_ibm_aix), |
| 54 | ++ ("powerpc64-unknown-linux-gnu", powerpc64_unknown_linux_gnu), |
| 55 | ++ ("powerpc64-unknown-linux-musl", powerpc64_unknown_linux_musl), |
| 56 | ++diff --git a/compiler/rustc_target/src/spec/targets/powerpc_unknown_linux_muslspe.rs b/compiler/rustc_target/src/spec/targets/powerpc_unknown_linux_muslspe.rs |
| 57 | ++new file mode 100644 |
| 58 | ++index 0000000000000..d19015729ec19 |
| 59 | ++--- /dev/null |
| 60 | +++++ b/compiler/rustc_target/src/spec/targets/powerpc_unknown_linux_muslspe.rs |
| 61 | ++@@ -0,0 +1,28 @@ |
| 62 | +++use crate::abi::Endian; |
| 63 | +++use crate::spec::{base, Cc, LinkerFlavor, Lld, StackProbeType, Target, TargetOptions}; |
| 64 | +++ |
| 65 | +++pub fn target() -> Target { |
| 66 | +++ let mut base = base::linux_musl::opts(); |
| 67 | +++ base.add_pre_link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-mspe"]); |
| 68 | +++ base.max_atomic_width = Some(32); |
| 69 | +++ base.stack_probes = StackProbeType::Inline; |
| 70 | +++ |
| 71 | +++ Target { |
| 72 | +++ llvm_target: "powerpc-unknown-linux-muslspe".into(), |
| 73 | +++ metadata: crate::spec::TargetMetadata { |
| 74 | +++ description: Some("PowerPC SPE Linux with musl".into()), |
| 75 | +++ tier: Some(3), |
| 76 | +++ host_tools: Some(false), |
| 77 | +++ std: Some(true), |
| 78 | +++ }, |
| 79 | +++ pointer_width: 32, |
| 80 | +++ data_layout: "E-m:e-p:32:32-Fn32-i64:64-n32".into(), |
| 81 | +++ arch: "powerpc".into(), |
| 82 | +++ options: TargetOptions { |
| 83 | +++ abi: "spe".into(), |
| 84 | +++ endian: Endian::Big, |
| 85 | +++ mcount: "_mcount".into(), |
| 86 | +++ ..base |
| 87 | +++ }, |
| 88 | +++ } |
| 89 | +++} |
| 90 | ++diff --git a/src/doc/rustc/src/SUMMARY.md b/src/doc/rustc/src/SUMMARY.md |
| 91 | ++index 1a8ff931f0177..e5883cb971491 100644 |
| 92 | ++--- a/src/doc/rustc/src/SUMMARY.md |
| 93 | +++++ b/src/doc/rustc/src/SUMMARY.md |
| 94 | ++@@ -61,5 +61,6 @@ |
| 95 | ++ - [mipsisa\*r6\*-unknown-linux-gnu\*](platform-support/mips-release-6.md) |
| 96 | ++ - [nvptx64-nvidia-cuda](platform-support/nvptx64-nvidia-cuda.md) |
| 97 | +++ - [powerpc-unknown-linux-muslspe](platform-support/powerpc-unknown-linux-muslspe.md) |
| 98 | ++ - [powerpc64-ibm-aix](platform-support/aix.md) |
| 99 | ++ - [riscv32im-risc0-zkvm-elf](platform-support/riscv32im-risc0-zkvm-elf.md) |
| 100 | ++ - [riscv32imac-unknown-xous-elf](platform-support/riscv32imac-unknown-xous-elf.md) |
| 101 | ++diff --git a/src/doc/rustc/src/platform-support.md b/src/doc/rustc/src/platform-support.md |
| 102 | ++index 370dbed50fa1a..57187bbe902a4 100644 |
| 103 | ++--- a/src/doc/rustc/src/platform-support.md |
| 104 | +++++ b/src/doc/rustc/src/platform-support.md |
| 105 | ++@@ -331,6 +331,7 @@ target | std | host | notes |
| 106 | ++ `msp430-none-elf` | * | | 16-bit MSP430 microcontrollers |
| 107 | ++ `powerpc-unknown-linux-gnuspe` | ✓ | | PowerPC SPE Linux |
| 108 | ++ `powerpc-unknown-linux-musl` | ? | | PowerPC Linux with musl 1.2.3 |
| 109 | +++[`powerpc-unknown-linux-muslspe`](platform-support/powerpc-unknown-linux-muslspe.md) | ? | | PowerPC SPE Linux |
| 110 | ++ [`powerpc-unknown-netbsd`](platform-support/netbsd.md) | ✓ | ✓ | NetBSD 32-bit powerpc systems |
| 111 | ++ [`powerpc-unknown-openbsd`](platform-support/powerpc-unknown-openbsd.md) | * | | |
| 112 | ++ `powerpc-wrs-vxworks-spe` | ? | | |
| 113 | ++diff --git a/src/doc/rustc/src/platform-support/powerpc-unknown-linux-muslspe.md b/src/doc/rustc/src/platform-support/powerpc-unknown-linux-muslspe.md |
| 114 | ++new file mode 100644 |
| 115 | ++index 0000000000000..4c416b5192994 |
| 116 | ++--- /dev/null |
| 117 | +++++ b/src/doc/rustc/src/platform-support/powerpc-unknown-linux-muslspe.md |
| 118 | ++@@ -0,0 +1,32 @@ |
| 119 | +++# powerpc-unknown-linux-muslspe |
| 120 | +++ |
| 121 | +++**Tier: 3** |
| 122 | +++ |
| 123 | +++This target is very similar to already existing ones like `powerpc_unknown_linux_musl` and `powerpc_unknown_linux_gnuspe`. |
| 124 | +++This one has PowerPC SPE support for musl. Unfortunately, the last supported gcc version with PowerPC SPE is 8.4.0. |
| 125 | +++ |
| 126 | +++## Target maintainers |
| 127 | +++ |
| 128 | +++- [@BKPepe](https://github.com/BKPepe) |
| 129 | +++ |
| 130 | +++## Requirements |
| 131 | +++ |
| 132 | +++This target is cross-compiled. There is no support for `std`. There is no |
| 133 | +++default allocator, but it's possible to use `alloc` by supplying an allocator. |
| 134 | +++ |
| 135 | +++This target generated binaries in the ELF format. |
| 136 | +++ |
| 137 | +++## Building the target |
| 138 | +++ |
| 139 | +++This target was tested and used within the `OpenWrt` build system for CZ.NIC Turris 1.x routers using Freescale P2020. |
| 140 | +++ |
| 141 | +++## Building Rust programs |
| 142 | +++ |
| 143 | +++Rust does not yet ship pre-compiled artifacts for this target. To compile for |
| 144 | +++this target, you will either need to build Rust with the target enabled (see |
| 145 | +++"Building the target" above), or build your own copy of `core` by using |
| 146 | +++`build-std` or similar. |
| 147 | +++ |
| 148 | +++## Testing |
| 149 | +++ |
| 150 | +++This is a cross-compiled target and there is no support to run rustc test suite. |
| 151 | ++diff --git a/tests/assembly/targets/targets-elf.rs b/tests/assembly/targets/targets-elf.rs |
| 152 | ++index 32cce3839dc26..59ee0d47bba08 100644 |
| 153 | ++--- a/tests/assembly/targets/targets-elf.rs |
| 154 | +++++ b/tests/assembly/targets/targets-elf.rs |
| 155 | ++@@ -345,6 +345,9 @@ |
| 156 | ++ //@ revisions: powerpc_unknown_linux_musl |
| 157 | ++ //@ [powerpc_unknown_linux_musl] compile-flags: --target powerpc-unknown-linux-musl |
| 158 | ++ //@ [powerpc_unknown_linux_musl] needs-llvm-components: powerpc |
| 159 | +++//@ revisions: powerpc_unknown_linux_muslspe |
| 160 | +++//@ [powerpc_unknown_linux_muslspe] compile-flags: --target powerpc-unknown-linux-muslspe |
| 161 | +++//@ [powerpc_unknown_linux_muslspe] needs-llvm-components: powerpc |
| 162 | ++ //@ revisions: powerpc_unknown_netbsd |
| 163 | ++ //@ [powerpc_unknown_netbsd] compile-flags: --target powerpc-unknown-netbsd |
| 164 | ++ //@ [powerpc_unknown_netbsd] needs-llvm-components: powerpc |
| 165 | ++ |
| 166 | +-- |
| 167 | +2.46.0 |
| 168 | + |
0 commit comments