Mirror of: https://codeberg.org/foreign-c/foreign-c
|
|
||
|---|---|---|
| docs | ||
| old-tests | ||
| retropikzel | ||
| site | ||
| .gitignore | ||
| Dockerfile.jenkins | ||
| HACKING.md | ||
| IMPLEMENTATION_NOTES.md | ||
| Jenkinsfile | ||
| LICENSE | ||
| Makefile | ||
| README.md | ||
| composition.scm | ||
| gerbil.pkg | ||
| jenkins_entrypoint.sh | ||
| kawa.jar | ||
| mkdocs.yml | ||
| package.scm | ||
| test.scm | ||
README.md
Portable Foreign Function Interface for R7RS schemes
Foreign function interface that is supported on multiple R7RS Sceheme implementations.
Note that this software is in alpha stage. That said the interface should not be changing anymore.
Any help in form of constructive advice and bug reports are appreciated.
Documentation or run mkdocs serve or see docs/.
For documentation see retropikzel.neocities.org/r7rs-pffi or run mkdocs serve or see or docs/ directory.
Goals
- Support only R7RS implementations
- Same interface on all implementations
- Some things that are procedures on one implementation are macros on other, but they must behave the same
Non goals
- To have every possible FFI feature
- Compiling of used library C code at any point
- That is no stubs, no C code generated by the library and so on
- The pffi library itself may require compilation on installation
Status
Currently the interface of the library is in okay shape. It propably will not change much but no guarantees are being made just yet.
Implementation table
| Chibi | Chicken 5 | Cyclone | Gambit | Gauche | Gerbil | Guile | Kawa | Larceny | Mosh | Racket | Sagittarius | Skint | STklos | tr7 | Ypsilon | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| pffi-init | X | X | X | X | X | X | X | X | X | X | X | X | X | X | ||
| pffi-size-of | X | X | X | X | X | X | X | X | X | X | ||||||
| pffi-shared-object-auto-load | X | X | X | X | X | X | X | X | X | |||||||
| pffi-shared-object-load | X | X | X | X | X | X | X | X | X | |||||||
| pffi-pointer-null | X | X | X | X | X | X | X | X | X | |||||||
| pffi-pointer-null? | X | X | X | X | X | X | X | X | X | |||||||
| pffi-pointer-allocate | X | X | X | X | X | X | X | X | X | |||||||
| pffi-pointer? | X | X | X | X | X | X | X | X | X | |||||||
| pffi-pointer-free | X | X | X | X | X | X | X | X | X | |||||||
| pffi-pointer-set! | X | X | X | X | X | X | X | X | ||||||||
| pffi-pointer-get | X | X | X | X | X | X | X | X | ||||||||
| pffi-string->pointer | X | X | X | X | X | X | X | X | ||||||||
| pffi-pointer->string | X | X | X | X | X | X | X | X | ||||||||
| pffi-define | X | X | X | X | X | X | X | X | ||||||||
| pffi-define-callback | X | X | X | X | X | |||||||||||
| pffi-pointer-address | X | X | X | X | ||||||||||||
| pffi-pointer-dereference | X | X | X |
Usage notes
- Chibi
- Install libffi-dev
- Build with:
- chibi-ffi retropikzel/r7rs-pffi/r7rs-pffi-chibi.stub
- ${CC} -o retropikzel/r7rs-pffi/r7rs-pffi-chibi.so -fPIC -shared retropikzel/r7rs-pffi/r7rs-pffi-chibi.c -lchibi-scheme -lffi
- Chicken 5
- Needs r7rs egg
- Kawa
- Needs at least Java version 22
- Needs jvm flags:
- --add-exports java.base/jdk.internal.foreign.abi=ALL-UNNAMED
- --add-exports java.base/jdk.internal.foreign.layout=ALL-UNNAMED
- --add-exports java.base/jdk.internal.foreign=ALL-UNNAMED
- --enable-native-access=ALL-UNNAMED
- Larceny
- Runs on 32 bit mode
- Mosh
- FFI only works on x86_64
- Racket
- Needs racket-r7rs
Design/exploration/waiting for implementation features
- LIPS
- Will work on nodejs by using some C FFI library from npm
- Javascript side needs design
- Biwascheme
- Will work on nodejs by using some C FFI library from npm
- Javascript side needs design
- MIT-Scheme
- s7
- Airship
- Other gambit targets
- Gambit compiles to different targets other than C too, for example Javascript. It would be cool and interesting to see if this FFI could also support some of those
- When LIPS and Biwascheme Javascript side is done then Gambit should be done too
- s48-r7rs
- prescheme
Will/can not be supported
- Loko
- Desires no C interop, I can respect that