On 20-May-08, at 12:35 PM, Joel J. Adamson wrote:
Dear List,
I have a small game project that I'd like to distribute to a wider audience (i.e., people who don't have Gambit-C). I've gotten it to compile fully on my system, but I'd like to make sure someone else can compile it. If I distribute Gambit-compiled C, what do I need to include (gambit.h, _gambc.c?) so that anyone with a C compiler can compile it?
I know this would be simple for me to figure out if I knew more about C; I throw myself humbly at your broadly educated feet.
You need:
lib/*.c lib/*.h include/*.h
and the .c files generated by the Gambit-C compiler for your Scheme source code.
The executable program can then be built with:
% gcc -DHAVE_CONFIG_H -fno-strict-aliasing *.c -o myprogram.exe
You can add a mix of the following C compiler options to optimize the program:
-O1 -D___SINGLE_HOST -fomit-frame-pointer
Here's a complete example (commands executed from Gambit's root directory):
% mkdir myprog % mkdir myprog/lib % mkdir myprog/include % mkdir myprog/src % cd myprog % cp ../lib/*.c lib % cp ../lib/*.h lib % cp ../include/*.h include % cd src % cat > foo.scm (display "hello\n") % cat > bar.scm (display "world\n") % gsc -link foo.scm bar.scm % gcc -I../lib -I../include -DHAVE_CONFIG_H -fno-strict-aliasing ../ lib/*.c *.c -o myprogram.exe ../lib/mem.c:1492:32: warning: trigraph ??> ignored, use -trigraphs to enable % ./myprogram.exe hello world
Note that the header files in Gambit's include directory (i.e. gambit.h and config.h) are generated by Gambit's configure script to match the features of your build platform. If you want a highly portable distribution of your program you should use a similar configure script. Basically, take a copy of configure.ac from the Gambit distribution and change the line
AC_OUTPUT(makefile include/makefile include/gambit.h ...)
to
AC_OUTPUT(include/gambit.h)
Then do
% autoconf configure.ac > configure % chmod 755 configure
And put include/gambit.h.in and include/config.h.in in your include directory.
The build procedure for your program will then be:
% ./configure % gcc -Ilib -Iinclude -DHAVE_CONFIG_H -fno-strict-aliasing lib/*.c *.c -o myprogram.exe
Its also a good idea to use makefiles instead of a single call to gcc.
Alternatively, you could distribute your program with Gambit's .tar.gz and build Gambit before building your program. This has the added benefit that you can supply the .scm files and the end-user can change them and rebuild the program.
Marc