iOS

Prerequisites

These steps should closely follow building on Mac OS X. Those steps seem slightly out of date.

Build and run SampleApp in the XCode IDE

XCode 4.5

To build SampleApp on XCode 4.5 using the IDE these steps should work:

GYP_DEFINES="skia_os='ios' skia_arch_type='arm' armv7=1 arm_neon=0" ./gyp_skia
xed out/gyp/SampleApp.xcodeproj # opens the SampleApp project in the IDE

Note that if you run make at the command line the gyp_skia script will rerun and you'll lose the effect of the GYP_DEFINES. To avoid this do:

export GYP_DEFINES="skia_os='ios' skia_arch_type='arm' armv7=1 arm_neon=0"

XCode 3

Use GYP_DEFINES to tell gyp_skia how to build for iOS. Here's a bash shell snippet that sets the world up to build SampleApp with XCode 3:

function buildSampleApp()
{
  sdkVersion="4.3"
  if [[ "$1" == "sim" ]] ; then
    export GYP_DEFINES="skia_os='ios' skia_arch_type='x86' \
      ios_sdk_dir='/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator' \
      ios_sdk_version='$sdkVersion'"
  elif [[ "$1" == "iphone" ]] ; then
    export GYP_DEFINES="skia_os='ios' skia_arch_type='arm' armv7='1' arm_neon='0' \
      ios_sdk_dir='/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS' \
      ios_sdk_version='$sdkVersion'"
  elif [[ "$1" == "mac" ]] ; then
    export GYP_DEFINES=""
  else
    echo "buildSampleApp  expects 'sim', 'iphone', or 'mac'"
  fi
  if [[ "$1" == "sim" ]] || [[ "$1" == "iphone" ]] || [[ "$1" == "mac" ]] ; then
    save=`pwd`
    cd /chrome/nih/skia/trunk
    echo "$GYP_DEFINES ./gyp_skia gyp/SampleApp.gyp"
    ./gyp_skia gyp/SampleApp.gyp
    cd $save
  fi
  if [[ "$1" == "sim" ]] ; then
    setiossdk iphonesimulator$sdkVersion
  elif [[ "$1" == "iphone" ]] ; then
    setiossdk iphoneos$sdkVersion
  fi
}

The script function setiossdk called by buildSampleApp is a not-completely-working hackery. When gyp builds an iOS-targeted project, it is hard-coded for the iOS simulator. To point the project at either the iOS simulator, or an iOS device, the project file must be opened to create a custom pbxuser file.

This is accomplished by:

function setiossdk()
{
  osascript -e 'tell app "Xcode" to quit'
  osascript -e 'repeat until appIsRunning("Xcode") is false' -e \
    'do shell script "sleep 1"' -e 'end repeat'
  save=`pwd`
  skia
  cd out/gyp
  for project in *.xcodeproj; do
    open $project
  done
  osascript -e 'tell app "Xcode" to quit'
  osascript -e 'repeat until appIsRunning("Xcode") is false' -e \
    'do shell script "sleep 1"' -e 'end repeat'
  for project in *.xcodeproj; do
    lsave=`pwd`
    cd $project
    filename=`eval whoami`.pbxuser
    while [[ ! -s $filename ]] ; do
      sleep 1
      echo -n "."
    done
    sed -e '/activeSDKPreference/ d' <$filename | sed -e '/activeTarget/ i\
\                activeSDKPreference = '$1';' >x$filename
    if [[ -s x$filename ]] ; then
      mv x$filename $filename
    else
      echo "mv x$filename $project/$filename failed"
    fi
    cd $lsave
  done
  open SampleApp.xcodeproj
  cd $save
}

In particular, the calls to osascript to wait for Xcode to quit use faulty syntax.