add README
This commit is contained in:
68
README.md
Normal file
68
README.md
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
# Cpp2Beef
|
||||||
|
Cpp2Beef is a library for writing high quality beef bindings for C and C-Style C++. Cpp2Beef does the heavy lifting so you can focus on the library specific stuff.
|
||||||
|
|
||||||
|
You can find bindings generated by Cpp2Beef at https://git.unicon-gmbh.de/BeefBindings.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
1. Create a `Setup` workspace and add Cpp2Beef from remote (`https://git.unicon-gmbh.de/Rune/Cpp2Beef.git`)
|
||||||
|
2. Add Cpp2Beef as a dependency
|
||||||
|
3. Write your generator
|
||||||
|
```beef
|
||||||
|
class ExampleGenerator : Cpp2BeefGenerator, this(Span<char8*> args)
|
||||||
|
{
|
||||||
|
protected override Span<char8*> Args => args;
|
||||||
|
protected override Flags Flags => .None;
|
||||||
|
|
||||||
|
// You can have your binding in one file or in multiple, file management is up to you
|
||||||
|
StreamWriter writer = new .()..Create("../src/Example.bf")..Write("""
|
||||||
|
// This file was generated by Cpp2Beef
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Interop;
|
||||||
|
|
||||||
|
namespace Example;
|
||||||
|
|
||||||
|
|
||||||
|
""") ~ delete _;
|
||||||
|
|
||||||
|
protected override StreamWriter GetWriterForHeader(StringView header)
|
||||||
|
{
|
||||||
|
// Here you define the target file to which a cursor should be written
|
||||||
|
// Returning null skips the cursor
|
||||||
|
if (header.EndsWith("example.h"))
|
||||||
|
return writer;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override Block GetCursorBlock(CXCursor cursor)
|
||||||
|
{
|
||||||
|
// Optional. This can be used put cursors in custom blocks
|
||||||
|
// This is useful if you want all your functions to be a static class
|
||||||
|
if (cursor.kind == .FunctionDecl)
|
||||||
|
return .CustomBlock("Example");
|
||||||
|
return base.GetCursorBlock(cursor);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void HandleCursor(CXCursor cursor)
|
||||||
|
{
|
||||||
|
// Optional. Can be used to write custom logic, how a cursor should be written
|
||||||
|
// If your going for this I'd recommend looking at examples in BeefBindings
|
||||||
|
base.HandleCursor(cursor);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void WriteCustomAttributes(CXCursor cursor)
|
||||||
|
{
|
||||||
|
// Optional.
|
||||||
|
base.WriteCustomAttributes(cursor);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void GetNameInBindings(LibClang.CXCursor cursor, String outString)
|
||||||
|
{
|
||||||
|
// Optional but you pretty much want to always override this.
|
||||||
|
// Allows you to change the name of cursors
|
||||||
|
base.GetNameInBindings(cursor, outString);
|
||||||
|
}
|
||||||
|
|
||||||
|
// There are functions you can override, but these are the most common
|
||||||
|
}
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user