#build-system #ninja-build #programming-language #turtle #high-level #outputs #dynamic

构建 turtle-build

高级编程语言兼容的 Ninja 构建系统

31 个版本

0.4.8 2023年12月7日
0.4.7 2023年10月17日
0.4.6 2023年7月11日
0.4.4 2022年11月16日
0.3.1 2022年2月5日

#1 in #outputs

Download history 120/week @ 2024-04-23 19/week @ 2024-04-30 51/week @ 2024-05-07 55/week @ 2024-05-14 38/week @ 2024-05-21 49/week @ 2024-05-28 64/week @ 2024-06-04 30/week @ 2024-06-11 86/week @ 2024-06-18 22/week @ 2024-06-25 43/week @ 2024-07-02 42/week @ 2024-07-09 28/week @ 2024-07-16 8/week @ 2024-07-23 37/week @ 2024-07-30 233/week @ 2024-08-06

每月312次下载

MIT/Apache

140KB
4K SLoC

Rust 3.5K SLoC // 0.0% comments Gherkin (Cucumber) 489 SLoC Shell 94 SLoC // 0.1% comments Ruby 1 SLoC

Turtle

GitHub Action crates.io License

Ninja-兼容的高级编程语言构建系统,用 Rust 编写

目标

  • Rust 中 Ninja 构建系统的安全(无 unsafe)和快速实现
  • 适度、全面且可定制的构建/错误输出
    • Turtle 从不显示对最终用户来说不可理解的信息。
    • 这对于不了解编译器和构建系统如何工作的高级编程语言用户来说非常重要。

Turtle 最初是为 Pen 编程语言 编写的。因此,我们目前只支持动态依赖项,但不支持 C/C++ 头文件依赖项。欢迎您的贡献!😄

安装

cargo install turtle-build

使用方法

turtle

有关更多信息,请参阅 turtle --help

功能

  • Ninja-兼容的构建文件语法和命令行选项 🥷
  • 基于内容哈希的重建
  • 仅描述的输出
    • Turtle 从不显示构建规则的命令,而只显示描述,因为前者对最终用户来说难以理解。
  • 源映射
    • Turtle 将错误消息中的输出映射到在 build 指令中定义的 srcdep 变量所指定的源文件名,以便用户可以理解。
  • --log-prefix 选项
    • 它更改附加到 Turtle 自身每一行日志的日志前缀(例如,对于 my-build-system: build failed 的日志,可以使用 --log-prefix my-build-system)。
  • --quiet 选项
    • 它在预期的构建错误上抑制 Turtle 自身的错误消息。当您将 Turtle 作为某些高级构建系统的子进程启动时,这很有用。
  • 控制台输出处理类似于 Rust 的 Cargo
    • 海龟在日志底部显示了正在运行的构建作业的输出。因此,跟踪构建过程中发生的情况很容易。

Ninja兼容

海龟旨在支持Ninja构建文件的完整语法。它也支持基本的命令行参数,但不会实现所有原始选项(例如-t选项)。

语法

  • build语句
    • 显式输出
    • 显式输入
    • 隐式输出
    • 隐式输入
    • 仅顺序输入
    • phony规则
  • rule语句
  • default语句
  • include语句
  • subninja语句
  • pool语句
  • 全局变量
  • 构建局部变量
  • inout特殊变量

命令行参数

  • -f自定义构建文件选项
  • -j作业限制选项
  • -k继续构建选项
  • -C更改目录选项

其他

  • 循环构建依赖检测
  • 循环构建文件依赖检测
  • builddir特殊变量
  • 动态依赖
    • 隐式输入
    • 隐式输出
    • 循环构建依赖检测
  • C/C++头文件依赖
    • depfile选项
    • deps选项
  • Windows支持

技术说明

海龟与传统构建系统不同,值得注意的是,它通过Rust中未来的生态系统和无栈协程自然地解决并行构建,其中您并行修改图结构,并将其减少到解决方案。

以下是海龟中并行构建的工作方式

  1. 海龟为默认目标的构建生成未来。
  2. 根据构建的配置,它们生成更多的未来或解决它们自己的未来。
    • 如果它们需要首先构建某些输入目标,它们将并行生成所有这些输入目标的构建。
  3. 这些未来由Rust中的异步运行时调度和并行运行。
  4. 当所有未来都解决时,构建完成。

目前,海龟仅使用拓扑排序算法来检测循环依赖,但不用于构建作业的调度。

海龟由以下项目和其他项目支持!

类似的项目

许可

双重许可下MITApache 2.0

依赖关系

~11–20MB
~251K SLoC