loongarch*-unknown-linux-*

层级:2

LoongArch 是龙芯中科有限公司开发的一种新的 RISC 指令集架构。

目标名称遵循以下格式:<machine>-<vendor>-<os><fabi_suffix>,其中 <machine> 指定 CPU 系列/型号,<vendor> 指定供应商,<os> 指定操作系统名称。虽然整数基 ABI 由机器字段隐含,但浮点基 ABI 类型使用字符串后缀 <fabi-suffix> 编码到规范的 os 字段中。

<fabi-suffix>描述
f64基 ABI 使用 64 位 FPR 进行参数传递。(lp64d)
f32基 ABI 使用 32 位 FPR 进行参数传递。(lp64f)
sf基 ABI 不使用 FPR 进行参数传递。(lp64s)


ABI 类型(基 ABI/ABI 扩展)C 库内核目标元组
lp64d/baseglibclinuxloongarch64-unknown-linux-gnu
lp64f/baseglibclinuxloongarch64-unknown-linux-gnuf32
lp64s/baseglibclinuxloongarch64-unknown-linux-gnusf
lp64d/basemusl libclinuxloongarch64-unknown-linux-musl
lp64f/basemusl libclinuxloongarch64-unknown-linux-muslf32
lp64s/basemusl libclinuxloongarch64-unknown-linux-muslsf

目标维护者

要求

此目标是交叉编译的。需要一个用于 LoongArch 目标的 GNU 工具链。它可以从 https://github.com/loongson/build-tools/releases 下载,或者从 GCC(12.1.0 或更高版本)和 Binutils(2.40 或更高版本)的源代码构建。

构建目标

可以通过为 rustc 构建启用目标来构建目标。

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

确保 loongarch64-unknown-linux-gnu-gcc 可以从 $PATH 中指定的目录中搜索到。或者,您可以使用 GNU LoongArch 工具链,方法是在 config.toml 中添加以下内容

[target.loongarch64-unknown-linux-gnu]
# ADJUST THIS PATH TO POINT AT YOUR TOOLCHAIN
cc = "/TOOLCHAIN_PATH/bin/loongarch64-unknown-linux-gnu-gcc"
cxx = "/TOOLCHAIN_PATH/bin/loongarch64-unknown-linux-gnu-g++"
ar = "/TOOLCHAIN_PATH/bin/loongarch64-unknown-linux-gnu-ar"
ranlib = "/TOOLCHAIN_PATH/bin/loongarch64-unknown-linux-gnu-ranlib"
linker = "/TOOLCHAIN_PATH/bin/loongarch64-unknown-linux-gnu-gcc"

交叉编译

此目标可以在 x86_64-unknown-linux-gnu 主机上交叉编译。在其他主机上进行交叉编译可能有效,但尚未经过测试。

测试

要在构建系统上测试交叉编译的二进制文件,请安装支持 LoongArch 架构的 qemu 二进制文件,并执行以下命令。

CC_loongarch64_unknown_linux_gnu=/TOOLCHAIN_PATH/bin/loongarch64-unknown-linux-gnu-gcc \
CXX_loongarch64_unknown_linux_gnu=/TOOLCHAIN_PATH/bin/loongarch64-unknown-linux-gnu-g++ \
AR_loongarch64_unknown_linux_gnu=/TOOLCHAIN_PATH/bin/loongarch64-unknown-linux-gnu-gcc-ar \
CARGO_TARGET_LOONGARCH64_UNKNOWN_LINUX_GNUN_LINKER=/TOOLCHAIN_PATH/bin/loongarch64-unknown-linux-gnu-gcc \
# SET TARGET SYSTEM LIBRARY PATH
CARGO_TARGET_LOONGARCH64_UNKNOWN_LINUX_GNUN_RUNNER="qemu-loongarch64 -L /TOOLCHAIN_PATH/TARGET_LIBRARY_PATH" \
cargo run --target loongarch64-unknown-linux-gnu --release

已在 x86 架构上测试,其他架构尚未测试。

构建 Rust 程序

Rust 尚未为此目标提供预编译的工件。要为此目标编译,您需要启用目标构建 Rust(请参阅上面的“构建目标”),或者使用 build-std 或类似方法构建自己的 std 副本。

如果 rustc 支持该目标并且库工件可用,那么可以为此目标构建 Rust 静态库

$ rustc --target loongarch64-unknown-linux-gnu your-code.rs --crate-type staticlib
$ ls libyour_code.a

在 Rust Nightly 上,即使没有库工件可用,也可以构建

cargo build -Z build-std --target loongarch64-unknown-linux-gnu