4 stable releases
1.7.3 | Aug 20, 2024 |
---|---|
1.7.2 | Jul 30, 2024 |
1.7.1 | Jul 22, 2024 |
#86 in Cargo plugins
364 downloads per month
315KB
9K
SLoC
Devicetree Compiler for Rust
Wrap the dtc
source code in Rust to make it easier to build for non-Posix platforms.
The binary is named cargo-dtc
to avoid conflicts with the original dtc
binary.
Licensing
This project wraps the GPL2-licensed dtc
code. As such, this project is also licensed under GPL2.
Development Process
Generated files (namely the flex
and bison
grammar files) were generated and the resulting file copied to dtc
. Original files may be consulted from the original source.
Any non-Posix code was adapted to build under more strict compilers.
The main()
was renamed to dtc_main()
and is wrapped by Rust.
Changes from dtc
The original version of dtc is available as a submodule in the dtc-orig
directory. The code in this directory is unused, and it serves to provide a reference for the changes made to the original code.
The following changes were made:
- The directory structure was reorganized to be more idiomatic for Rust.
- Preprocessed versions of
dtc-lexer.lex.l
anddtc-parser.tab.y
were copied todtc/src/
and are used to avoid needing to installflex
andbison
. - To work around
__VA_ARGS__
in MSVC, theCHECK_ENTRY()
macro inserts aNULL
element at the start of the array.checks.c
was modified to ignore the first element. - The ternary operator in
treesource.c
was modified to be C99 compliant. - The
main()
function was renamed todtc_main()
and is wrapped by Rust. strcasecmp
is renamed to_stricmp
insidedtc.c
via a macro.- On Windows,
getopt.c
was taken from https://github.com/Chunde/getopt-for-windows as a drop-in replacement for the one from glibc. - On Windows,
dirent.h
was taken from https://github.com/tronkko/dirent. - On Windows, a fake
unistd.h
was added that renamesmain
and chain-includesdirent.h
to defineS_ISDIR
andS_ISREG
. - On other platforms,
build.rs
performs the rename ofmain
. - A fake
version_gen.h
gets generated indicating it comes from Rust.