Hi,

I’m trying to compile a common lisp system into a .so which I can then wrap a 
Python library around to enable easy sharing of the functionality as a Python 
package (wheel).  I’m having trouble finding examples of other C code calling 
into ECL-compiled shared objects of lisp code.  I hope I can solicit some 
answer and critical code review here, or pointers to exemplar implementations 
would also be much appreciated.

So far I have:

  1.  A Makefile [1] rule to build the .so from the common lisp package.  This 
part actually seems to be working well (if slow to compile).
  2.  A C source file [2] wrapping the ECL-compiled shared object. I think this 
is likely where most of my problems are: specifically:
     *   How does one get a string back out from Common Lisp to C?  Currently 
I’m jumping through hoops that seem like they should be unnecessary [3] and 
only work some of the time (other times I’m getting multiple copies of the 
string text).
     *   How does one get a UTF8 string from C (wchar_t*) into Common Lisp?  I 
haven’t found a way so for now I’m limiting my input to ASCII (char*) [4].
     *   Is the best way to invoke a function really to call c_string_to_object 
(e.g., [5] among many others)?  It seems like there should be a more efficient 
way than converting a string into a function name for every function dispatch.
     *   Finally, calling init [6] has two problems.  First, it takes a very 
long time every time I load the library.  Is there no way to save the state of 
the lisp image after initialization?  Second, it loads ASDF from a path 
relative to my local system.  Can I get ASDF compiled into the shared object to 
remove as many external dependencies as possible?

Any help is much appreciated.  Also, thanks to those who answered issues on the 
ECL GitLab repository to help me get this far.

Thanks!
Eric


[1] https://github.com/GrammaTech/sel/blob/python-library/Makefile#L110-L128
[2] https://github.com/GrammaTech/sel/blob/python-library/software/tree-sitter.c
[3] 
https://github.com/GrammaTech/sel/blob/python-library/software/tree-sitter.c#L14-L20
[4] 
https://github.com/GrammaTech/sel/blob/python-library/software/tree-sitter.c#L104-L123
[5] 
https://github.com/GrammaTech/sel/blob/python-library/software/tree-sitter.c#L27
[6] 
https://github.com/GrammaTech/sel/blob/python-library/software/tree-sitter.c#L6

________________________________
The information contained in this e-mail and any attachments from GrammaTech, 
Inc may contain confidential and/or proprietary information, and is intended 
only for the named recipient to whom it was originally addressed. If you are 
not the intended recipient, any disclosure, distribution, or copying of this 
e-mail or its attachments is strictly prohibited. If you have received this 
e-mail in error, please notify the sender immediately by return e-mail and 
permanently delete the e-mail and any attachments.

Reply via email to