Library is bit cleaner now
This commit is contained in:
parent
2710603c16
commit
dd8880c9e6
|
|
@ -42,3 +42,5 @@ README.html
|
|||
foreign/c/primitives/chibi/foreign-c.c
|
||||
*.pdf
|
||||
.*
|
||||
foreign/c.c
|
||||
*.tmp
|
||||
|
|
|
|||
18
Makefile
18
Makefile
|
|
@ -19,6 +19,7 @@ MITLIBDIR=$(shell echo "(display (->namestring (system-library-directory-pathnam
|
|||
|
||||
|
||||
build:
|
||||
rm -rf *.tgz
|
||||
echo "<pre>$$(cat README.md)</pre>" > README.html
|
||||
snow-chibi package \
|
||||
--version=${VERSION} \
|
||||
|
|
@ -26,17 +27,7 @@ build:
|
|||
--doc=README.html \
|
||||
--foreign-depends=ffi \
|
||||
--description="Portable foreign function interface for R7RS Schemes" \
|
||||
--test=test.scm \
|
||||
foreign/c.sld \
|
||||
foreign/c/array.sld \
|
||||
foreign/c/struct.sld \
|
||||
foreign/c/chibi-primitives.sld \
|
||||
foreign/c/chicken-primitives.sld \
|
||||
foreign/c/guile-primitives.sld \
|
||||
foreign/c/mosh-primitives.sld \
|
||||
foreign/c/racket-primitives.sld \
|
||||
foreign/c/sagittarius-primitives.sld \
|
||||
foreign/c/ypsilon-primitives.sld
|
||||
foreign/c.sld
|
||||
|
||||
build-gauche:
|
||||
snow-chibi package \
|
||||
|
|
@ -48,7 +39,7 @@ build-gauche:
|
|||
foreign/c/gauche-primitives.stub
|
||||
|
||||
install:
|
||||
snow-chibi --impls=${SCHEME} ${SNOW_CHIBI_ARGS} install ${PKG}
|
||||
snow-chibi --impls=${SCHEME} --always-yes install ${PKG}
|
||||
|
||||
install-gauche:
|
||||
if [ "${SCHEME}" = "gauche" ]; then \
|
||||
|
|
@ -70,9 +61,6 @@ test: libtest.o libtest.so libtest.a
|
|||
COMPILE_R7RS=${SCHEME} compile-r7rs -I . -o test test.scm
|
||||
LD_LIBRARY_PATH=. ./test
|
||||
|
||||
test-no: package libtest.o libtest.so libtest.a
|
||||
COMPILE_R7RS=${SCHEME} test-snowball --apt-pkgs "libffi-dev" ${PKG}
|
||||
|
||||
test-docker:
|
||||
docker build --build-arg IMAGE=${DOCKERIMG} --build-arg SCHEME=${SCHEME} --tag=retropikzel-foreign-c-test-${SCHEME} -f Dockerfile.test .
|
||||
docker run -v "${PWD}:/workdir" -w /workdir -t retropikzel-foreign-c-test-${SCHEME} sh -c "make SCHEME=${SCHEME} SNOW_CHIBI_ARGS=--always-yes build install test"
|
||||
|
|
|
|||
|
|
@ -190,7 +190,7 @@
|
|||
(define libc-name "ucrtbase"))
|
||||
(else
|
||||
(define libc-name
|
||||
(cond ((get-environment-variable "BE_HOST_CPU") "root") ; Haiku
|
||||
(cond ;((get-environment-variable "BE_HOST_CPU") "root") ; Haiku
|
||||
(else "c")))))
|
||||
|
||||
|
||||
|
|
@ -315,7 +315,7 @@
|
|||
(kawa
|
||||
(define c-null?
|
||||
(lambda (pointer)
|
||||
(invoke pointer 'equals null-pointer))))
|
||||
(invoke pointer 'equals (make-c-null)))))
|
||||
;; FIXME
|
||||
(chibi #t) ;; In chibi-primitives.stub
|
||||
(gauche (define c-null? pointer-null?))
|
||||
|
|
|
|||
|
|
@ -8,22 +8,24 @@
|
|||
(scheme inexact))
|
||||
(cond-expand
|
||||
(chibi (import (foreign c chibi-primitives)))
|
||||
(chicken (import ;(chicken memory) ;; FIXME
|
||||
(foreign c chicken-primitives)))
|
||||
(chicken (import (foreign c chicken-primitives)))
|
||||
;(cyclone (import (foreign c cyclone-primitives)))
|
||||
;(gambit (import (foreign c gambit-primitives)))
|
||||
;(gauche (import (foreign c gauche-primitives)))
|
||||
(guile (import (foreign c guile-primitives)))
|
||||
;(kawa (import (foreign c kawa-primitives)))
|
||||
(kawa (import (foreign c kawa-primitives)))
|
||||
;(mit-scheme (import (foreign c mit-scheme-primitives)))
|
||||
;(larceny (import (foreign c larceny-primitives)))
|
||||
(mosh (import (foreign c mosh-primitives)))
|
||||
(racket (import (foreign c racket-primitives)))
|
||||
(sagittarius (import (foreign c sagittarius-primitives)))
|
||||
(stklos (import (foreign c stklos-primitives))
|
||||
;; FIXME
|
||||
(export foreign-c:string-split))
|
||||
;(ypsilon (import (foreign c ypsilon-primitives)) (export int))
|
||||
(ypsilon (import (foreign c ypsilon-primitives))
|
||||
(export c-function
|
||||
c-callback
|
||||
bytevector-c-int8-set!
|
||||
bytevector-c-uint8-ref))
|
||||
)
|
||||
(export ;;;; Primitives 1
|
||||
c-type-size
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
((equal? type 'unsigned-short) (c-bytevector-sint-ref pointer offset (native-endianness) (size-of-type 'unsigned-short)))
|
||||
((equal? type 'int) (c-bytevector-sint-ref pointer offset (native-endianness) (size-of-type 'int)))
|
||||
((equal? type 'unsigned-int) (c-bytevector-sint-ref pointer offset (native-endianness) (size-of-type 'unsigned-int)))
|
||||
((equal? type 'long) (c-bytevector-sint-ref pointer offset (native-endianness) (sife-of-type 'long)))
|
||||
((equal? type 'long) (c-bytevector-sint-ref pointer offset (native-endianness) (size-of-type 'long)))
|
||||
((equal? type 'unsigned-long) (c-bytevector-sint-ref pointer offset (native-endianness) (size-of-type 'unsigned-long)))
|
||||
((equal? type 'float) (c-bytevector-ieee-single-native-ref pointer offset))
|
||||
((equal? type 'double) (c-bytevector-ieee-double-native-ref pointer offset))
|
||||
|
|
@ -104,7 +104,8 @@
|
|||
(define shared-object-load
|
||||
(lambda (path options)
|
||||
(let ((shared-object (dlopen path RTLD-NOW))
|
||||
(maybe-error (dlerror)))
|
||||
;(maybe-error (dlerror))
|
||||
)
|
||||
shared-object)))
|
||||
|
||||
(define c-bytevector?
|
||||
|
|
@ -142,9 +143,10 @@
|
|||
|
||||
(define make-c-function
|
||||
(lambda (shared-object c-name return-type argument-types)
|
||||
(dlerror) ;; Clean all previous errors
|
||||
;(dlerror) ;; Clean all previous errors
|
||||
(let ((c-function (dlsym shared-object c-name))
|
||||
(maybe-dlerror (dlerror)))
|
||||
;(maybe-dlerror (dlerror))
|
||||
)
|
||||
(lambda arguments
|
||||
(let* ((return-pointer
|
||||
(internal-ffi-call (length argument-types)
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -93,6 +93,9 @@
|
|||
((equal? type 'double) (c-value "sizeof(double)" int))
|
||||
((equal? type 'pointer) (c-value "sizeof(void*)" int)))))
|
||||
|
||||
;; FIXME
|
||||
(define align-of-type size-of-type)
|
||||
|
||||
(define-c pointer-address
|
||||
"(void *data, int argc, closure _, object k, object pointer)"
|
||||
"make_c_opaque(opq, &(void*)opaque_ptr(pointer));
|
||||
|
|
@ -226,13 +229,13 @@
|
|||
*p = double_value(value);
|
||||
return_closcall1(data, k, make_boolean(boolean_t));")
|
||||
|
||||
(define-c pointer-pointer-set!
|
||||
(define-c c-bytevector-pointer-set!
|
||||
"(void *data, int argc, closure _, object k, object pointer, object offset, object value)"
|
||||
"uintptr_t* p = opaque_ptr(pointer) + obj_obj2int(offset);
|
||||
*p = (uintptr_t)&opaque_ptr(value);
|
||||
return_closcall1(data, k, make_boolean(boolean_t));")
|
||||
|
||||
(define pointer-set!
|
||||
#;(define pointer-set!
|
||||
(lambda (pointer type offset value)
|
||||
(cond
|
||||
((equal? type 'int8) (pointer-int8-set! pointer offset value))
|
||||
|
|
@ -341,15 +344,15 @@
|
|||
alloca_double(d, *p);
|
||||
return_closcall1(data, k, d);")
|
||||
|
||||
(define-c pointer-pointer-get
|
||||
(define-c c-bytevector-pointer-ref
|
||||
"(void *data, int argc, closure _, object k, object pointer, object offset)"
|
||||
"make_c_opaque(opq, (void*)opaque_ptr(pointer) + obj_obj2int(offset));
|
||||
return_closcall1(data, k, &opq);")
|
||||
|
||||
#;(define c-bytevector-u8-set! pointer-uint8-set!)
|
||||
(define c-bytevector-u8-set! pointer-uint8-set!)
|
||||
(define c-bytevector-u8-ref pointer-uint8-get)
|
||||
|
||||
(define pointer-get
|
||||
#;(define pointer-get
|
||||
(lambda (pointer type offset)
|
||||
(cond
|
||||
((equal? type 'int8) (pointer-int8-get pointer offset))
|
||||
|
|
@ -7,7 +7,7 @@
|
|||
(scheme inexact)
|
||||
(scheme process-context)
|
||||
(cyclone foreign)
|
||||
(scheme cyclone primitives)))
|
||||
(scheme cyclone primitives))
|
||||
(export size-of-type
|
||||
align-of-type
|
||||
shared-object-load
|
||||
|
|
@ -18,4 +18,4 @@
|
|||
c-bytevector-u8-set!
|
||||
c-bytevector-pointer-ref
|
||||
c-bytevector-pointer-set!)
|
||||
(include "primitives-cyclone.scm"))
|
||||
(include "cyclone-primitives.scm"))
|
||||
|
|
|
|||
|
|
@ -0,0 +1,26 @@
|
|||
|
||||
;;;; This file is dependent on content of other files added trough (include...)
|
||||
;;;; And that's why it is separated
|
||||
|
||||
(define make-c-function
|
||||
(lambda (shared-object c-name return-type argument-types)
|
||||
(dlerror) ;; Clean all previous errors
|
||||
(let ((c-function (dlsym shared-object c-name))
|
||||
(maybe-dlerror (dlerror)))
|
||||
(lambda arguments
|
||||
(let ((return-pointer (internal-ffi-call (length argument-types)
|
||||
(type->libffi-type-number return-type)
|
||||
(map type->libffi-type-number argument-types)
|
||||
c-function
|
||||
(size-of-type return-type)
|
||||
arguments)))
|
||||
(c-bytevector-get return-pointer return-type 0))))))
|
||||
|
||||
(define-syntax define-c-procedure
|
||||
(syntax-rules ()
|
||||
((_ scheme-name shared-object c-name return-type argument-types)
|
||||
(define scheme-name
|
||||
(make-c-function shared-object
|
||||
(symbol->string c-name)
|
||||
return-type
|
||||
argument-types)))))
|
||||
|
|
@ -155,7 +155,6 @@
|
|||
(list (cons 'linker linker)
|
||||
(cons 'lookup lookup)))))
|
||||
|
||||
(define null-pointer (make-c-null))
|
||||
(define u8-value-layout
|
||||
(invoke (static-field java.lang.foreign.ValueLayout 'JAVA_BYTE)
|
||||
'withByteAlignment
|
||||
|
|
|
|||
Loading…
Reference in New Issue