Check out [nimterop](https://github.com/nimterop/nimterop) which aims to make it easier to create bindings. It uses `gcc -E` to tackle the preprocessor and [tree-sitter](https://github.com/tree-sitter/tree-sitter) to parse and generate an AST. The AST is then converted into Nim syntax.
We aren't far enough to make it absolutely seamless but [here's](http://ix.io/1Itr/nim) a nimterop based LLVM wrapper that generates [this](http://ix.io/1Itq/nim) output. There are still some C features that aren't yet supported but instead of erroring out, nimterop simply ignores unrecognized syntax. nimterop doesn't yet support C++ but can leverage c2nim in this case. [Here's](https://github.com/genotrance/feud/blob/master/wrappers/fuzzy.nim) an example C++ binding. However, advanced C++ is still beyond.
