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 CleanC
to your Clean program. - Link the C object file you want to call code from.
- Link
CleanC.o
,libelf
andlibffi
(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