C Bindings Autogeneration.
[Thread Prev] | [Thread Next]
- Subject: C Bindings Autogeneration.
- From: Ori Bernstein <ori@xxxxxxxxxxxxxx>
- Date: Mon, 16 Nov 2015 21:44:41 -0800
- To: myrddin-dev@xxxxxxxxxxxxxx
I've put together some code to do C binding autogeneration using libclang. http://git.eigenstate.org/ori/mcbind.git You can already use it to generate bindings, although at the moment it's not especially discriminating, and will put all symbols in a header or set of headers into one package, transitively. So, to use it: mcbind -p mypackage foo.h This will generate two files: mypackage.myr mypackage-glue.c The main issue that I'm going to have to sort out to make this more pleasant to use is a way of not including everything transitively. For example, if I generate a binding for stdio.h, I shouldn't duplicate the types for size_t and friends from stddef.h, but instead refer to a stddef.h module. For example: stdio.write:(fd : int, buf : void#, count : stddef.size_t -> stddef.ssize_t) instead of the subtly different stdio.write : (fd : int, buf : void#, count : stdio.size_t -> stdio.ssize_t) As far as the generated bindings, the functions currently map directly, with wrappers generated to paper over any ABI incompatibilities. There's currently no method of wrapping strings and slices from Myrddn to C and back; I'm not sure how I'd want to do that either. Ideally, we should end up mapping, for example, stdio.write to: stdio.write : (fd : int, buf : byte[:] -> ssize_t) But I'm not sure how to handle that without some sort of manual intervention. As far as the currently generated code, if foo.h contains; struct foo { int a; }; int f(char *a, int b); Then mypackage.myr will contain: pkg mypackage = type foo = struct a : int32 ;; extern const f : (a0 : int8#, a1 : int32 -> int32) ;; And mypackage-glue.c will contain: #include <stdint.h> #include <stddef.h> #include <foo.h> int32_t mypackage$f(int8_t (*a1), int32_t a2) { return f(a1, a2); } If there was an ABI incompatibility, f_wrapped() would be generated to paper over the issues. -- Ori Bernstein
- Prev by Date: Re: Some fixes for building on Linux and Clang
- Next by Date: libinifile added.
- Previous by thread: Re: Crash!
- Next by thread: libinifile added.
- Index(es):