Edit

kc3-lang/SDL/build-scripts/iosbuild.sh

Branch :

  • Show log

    Commit

  • Author : David Ludwig
    Date : 2014-04-09 21:29:19
    Hash : 3dcb451f
    Message : Added a README file regarding WinRT support To note, this file is currently formatted with CRLF line endings, rather than LF, to allow the file to be viewed with Notepad.

  • build-scripts/iosbuild.sh
  • #!/bin/sh
    #
    # Build a fat binary for iOS
    # Based on fatbuild.sh and code from the Ignifuga Game Engine
    
    # Number of CPUs (for make -j)
    NCPU=`sysctl -n hw.ncpu`
    if test x$NJOB = x; then
        NJOB=$NCPU
    fi
    
    # SDK path
    XCODE_PATH=`xcode-select --print-path`
    if [ -z "$XCODE_PATH" ]; then
        echo "Could not find XCode location (use xcode-select -switch to set the correct path)"
        exit 1
    fi
    
    prepare_environment() {
        ARCH=$1
        
        if test x$SDK_VERSION = x; then
          export SDK_VERSION=`xcodebuild -showsdks | grep iphoneos | sed "s|.*iphoneos||"`
          if [ -z "$XCODE_PATH" ]; then
              echo "Could not find a valid iOS SDK"
              exit 1
          fi  
        fi
        
        case $ARCH in
            armv6)
                DEV_PATH="$XCODE_PATH/Platforms/iPhoneOS.platform/Developer"
                SDK_PATH="$DEV_PATH/SDKs/iPhoneOS$SDK_VERSION.sdk"
                ;;
            armv7)
                DEV_PATH="$XCODE_PATH/Platforms/iPhoneOS.platform/Developer"
                SDK_PATH="$DEV_PATH/SDKs/iPhoneOS$SDK_VERSION.sdk"
                ;;
            i386)
                DEV_PATH="$XCODE_PATH/Platforms/iPhoneSimulator.platform/Developer"
                SDK_PATH="$DEV_PATH/SDKs/iPhoneSimulator$SDK_VERSION.sdk"
                ;;
            *)
                echo "Unknown Architecture $ARCH"
                exit 1
                ;;
        esac
    
        if [ ! -d "$SDK_PATH" ]; then
            echo "Could not find iOS SDK at $SDK_PATH"
            exit 1
        fi
    
        if test x$MIN_OS_VERSION = x; then
            export MIN_OS_VERSION="3.0"
        fi
        
        # Environment flags
        CFLAGS="-g -O2 -pipe -no-cpp-precomp -isysroot $SDK_PATH \
                -miphoneos-version-min=$MIN_OS_VERSION -I$SDK_PATH/usr/include/"
        LDFLAGS="-L$SDK_PATH/usr/lib/ -isysroot $SDK_PATH \
                 -miphoneos-version-min=$MIN_OS_VERSION -static-libgcc"
        export CXXFLAGS="$CFLAGS"
        export CXXCPP="$DEV_PATH/usr/bin/llvm-cpp-4.2"
        export CPP="$CXXCPP"
        export CXX="$DEV_PATH/usr/bin/llvm-g++-4.2"
        export CC="$DEV_PATH/usr/bin/llvm-gcc-4.2"
        export LD="$DEV_PATH/usr/bin/ld"
        export AR="$DEV_PATH/usr/bin/ar"
        export AS="$DEV_PATH/usr/bin/ls"
        export NM="$DEV_PATH/usr/bin/nm"
        export RANLIB="$DEV_PATH/usr/bin/ranlib"
        export STRIP="$DEV_PATH/usr/bin/strip"
        
        # We dynamically load X11, so using the system X11 headers is fine.
        CONFIG_FLAGS="--disable-shared --enable-static"
        
        case $ARCH in
            armv6)
                export CONFIG_FLAGS="$CONFIG_FLAGS --host=armv6-apple-darwin"
                export CFLAGS="$CFLAGS -arch armv6"
                export LDFLAGS="$LDFLAGS -arch armv6"
                ;;
            armv7)
                export CONFIG_FLAGS="$CONFIG_FLAGS --host=armv7-apple-darwin"
                export CFLAGS="$CFLAGS -arch armv7"
                export LDFLAGS="$LDFLAGS -arch armv7"
                ;;
            i386)
                export CONFIG_FLAGS="$CONFIG_FLAGS --host=i386-apple-darwin"
                export CFLAGS="$CFLAGS -arch i386"
                export LDFLAGS="$LDFLAGS -arch i386"
                ;;
            *)
                echo "Unknown Architecture $ARCH"
                exit 1
                ;;
        esac
    }
    
    prepare_environment "armv6"
    echo "Building with iOS SDK v$SDK_VERSION for iOS >= $MIN_OS_VERSION"
    
    #
    # Find the configure script
    #
    srcdir=`dirname $0`/..
    srcdir=`cd $srcdir && pwd`
    auxdir=$srcdir/build-scripts
    cd $srcdir
    
    #
    # Figure out which phase to build:
    # all,
    # configure, configure-armv6, configure-armv7, configure-i386
    # make, make-armv6, make-armv7, make-i386, merge
    # clean
    if test x"$1" = x; then
        phase=all
    else
        phase="$1"
    fi
    case $phase in
        all)
            configure_armv6="yes"
            configure_armv7="yes"
            configure_i386="yes"
            make_armv6="yes"
            make_armv7="yes"
            make_i386="yes"
            merge="yes"
            ;;
        configure)
            configure_armv6="yes"
            configure_armv7="yes"
            configure_i386="yes"
            ;;
        configure-armv6)
            configure_armv6="yes"
            ;;
        configure-armv7)
            configure_armv7="yes"
            ;;
        configure-i386)
            configure_i386="yes"
            ;;
        make)
            make_armv6="yes"
            make_armv7="yes"
            make_i386="yes"
            merge="yes"
            ;;
        make-armv6)
            make_armv6="yes"
            ;;
        make-armv7)
            make_armv7="yes"
            ;;
        make-i386)
            make_i386="yes"
            ;;
        merge)
            merge="yes"
            ;;
        clean)
            clean_armv6="yes"
            clean_armv7="yes"
            clean_i386="yes"
            ;;
        clean-armv6)
            clean_armv6="yes"
            ;;
        clean-armv7)
            clean_armv7="yes"
            ;;
        clean-i386)
            clean_i386="yes"
            ;;
        *)
            echo "Usage: $0 [all|configure[-armv6|-armv7|-i386]|make[-armv6|-armv7|-i386]|merge|clean[-armv6|-armv7|-i386]]"
            exit 1
            ;;
    esac
    
    #
    # Create the build directories
    #
    for dir in build build/armv6 build/armv7 build/i386; do
        if test -d $dir; then
            :
        else
            mkdir $dir || exit 1
        fi
    done
    
    #
    # Build the armv6 binary
    #
    prepare_environment "armv6"
    if test x$configure_armv6 = xyes; then
        (cd build/armv6 && \
         sh ../../configure $CONFIG_FLAGS CC="$CC" CXX="$CXX" CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS") || exit 2
         # configure is not yet fully ready for iOS, some manual patching is required
         cp include/* build/armv6/include
         cp include/SDL_config_iphoneos.h build/armv6/include/SDL_config.h || exit 2
         sed -i "" -e "s|^EXTRA_CFLAGS.*|EXTRA_CFLAGS=-I./include|g" build/armv6/Makefile || exit 2
         sed -i "" -e "s|^EXTRA_LDFLAGS.*|EXTRA_LDFLAGS=-lm|g" build/armv6/Makefile || exit 2
    fi
    if test x$make_armv6 = xyes; then
        (cd build/armv6 && make -j$NJOB) || exit 3
    fi
    #
    # Build the armv7 binary
    #
    prepare_environment "armv7"
    if test x$configure_armv7 = xyes; then
        (cd build/armv7 && \
         sh ../../configure $CONFIG_FLAGS CC="$CC" CXX="$CXX" CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS") || exit 2
         # configure is not yet fully ready for iOS, some manual patching is required
         cp include/* build/armv7/include
         cp include/SDL_config_iphoneos.h build/armv7/include/SDL_config.h || exit 2
         sed -i "" -e "s|^EXTRA_CFLAGS.*|EXTRA_CFLAGS=-I./include|g" build/armv7/Makefile || exit 2
         sed -i "" -e "s|^EXTRA_LDFLAGS.*|EXTRA_LDFLAGS=-lm|g" build/armv7/Makefile || exit 2
    fi
    if test x$make_armv7 = xyes; then
        (cd build/armv7 && make -j$NJOB) || exit 3
    fi
    #
    # Build the i386 binary
    #
    prepare_environment "i386"
    if test x$configure_i386 = xyes; then
        (cd build/i386 && \
         sh ../../configure $CONFIG_FLAGS CC="$CC" CXX="$CXX" CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS") || exit 2
         # configure is not yet fully ready for iOS, some manual patching is required
         cp include/* build/i386/include
         cp include/SDL_config_iphoneos.h build/i386/include/SDL_config.h || exit 2
         sed -i "" -e "s|^EXTRA_CFLAGS.*|EXTRA_CFLAGS=-I./include|g" build/i386/Makefile || exit 2
         sed -i "" -e "s|^EXTRA_LDFLAGS.*|EXTRA_LDFLAGS=-lm|g" build/i386/Makefile || exit 2
    fi
    if test x$make_i386 = xyes; then
        (cd build/i386 && make -j$NJOB) || exit 3
    fi
    
    #
    # Combine into fat binary
    #
    if test x$merge = xyes; then
        output=ios/lib
        sh $auxdir/mkinstalldirs build/$output
        cd build
        target=`find . -mindepth 4 -maxdepth 4 -type f -name '*.dylib' | head -1 | sed 's|.*/||'`
        (lipo -create -o $output/libSDL2.a armv6/build/.libs/libSDL2.a armv7/build/.libs/libSDL2.a i386/build/.libs/libSDL2.a &&
         lipo -create -o $output/libSDL2main.a armv6/build/libSDL2main.a armv7/build/libSDL2main.a i386/build/libSDL2main.a &&
         cp -r armv6/include ios
         echo "Build complete!" &&
         echo "Files can be found under the build/ios directory.") || exit 4
        cd ..
    fi
    
    #
    # Clean up
    #
    do_clean()
    {
        echo $*
        $* || exit 6
    }
    if test x$clean_armv6 = xyes; then
        do_clean rm -r build/armv6
    fi
    if test x$clean_armv7 = xyes; then
        do_clean rm -r build/armv7
    fi
    if test x$clean_i386 = xyes; then
        do_clean rm -r build/i386
    fi