Next: Hello World, Previous: Callbacks, Up: Top
The c-generate procedure takes a library name and an
optional preamble. It reads the library.cdecl file and
writes two .c files. The preamble is included at the top of
both. It typically contains #include C pre-processor
directives required by the C library, but could include additional
shim code. Here is a short script that generates a shim for the
example “Hello, World!” program.
(load-option 'FFI)
(c-generate "prhello" "#include <gtk/gtk.h>")
This script will produce three files:
AUXDIR directory —
e.g. /usr/local/lib/mit-scheme/.
c-includes structure containing all of
the types, constants and functions declared in the .cdecl file.
The following Makefile rules describe the process of building and installing a shim for the example “Hello, World!” program.
install: build
echo '(install-shim "$(DESTDIR)" "prhello")' \
| mit-scheme --batch-mode
clean:
rm prhello-const* prhello-types* prhello-shim*
build: prhello-shim.so prhello-types.bin prhello-const.bin
prhello-shim.so: prhello-shim.o
echo "(link-shim)" \
| mit-scheme --batch-mode -- -o $@ $^ `pkg-config --libs gtk+-2.0`
prhello-shim.o: prhello-shim.c
echo '(compile-shim)' \
| mit-scheme --batch-mode -- `pkg-config --cflags gtk+-2.0` -c $<
prhello-shim.c prhello-const.c prhello-types.bin: prhello.cdecl
echo '(generate-shim "prhello" "#include <gtk/gtk.h>")' \
| mit-scheme --batch-mode
prhello-const.bin: prhello-const.scm
echo '(sf "prhello-const")' | mit-scheme --batch-mode
prhello-const.scm: prhello-const
./prhello-const
prhello-const: prhello-const.o
$(CC) -o $@ $^ $(LDFLAGS) `pkg-config --libs gtk+-2.0`
prhello-const.o: prhello-const.c
$(CC) `pkg-config --cflags gtk+-2.0` $(CFLAGS) -o $@ -c $<