s390x-unknown-linux-gnu

Tier: 2 (带有主机工具)

IBM z/Architecture (s390x) 目标(包括 IBM Z 和 LinuxONE),运行 Linux。

目标维护者

要求

此目标需要

  • Linux 内核版本 3.2 或更高版本
  • glibc 2.17 或更高版本

目标生成的代码使用 z/Architecture ISA,假设最低架构级别为 z10(z/Architecture 操作原理第八版),并符合 s390x ELF ABI。

参考资料

构建目标

此目标通过 rustup 分发,并且在其他方面不需要特殊配置。

如果您出于某种原因需要构建自己的 Rust,则可以在 config.toml 中启用该目标。例如

[build]
target = ["s390x-unknown-linux-gnu"]

构建 Rust 程序

在 s390x Linux 主机上,s390x-unknown-linux-gnu 目标应自动安装并默认使用。

在非 s390x 主机上,添加目标

rustup target add s390x-unknown-linux-gnu

然后使用以下命令交叉编译 crate:

cargo build --target s390x-unknown-linux-gnu

测试

对于测试和运行目标没有特殊要求。 为了在主机上测试交叉构建,请参阅下面的“交叉编译工具链和 C 代码”部分。

如果您想进行本机测试,但没有自己的 s390x 机器,则有几种方法可以访问一台

  • IBM LinuxONE Community Cloud 提供了一个自助服务门户,您可以在其中创建 s390x 虚拟机实例。 这些实例旨在临时使用(限制为 120 天)。

  • IBM LinuxONE Open Source Cloud 提供对 s390x 机器的永久访问权限。 这需要 IBM 的批准,如果您计划使用该机器来处理与 IBM Z 生态系统相关的开源项目(Rust 编译器当然符合条件),通常会获得批准。

交叉编译工具链和 C 代码

使用该目标构建的 Rust 代码与使用 s390x-unknown-linux-gnu 目标三元组(通过本机或交叉编译)使用 GCC 或 Clang 编译的 C 代码兼容。

在 Ubuntu 上,可以使用以下命令安装 s390x 交叉工具链:

apt install gcc-s390x-linux-gnu g++-s390x-linux-gnu libc6-dev-s390x-cross

根据您的系统,您可能需要配置目标以使用 GNU GCC 链接器。 要使用它,请将以下内容添加到您的 .cargo/config.toml

[target.s390x-unknown-linux-gnu]
linker = "s390x-linux-gnu-gcc"

如果您的 s390x-linux-gnu-* 工具链不在您的 PATH 中,您可能需要配置其他设置

[target.s390x-unknown-linux-gnu]
# Adjust the paths to point at your toolchain
cc = "/TOOLCHAIN_PATH/bin/s390x-linux-gnu-gcc"
cxx = "/TOOLCHAIN_PATH/bin/s390x-linux-gnu-g++"
ar = "/TOOLCHAIN_PATH/bin/s390x-linux-gnu-ar"
ranlib = "/TOOLCHAIN_PATH/bin/s390x-linux-gnu-ranlib"
linker = "/TOOLCHAIN_PATH/bin/s390x-linux-gnu-gcc"

要在非 s390x 主机上测试交叉编译的二进制文件,您可以使用 qemu。 在 Ubuntu 上,可以使用以下命令获取 s390x 模拟器:

apt install qemu-system-s390x

然后,在 .cargo/config.toml 中设置 runner

[target.s390x-unknown-linux-gnu]
runner = "qemu-s390x-static -L /usr/s390x-linux-gnu"