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.
Thanks, Joel
Afficher les réponses par date
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
On Wed, 2008-05-21 at 15:33 -0400, Marc Feeley wrote:
On 20-May-08, at 12:35 PM, Joel J. Adamson wrote:
The executable program can then be built with:
% gcc -DHAVE_CONFIG_H -fno-strict-aliasing *.c -o myprogram.exe
You need
% gcc -DHAVE_CONFIG_H -fno-strict-aliasing -fwrapv *.c -o myprogram.exe
for correctness.
You can add a mix of the following C compiler options to optimize the program:
-O1 -D___SINGLE_HOST -fomit-frame-pointer
The following help a lot, too (and the first and third are really cheap):
-fno-math-errno -fschedule-insns2 -fno-trapping-math
Brad
Marc Feeley feeley@iro.umontreal.ca writes:
On 20-May-08, at 12:35 PM, Joel J. Adamson wrote:
Dear List,
[...]
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
[...]
Alright, this rocks! I am going to try this out right now!
I'll let you know if it works -- this is getting ready for release soon.
Thanks a lot, Joel
Marc Feeley feeley@iro.umontreal.ca writes:
On 20-May-08, at 12:35 PM, Joel J. Adamson wrote:
Dear List,
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
It worked. My game is now posted on the Dumping Grounds, and I'm waiting to hear back from Savannah...for the time being it's available on my webpage: http://www.unc.edu/~adamsonj/software.html
Thanks for all the help --- this goes a long way toward getting my bigger projects released! Joel