Re: Automatic C binding generation
[Thread Prev] | [Thread Next]
- Subject: Re: Automatic C binding generation
- From: Andrew Chambers <andrewchamberss@xxxxxxxxx>
- Reply-to: myrddin-dev@xxxxxxxxxxxxxx
- Date: Fri, 14 Sep 2018 13:19:09 +1200
- To: myrddin-dev@xxxxxxxxxxxxxx
Seamless C interop is really a killer feature. Thanks for the hard work.
On Thu, Sep 13, 2018 at 9:21 PM Ori Bernstein <ori@xxxxxxxxxxxxxx> wrote:
> I've got automatic C binding generation working enough for
> demoware! I can compile and link to libsqlite3 and libc,
> and interface with it using entirely too much casting.
>
> The implementation lives here:
>
> https://git.eigenstate.org/ori/cbind.git/tree/
>
> And installs a binary named cbind, which takes these
> arguments:
>
> cbind [-h?] [-b pkg] [-I inc] [-D def] [-l lib] file.h...
> -h print this help message
> -? print this help message
> -b pkg generate bindings
> -I inc add 'inc' to your include path
> -D def define a macro in the preprocessor e.g. -Dfoo=bar
> -l lib link against library 'lib'
>
> You can use it like this:
>
> cbind -lc -lsqlite3 \
> -I /usr/include -I/usr/local/include \
> -D__GNUCLIKE_BUILTIN_STDARG \
> -b sqlite3 \
> sqlite3.h
>
> That command generates a rather giant module with all of the
> sqlite3 types (and everything included by sqlite3.h) shoved
> into one sqlite3 module.
>
> You can call it like this:
>
> use "sqlite3"
>
> const main = {
> rc = sqlite3.sqlite3_open(("db.sqlite\0" : byte#), &db)
> if rc != 0
> std.fatal("error: {}\n", rc)
> ;;
> rc = sqlite3.sqlite3_exec(db,
> ("SELECT * FROM table;\0" : byte#),
> (callback : sqlite3.cfunc#),
> (0 : void#), &errmsg)
> if rc != 0
> std.fatal("error: {} ({})\n", rc,
> std.cstrconvp(errmsg))
> sqlite3.sqlite3_free((errmsg : void#))
> ;;
> sqlite3.sqlite3_close(db)
> }
>
> Note that the strings are explicitly null terminated, and
> cast to a C string explicitly. This is one pain point that
> would be nice to address.
>
> I've updated the cbind example code to reflect the current
> state of the art:
>
> https://git.eigenstate.org/ori/cbind-example.git
>
> It's been tested on one platform with a small handful of
> headers, so expect bugs.
>
> Most of the code in this was written by people other than
> me. Thanks to Andrew, who wrote the C compiler that this is
> based off of, and to Frank who laid the groundwork for this.
>
> --
> Ori Bernstein
>
>
| Automatic C binding generation | Ori Bernstein <ori@xxxxxxxxxxxxxx> |
- Prev by Date: Automatic C binding generation
- Next by Date: Re: Automatic C binding generation
- Previous by thread: Automatic C binding generation
- Next by thread: Re: Automatic C binding generation
- Index(es):