This commit is contained in:
retropikzel 2025-09-21 18:36:10 +03:00
parent d3bb6b4602
commit b0184ac4f7
5 changed files with 40 additions and 25 deletions

1
.gitignore vendored
View File

@ -41,3 +41,4 @@ README.html
*.tar.gz
foreign/c/primitives/chibi/foreign-c.c
*.pdf
.*

View File

@ -2,23 +2,24 @@ ARG SCHEME=chibi
ARG IMAGE=chibi:head
FROM schemers/${IMAGE}
FROM debian:trixie AS build
WORKDIR /debs
WORKDIR /cache/debs
RUN apt-get update && apt-get install \
-y \
--no-install-recommends \
--no-install-suggests \
--download-only \
gcc libffi-dev libc-dev cmark make linux-libc-dev
gcc libffi-dev libc-dev make linux-libc-dev
RUN cp -r /var/cache/apt/archives/*.deb .
ARG SCHEME=chibi
ARG IMAGE=chibi:head
FROM schemers/${IMAGE}
COPY --from=build /var/cache/apt/archives/*.deb /debs/
RUN dpkg -i /debs/*.deb
COPY --from=build /cache /cache
WORKDIR /cache/debs
RUN dpkg -i *.deb
COPY --from=retropikzel1/compile-r7rs /opt/compile-r7rs /opt/compile-r7rs
ENV PATH=${PATH}:/opt/compile-r7rs/bin:/build/usr/bin
RUN /opt/compile-r7rs/bin/install-docker
WORKDIR /
ARG SCHEME=chibi
ENV COMPILE_R7RS=${SCHEME}
ENV GUILE_AUTO_COMPILE=0
RUN mkdir -p ${HOME}/.snow && echo "()" > ${HOME}/.snow/config.scm

View File

@ -1,16 +1,8 @@
.PHONY: libtest.o tests/libtest.so libtest.a documentation README.html foreign-c.pdf
PDFENGINE=weasyprint
VERSION=0.10.6
TEST=primitives
.PHONY: libtest.o tests/libtest.so libtest.a documentation README.html
SCHEME=chibi
TMPDIR=tmp/${SCHEME}
SNOW_CHIBI_ARGS=""
DOCKERIMG=${SCHEME}:head
VERSION=0.10.6
CC=gcc
ifeq "${SCHEME}" "chicken"
DOCKERIMG="chicken:5"
endif
TMPDIR=.tmp/
all: package
@ -23,6 +15,11 @@ package: README.html
--description="Portable foreign function interface for R7RS Schemes" \
foreign/c.sld
README.html: README.md
echo "<pre>" > README.html
cat README.md >> README.html
echo "</pre>" >> README.html
install: package
snow-chibi --impls=${SCHEME} ${SNOW_CHIBI_ARGS} install foreign-c-${VERSION}.tgz; \
if [ "${SCHEME}" = "gauche" ]; then \
@ -35,15 +32,21 @@ install: package
uninstall:
snow-chibi --impls=${SCHEME} remove "(foreign c)"
test: ${TMPDIR}/test/libtest.o ${TMPDIR}/test/libtest.so ${TMPDIR}/test/libtest.a
test-old: ${TMPDIR}/test/libtest.o ${TMPDIR}/test/libtest.so ${TMPDIR}/test/libtest.a
cp -r foreign ${TMPDIR}/test/
cp tests/*.scm ${TMPDIR}/test/
cp tests/c-include/libtest.h ${TMPDIR}/test/
cd ${TMPDIR}/test && \
COMPILE_R7RS_CHICKEN="-L -ltest -I. -L." \
COMPILE_R7RS=${SCHEME} \
compile-r7rs -o ${TEST} ${TEST}.scm
cd ${TMPDIR}/test \ && printf "\n" | LD_LIBRARY_PATH=. ./${TEST}
COMPILE_R7RS=${SCHEME} timeout 600 compile-r7rs -o ${TEST} ${TEST}.scm
cd ${TMPDIR}/test && printf "\n" | LD_LIBRARY_PATH=. timeout 600 ./${TEST}
test:
rm -rf ${TMPDIR}
mkdir -p ${TMPDIR}
cp test.scm ${TMPDIR}/
cp -r foreign ${TMPDIR}/
cd ${TMPDIR} && COMPILE_R7RS="${SCHEME}" test-r7rs -I . -o test test.scm
test-docker:
docker build --build-arg IMAGE=${DOCKERIMG} --build-arg SCHEME=${SCHEME} --tag=foreign-c-test-${SCHEME} -f Dockerfile.test .
@ -64,9 +67,6 @@ ${TMPDIR}/test/libtest.a: ${TMPDIR}/test/libtest.o tests/c-src/libtest.c
${TMPDIR}:
mkdir -p ${TMPDIR}
README.html: README.md
cmark README.md > README.html
chibi: foreign/c/primitives/chibi/foreign-c.stub
chibi-ffi foreign/c/primitives/chibi/foreign-c.stub
${CC} \

2
primitives Executable file
View File

@ -0,0 +1,2 @@
#!/bin/sh
ypsilon --r7rs --mute --quiet --sitelib=. --top-level-program primitives.scm "$@"

11
test.scm Normal file
View File

@ -0,0 +1,11 @@
(import (scheme base)
(scheme write)
(foreign c)
(srfi 64))
(test-begin "Foreign-c")
(test-assert (number? (c-type-size 'int8)))
(test-assert(= (c-type-size 'int8) 1))
(test-end "Foreign-c")