mc2d ~master
Tool for merging C files into D bindings
To use this package, run the following command in your project's root directory:
Manual usage
Put the following dependency into your project's dependences section:
mc2d - tool for merging C files into D bindings
Build
As usual for D software:
$ git clone https://github.com/denizzzka/mc2d.git
$ cd mc2d
$ dub build
How to use?
- Remark
It is need to understand that correct D bindings can only be obtained if all the necessary C compiler options and DEFINEs known, including individual defines for subprojects/submodules/libraries/components/etc if we are talking about a complex system. Usually, searching for correct defines is the most difficult part of creating a binding.
For this tool I propose to shift all this work to the C compiler.
- Thus, the first step when creating a binding is to obtain the preprocessed sources (usually files with a rare *.i extension)
To get these files only need to add -save-temps
compiler option during compilation of C code to which bindings needed to obtain.
Build systems usually providing way to add custom options so it's not a problem.
- The next step is to create a list of
*.i
files - mc2d accepts such lists as input
In the simplest case, this is a recursive search with find
:
$ find <path_to_preprocessed_files_dir> -type f -name "*.i" > files_list.txt
- Now you can run mc2d:
$ ./mc2d --clang_opts="--target=riscv32" --threads=8 \
--output binding_module.d < files_list.txt
Note that it is still need to specify target architecture because C variables sizes depend on it.
Great, now, if everything went well, you will obtain binding_module.d
module!
- Caveat
This tool excludes from resulting binding global C statements that have the same names but different value or body. Unfortunately, during the merge process it is impossible to determine whether such matching statements belong to different object files.
Practice has shown that this is not a serious problem in real code.
If you need to access an excluded statement try to exclude from input all other files containing same statement (use --show_excluded
to find these files)
- Registered by Denis Feklushkin
- ~master released 3 months ago
- denizzzka/mc2d
- boost
- Copyright © 2024, Denis Feklushkin
- Authors:
- Dependencies:
- libclang, dpp
- Versions:
-
0.0.2 2024-Aug-06 0.0.1 2024-Jul-06 ~master 2024-Aug-06 - Download Stats:
-
-
0 downloads today
-
0 downloads this week
-
0 downloads this month
-
4 downloads total
-
- Score:
- 0.3
- Short URL:
- mc2d.dub.pm