hexagon-unknown-linux-musl
层级: 3
用于交叉编译针对 Hexagon DSP 架构的 Linux 用户模式应用程序的目标。
目标 | 描述 |
---|---|
hexagon-unknown-linux-musl | Hexagon 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