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。