Skip to content

Commit 059f688

Browse files
committed
patches/packages/rust: add powerpc-unknown-linux-muslspe compile target
For more details see the patch. Ref: - rust-lang/rust#127905
1 parent 29795b9 commit 059f688

File tree

1 file changed

+168
-0
lines changed

1 file changed

+168
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
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

Comments
 (0)