Go to file
retropikzel d237b09042 Updated readme 2024-05-18 16:51:54 +03:00
doc Started adding documentation 2024-05-01 11:21:28 +03:00
retropikzel/pffi/v0-1-0 Updated readme 2024-05-18 16:51:23 +03:00
scripts Moved tests to their own files 2024-05-18 15:25:02 +03:00
test Updated readme 2024-05-18 16:51:23 +03:00
.gitignore Moved tests to their own files 2024-05-18 15:25:02 +03:00
Makefile Make many implementations pass all tests, clean up repo 2024-05-18 16:40:39 +03:00
README.md Updated readme 2024-05-18 16:51:54 +03:00
VERSION Moved tests to their own files 2024-05-18 11:20:28 +03:00
composition.scm Added some more implementations to test 2024-05-17 11:36:40 +03:00
documentation.md Added pffi-lambda 2024-05-15 19:48:36 +03:00
guix-chicken-init.sh Added init script for chicken-install stuff for guix 2024-05-17 17:34:02 +03:00
kawa.jar Added most of Kawa support 2024-05-06 20:45:31 +03:00
manifest.scm Make many implementations pass all tests, clean up repo 2024-05-18 16:40:39 +03:00
test-all.sh Moved tests to their own files 2024-05-18 11:20:28 +03:00
test-chicken.sh Moved tests to their own files 2024-05-18 11:20:28 +03:00
test-cyclone.sh Moved tests to their own files 2024-05-18 11:20:28 +03:00
test-gambit.sh Moved tests to their own files 2024-05-18 11:30:21 +03:00
test-gerbil.sh Moved tests to their own files 2024-05-18 11:20:28 +03:00
test-guile.sh Moved tests to their own files 2024-05-18 11:20:28 +03:00
test-kawa.sh Moved tests to their own files 2024-05-18 11:20:28 +03:00
test-racket.sh Moved tests to their own files 2024-05-18 11:20:28 +03:00
test-sagittarius.sh Started moving tests to their own files 2024-05-18 10:55:55 +03:00
test-stklos.sh Moved tests to their own files 2024-05-18 11:20:28 +03:00
test.scm Started moving tests to their own files 2024-05-18 10:46:28 +03:00

README.md

Portable Foreign Function Interface for R7RS schemes

For bugs you can use the Bugs

All tests (there is not that many yet) pass

  • Sagittarius
  • Guile
  • Kawa
  • Needs atleast java 21
  • Needs jvm flags
  • java --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 --enable-preview -jar kawa.jar FILENAME.scm
  • Racket
  • Chicken

Not all tests pass

Support waiting for the implementation

  • LIPS
  • Waiting for implementation to have cond-expand and library support
  • Will only work on nodejs

Not supported

Hacking

main.sld is the real main which is copied to main.scm

Documentation

On some implementations these are procedures, on some macros.

Types

Types are given as symbols, for example 'int8 or 'pointer.

  • int8
  • uint8
  • int16
  • uint16
  • int32
  • uint32
  • int64
  • uint64
  • char
  • unsigned-char
  • short
  • unsigned-short
  • int
  • unsigned-int
  • long
  • unsigned-long
  • float
  • double
  • string
  • pointer

Procedures or macros

pffi-shared-object-auto-load

Arguments:

  • object-name (symbol)

    • The name of the dynamic library file you want to load without the "lib" in fron of it or .so/.dll at the end
  • addition-paths (list (string)...)

    • Any additional paths you want to search for the library

    Returns:

    • (object) Shared object, the type depends on the implementation

pffi-shared-object-load

It is recommended to use the pffi-shared-object-auto-load instead of this directly.

Arguments:

  • headers (list (string) ...) Headers that need to be included
  • Example (list "curl/curl.h")
  • path (string) The full path to the shared object you want to load, including any "lib" infront and .so/.dll at the end
  • Example "libcurl.so"

Returns:

  • (object) Shared object, the type depends on the implementation

pffi-define

Defines new foreign procedure.

Arguments:

  • scheme-name () The name of the procedure used on scheme side
  • shared-object (object) The shared object
  • Use pffi-shared-object-auto-load and pffi-shared-object-load to get this
  • c-name (symbol) The name of the C function
  • return-type (symbol) The return type of the C function
  • arguments-types (list (symbol) ...) The C function argument types