Some notes on cross-compiling GambitC
The command to use is:
$ env CC=/usr/local/bin/arm-apple-darwin-gcc CC_FOR_BUILD=gcc ./configure --host=mac; make
Well, kind of. First you do that, then you copy gsc/gsc to gsc/gsc.onboard, then you go to a new directory, and type:
$ ./configure;make
and copy the gsc/gsc from that directory into the first directory.
To compile a script into an exe:
$ gsc/gsc -:=. -c euler.scm $ gsc/gsc -:=. -link euler.c $ /usr/local/bin/arm-apple-darwin-gcc euler.c euler_.c -Iinclude -Llib -lgambc -o euler
It's freaking huge!
$ ls -alh euler -rwxr-xr-x 1 bwinton bwinton 4M Jan 23 14:22 euler $ ls -alh /WifiToggle -rwxr-xr-x 1 bwinton bwinton 17K Jan 16 14:07 /WifiToggle
And it's not a lot faster. 0.1643 seconds for the compiled version, as opposed to 0.1803 seconds for the interpreter.
But on my Mac:
$ more m1.c power_of_2 (int x) { return 1<<x; } $ more m2.scm (c-declare "extern int power_of_2 ();") (define pow2 (c-lambda (int) int "power_of_2")) (define (twice x) (cons x x)) $ more m3.scm (write (map twice (map pow2 '(1 2 3 4)))) (newline) $ gsc/gsc -:=. -link -flat -o foo.o1.c m2 m3 $ /usr/local/bin/arm-apple-darwin-gcc -Iinclude -bundle -D___DYNAMIC m1.c m2.c m3.c foo.o1.c -o foo.o1 $ ls -alh foo.o1 -rwxr-xr-x 1 bwinton bwinton 13K Jan 23 14:45 foo.o1
then on the iTouch,
# scp bwinton@latte.ca:/Users/bwinton/Programming/Bazaar/iTouch/gambc-v4_1_2/foo.o1 . # gsi foo.o1 ((2 . 2) (4 . 4) (8 . 8) (16 . 16)) # gsi Gambit v4.1.2 > (load "foo") ((2 . 2) (4 . 4) (8 . 8) (16 . 16)) "/private/var/root/foo.o1" > (twice 5) (5 . 5) > (pow2 10) 1024