loongarch*-unknown-none*
层级:2
裸机/无操作系统 LoongArch64 二进制文件,格式为 ELF:固件、内核等。
目标 | 描述 |
---|---|
loongarch64-unknown-none | LoongArch 64 位,LP64D ABI(裸机,硬浮点) |
loongarch64-unknown-none-softfloat | LoongArch 64 位,LP64S ABI(裸机,软浮点) |
目标维护者
要求
此目标为交叉编译。不支持 std
。没有默认的分配器,但可以通过提供分配器来使用 alloc
。
*-softfloat
目标不假定存在 FPU 或任何其他 LoongArch ISA 扩展,并且不使用任何非 GPR 寄存器。这允许生成的代码在诸如内核之类的环境中运行,这些环境可能需要避免使用此类寄存器,或者可能对使用此类寄存器有特殊考虑(例如,保存和恢复它们以避免破坏使用相同寄存器的用户空间代码)。您可以使用 -C target-feature=
codegen 选项向 rustc 更改代码生成以使用其他 CPU 功能,或者通过 Rust 代码中的 #[target_feature]
机制更改代码生成。
默认情况下,使用软浮点目标生成的代码应在任何 LoongArch64 硬件上运行,而硬浮点目标还需要 FPU;启用其他目标功能可能会提高此基线。
使用目标生成的代码默认情况下将使用 small
代码模型。您可以使用 rustc 的 -C code-model=
选项更改此设置。
在 loongarch64-unknown-none*
上,extern "C"
使用架构的标准调用约定。
目标生成 ELF 格式的二进制文件。任何替代格式或对二进制布局的特殊考虑都需要链接器选项或链接器脚本。
构建目标
您可以通过将它们添加到 config.toml
中的 target
列表中来构建支持目标的 Rust。
[build]
build-stage = 1
target = [
"loongarch64-unknown-none",
"loongarch64-unknown-none-softfloat",
]
测试
由于目标支持各种不同的环境并且不支持 std
,因此它们不支持运行 Rust 测试套件。
构建 Rust 程序
从 Rust 1.74 开始,预编译的工件通过 rustup
提供
# install cross-compile toolchain
rustup target add loongarch64-unknown-none
# target flag may be used with any cargo or rustc command
cargo build --target loongarch64-unknown-none
交叉编译工具链和 C 代码
对于交叉构建,您将需要一个合适的 LoongArch C/C++ 工具链进行链接,或者如果您想编译带有 Rust 的 C 代码(例如,对于具有 C 依赖项的 Rust crates)。
Rust *可能*能够使用带有适当的独立标志的 loongarch64-unknown-linux-gnu-
工具链来为此工具链构建(取决于该工具链的假设,请参见下文),或者您可能希望使用单独的 loongarch64-unknown-none
工具链。
在某些使用 ELF 二进制文件的 LoongArch 主机上,如果主机 C 工具链不引入与独立环境的期望不匹配的主机环境假设,则*可能*可以使用主机 C 工具链。否则,您可能需要一个单独的工具链来进行独立/裸机开发,就像从非 LoongArch 平台进行交叉编译一样。