Powerpc unknown linux gnu

The rustc book

Support for different platforms («targets») are organized into three tiers, each with a different set of guarantees. For more information on the policies for targets at each tier, see the Target Tier Policy.

Targets are identified by their «target triple» which is the string to inform the compiler what kind of output should be produced.

Tier 1 with Host Tools

Tier 1 targets can be thought of as «guaranteed to work». The Rust project builds official binary releases for each tier 1 target, and automated testing ensures that each tier 1 target builds and passes tests after each change.

Tier 1 targets with host tools additionally support running tools like rustc and cargo natively on the target, and automated testing ensures that tests pass for the host tools as well. This allows the target to be used as a development platform, not just a compilation target. For the full requirements, see Tier 1 with Host Tools in the Target Tier Policy.

All tier 1 targets with host tools support the full standard library.

target notes
aarch64-unknown-linux-gnu ARM64 Linux (kernel 4.2, glibc 2.17+) 1
i686-pc-windows-gnu 32-bit MinGW (Windows 7+)
i686-pc-windows-msvc 32-bit MSVC (Windows 7+)
i686-unknown-linux-gnu 32-bit Linux (kernel 2.6.32+, glibc 2.11+)
x86_64-apple-darwin 64-bit macOS (10.7+, Lion+)
x86_64-pc-windows-gnu 64-bit MinGW (Windows 7+)
x86_64-pc-windows-msvc 64-bit MSVC (Windows 7+)
x86_64-unknown-linux-gnu 64-bit Linux (kernel 2.6.32+, glibc 2.11+)

Stack probes support is missing on aarch64-unknown-linux-gnu , but it’s planned to be implemented in the near future. The implementation is tracked on issue #77071.

Tier 1

Tier 1 targets can be thought of as «guaranteed to work». The Rust project builds official binary releases for each tier 1 target, and automated testing ensures that each tier 1 target builds and passes tests after each change. For the full requirements, see Tier 1 target policy in the Target Tier Policy.

At this time, all Tier 1 targets are Tier 1 with Host Tools.

Tier 2 with Host Tools

Tier 2 targets can be thought of as «guaranteed to build». The Rust project builds official binary releases for each tier 2 target, and automated builds ensure that each tier 2 target builds after each change. Automated tests are not always run so it’s not guaranteed to produce a working build, but tier 2 targets often work to quite a good degree and patches are always welcome!

Tier 2 targets with host tools additionally support running tools like rustc and cargo natively on the target, and automated builds ensure that the host tools build as well. This allows the target to be used as a development platform, not just a compilation target. For the full requirements, see Tier 2 with Host Tools in the Target Tier Policy.

All tier 2 targets with host tools support the full standard library.

NOTE: Tier 2 targets currently do not build the rust-docs component.

target notes
aarch64-apple-darwin ARM64 macOS (11.0+, Big Sur+)
aarch64-pc-windows-msvc ARM64 Windows MSVC
aarch64-unknown-linux-musl ARM64 Linux with MUSL
arm-unknown-linux-gnueabi ARMv6 Linux (kernel 3.2, glibc 2.17)
arm-unknown-linux-gnueabihf ARMv6 Linux, hardfloat (kernel 3.2, glibc 2.17)
armv7-unknown-linux-gnueabihf ARMv7 Linux, hardfloat (kernel 3.2, glibc 2.17)
mips-unknown-linux-gnu MIPS Linux (kernel 4.4, glibc 2.23)
mips64-unknown-linux-gnuabi64 MIPS64 Linux, n64 ABI (kernel 4.4, glibc 2.23)
mips64el-unknown-linux-gnuabi64 MIPS64 (LE) Linux, n64 ABI (kernel 4.4, glibc 2.23)
mipsel-unknown-linux-gnu MIPS (LE) Linux (kernel 4.4, glibc 2.23)
powerpc-unknown-linux-gnu PowerPC Linux (kernel 2.6.32, glibc 2.11)
powerpc64-unknown-linux-gnu PPC64 Linux (kernel 2.6.32, glibc 2.11)
powerpc64le-unknown-linux-gnu PPC64LE Linux (kernel 3.10, glibc 2.17)
riscv64gc-unknown-linux-gnu RISC-V Linux (kernel 4.20, glibc 2.29)
s390x-unknown-linux-gnu S390x Linux (kernel 2.6.32, glibc 2.11)
x86_64-unknown-freebsd 64-bit FreeBSD
x86_64-unknown-illumos illumos
x86_64-unknown-linux-musl 64-bit Linux with MUSL
x86_64-unknown-netbsd NetBSD/amd64

Tier 2

Tier 2 targets can be thought of as «guaranteed to build». The Rust project builds official binary releases for each tier 2 target, and automated builds ensure that each tier 2 target builds after each change. Automated tests are not always run so it’s not guaranteed to produce a working build, but tier 2 targets often work to quite a good degree and patches are always welcome! For the full requirements, see Tier 2 target policy in the Target Tier Policy.

The std column in the table below has the following meanings:

  • вњ“ indicates the full standard library is available.
  • * indicates the target only supports no_std development.

NOTE: Tier 2 targets currently do not build the rust-docs component.

target std notes
aarch64-apple-ios вњ“ ARM64 iOS
aarch64-apple-ios-sim вњ“ Apple iOS Simulator on ARM64
aarch64-fuchsia вњ“ ARM64 Fuchsia
aarch64-linux-android вњ“ ARM64 Android
aarch64-unknown-none-softfloat * Bare ARM64, softfloat
aarch64-unknown-none * Bare ARM64, hardfloat
arm-linux-androideabi вњ“ ARMv7 Android
arm-unknown-linux-musleabi вњ“ ARMv6 Linux with MUSL
arm-unknown-linux-musleabihf вњ“ ARMv6 Linux with MUSL, hardfloat
armebv7r-none-eabi * Bare ARMv7-R, Big Endian
armebv7r-none-eabihf * Bare ARMv7-R, Big Endian, hardfloat
armv5te-unknown-linux-gnueabi вњ“ ARMv5TE Linux (kernel 4.4, glibc 2.23)
armv5te-unknown-linux-musleabi вњ“ ARMv5TE Linux with MUSL
armv7-linux-androideabi вњ“ ARMv7a Android
armv7-unknown-linux-gnueabi вњ“ ARMv7 Linux (kernel 4.15, glibc 2.27)
armv7-unknown-linux-musleabi вњ“ ARMv7 Linux with MUSL
armv7-unknown-linux-musleabihf вњ“ ARMv7 Linux with MUSL, hardfloat
armv7a-none-eabi * Bare ARMv7-A
armv7r-none-eabi * Bare ARMv7-R
armv7r-none-eabihf * Bare ARMv7-R, hardfloat
asmjs-unknown-emscripten вњ“ asm.js via Emscripten
i586-pc-windows-msvc вњ“ 32-bit Windows w/o SSE
i586-unknown-linux-gnu вњ“ 32-bit Linux w/o SSE (kernel 4.4, glibc 2.23)
i586-unknown-linux-musl вњ“ 32-bit Linux w/o SSE, MUSL
i686-linux-android вњ“ 32-bit x86 Android
i686-unknown-freebsd вњ“ 32-bit FreeBSD
i686-unknown-linux-musl вњ“ 32-bit Linux with MUSL
mips-unknown-linux-musl вњ“ MIPS Linux with MUSL
mips64-unknown-linux-muslabi64 вњ“ MIPS64 Linux, n64 ABI, MUSL
mips64el-unknown-linux-muslabi64 вњ“ MIPS64 (LE) Linux, n64 ABI, MUSL
mipsel-unknown-linux-musl вњ“ MIPS (LE) Linux with MUSL
nvptx64-nvidia-cuda * —emit=asm generates PTX code that runs on NVIDIA GPUs
riscv32i-unknown-none-elf * Bare RISC-V (RV32I ISA)
riscv32imac-unknown-none-elf * Bare RISC-V (RV32IMAC ISA)
riscv32imc-unknown-none-elf * Bare RISC-V (RV32IMC ISA)
riscv64gc-unknown-none-elf * Bare RISC-V (RV64IMAFDC ISA)
riscv64imac-unknown-none-elf * Bare RISC-V (RV64IMAC ISA)
sparc64-unknown-linux-gnu вњ“ SPARC Linux (kernel 4.4, glibc 2.23)
sparcv9-sun-solaris вњ“ SPARC Solaris 10/11, illumos
thumbv6m-none-eabi * Bare Cortex-M0, M0+, M1
thumbv7em-none-eabi * Bare Cortex-M4, M7
thumbv7em-none-eabihf * Bare Cortex-M4F, M7F, FPU, hardfloat
thumbv7m-none-eabi * Bare Cortex-M3
thumbv7neon-linux-androideabi вњ“ Thumb2-mode ARMv7a Android with NEON
thumbv7neon-unknown-linux-gnueabihf вњ“ Thumb2-mode ARMv7a Linux with NEON (kernel 4.4, glibc 2.23)
thumbv8m.base-none-eabi * ARMv8-M Baseline
thumbv8m.main-none-eabi * ARMv8-M Mainline
thumbv8m.main-none-eabihf * ARMv8-M Mainline, hardfloat
wasm32-unknown-emscripten вњ“ WebAssembly via Emscripten
wasm32-unknown-unknown вњ“ WebAssembly
wasm32-wasi вњ“ WebAssembly with WASI
x86_64-apple-ios вњ“ 64-bit x86 iOS
x86_64-fortanix-unknown-sgx вњ“ Fortanix ABI for 64-bit Intel SGX
x86_64-fuchsia вњ“ 64-bit Fuchsia
x86_64-linux-android вњ“ 64-bit x86 Android
x86_64-pc-solaris вњ“ 64-bit Solaris 10/11, illumos
x86_64-unknown-linux-gnux32 вњ“ 64-bit Linux (x32 ABI) (kernel 4.15, glibc 2.27)
x86_64-unknown-redox вњ“ Redox OS

Tier 3

Tier 3 targets are those which the Rust codebase has support for, but which the Rust project does not build or test automatically, so they may or may not work. Official builds are not available. For the full requirements, see Tier 3 target policy in the Target Tier Policy.

The std column in the table below has the following meanings:

  • вњ“ indicates the full standard library is available.
  • * indicates the target only supports no_std development.
  • ? indicates the standard library support is unknown or a work-in-progress.

The host column indicates whether the codebase includes support for building host tools.

Источник

configure: error: The powerpc64le is not supported. #1227

Comments

edowson commented Sep 2, 2019

I’m tried using crosstool-ng to build a toolchain for an IBM Power9 system on an Ubuntu-18.04 x86_64 host. The target triple that I want is ppc64le-unknown-linux-gnu.

When I try to build the toolchain, I get the following error:

crosstool-NG version
crosstool-NG version 1.24.0.6-afaf7b9

Host OS and its version
Ubuntu-18.04, x86_64 linux

The text was updated successfully, but these errors were encountered:

edowson commented Sep 2, 2019

I tried building once again, using the existing powerpc64le sample, but still get a build error:

The build.log file for this particular build is too large (34MB) to attach here, but it is the default config, so it can be reproduced.

edowson commented Sep 2, 2019

I just tried building powerpc64le-unknown-linux-gnu directly on an IBM Power9 system, and I get the following build error:

The last few lines leading up to the error in the build.log file are as follows:

cpackham commented Sep 4, 2019 •

The first error seems to be due to an old libc (CT_GLIBC_V_2_17=y) being selected which doesn’t seem to like powerpc64le (I’m not going to dig into that one any further).

The other errors it’s hard to tell because you haven’t attached a build.log from any of them.

I’m attempting to reproduce your issue with the powerpc64le-unknown-linux-gnu sample. I’ll report back on that.

cpackham commented Sep 4, 2019 •

So the powerpc64le-unknown-linux-gnu sample worked for me in the following environment

One thing about this environment is there is no python3 (or python) so glibc-2.29 is excluded automatically

cpackham commented Sep 4, 2019 •

Right adding python3 to my environment and thus enabling glibc-2.29 I can reproduce the problem. Here’s the snippet from build.log.gz

I’m tempted to say this is a regression in glibc but maybe there’s some new option crosstool-ng needs to be passing. @edowson as a workaround is downgrading to glibc 2.28 and option for you?

cpackham commented Sep 4, 2019

looks like some how both the rs6000 and soft floating point support has been enabled.

edowson commented Sep 4, 2019 •

@cpackham I’m okay with downgrading to glibc-2.28.

On the x86_64 system, ldd shows that I have glibc-2.27 installed. So, any version of glibc-2.27 or higher would be fine.

Would you be able to fix the issue with rs6000 and soft-floating point support being enabled? That was a good catch.

cpackham commented Sep 4, 2019

cpackham commented Sep 4, 2019

Looks like glibc-2.30 doesn’t have this issue. Just skimming the changes in the glibc git repo I can’t spot anything obvious that addresses the issue. I have got a PR #1232 that adds the new glibc version you could take that for a spin.

cpackham commented Sep 5, 2019 •

I think I know what the problem is see here

The ARC patch ends up setting with_fp_cond for non-arc systems. Which turns off floating point support (which is supposed to be mandatory for powerpc64). Deleting packages/glibc/2.29/0001-Add-ARC-architecture.patch would fix the build issue for you. There may be a less drastic fix (i.e. modify the patch).

edowson commented Sep 6, 2019 •

@cpackham I managed to get the toolchain built on a Power9 system. I’ve installed the built toolchain into a separate folder. Why do I get a GLIBC_2.29 not found error, when I try to run ./clang —version from my custom sysroot location?

libm.so.6 was manually moved to /lib64/libm.so.6 in order to assemble a cross-compiler toolchain.

I have set export LD_LIBRARY_PATH=/project/software/library/unrealengine-4.24-ppc64le-master/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_ppc64le/v14_clang-7.0.1-centos7/powerpc64le-unknown-linux-gnu/lib64

but it still gives me the same error.

How does glibc get resolved on a host system?

cpackham commented Sep 7, 2019

@edowson I’m not sure how clang is going to work with a glibc compiled for gcc. I guess it might work if you can tell it the right sysroot (e.g —sysroot=/path/to/sysroot) although I’m used to the compiler being tightly coupled to the libc.

Are you able to just use the generated gcc instead of clang? (based on the paths I’m guessing you need clang for some kind of custom language front-end).

Another option that I have used for Rust is to convince llvm (i.e. clang) to output assembly and use the gcc assembler/linker.

edowson commented Sep 8, 2019

@cpackham I rebuilt the powerpc64le toolchain using glibc-2.27 instead of the default glibc-2.29 , and it picks up the system installed glibc-2.27 .

edowson commented Sep 9, 2019

@cpackham I think if I set LD_LIBRARY_PATH as follows, it might resolve the issue:

qhaas commented Mar 24, 2020

The first error seems to be due to an old libc (CT_GLIBC_V_2_17=y) being selected which doesn’t seem to like powerpc64le (I’m not going to dig into that one any further).

GLIBC 2.17 on ppc64le occupies an extant niche due to supercomputers like Sierra and Summit running ppc64le Red Hat Enterprise Linux 7 (RHEL7).

I adjusted the default ‘powerpc64le-unknown-linux-gnu’ config target to use the same major/minor version of the kernel (4.14), glibc (2.17), and binutils (2.27) of ppc64le RHEL7 and encountered this same error during the building of the toolchain ‘error: The powerpc64le is not supported’.

It appeared in both latest stable (b2151f1, crosstool-ng-1.24.0) and master (be1b566) on a power9 system in RHEL7.

In another discussion, they mention that upstream ppc64le landed in glibc 2.19, so RH must have backported ppc64le support in their branch of glibc 2.17, unfortunately, I don’t see it being easy to apply all of what they’ve done to the flavor used by crosstool-ng.

For those lacking a ppc64le system and wanting to give it a shot, one can use the attached dockerfile on x86-64 systems by leveraging qemu. In x86-64 Ubuntu 18.04, deploy packages qemu-user qemu-user-static binutils-powerpc64le-linux-gnu .

Источник

Читайте также:  Проблема при старте windows
Оцените статью