2个版本
0.1.1 | 2020年8月31日 |
---|---|
0.1.0 | 2020年8月25日 |
#2403 in 开发工具
235KB
4.5K SLoC
此crate已被弃用
最初,此crate是为了解决使用Cargo功能选择与llvm-sys
一起使用的LLVM版本的问题而创建的解决方案之一,当时这是不可能的。
从那时起,由于llvm-sys
(见此llvm-sys
GitLab问题)的变化,现在可以更简单地实现相同的目标,使用Cargo的依赖项重命名功能。例如,截至本文写作时,llvm-ir
在其Cargo.toml中使用以下内容
[dependencies]
llvm-sys-80 = { package = "llvm-sys", version = "80.3.0", optional = true }
llvm-sys-90 = { package = "llvm-sys", version = "90.2.0", optional = true }
llvm-sys-100 = { package = "llvm-sys", version = "100.2.0", optional = true }
[features]
# Select the LLVM version to be compatible with.
# You _must_ enable exactly one of the following features.
llvm-8 = ["llvm-sys-80"]
llvm-9 = ["llvm-sys-90"]
llvm-10 = ["llvm-sys-100"]
并在其build.rs
脚本中检查是否正好启用了一个功能。
然后,在实际库代码中,llvm-ir
使用以下内容
#[cfg(feature = "llvm-8")]
pub use llvm_sys_80 as llvm_sys;
#[cfg(feature = "llvm-9")]
pub use llvm_sys_90 as llvm_sys;
#[cfg(feature = "llvm-10")]
pub use llvm_sys_100 as llvm_sys;
这表示llvm-sys
代表适当的依赖项版本。
由于现在可以通过llvm-sys
实现这一点,因此不再需要由llvm-sys-featured
代表的替代解决方案。此crate现在已被弃用,而是直接使用llvm-sys
,并且不会为未来的LLVM版本进行维护或更新。
以下是llvm-sys-featured
的原始README。
llvm-sys-featured
Rust的LLVM C API绑定。
这基本上是llvm-sys
的镜像,只不过它不是为每个LLVM版本使用单独的crates.io发布,而是使用Cargo功能。目前的目标是,使用llvm-8
功能,你将获得精确的llvm-sys
版本80.2.0,使用llvm-9
功能,你将获得精确的llvm-sys
版本90.1.0,使用llvm-10
功能,你将获得精确的llvm-sys
版本100.1.1。
用法
将此crate作为依赖项添加到您的Cargo.toml
中,选择与您想要的LLVM版本对应的特征
[dependencies]
llvm-sys-featured = { version = "0.1.1", features = ["llvm-10"] }
目前支持的 LLVM 版本有 llvm-8
、llvm-9
和 llvm-10
。
您的系统上必须有相应的 LLVM 版本。默认情况下,llvm-sys-featured
将在 PATH
上查找 llvm-config
来寻找系统级的 LLVM 复制,如果兼容则使用该版本。或者,您可以设置环境变量 LLVM_SYS_FEATURED_PREFIX
为库的编译和安装路径(安装前缀),这将使用该路径而不是默认路径。
如果您想将 llvm-sys-featured
作为 llvm-sys
的直接替代品(在代码中保留 llvm-sys
名称),可以使用 Cargo 的 依赖重命名 功能
[dependencies]
llvm-sys = { package = "llvm-sys-featured", version = "0.1.1", features = ["llvm-10"] }
文档
此 crate 的 API 文档可在 docs.rs 找到。然而,大多数接口在那里没有详细的描述,因为它们只是对应 LLVM C API 接口的绑定;有关更多信息,请参阅 LLVM 文档,特别是 生成的 API 文档。
请参阅此存储库中的 examples
目录中的 API 示例;这些示例与 llvm-sys 提供的示例完全相同。
安全绑定
我们建议大多数用户不要直接使用此 crate,而是使用以下安全、"Rusty" 的 LLVM API 之一
LLVM 兼容性
目前,此 crate 支持 LLVM 8、LLVM 9 和 LLVM 10。(见 用法。)
与 llvm-sys 类似,此 crate 会检查正在使用的 LLVM 版本是否与通过 Cargo 特性(或 llvm-sys
的情况下的 crate 版本)选择的版本匹配。这是因为 LLVM 的 C API 稳定性保证 相对较弱。
作为例外,与 llvm-sys 类似,此 crate 允许使用比旧绑定更新的 LLVM 版本,这在几乎所有情况下都应该是安全的;有关更多信息,请参阅 llvm-sys README 中的注释。可以通过选择此 crate 上的 strict-versioning
特性或设置环境变量 LLVM_SYS_FEATURED_STRICT_VERSIONING
来禁用此行为;在任一情况下,此 crate 都将强制执行使用与通过 Cargo 特性选择的版本完全匹配的 LLVM 版本。
下载 LLVM
在大多数系统上,可以从系统包管理器获取 LLVM;但如果您想获取更新的 LLVM 版本,可以从 LLVM 下载页面 下载。在 Debian 和 Ubuntu 系统上,您也可以通过遵循 这些说明 使用 apt 获取最新版本。
构建 LLVM
有关从源代码构建 LLVM 的更多信息,请参阅 LLVM 文档或 llvm-sys README。
致谢
此 crate 中至少 99% 的代码直接来自 llvm-sys,因此要向其作者 Peter Marheine 表示衷心的感谢,他应得到所有荣誉,因为他为优秀的 LLVM 绑定做出了卓越的贡献。
这个crate,类似于llvm-sys,采用MIT许可证。这意味着您可以在极少的限制下自由地修改和重新分发此crate,就像此crate修改和重新分发llvm-sys一样。
依赖项
~0.4–550KB
~10K SLoC