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.
This project wraps the GPL2-licensed dtc
code. As such, this project is also licensed under GPL2.
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.
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.