hexagon-unknown-linux-musl

层级:3

针对 Hexagon DSP 架构的交叉编译 Linux 用户模式应用程序的目标。

目标描述
hexagon-unknown-linux-muslHexagon 32 位 Linux

目标维护者

要求

该目标是交叉编译的。此目标支持 std。默认情况下,使用此目标生成的代码应在 Hexagon DSP 硬件上运行。

  • -Ctarget-cpu=hexagonv73 添加对 Hexagon V73 之前定义的指令的支持。

可以使用 QEMU 用户模拟运行二进制文件。在基于 Debian 的系统上,安装 qemu-user-static 包应该足以运行简单的静态二进制文件。

# apt install qemu-user-static
# qemu-hexagon-static ./hello

为了使用 Rust 构建 Linux 程序,您需要一个能够针对 hexagon 的链接器。您可以使用来自 仅使用公共开源存储库的 hexagon 工具链clang/lld

该工具链中还包含在创建动态链接可执行文件时可使用的 C 库。

# /opt/clang+llvm-18.1.0-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/bin/qemu-hexagon -L /opt/clang+llvm-18.1.0-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/target/hexagon-unknown-linux-musl/usr/ ./hello

构建目标

由于它是 3 级,因此 Rust 尚未为此目标提供预编译的工件。

因此,您可以通过将其添加到 config.toml 中的目标列表来构建支持该目标的 Rust,下面显示了一个示例配置。

[build]
target = [ "hexagon-unknown-linux-musl"]

[target.hexagon-unknown-linux-musl]

cc = "hexagon-unknown-linux-musl-clang"
cxx = "hexagon-unknown-linux-musl-clang++"
linker = "hexagon-unknown-linux-musl-clang"
ar = "hexagon-unknown-linux-musl-ar"
ranlib = "hexagon-unknown-linux-musl-ranlib"
musl-root = "/opt/clang+llvm-18.1.0-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/target/hexagon-unknown-linux-musl/usr"
llvm-libunwind = 'in-tree'
qemu-rootfs = "/opt/clang+llvm-18.1.0-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/target/hexagon-unknown-linux-musl/usr"

测试

目前不支持为此目标运行 rustc 测试套件。

构建 Rust 程序

从 https://github.com/quic/toolchain_for_hexagon/releases 下载并安装 hexagon 开源工具链

以下 .cargo/config 需要在任何项目目录中构建用于 Hexagon Linux 目标

[build]
target = "hexagon-unknown-linux-musl"

[target.hexagon-unknown-linux-musl]
linker = "hexagon-unknown-linux-musl-clang"
ar = "hexagon-unknown-linux-musl-ar"
runner = "qemu-hexagon -L /opt/clang+llvm-18.1.0-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/target/hexagon-unknown-linux-musl/usr"

编辑 .cargo/config 中的 "runner" 以指向工具链的 C 库的路径。

...
runner = "qemu-hexagon -L /path/to/my/inst/clang+llvm-18.1.0-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/target/hexagon-unknown-linux-musl/usr"
...

在您的 PATH 中使用 qemu-hexagon 构建/运行您的 Rust 程序

export PATH=/path/to/my/inst/clang+llvm-18.1.0-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/bin/:$PATH
cargo run -Zbuild-std -Zbuild-std-features=llvm-libunwind