BTW, to get Gambit to compile as an iOS library using this script, you need to make a small tweak to Xcode after some Xcode updates (or fresh install). You'll get a link error to crt1.10.6 unless you make the following change in /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib (or any earlier version of the SDK):
sudo ln -s crt1.3.1.o crt1.10.6.o
Then it all compiles fine. You don't need this change for the sim or osx as both already have that lib available. Cheers,
Adam
On Sun, Jul 31, 2011 at 7:58 PM, Adam King akingcoder@gmail.com wrote:
I'm now using 'Apple LLVM compiler 3.0" to compile Gambit (osx, iOS Simulator and iOS device). I've switched to clang as my main compiler now since Apple seems to be making that their main compiler. I use my own set of compile scripts to compile Gambit (from latest git) into a static lib that I then link into my XCode project. I keep 3 separate builds, one for each 'platform' (osx, ios sim and ios device), each in their own directory with separate setup and config scripts. I generally only rebuild the libs when the Gambit repo is updated. Each script is a little different, but to compile the static Gambit lib an iOS arm device (arm7 only), I use the following 2 scripts:
setup.sh (to setup the env):
export PATH="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:$PATH" export CC="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang -arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk" export CXX="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang++ -arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk"
compile.sh:
CFLAGS="-arch armv7" LDFLAGS="-arch armv7" ./configure --host=arm --prefix=/usr/local/Gambit-C/iPhoneOS CFLAGS="-arch armv7" LDFLAGS="-arch armv7" make sudo make install
The script for each type of build is slightly different and is based on getting Gambit to build over the last year or so - and originally based on JLongster's scripts. This is using the latest beta Xcode 4.2 with iOS 5.0 under Lion and SL - but it was working under XCode 4.0 with just changing the CC/CXX paths in setup.sh.
Adam
On Sun, Jul 31, 2011 at 6:14 PM, Marc Feeley feeley@iro.umontreal.cawrote:
On 2011-07-31, at 4:48 PM, mikel evins wrote:
On Jul 31, 2011, at 6:50 AM, Marc Feeley wrote:
I have encountered this problem also (with Lion and the new Xcode).
The problem is due to LLVM gcc which is the default C compiler now and which does not compile the Gambit sources properly when the --enable-single-host configure option is given. I've tried using gdb to find where the error is, but it is giving me an execution trace which doesn't correlate with the sources so I am confused in regards to the location of the error.
So to fix the problem temporarily I did
CC="i686-apple-darwin11-gcc-4.2.1" ./configure --enable-single-host make make check
I also committed a patch to look for "i686-apple-darwin11-gcc-4.2.1"
before "gcc", but that is not a long term solution.
My guess is that LLVM gcc is buggy, but I have not yet found a proof.
Using the above workaround, I certainly get farther than before. I can
make it through the make check without crashes or errors.
After that, I tried this:
- rm examples/iOS/Prefix.pch (needed because otherwise make update
fails when git is unable to update that file)
make update
cd examples/iOS
make examples
./build-gambit-iOS
A cursory examination seems to show that these steps all succeeded, but
I'm unable to run Gambit-REPL in the iPad or iPhone simulator. It launches and immediately crashes, complaining that it can't access memory address 1.
Perhaps I need to alter the Makefiles used in the iOS build to ensure
that LLVM is not used? Or perhaps I overlooked some other step?
Indeed the build-gambit-iOS script also has to be modified to avoid LLVM gcc. That can be achieved by changing the lines:
case "$kind$platform_type" in
iPhoneOS) config_options_extras=--host=arm-apple-darwin ;;
iPhoneSimulator) config_options_extras= ;;
esac
export CC="$ios_platform_dir/Developer/usr/bin/gcc -isysroot $ios_sdk_dir -arch $arch" export CXX="$ios_platform_dir/Developer/usr/bin/g++ -isysroot $ios_sdk_dir -arch $arch"
to
case "$kind$platform_type" in
iPhoneOS) config_options_extras=--host=arm-apple-darwin export
CC="$ios_platform_dir/Developer/usr/bin/arm-apple-darwin10-gcc-4.2.1 -isysroot $ios_sdk_dir -arch $arch" export CXX="$ios_platform_dir/Developer/usr/bin/arm-apple-darwin10-g++-4.2.1 -isysroot $ios_sdk_dir -arch $arch" ;;
iPhoneSimulator) config_options_extras= export CC="$ios_platform_dir/Developer/usr/bin/i686-apple-darwin11-gcc-4.2.1 -isysroot $ios_sdk_dir -arch $arch" export CXX="$ios_platform_dir/Developer/usr/bin/i686-apple-darwin11-g++-4.2.1 -isysroot $ios_sdk_dir -arch $arch" ;;
esac
I wonder why Apple is moving to LLVM gcc. I've read somewhere that Apple thinks gcc is more buggy than LLVM gcc, and that it generates better code. At least for compiling Gambit, this seems to be a mistaken belief on both counts.
Marc
Gambit-list mailing list Gambit-list@iro.umontreal.ca https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list