CleanC 0.1
Improved C interface for Clean
Vanilla Clean requires the programmer to write a separate interface for every C function that is ever going to be called from Clean, directly using the ABC instruction ccall. This library removes the need for ABC instructions entirely, and allows the programmer to call C functions given their name as a String.
Copyright © 2016 Camil Staps. Licensed under MIT, see LICENSE for more details.
Installation & Usage
To install, simply run:
make
To use CleanC, you will need to do the following:
- Add
import CleanCto your Clean program. - Link the C object file you want to call code from.
- Link
CleanC.o,libelfandlibffi(may need to install the latter two). - Disable linker optimisation and stripping of the application.
- Add the Generics library to the search path.
This gives a clm command line of:
clm -I "$CLEAN_HOME/lib/Generics" -ns -no-opt-link -l CleanC.o -l myfile.o -l -libelf -l -libffi mymodule
This assumes you have set $CLEAN_HOME to the path to your Clean installation.
Example
See test.icl.
Warning
This is Bad Code. To be able to call a C function by its name, we need to look through /proc/self/exe using libelf.
Since we need /proc/self/exe, this is probably linux-specific. Also check the libffi list of supported platforms.
Acknowledgements
Code to look up a function pointer by its name was provided by Falaina on Stack Overflow. Calling a function pointer with extra arguments is possible using libffi, as suggested by FUZxxl.
Todo
- Call functions from shared libraries
- Improved interface to call Clean from C
- Look into Darwin support
Changelog
- 0.1 (2016-01-31)
- Initial version
