2个版本

0.1.1 2020年8月31日
0.1.0 2020年8月25日

#2403 in 开发工具

MIT许可

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-8llvm-9llvm-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