diff --git a/.gitignore b/.gitignore index 03a92d3..ac5421e 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,8 @@ docuptmp *.so *.o *.meta +*.link old +retropikzel.* +test/import +test/pffi-define diff --git a/Makefile b/Makefile index 4b02293..bb29cdb 100644 --- a/Makefile +++ b/Makefile @@ -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} $@ diff --git a/README.md b/README.md index d1213e0..fc71771 100644 --- a/README.md +++ b/README.md @@ -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. + diff --git a/composition.scm b/composition.scm index dbd426f..7aba825 100644 --- a/composition.scm +++ b/composition.scm @@ -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") diff --git a/manifest.scm b/manifest.scm index 1a33d88..d38ba32 100644 --- a/manifest.scm +++ b/manifest.scm @@ -8,6 +8,7 @@ "gambit-c" "chicken" "chibi-scheme" + "gerbil" "openjdk" "curl" "sdl2" diff --git a/retropikzel/pffi/v0.1.0/chibi.scm b/retropikzel/pffi/v0-1-0/chibi.scm similarity index 98% rename from retropikzel/pffi/v0.1.0/chibi.scm rename to retropikzel/pffi/v0-1-0/chibi.scm index 3f2b1ae..5a663e5 100644 --- a/retropikzel/pffi/v0.1.0/chibi.scm +++ b/retropikzel/pffi/v0-1-0/chibi.scm @@ -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) diff --git a/retropikzel/pffi/v0.1.0/chicken.scm b/retropikzel/pffi/v0-1-0/chicken.scm similarity index 98% rename from retropikzel/pffi/v0.1.0/chicken.scm rename to retropikzel/pffi/v0-1-0/chicken.scm index 3711fd9..446ec01 100644 --- a/retropikzel/pffi/v0.1.0/chicken.scm +++ b/retropikzel/pffi/v0-1-0/chicken.scm @@ -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"))) diff --git a/retropikzel/pffi/v0.1.0/cyclone.sld b/retropikzel/pffi/v0-1-0/cyclone.sld similarity index 98% rename from retropikzel/pffi/v0.1.0/cyclone.sld rename to retropikzel/pffi/v0-1-0/cyclone.sld index d4eba70..8e8c299 100644 --- a/retropikzel/pffi/v0.1.0/cyclone.sld +++ b/retropikzel/pffi/v0-1-0/cyclone.sld @@ -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) diff --git a/retropikzel/pffi/v0.1.0/empty.scm b/retropikzel/pffi/v0-1-0/empty.scm similarity index 98% rename from retropikzel/pffi/v0.1.0/empty.scm rename to retropikzel/pffi/v0-1-0/empty.scm index 4a93a95..bbb6655 100644 --- a/retropikzel/pffi/v0.1.0/empty.scm +++ b/retropikzel/pffi/v0-1-0/empty.scm @@ -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) diff --git a/retropikzel/pffi/v0.1.0/gambit.scm b/retropikzel/pffi/v0-1-0/gambit.scm similarity index 98% rename from retropikzel/pffi/v0.1.0/gambit.scm rename to retropikzel/pffi/v0-1-0/gambit.scm index 2749b33..4940418 100644 --- a/retropikzel/pffi/v0.1.0/gambit.scm +++ b/retropikzel/pffi/v0-1-0/gambit.scm @@ -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) diff --git a/retropikzel/pffi/v0-1-0/gerbil.scm b/retropikzel/pffi/v0-1-0/gerbil.scm new file mode 100644 index 0000000..f0f3ee1 --- /dev/null +++ b/retropikzel/pffi/v0-1-0/gerbil.scm @@ -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"))))) diff --git a/retropikzel/pffi/v0.1.0/guile.scm b/retropikzel/pffi/v0-1-0/guile.scm similarity index 99% rename from retropikzel/pffi/v0.1.0/guile.scm rename to retropikzel/pffi/v0-1-0/guile.scm index ecaceab..abf9175 100644 --- a/retropikzel/pffi/v0.1.0/guile.scm +++ b/retropikzel/pffi/v0-1-0/guile.scm @@ -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) diff --git a/retropikzel/pffi/v0.1.0/kawa.scm b/retropikzel/pffi/v0-1-0/kawa.scm similarity index 100% rename from retropikzel/pffi/v0.1.0/kawa.scm rename to retropikzel/pffi/v0-1-0/kawa.scm diff --git a/retropikzel/pffi/v0.1.0/main.rkt b/retropikzel/pffi/v0-1-0/main.rkt similarity index 93% rename from retropikzel/pffi/v0.1.0/main.rkt rename to retropikzel/pffi/v0-1-0/main.rkt index 98e95a4..7a1accd 100644 --- a/retropikzel/pffi/v0.1.0/main.rkt +++ b/retropikzel/pffi/v0-1-0/main.rkt @@ -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)))) diff --git a/retropikzel/pffi/v0.1.0/main.scm b/retropikzel/pffi/v0-1-0/main.scm similarity index 93% rename from retropikzel/pffi/v0.1.0/main.scm rename to retropikzel/pffi/v0-1-0/main.scm index ffa09ad..02fe360 100644 --- a/retropikzel/pffi/v0.1.0/main.scm +++ b/retropikzel/pffi/v0-1-0/main.scm @@ -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)))) diff --git a/retropikzel/pffi/v0.1.0/main.sld b/retropikzel/pffi/v0-1-0/main.sld similarity index 93% rename from retropikzel/pffi/v0.1.0/main.sld rename to retropikzel/pffi/v0-1-0/main.sld index ffa09ad..02fe360 100644 --- a/retropikzel/pffi/v0.1.0/main.sld +++ b/retropikzel/pffi/v0-1-0/main.sld @@ -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)))) diff --git a/retropikzel/pffi/v0.1.0/racket.scm b/retropikzel/pffi/v0-1-0/racket.scm similarity index 99% rename from retropikzel/pffi/v0.1.0/racket.scm rename to retropikzel/pffi/v0-1-0/racket.scm index 043af62..94134b1 100644 --- a/retropikzel/pffi/v0.1.0/racket.scm +++ b/retropikzel/pffi/v0-1-0/racket.scm @@ -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) diff --git a/retropikzel/pffi/v0.1.0/sagittarius.scm b/retropikzel/pffi/v0-1-0/sagittarius.scm similarity index 99% rename from retropikzel/pffi/v0.1.0/sagittarius.scm rename to retropikzel/pffi/v0-1-0/sagittarius.scm index 7b895cf..a08222f 100644 --- a/retropikzel/pffi/v0.1.0/sagittarius.scm +++ b/retropikzel/pffi/v0-1-0/sagittarius.scm @@ -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) diff --git a/retropikzel/pffi/v0.1.0/schubert-doc.md b/retropikzel/pffi/v0-1-0/schubert-doc.md similarity index 100% rename from retropikzel/pffi/v0.1.0/schubert-doc.md rename to retropikzel/pffi/v0-1-0/schubert-doc.md diff --git a/retropikzel/pffi/v0.1.0/stklos.scm b/retropikzel/pffi/v0-1-0/stklos.scm similarity index 98% rename from retropikzel/pffi/v0.1.0/stklos.scm rename to retropikzel/pffi/v0-1-0/stklos.scm index 8cc4dfa..ee25587 100644 --- a/retropikzel/pffi/v0.1.0/stklos.scm +++ b/retropikzel/pffi/v0-1-0/stklos.scm @@ -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) diff --git a/retropikzel/pffi/v0.1.0/kawa.sld b/retropikzel/pffi/v0.1.0/kawa.sld deleted file mode 100644 index e1db640..0000000 --- a/retropikzel/pffi/v0.1.0/kawa.sld +++ /dev/null @@ -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 - - - )) diff --git a/test/import.scm b/test/import.scm index 653c8a0..9a4c219 100644 --- a/test/import.scm +++ b/test/import.scm @@ -1,6 +1,6 @@ (import (scheme base) (scheme write) - (retropikzel pffi v0.1.0 main)) + (retropikzel pffi v0-1-0 main)) (display "Hello") (newline) diff --git a/test/pffi-define b/test/pffi-define deleted file mode 100755 index a838f85..0000000 Binary files a/test/pffi-define and /dev/null differ diff --git a/test/pffi-define.scm b/test/pffi-define.scm index 4d80842..7b6f62e 100644 --- a/test/pffi-define.scm +++ b/test/pffi-define.scm @@ -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 "=================")