6 个版本

0.3.0 2023年8月14日
0.2.1 2023年8月14日
0.1.3 2023年8月1日

#103 in #llvm

Download history 226/week @ 2024-04-14 274/week @ 2024-04-21 246/week @ 2024-04-28 369/week @ 2024-05-05 545/week @ 2024-05-12 184/week @ 2024-05-19 19/week @ 2024-05-26 11/week @ 2024-06-02 8/week @ 2024-06-09 4/week @ 2024-06-16 5/week @ 2024-06-23 6/week @ 2024-07-14 14/week @ 2024-07-21 35/week @ 2024-07-28

每月55次下载

MIT/Apache

85KB
2K SLoC

Rust 1.5K SLoC // 0.0% comments C++ 458 SLoC // 0.1% comments

tblgen

本软件包提供了 TableGen 的原始绑定和安全的包装,TableGen 是 LLVM 项目使用的领域特定语言。

本软件包的目的是使用户能够在 Rust 中开发自定义 TableGen 后端。因此,本软件包的主要用途是从 TableGen 描述文件生成 Rust 代码的过程宏。

文档

请参阅https://danacus.gitlab.io/tblgen-rs/tblgen/上的文档。

支持的 LLVM 版本

要使用此软件包,需要安装 LLVM。本软件包仅旨在支持 LLVM 的最新版本。目前支持的 LLVM 版本是 17.x.x。

可以使用环境变量`1TABLEGEN_170_PREFIX`来指定 LLVM 安装的自定义目录。


lib.rs:

本软件包提供了 TableGen 的原始绑定和安全的包装,TableGen 是 LLVM 项目使用的领域特定语言。

本软件包的目的是使用户能够在 Rust 中开发自定义 TableGen 后端。因此,本软件包的主要用途是从 TableGen 描述文件生成 Rust 代码的过程宏。

安全性

本软件包的目标是完全安全。

支持的 LLVM 版本

要使用此软件包,需要安装 LLVM。目前支持的 LLVM 版本是 16.x.x(默认)和 17.x.x。可以使用功能标志(llvm16-0 或 llvm17-0)选择不同的 LLVM 版本。

可以使用环境变量`TABLEGEN_VERSION_PREFIX`来指定 LLVM 安装的自定义目录。

示例

以下示例解析提供为 &str 的简单 TableGen 代码,并遍历在此文件中定义的类和定义。

use tblgen::{TableGenParser, RecordKeeper};

let keeper: RecordKeeper = TableGenParser::new()
    .add_source(
        r#"
        class A;
        def D: A;
        "#,
    )?
    .parse()?;
assert_eq!(keeper.classes().next().unwrap().0, Ok("A"));
assert_eq!(keeper.defs().next().unwrap().0, Ok("D"));
assert_eq!(keeper.all_derived_definitions("A").next().unwrap().name(), Ok("D"));

通过添加包含路径,可以包含外部 TableGen 文件。

use tblgen::{TableGenParser, RecordKeeper};
use std::path::Path;

let keeper: RecordKeeper = TableGenParser::new()
    .add_source(r#"include "mlir/IR/OpBase.td""#)?
    .add_include_path(&format!("{}/include", std::env::var("TABLEGEN_170_PREFIX")?))
    .parse()?;
let i32_def = keeper.def("I32").expect("has I32 def");
assert!(i32_def.subclass_of("I"));
assert_eq!(i32_def.int_value("bitwidth"), Ok(32));

API 稳定性

LLVM 不提供稳定 C API 用于 TableGen,本软件包提供的 C API 也不稳定。此外,安全包装器也不提供稳定的接口,因为本软件包仍在早期开发阶段。

依赖关系

~0.3–2.7MB
~55K SLoC