loongarch*-unknown-none*

层级:2

ELF 格式的独立/裸机 LoongArch64 二进制文件:固件、内核等。

目标描述
loongarch64-unknown-noneLoongArch 64 位,LP64D ABI(独立,硬浮点)
loongarch64-unknown-none-softfloatLoongArch 64 位,LP64S ABI(独立,软浮点)

目标维护者

要求

此目标是交叉编译的。不支持 std。没有默认分配器,但可以通过提供分配器来使用 alloc

这允许生成的代码在诸如内核之类的环境中运行,这些环境可能需要避免使用此类寄存器,或者可能对使用此类寄存器有特殊考虑(例如,保存和恢复它们以避免破坏使用相同寄存器的用户空间代码)。您可以通过 -C target-feature= 代码生成选项传递给 rustc,或通过 Rust 代码中的 #[target_feature] 机制来更改代码生成以使用额外的 CPU 功能。

默认情况下,使用此目标生成的代码应该在任何 loongarch 硬件上运行;启用额外的目标功能可能会提高此基线。

使用此目标生成的代码默认情况下将使用 small 代码模型。您可以使用 -C code-model= 选项传递给 rustc 来更改此设置。

loongarch64-unknown-none* 上,extern "C" 使用 标准调用约定

此目标生成 ELF 格式的二进制文件。任何备用格式或二进制布局的特殊考虑都需要链接器选项或链接器脚本。

构建目标

您可以在 config.toml 中将目标添加到 target 列表中,以构建支持该目标的 Rust。

[build]
build-stage = 1
target = ["loongarch64-unknown-none"]

构建 Rust 程序

# target flag may be used with any cargo or rustc command
cargo build --target loongarch64-unknown-none

测试

由于 loongarch64-unknown-none* 支持各种不同的环境并且不支持 std,因此此目标不支持运行 Rust 测试套件。

交叉编译工具链和 C 代码

如果您想将 C 代码与 Rust 一起编译(例如,对于具有 C 依赖项的 Rust 箱子),您将需要一个合适的 loongarch 工具链。

Rust 可能能够使用 loongarch64-unknown-linux-gnu- 工具链以及适当的独立标志来构建此工具链(取决于该工具链的假设,见下文),或者您可能希望使用单独的 loongarch64-unknown-none 工具链。

在某些使用 ELF 二进制文件的 loongarch 主机上,您可能能够使用主机 C 工具链,如果它没有引入关于主机环境的假设,这些假设与独立环境的预期不匹配。否则,您可能需要一个单独的工具链用于独立/裸机开发,就像从非 loongarch 平台交叉编译时一样。