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