#!/usr/bin/env bash # Copyright (c) 2014 Patrick Tudor # BSD-New License # v1.0.0 20140701 ptudor@ptudor.net # # This script is used to build an iPhone library of GeographicLib. # http://geographiclib.sourceforge.net/html/index.html # # The first assumption in this script is that the current directory # contains the source code, i.e.: # git clone -b r1.46 git://git.code.sf.net/p/geographiclib/code geographiclib146 # cd geographiclib146 # Next, it assumes XCode is installed, see "APPROOT" below. # After that, we explicitly name the SDK version in "sdkversion" for "SYSROOT" and "CFLAGS." # The functions explicitly name the build architectures, armv7, armv7s, arm64, i386, and x86_64 # # The script expects one option of the set [arm|x86|both] # # where we have XCode installed APPROOT="/Applications/Xcode.app/Contents" # the minimum version supported #sdkversion="7.1" #sdkversion="8.4" #sdkversion="9.3" sdkversion="10.2" # seconds since epoch as a file extension epoch=`date +%s` function display_usage() { echo "Usage: $0 [arm|x86|both]" exit } function prepare_arm() { echo "Preparing arm..." DEVROOT=$APPROOT/Developer/Platforms/iPhoneOS.platform/Developer # because of symlink null sdkversion should work too SYSROOT=$DEVROOT/SDKs/iPhoneOS${sdkversion}.sdk # CFLAGS="-arch armv7 -arch armv7s -arch arm64 -isysroot $SYSROOT -miphoneos-version-min=${sdkversion}" CXXFLAGS=$CFLAGS LDFLAGS=$CFLAGS # export CFLAGS=$CFLAGS export CXXFLAGS=$CXXFLAGS export LDFLAGS=$LDFLAGS } function prepare_x86() { echo "Preparing x86..." DEVROOT=$APPROOT/Developer/Platforms/iPhoneSimulator.platform/Developer SYSROOT=$DEVROOT/SDKs/iPhoneSimulator${sdkversion}.sdk # CFLAGS="-arch i386 -arch x86_64 -isysroot $SYSROOT -miphoneos-version-min=${sdkversion}" CXXFLAGS=$CFLAGS LDFLAGS=$CFLAGS # export CFLAGS=$CFLAGS export CXXFLAGS=$CXXFLAGS export LDFLAGS=$LDFLAGS } function prepare_cc() { echo "Building library..." CC=$APPROOT/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang CXX=$APPROOT/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ export CC=$CC export CXX=$CXX } function build_arm() { mkdir -p BUILD ; cd BUILD ../configure --host=arm-apple-darwin13 make clean && make file src/.libs/libGeographic.a ls -lh src/.libs/libGeographic.a cp src/.libs/libGeographic.a ../libGeographic.a-arm-$epoch cp src/.libs/libGeographic.12.dylib ../libGeographic.dylib-arm-$epoch cd .. } function build_x86() { mkdir -p BUILD ; cd BUILD ../configure --host=x86_64-apple-darwin13 make clean && make file src/.libs/libGeographic.a ls -lh src/.libs/libGeographic.a cp src/.libs/libGeographic.a ../libGeographic.a-x86-$epoch cp src/.libs/libGeographic.12.dylib ../libGeographic.dylib-x86-$epoch cd .. } function run_lipo() { echo "Running lipo on .a" lipo -output libGeographic.a-fat-$epoch -create libGeographic.a-arm-$epoch libGeographic.a-x86-$epoch file libGeographic.a-fat-$epoch echo "Running lipo on .dylib" lipo -output libGeographic.dylib-fat-$epoch -create libGeographic.dylib-arm-$epoch libGeographic.dylib-x86-$epoch file libGeographic.dylib-fat-$epoch echo "All done!" } if [ $# -lt 1 ] then display_usage fi case "$1" in arm) echo "Building arm..." prepare_cc prepare_arm build_arm ;; x86) echo "Building x86..." prepare_cc prepare_x86 build_x86 ;; both) echo "Building both arm and x86..." prepare_cc prepare_arm build_arm prepare_x86 build_x86 run_lipo ;; *) echo "Error: No valid option found." display_usage ;; esac