Skip to content

xobs/cargo-dtc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 and dtc-parser.tab.y were copied to dtc/src/ and are used to avoid needing to install flex and bison.
  • To work around __VA_ARGS__ in MSVC, the CHECK_ENTRY() macro inserts a NULL 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 to dtc_main() and is wrapped by Rust.
  • strcasecmp is renamed to _stricmp inside dtc.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 renames main and chain-includes dirent.h to define S_ISDIR and S_ISREG.
  • On other platforms, build.rs performs the rename of main.
  • A fake version_gen.h gets generated indicating it comes from Rust.

A note on version numbers

The version numbers are, unfortunately, out of sync with upstream. This will continue until upstream dtc reaches version 1.8.0.

About

Rust warpper around `dtc`

Resources

Stars

Watchers

Forks

Packages

No packages published