3个不稳定版本
0.2.0 | 2021年9月17日 |
---|---|
0.1.1 | 2021年8月22日 |
0.1.0 | 2021年7月26日 |
#902 在 音频
在 tsf 中使用
26KB
96 行
tsf-sys —
为TinySoundFont提供的不安全Rust绑定。不要直接使用此crate,而是使用具有更多用户友好绑定的tsf
。
构建要求
遗憾的是,这个库包含一些非标准的构建要求,因为它同时使用了cc和bindgen。这意味着即使这只是依赖项(或依赖项的依赖项...),您也需要进行一些额外的设置。
cc
我们使用CC来构建随此crate捆绑的C库。这意味着您需要安装C编译器。特别是,当针对目标三元组(使用cargo build --target x-y-z
)进行构建时,您需要该目标工具链的C编译器(即运行在主机上,编译到目标的C编译器)。您还需要目标归档器。
实际上,这意味着
- 在没有目标(或与主机相同的目标)的情况下编译(例如,用于测试),您只需要以某种合理的方式安装C编译器和归档器;它应该会自动获取。如果它没有(例如,获取了错误的编译器),则设置环境变量
CC
和AR
,其中包含相应可执行文件的路径。 - 当使用与主机不同的目标三元组
x-y-z
进行编译时,您需要设置环境变量CC_x-y-z
和AR_x-y-z
,分别包含目标工具链的编译器和归档器的路径。这些通常是您在通过rustup安装此目标时添加到config
或config.toml
文件中的相同路径。
(您可能需要设置一些额外的参数以确保编译器选择正确的目标,例如,使用 --target
clang 标志。到目前为止,我只测试了 Android,如果您按照下面的示例进行,则不需要它。)
例如,当构建 Android 时,您可以在 NDK 中找到这个编译器和归档器。请参阅这篇指南。编译器将是 $NDK/toolchains/llvm/prebuilt/$HOST_TAG/bin/$TARGET$NDK_VERSION-clang
,而 AR 将是 $NDK/toolchains/llvm/prebuilt/$HOST_TAG/bin/$TARGET-ar
这些要求对任何使用 cc
编译 C 库的项目都是相同的,所以如果您已经配置了这些,那么您当前配置可能也足够了。
通过为某些目标预构建库并将它们检入 git,可以取消这些要求。欢迎提交拉取请求!
Bindgen
我们使用 Bindgen 生成 C 库头文件的 Rust 绑定。这需要安装 clang。
通过为某些目标预构建绑定并将它们检入 git,可以取消这些要求。欢迎提交拉取请求!
使用示例
假设 crate mylib
依赖于 tsf
(它依赖于 tsf-sys
),我的主机机器是 Windows,我想编译 mylib
以针对目标 armv7-linux-androideabi
。假设 mylib
生成一个动态 C 库。
-
请确保使用
rustup target add armv7-linux-androideabi
下载目标。 -
然后下载该目标的工具链。在这种情况下,您想要编译的目标是 NDK,对我而言是 NDK 21。
-
将以下内容添加到 cargo 配置文件中(
config.toml
或config
)
[target.armv7-linux-androideabi]
linker = "C:\\path\\to\\ndk\\21.4.7075529\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\armv7a-linux-androideabi21-clang.cmd"
ar = "C:\\path\\to\\ndk\\21.4.7075529\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\arm-linux-androideabi-ar"
# Note that for this target specifically, the `ar` doesn't include the v7a but of the target. Just a quirk of the NDK.
- 设置以下环境变量(您可以将此粘贴到您的命令提示符中,或更永久地设置它们)
set CC_armv7-linux-androideabi=C:\\path\\to\\ndk\\21.4.7075529\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\armv7a-linux-androideabi21-clang.cmd
set AR_armv7-linux-androideabi=C:\\path\\to\\ndk\\21.4.7075529\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\arm-linux-androideabi-ar
-
遵循上面提到的 bindgen 要求,包括设置
LIBCLANG_PATH
环境变量。 -
最后,使用 cargo 构建
mylib
。
rem Comments in windows command line are given by rem
rem Print out our environment variables to check they were set right. You can obviously omit this
echo %CC_armv7-linux-androideabi%
echo %AR_armv7-linux-androideabi%
echo %LIBCLANG_PATH%
cargo build --target armv7-linux-androideabi --release
对于非 Windows 主机机器,所有步骤都相同,只是命令略有不同。例如,要设置环境变量,您可以在 cargo build
命令之前放置 VAR=VALUE
,这很好。
贡献
这个 crate 是按照 这个 rust-bindgen 教程编写的。如果您能遵循那个教程,那么您就理解了这个 crate 的工作原理。
TinySoundFont 已捆绑
TinySoundFont 以头文件的形式分发。这个 crate 包含了一个从该头文件编译而成的静态库,这使得它非常方便使用 - 您不需要做任何特别的事情。
目前还没有提供未捆绑的版本。欢迎提交拉取请求。
依赖项
~0–2MB
~37K SLoC