4 个稳定版本
| 新版本 1.7.3 | 2024 年 8 月 20 日 |
|---|---|
| 1.7.2 | 2024 年 7 月 30 日 |
| 1.7.1 | 2024 年 7 月 22 日 |
69 在 Cargo 插件 中
616 每月下载量
315KB
9K SLoC
Rust 的 Devicetree 编译器
将 dtc 源代码用 Rust 包装,以便在非 POSIX 平台上更容易构建。
二进制文件名为 cargo-dtc,以避免与原始的 dtc 二进制文件冲突。
许可协议
该项目包装了 GPL2 许可的 dtc 代码。因此,该项目也受 GPL2 许可。
开发过程
生成了文件(特别是 flex 和 bison 语法文件),并将结果文件复制到 dtc。可以从原始源代码中查阅原始文件。
将所有非 POSIX 代码进行了适配,以便在更严格的编译器下构建。
将 main() 重命名为 dtc_main() 并用 Rust 包装。
dtc 的变更
原始版本的 dtc 作为子模块存储在 dtc-orig 目录中。该目录中的代码未使用,它提供对原始代码变更的参考。
进行了以下变更
- 重新组织了目录结构,使其更符合 Rust 的习惯。
- 将
dtc-lexer.lex.l和dtc-parser.tab.y的预处理器版本复制到dtc/src/,并用于避免需要安装flex和bison。 - 为了解决 MSVC 中的
__VA_ARGS__的问题,CHECK_ENTRY()宏在数组开头插入一个NULL元素。已修改checks.c以忽略第一个元素。 treesource.c中的三元运算符已修改,以符合 C99 标准。- 函数
main()被重命名为dtc_main(),并被 Rust 包裹。 - 在
dtc.c中,通过宏将strcasecmp重命名为_stricmp。 - 在 Windows 上,
getopt.c从 https://github.com/Chunde/getopt-for-windows 中获取,作为 glibc 中相应代码的替代品。 - 在 Windows 上,
dirent.h来自 https://github.com/tronkko/dirent。 - 在 Windows 上,添加了一个虚假的
unistd.h,它重命名main并链式包含dirent.h以定义S_ISDIR和S_ISREG。 - 在其他平台上,
build.rs执行main的重命名。 - 生成一个虚假的
version_gen.h,表明它来自 Rust。