#device-tree #compiler #cargo #build #platform #original #dtc

app cargo-dtc

用于与 cargo 一起构建的 Devicetree 编译器

4 个稳定版本

新版本 1.7.3 2024 年 8 月 20 日
1.7.2 2024 年 7 月 30 日
1.7.1 2024 年 7 月 22 日

69Cargo 插件

Download history 256/week @ 2024-07-22 332/week @ 2024-07-29 19/week @ 2024-08-05 9/week @ 2024-08-12

616 每月下载量

GPL-2.0-or-later

315KB
9K SLoC

C 9K SLoC // 0.1% comments Rust 88 SLoC // 0.0% comments

Rust 的 Devicetree 编译器

dtc 源代码用 Rust 包装,以便在非 POSIX 平台上更容易构建。

二进制文件名为 cargo-dtc,以避免与原始的 dtc 二进制文件冲突。

许可协议

该项目包装了 GPL2 许可的 dtc 代码。因此,该项目也受 GPL2 许可。

开发过程

生成了文件(特别是 flexbison 语法文件),并将结果文件复制到 dtc。可以从原始源代码中查阅原始文件。

将所有非 POSIX 代码进行了适配,以便在更严格的编译器下构建。

main() 重命名为 dtc_main() 并用 Rust 包装。

dtc 的变更

原始版本的 dtc 作为子模块存储在 dtc-orig 目录中。该目录中的代码未使用,它提供对原始代码变更的参考。

进行了以下变更

  • 重新组织了目录结构,使其更符合 Rust 的习惯。
  • dtc-lexer.lex.ldtc-parser.tab.y 的预处理器版本复制到 dtc/src/,并用于避免需要安装 flexbison
  • 为了解决 MSVC 中的 __VA_ARGS__ 的问题,CHECK_ENTRY() 宏在数组开头插入一个 NULL 元素。已修改 checks.c 以忽略第一个元素。
  • treesource.c 中的三元运算符已修改,以符合 C99 标准。
  • 函数 main() 被重命名为 dtc_main(),并被 Rust 包裹。
  • dtc.c 中,通过宏将 strcasecmp 重命名为 _stricmp
  • 在 Windows 上,getopt.chttps://github.com/Chunde/getopt-for-windows 中获取,作为 glibc 中相应代码的替代品。
  • 在 Windows 上,dirent.h 来自 https://github.com/tronkko/dirent
  • 在 Windows 上,添加了一个虚假的 unistd.h,它重命名 main 并链式包含 dirent.h 以定义 S_ISDIRS_ISREG
  • 在其他平台上,build.rs 执行 main 的重命名。
  • 生成一个虚假的 version_gen.h,表明它来自 Rust。

无运行时依赖