Added some more implementations to test

This commit is contained in:
retropikzel 2024-05-17 11:36:40 +03:00
parent 8b0057474e
commit e1f9b60787
24 changed files with 172 additions and 91 deletions

4
.gitignore vendored
View File

@ -5,4 +5,8 @@ docuptmp
*.so
*.o
*.meta
*.link
old
retropikzel.*
test/import
test/pffi-define

View File

@ -4,17 +4,20 @@ CHICKEN_INSTALL_REPOSITORY=${HOME}/.local/share/chicken
ENV_CHICKEN_REPOSITORY_PATH=${CHICKEN_REPOSITORY_PATH}
VERSION=v0.1.0
VERSION=v0-1-0
SASH=sash -c -r7 -L .
GUILE=GUILE_AUTO_COMPILE=0 guile --no-auto-compile --fresh-auto-compile --r7rs -L .
RACKET=racket -I r7rs --make -S $(shell pwd) --script
STKLOS=STKLOS_FRAMES=200 stklos -A . --compiler-flags='+line-info,+time-display,unroll-iterations=3' -f
KAWA=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 --r7rs --full-tailcalls -Dkawa.import.path=".."
CYCLONE=cyclone -t -A .
GAMBIT=gsc -:r7rs,search=$(shell pwd) test/
CHICKEN=CHICKEN_INCLUDE_PATH=$(shell pwd):$(shell pwd)/retropikzel/pffi/v0.1.0/ CHICKEN_REPOSITORY_PATH=${ENV_CHICKEN_REPOSITORY_PATH}:${CHICKEN_INSTALL_REPOSITORY} csc -X r7rs -R r7rs
GAMBIT=gsc -:r7rs .
CHICKEN_ENV=CHICKEN_REPOSITORY_PATH=${ENV_CHICKEN_REPOSITORY_PATH}:${CHICKEN_INSTALL_REPOSITORY}:$(shell pwd) CHICKEN_INCLUDE_PATH=$(shell pwd) LD_LIBRARY_PATH=${GUIX_ENVIRONMENT}/lib
CHICKEN=${CHICKEN_ENV} csc -X r7rs -R r7rs -sJ
CHICKEN_I=${CHICKEN_ENV} csi -R r7rs -s
GERBIL=gxc -exe -prelude :scheme/r7rs
build: build-rkt build-main-scm
build: build-rkt build-main-scm build-main-chicken
chicken-install:
mkdir -p ${CHICKEN_INSTALL_REPOSITORY}
@ -29,6 +32,21 @@ build-rkt:
build-main-scm:
cp retropikzel/pffi/${VERSION}/main.sld retropikzel/pffi/${VERSION}/main.scm
build-main-chicken:
cp retropikzel/pffi/${VERSION}/main.sld retropikzel/pffi/${VERSION}/retropikzel.pffi.${VERSION}.main.scm
cp retropikzel/pffi/${VERSION}/chicken.scm retropikzel/pffi/${VERSION}/retropikzel.pffi.${VERSION}.chicken.scm
cp retropikzel/pffi/${VERSION}/main.sld retropikzel.pffi.${VERSION}.main.scm
cp retropikzel/pffi/${VERSION}/chicken.scm retropikzel.pffi.${VERSION}.chicken.scm
#${CHICKEN} -o retropikzel/pffi/${VERSION}/retropikzel.pffi.${VERSION}.chicken.so \
#retropikzel/pffi/${VERSION}/retropikzel.pffi.${VERSION}.chicken.scm
#${CHICKEN} -o retropikzel/pffi/${VERSION}/retropikzel.pffi.${VERSION}.main.so \
#retropikzel/pffi/${VERSION}/retropikzel.pffi.${VERSION}.main.scm
#${CHICKEN} -o retropikzel.pffi.${VERSION}.chicken.so retropikzel.pffi.${VERSION}.chicken.scm
#${CHICKEN} -o retropikzel.pffi.${VERSION}.main.so retropikzel.pffi.${VERSION}.main.scm
${CHICKEN} retropikzel.pffi.${VERSION}.chicken.scm
${CHICKEN} retropikzel.pffi.${VERSION}.main.scm
cp *.so test/
update-documentation:
schubert document
mkdir -p docutmp
@ -48,20 +66,22 @@ test/import.scm: clean build
#${RACKET} $@
${STKLOS} $@
${KAWA} $@
${CYCLONE} $@ && test/import
#${CYCLONE} $@ && test/import
#${GAMBIT} $@
#${CHICKEN} $@
#${GERBIL} $@
test/import.scm: clean build
${CHICKEN_I} test/import.scm
${CHICKEN} -o test/import $@ && ${CHICKEN_ENV} test/import
test/pffi-define.scm: clean build
${SASH} $@
${GUILE} $@
#${RACKET} $@
#${STKLOS} $@
${KAWA} $@
#${CYCLONE} $@ && test/pffi-define
test/pffi-define.scm: build
${CYCLONE} $@ && test/pffi-define
#test/pffi-define.scm: clean build
#${CYCLONE} $@ && test/pffi-define
test/size-of.scm:
${SASH} $@

View File

@ -27,3 +27,7 @@ For bugs you can use the
- Will only work on nodejs
## Hacking
main.sld is the real main which is copied to other suffixes like .scm and .rkt.

View File

@ -1,6 +1,6 @@
((packager . "retropikzel")
(name . "pffi")
(version . "v0.1.0")
(version . "v0-1-0")
(type . "library")
(description . "Portable Foreign Function Interface for R7RS schemes")
(license . "LGPL")

View File

@ -8,6 +8,7 @@
"gambit-c"
"chicken"
"chibi-scheme"
"gerbil"
"openjdk"
"curl"
"sdl2"

View File

@ -1,5 +1,5 @@
(define-library
(retropikzel pffi v0.1.0 chibi)
(retropikzel pffi v0-1-0 chibi)
(import (scheme base)
(scheme write)
(scheme file)

View File

@ -1,5 +1,5 @@
(define-library
(retropikzel pffi v0.1.0 chicken)
(retropikzel pffi v0-1-0 chicken)
(import (scheme base)
(scheme write)
(scheme file)
@ -33,7 +33,6 @@
((pffi-define scheme-name shared-object c-name return-type argument-types)
(error "Not defined"))))
(define pffi-size-of
(lambda (type)
(error "Not defined")))

View File

@ -1,5 +1,5 @@
(define-library
(retropikzel pffi v0.1.0 cyclone)
(retropikzel pffi v0-1-0 cyclone)
(import (scheme base)
(scheme write)
(scheme file)

View File

@ -1,5 +1,5 @@
(define-library
(retropikzel pffi v0.1.0 empty)
(retropikzel pffi v0-1-0 empty)
(import (scheme base)
(scheme write)
(scheme file)

View File

@ -1,5 +1,5 @@
(define-library
(retropikzel pffi v0.1.0 gambit)
(retropikzel pffi v0-1-0 gambit)
(import (scheme base)
(scheme write)
(scheme file)

View File

@ -0,0 +1,84 @@
(define-library
(retropikzel pffi v0-1-0 gerbil)
(import (scheme base)
(scheme write)
(scheme file)
(scheme process-context))
(export pffi-shared-object-load
pffi-define
pffi-size-of
pffi-pointer-allocate
pffi-pointer-null
pffi-string->pointer
pffi-pointer->string
pffi-pointer->bytevector
pffi-pointer-free
pffi-pointer?
pffi-pointer-null?
pffi-pointer-set!
pffi-pointer-get
pffi-pointer-deref)
(begin
(define pffi-type->native-type
(lambda (type)
(error "Not defined")))
(define pffi-pointer?
(lambda (object)
(error "Not defined")))
(define-syntax pffi-define
(syntax-rules ()
((pffi-define scheme-name shared-object c-name return-type argument-types)
(error "Not defined"))))
(define pffi-size-of
(lambda (type)
(error "Not defined")))
(define pffi-pointer-allocate
(lambda (size)
(error "Not defined")))
(define pffi-pointer-null
(lambda ()
(error "Not defined")))
(define pffi-string->pointer
(lambda (string-content)
(error "Not defined")))
(define pffi-pointer->string
(lambda (pointer)
pointer))
(define pffi-pointer->bytevector
(lambda (pointer size)
(error "Not defined")))
(define pffi-shared-object-load
(lambda (header path)
(error "Not defined")))
(define pffi-pointer-free
(lambda (pointer)
(error "Not defined")))
(define pffi-pointer-null?
(lambda (pointer)
(error "Not defined")))
(define pffi-pointer-set!
(lambda (pointer type offset value)
(let ((p pointer))
(error "Not defined"))))
(define pffi-pointer-get
(lambda (pointer type offset)
(error "Not defined")))
(define pffi-pointer-deref
(lambda (pointer)
(error "Not defined")))))

View File

@ -1,5 +1,5 @@
(define-library
(retropikzel pffi v0.1.0 guile)
(retropikzel pffi v0-1-0 guile)
(import (scheme base)
(scheme write)
(scheme file)

View File

@ -3,33 +3,33 @@
;> ## Procedures
(define-library
(retropikzel pffi v0.1.0 main)
(retropikzel pffi v0-1-0 main)
(cond-expand
(sagittarius
(import (scheme base)
(scheme write)
(scheme file)
(scheme process-context)
(retropikzel pffi v0.1.0 sagittarius)))
(retropikzel pffi v0-1-0 sagittarius)))
(guile
(import (scheme base)
(scheme write)
(scheme file)
(scheme process-context)
(retropikzel pffi v0.1.0 guile)))
(retropikzel pffi v0-1-0 guile)))
(racket
(import (scheme base)
(scheme write)
(scheme file)
(scheme process-context)
(retropikzel pffi v0.1.0 racket)))
(retropikzel pffi v0-1-0 racket)))
(stklos
(import (scheme base)
(scheme write)
(scheme file)
(scheme process-context)
(stklos)
(retropikzel pffi v0.1.0 stklos)))
(retropikzel pffi v0-1-0 stklos)))
(kawa
(import (scheme base)
(scheme write)
@ -40,25 +40,25 @@
(scheme write)
(scheme file)
(scheme process-context)
(retropikzel pffi v0.1.0 cyclone)))
(retropikzel pffi v0-1-0 cyclone)))
(gambit
(import (scheme base)
(scheme write)
(scheme file)
(scheme process-context)
(retropikzel pffi v0.1.0 gambit)))
(retropikzel pffi v0-1-0 gambit)))
(chicken
(import (scheme base)
(scheme write)
(scheme file)
(scheme process-context)
(retropikzel pffi v0.1.0 chicken)))
(retropikzel pffi v0-1-0 chicken)))
(chibi
(import (scheme base)
(scheme write)
(scheme file)
(scheme process-context)
(retropikzel pffi v0.1.0 chibi))))
(retropikzel pffi v0-1-0 chibi))))
(export pffi-shared-object-auto-load
pffi-shared-object-load
pffi-define
@ -78,7 +78,7 @@
(define library-version "v0.1.0")
(define library-version "v0-1-0")
;> ## Procedures
@ -238,6 +238,5 @@
shared-object)))))))
(cond-expand
(kawa
(include "kawa.scm"))
(kawa (include "kawa.scm"))
(else #t))))

View File

@ -2,33 +2,33 @@
;> ## Procedures
(define-library
(retropikzel pffi v0.1.0 main)
(retropikzel pffi v0-1-0 main)
(cond-expand
(sagittarius
(import (scheme base)
(scheme write)
(scheme file)
(scheme process-context)
(retropikzel pffi v0.1.0 sagittarius)))
(retropikzel pffi v0-1-0 sagittarius)))
(guile
(import (scheme base)
(scheme write)
(scheme file)
(scheme process-context)
(retropikzel pffi v0.1.0 guile)))
(retropikzel pffi v0-1-0 guile)))
(racket
(import (scheme base)
(scheme write)
(scheme file)
(scheme process-context)
(retropikzel pffi v0.1.0 racket)))
(retropikzel pffi v0-1-0 racket)))
(stklos
(import (scheme base)
(scheme write)
(scheme file)
(scheme process-context)
(stklos)
(retropikzel pffi v0.1.0 stklos)))
(retropikzel pffi v0-1-0 stklos)))
(kawa
(import (scheme base)
(scheme write)
@ -39,25 +39,25 @@
(scheme write)
(scheme file)
(scheme process-context)
(retropikzel pffi v0.1.0 cyclone)))
(retropikzel pffi v0-1-0 cyclone)))
(gambit
(import (scheme base)
(scheme write)
(scheme file)
(scheme process-context)
(retropikzel pffi v0.1.0 gambit)))
(retropikzel pffi v0-1-0 gambit)))
(chicken
(import (scheme base)
(scheme write)
(scheme file)
(scheme process-context)
(retropikzel pffi v0.1.0 chicken)))
(retropikzel pffi v0-1-0 chicken)))
(chibi
(import (scheme base)
(scheme write)
(scheme file)
(scheme process-context)
(retropikzel pffi v0.1.0 chibi))))
(retropikzel pffi v0-1-0 chibi))))
(export pffi-shared-object-auto-load
pffi-shared-object-load
pffi-define
@ -77,7 +77,7 @@
(define library-version "v0.1.0")
(define library-version "v0-1-0")
;> ## Procedures
@ -237,6 +237,5 @@
shared-object)))))))
(cond-expand
(kawa
(include "kawa.scm"))
(kawa (include "kawa.scm"))
(else #t))))

View File

@ -2,33 +2,33 @@
;> ## Procedures
(define-library
(retropikzel pffi v0.1.0 main)
(retropikzel pffi v0-1-0 main)
(cond-expand
(sagittarius
(import (scheme base)
(scheme write)
(scheme file)
(scheme process-context)
(retropikzel pffi v0.1.0 sagittarius)))
(retropikzel pffi v0-1-0 sagittarius)))
(guile
(import (scheme base)
(scheme write)
(scheme file)
(scheme process-context)
(retropikzel pffi v0.1.0 guile)))
(retropikzel pffi v0-1-0 guile)))
(racket
(import (scheme base)
(scheme write)
(scheme file)
(scheme process-context)
(retropikzel pffi v0.1.0 racket)))
(retropikzel pffi v0-1-0 racket)))
(stklos
(import (scheme base)
(scheme write)
(scheme file)
(scheme process-context)
(stklos)
(retropikzel pffi v0.1.0 stklos)))
(retropikzel pffi v0-1-0 stklos)))
(kawa
(import (scheme base)
(scheme write)
@ -39,25 +39,25 @@
(scheme write)
(scheme file)
(scheme process-context)
(retropikzel pffi v0.1.0 cyclone)))
(retropikzel pffi v0-1-0 cyclone)))
(gambit
(import (scheme base)
(scheme write)
(scheme file)
(scheme process-context)
(retropikzel pffi v0.1.0 gambit)))
(retropikzel pffi v0-1-0 gambit)))
(chicken
(import (scheme base)
(scheme write)
(scheme file)
(scheme process-context)
(retropikzel pffi v0.1.0 chicken)))
(retropikzel pffi v0-1-0 chicken)))
(chibi
(import (scheme base)
(scheme write)
(scheme file)
(scheme process-context)
(retropikzel pffi v0.1.0 chibi))))
(retropikzel pffi v0-1-0 chibi))))
(export pffi-shared-object-auto-load
pffi-shared-object-load
pffi-define
@ -77,7 +77,7 @@
(define library-version "v0.1.0")
(define library-version "v0-1-0")
;> ## Procedures
@ -237,6 +237,5 @@
shared-object)))))))
(cond-expand
(kawa
(include "kawa.scm"))
(kawa (include "kawa.scm"))
(else #t))))

View File

@ -1,5 +1,5 @@
(define-library
(retropikzel pffi v0.1.0 racket)
(retropikzel pffi v0-1-0 racket)
(import (scheme base)
(scheme write)
(scheme file)

View File

@ -1,5 +1,5 @@
(define-library
(retropikzel pffi v0.1.0 sagittarius)
(retropikzel pffi v0-1-0 sagittarius)
(import (scheme base)
(scheme write)
(scheme file)

View File

@ -1,5 +1,5 @@
(define-library
(retropikzel pffi v0.1.0 stklos)
(retropikzel pffi v0-1-0 stklos)
(import (scheme base)
(scheme write)
(scheme file)

View File

@ -1,25 +0,0 @@
(define-library
(retropikzel pffi v0.1.0 guile)
(import (scheme base)
(scheme write)
(scheme file)
(scheme process-context)
(retropikzel pffi v0.1.0 kawa))
(export pffi-shared-object-load
pffi-define
pffi-size-of
pffi-pointer-allocate
pffi-pointer-null
pffi-string->pointer
pffi-pointer->string
pffi-pointer->bytevector
pffi-pointer-free
pffi-pointer?
pffi-pointer-null?
pffi-pointer-set!
pffi-pointer-get
pffi-pointer-deref)
(begin
))

View File

@ -1,6 +1,6 @@
(import (scheme base)
(scheme write)
(retropikzel pffi v0.1.0 main))
(retropikzel pffi v0-1-0 main))
(display "Hello")
(newline)

Binary file not shown.

View File

@ -2,22 +2,19 @@
(scheme write)
(scheme process-context)
(scheme eval)
(cyclone foreign)
(retropikzel pffi v0.1.0 main))
(retropikzel pffi v0-1-0 main))
(define libc (pffi-shared-object-auto-load (list "stdio.h") "c" (list)))
(define libcurl (pffi-shared-object-auto-load (list "curl/curl.h") "curl" (list)))
(display libc)
(display libcurl)
(newline)
;(pffi-shared-object-load #t (display "this"))
(pffi-define curl-version libcurl 'curl_version 'string (list))
(display "=================")
(newline)
;(pffi-define "hello")
;(c-define puts int "puts" string)
;(puts "I'm from C")
(display (pffi-pointer->string (curl-version)))
(newline)
(display "=================")