From b5c6c9f389da5b7f85345723f5ca47bd79c81de9 Mon Sep 17 00:00:00 2001 From: Jagadeesh Krishnanjanappa Date: Sat, 24 Oct 2026 14:52:01 +0000 Subject: [PATCH] rustc_target: Add support of Openembedded/Yocto Linux ppc64 and ppc64le targets While building Rust standard libraries in Yocto, these targets use Openembedded-specific target triplets which are absent in the supported target list. Due to which Rust standard libraries build fails in Yocto. The Openembedded-specific target triplets of ppc64 and ppc64le use linker and other settings similar to existing ppc64 and ppc64le Linux GNU targets respectively. So, add Openembedded-specific target triplets for ppc64 and ppc64le to build Rust libraries in Yocto. Signed-off-by: Jagadeesh Krishnanjanappa --- compiler/rustc_target/src/spec/mod.rs | 2 ++ .../spec/targets/powerpc64_oe_linux_gnu.rs | 17 +++++++++++++++++ .../spec/targets/powerpc64le_oe_linux_gnu.rs | 19 +++++++++++++++++++ src/doc/rustc/src/platform-support.md | 2 ++ .../src/platform-support/oe-linux-gnu.md | 3 +++ tests/assembly-llvm/targets/targets-elf.rs | 6 ++++++ 6 files changed, 49 insertions(+) create mode 100644 compiler/rustc_target/src/spec/targets/powerpc64_oe_linux_gnu.rs create mode 100644 compiler/rustc_target/src/spec/targets/powerpc64le_oe_linux_gnu.rs diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs index ae17e37e29f86..19b9b1ada6947 100644 --- a/compiler/rustc_target/src/spec/mod.rs +++ b/compiler/rustc_target/src/spec/mod.rs @@ -1705,6 +1705,8 @@ supported_targets! { ("i686-oe-linux-gnu", i686_oe_linux_gnu), ("riscv64-oe-linux-gnu", riscv64_oe_linux_gnu), ("x86_64-oe-linux-gnu", x86_64_oe_linux_gnu), + ("powerpc64-oe-linux-gnu", powerpc64_oe_linux_gnu), + ("powerpc64le-oe-linux-gnu", powerpc64le_oe_linux_gnu), ("aarch64-unknown-hyperlight", aarch64_unknown_hyperlight), ("x86_64-unknown-hyperlight", x86_64_unknown_hyperlight), diff --git a/compiler/rustc_target/src/spec/targets/powerpc64_oe_linux_gnu.rs b/compiler/rustc_target/src/spec/targets/powerpc64_oe_linux_gnu.rs new file mode 100644 index 0000000000000..3033bb18a4031 --- /dev/null +++ b/compiler/rustc_target/src/spec/targets/powerpc64_oe_linux_gnu.rs @@ -0,0 +1,17 @@ +use crate::spec::{Target, TargetMetadata}; + +pub(crate) fn target() -> Target { + let mut base = super::powerpc64_unknown_linux_gnu::target(); + + base.metadata = TargetMetadata { + description: Some("PowerPC64 Linux (kernel 3.2, glibc 2.17) for yocto".into()), + tier: Some(3), + host_tools: Some(false), + std: Some(true), + }; + + base.llvm_target = "powerpc64-oe-linux-gnu".into(); + base.options.linker = Some("powerpc64-oe-linux-gcc".into()); + + base +} diff --git a/compiler/rustc_target/src/spec/targets/powerpc64le_oe_linux_gnu.rs b/compiler/rustc_target/src/spec/targets/powerpc64le_oe_linux_gnu.rs new file mode 100644 index 0000000000000..874c87d2d485e --- /dev/null +++ b/compiler/rustc_target/src/spec/targets/powerpc64le_oe_linux_gnu.rs @@ -0,0 +1,19 @@ +use crate::spec::{Target, TargetMetadata}; + +pub(crate) fn target() -> Target { + let mut base = super::powerpc64le_unknown_linux_gnu::target(); + + base.metadata = TargetMetadata { + description: Some( + "PowerPC64 (little endian) Linux (kernel 3.10, glibc 2.17) for yocto".into(), + ), + tier: Some(3), + host_tools: Some(false), + std: Some(true), + }; + + base.llvm_target = "powerpc64le-oe-linux-gnu".into(); + base.options.linker = Some("powerpc64le-oe-linux-gcc".into()); + + base +} diff --git a/src/doc/rustc/src/platform-support.md b/src/doc/rustc/src/platform-support.md index f81a7a54a6b44..8bd9982ebefe3 100644 --- a/src/doc/rustc/src/platform-support.md +++ b/src/doc/rustc/src/platform-support.md @@ -391,11 +391,13 @@ target | std | host | notes [`powerpc-wrs-vxworks`](platform-support/vxworks.md) | ✓ | | [`powerpc-wrs-vxworks-spe`](platform-support/vxworks.md) | ✓ | | [`powerpc64-ibm-aix`](platform-support/aix.md) | ? | | 64-bit AIX (7.2 and newer) +[`powerpc64-oe-linux-gnu`](platform-support/oe-linux-gnu.md) | ✓ | | PowerPC64 (BE) OpenEmbedded/Yocto Linux (GNU) [`powerpc64-sony-ps3`](platform-support/powerpc64-sony-ps3.md) | * | | PowerPC64 (BE) Sony PlayStation 3 (PS3) [`powerpc64-unknown-freebsd`](platform-support/freebsd.md) | ✓ | ✓ | PPC64 FreeBSD (ELFv2) [`powerpc64-unknown-linux-gnuelfv2`](platform-support/powerpc64-unknown-linux-gnuelfv2.md) | ✓ | ✓ | PPC64 Linux (ELFv2 ABI, kernel 3.2, glibc 2.17) [`powerpc64-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | OpenBSD/powerpc64 [`powerpc64-wrs-vxworks`](platform-support/vxworks.md) | ✓ | | +[`powerpc64le-oe-linux-gnu`](platform-support/oe-linux-gnu.md) | ✓ | | PowerPC64 (LE) OpenEmbedded/Yocto Linux (GNU) [`powerpc64le-unknown-freebsd`](platform-support/freebsd.md) | ✓ | ✓ | PPC64LE FreeBSD [`riscv32-wrs-vxworks`](platform-support/vxworks.md) | ✓ | | [`riscv32e-unknown-none-elf`](platform-support/riscv32e-unknown-none-elf.md) | * | | Bare RISC-V (RV32E ISA) diff --git a/src/doc/rustc/src/platform-support/oe-linux-gnu.md b/src/doc/rustc/src/platform-support/oe-linux-gnu.md index 353e909262fd0..80a88a88212b1 100644 --- a/src/doc/rustc/src/platform-support/oe-linux-gnu.md +++ b/src/doc/rustc/src/platform-support/oe-linux-gnu.md @@ -11,10 +11,13 @@ Target triplets available: * `i686-oe-linux-gnu` * `armv7-oe-linux-gnueabihf` * `riscv64-oe-linux-gnu` +* `powerpc64-oe-linux-gnu` +* `powerpc64le-oe-linux-gnu` ## Target maintainers [@DeepeshWR](https://github.com/DeepeshWR) +(for powerpc64-oe-linux-gnu and powerpc64le-oe-linux-gnu only) [@jkrishnanjanappa] (https://github.com/jkrishnanjanappa) ## Requirements diff --git a/tests/assembly-llvm/targets/targets-elf.rs b/tests/assembly-llvm/targets/targets-elf.rs index 2908c659f9f02..f6964c04e2dff 100644 --- a/tests/assembly-llvm/targets/targets-elf.rs +++ b/tests/assembly-llvm/targets/targets-elf.rs @@ -409,6 +409,9 @@ //@ revisions: msp430_none_elf //@ [msp430_none_elf] compile-flags: --target msp430-none-elf //@ [msp430_none_elf] needs-llvm-components: msp430 +//@ revisions: powerpc64_oe_linux_gnu +//@ [powerpc64_oe_linux_gnu] compile-flags: --target powerpc64-oe-linux-gnu +//@ [powerpc64_oe_linux_gnu] needs-llvm-components: powerpc //@ revisions: powerpc64_sony_ps3 //@ [powerpc64_sony_ps3] compile-flags: --target powerpc64-sony-ps3 //@ [powerpc64_sony_ps3] needs-llvm-components: powerpc @@ -430,6 +433,9 @@ //@ revisions: powerpc64_wrs_vxworks //@ [powerpc64_wrs_vxworks] compile-flags: --target powerpc64-wrs-vxworks //@ [powerpc64_wrs_vxworks] needs-llvm-components: powerpc +//@ revisions: powerpc64le_oe_linux_gnu +//@ [powerpc64le_oe_linux_gnu] compile-flags: --target powerpc64le-oe-linux-gnu +//@ [powerpc64le_oe_linux_gnu] needs-llvm-components: powerpc //@ revisions: powerpc64le_unknown_freebsd //@ [powerpc64le_unknown_freebsd] compile-flags: --target powerpc64le-unknown-freebsd //@ [powerpc64le_unknown_freebsd] needs-llvm-components: powerpc