Hi Sean, Thank you for your reply. So basically as I am writing some extensions for CIL(C Intermediate Language), I quickly wrote some code based on our original extension to do the transform.
Currently it can work on the example I give and automatically generate add_interface function in C and foreign interface in Prolog. However, I should point out that when dealing with some "trivial" cases, it is easy to do, but when C pointers involved (such as pointers as arguments of C function ), things could become quite difficult. I post some questions Q1<http://stackoverflow.com/questions/23038033/is-it-possible-to-get-these-memory-addresses-in-gnu-prolog> Q2<http://stackoverflow.com/questions/23046123/can-i-eliminate-the-usage-of-pointer-during-static-analysis-in-this-way> Q3<http://stackoverflow.com/questions/23034380/why-i-can-not-store-the-address-of-one-variable-in-prologc>on stackoverflow about the pointer issues. Generally speaking, I think some C static analysis tools could be useful for this topic, such as CIL <http://kerneis.github.io/cil/> or Clang<http://clang-analyzer.llvm.org/> . Best, Shuai On Sun, Apr 13, 2014 at 4:23 PM, Sean Charles <[email protected]> wrote: > Shuai, > > I too wanted something like this a few months back as I was attempting to > bind OpenGL with gprolog. Perhaps it might be easier to embed gprolog > within the thing you are attempting to call instead, so for me, instead of > creating an OpenGL binding I embedded gprolog within a C program that > initialised the framework.. > > Maybe reading: http://www.swig.org/Doc3.0/SWIGDocumentation.html#Extending > > And be the first to do it..that would be useful indeed! > > My only idea would be to use the GNU compiler options to output the parse > tree as an XML file and then use XSLT to do something clever like > generating the interface definitions... I have heard that the gnu output is > hard to deal with though.. > > All thebest, > Sean Charles > > > On 11 Apr 2014, at 16:14, Shuai Wang <[email protected]> wrote: > > So basically I am using Prolog to call a large number of C functions using > GNU-Prolog. > > Here is an example: > > int add(int a, int b) > { > int res = a + b; > > return res; > } > > If I want to call this function from Prolog code, I need to create this > interface: > > #include <gprolog.h> > > PlBool add_interface(int a, int b, int* r) > { > *r = add(a, b); > } > > And In the Prolog code, I need add this : > > :- foreign(add(+integer, +integer, -integer)). > > So I am dealing with a large number of C functions, and manually create > these interface one by one would be quite time consuming... > > Of course I can write an ad-hoc tool to do this creation(Using CIL > probably..), but I just don't want to reinvent the wheel. > > So my question is : > > Is there any tool that can automatically generate Prolog callable > interface from C functions? > > _______________________________________________ > Users-prolog mailing list > [email protected] > https://lists.gnu.org/mailman/listinfo/users-prolog > > >
_______________________________________________ Users-prolog mailing list [email protected] https://lists.gnu.org/mailman/listinfo/users-prolog
