Automatic C binding generation
[Thread Prev] | [Thread Next]
[Date Prev] | [Date Next]
- Subject: Automatic C binding generation
- From: Ori Bernstein <ori@xxxxxxxxxxxxxx>
- Reply-to: myrddin-dev@xxxxxxxxxxxxxx
- Date: Thu, 13 Sep 2018 02:21:36 -0700
- To: myrddin-dev@xxxxxxxxxxxxxx
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
Re: Automatic C binding generation | Andrew Chambers <andrewchamberss@xxxxxxxxx> |
Re: Automatic C binding generation | Ori Bernstein <ori@xxxxxxxxxxxxxx> |
- Next by Date: Re: Automatic C binding generation
- Next by thread: Re: Automatic C binding generation
- Index(es):