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 $<