Merge branch 'main' of ssh://code.booklordofthe.dev:2003/Booklordofthedings/Caa

This commit is contained in:
Booklordofthedings 2024-05-24 11:11:07 +02:00
commit deacc20b41

View file

@ -1,3 +1,36 @@
# Caa # Caa - *Generate Beef bindings from C Headers*
Generate Beef bindings out of C headers This program is still in development and might not work fully, see [TODO](#todo) for more info on whats missing
## Dependencies
- [Libclang Beef bindings](https://code.booklordofthe.dev/Booklordofthedings/Libclang-beef)
- [Libclang.dll & Libclang.lib](https://releases.llvm.org/download.html) *(contained in the LLVM download)*
## CLI
The CLI program is extremely simple and doesnt have much customizeability.
The process is as follows:
- It asks you for the amount of parameters to pass into clang
- You pass in the parameters one after another *(The first one needs to be the file path to the header)*
- The program parses the header *(For debugging purposes it lists all tokens that where not parsed)*
- You input the output file path
- File is output, program is stopped
## API
- Binding.Bind => Takes in String[] args and generates the in memory model of the header
- Binding.Generate => Creates the string representation and outputs it into the target file
- Binding.CursorHandles => Dictionary containing handlers for specific cursor types, can be extended
- Binding.Options => General Options for binding and generating
## Binding.Options
- Namespace => What to name the namespace and what to remove infront of all fields and names
- RemoveEnumStart => Try to find a common start to enum members and remove it
- LowercaseEnums => Outputs all enum fields in lowercase to make it easier to beefify it
## TODO
- Error handling when opening the header
- Remove the hack, and get Args to actually work on line 31 in Binding
- Booleans should be parsed to Beef bools
- Some libraries (sqlite) use defines for enums/constants. Find a way to parse these
- Parse the output into multiple files
- Type parse function pointers correctly
- Struct fields inside of structs seemingly dont work yet