Blame iosbuild.sh

Packit 9c6abc
#!/bin/bash
Packit 9c6abc
#
Packit 9c6abc
# This script generates 'WebP.framework' and 'WebPDecoder.framework'. An iOS
Packit 9c6abc
# app can decode WebP images by including 'WebPDecoder.framework' and both
Packit 9c6abc
# encode and decode WebP images by including 'WebP.framework'.
Packit 9c6abc
#
Packit 9c6abc
# Run ./iosbuild.sh to generate the frameworks under the current directory
Packit 9c6abc
# (the previous build will be erased if it exists).
Packit 9c6abc
#
Packit 9c6abc
# This script is inspired by the build script written by Carson McDonald.
Packit 9c6abc
# (http://www.ioncannon.net/programming/1483/using-webp-to-reduce-native-ios-app-size/).
Packit 9c6abc
Packit 9c6abc
set -e
Packit 9c6abc
Packit 9c6abc
# Extract the latest SDK version from the final field of the form: iphoneosX.Y
Packit 9c6abc
readonly SDK=$(xcodebuild -showsdks \
Packit 9c6abc
  | grep iphoneos | sort | tail -n 1 | awk '{print substr($NF, 9)}'
Packit 9c6abc
)
Packit 9c6abc
# Extract Xcode version.
Packit 9c6abc
readonly XCODE=$(xcodebuild -version | grep Xcode | cut -d " " -f2)
Packit 9c6abc
if [[ -z "${XCODE}" ]]; then
Packit 9c6abc
  echo "Xcode not available"
Packit 9c6abc
  exit 1
Packit 9c6abc
fi
Packit 9c6abc
Packit 9c6abc
readonly OLDPATH=${PATH}
Packit 9c6abc
Packit 9c6abc
# Add iPhoneOS-V6 to the list of platforms below if you need armv6 support.
Packit 9c6abc
# Note that iPhoneOS-V6 support is not available with the iOS6 SDK.
Packit 9c6abc
PLATFORMS="iPhoneSimulator iPhoneSimulator64"
Packit 9c6abc
PLATFORMS+=" iPhoneOS-V7 iPhoneOS-V7s iPhoneOS-V7-arm64"
Packit 9c6abc
readonly PLATFORMS
Packit 9c6abc
readonly SRCDIR=$(dirname $0)
Packit 9c6abc
readonly TOPDIR=$(pwd)
Packit 9c6abc
readonly BUILDDIR="${TOPDIR}/iosbuild"
Packit 9c6abc
readonly TARGETDIR="${TOPDIR}/WebP.framework"
Packit 9c6abc
readonly DECTARGETDIR="${TOPDIR}/WebPDecoder.framework"
Packit 9c6abc
readonly DEVELOPER=$(xcode-select --print-path)
Packit 9c6abc
readonly PLATFORMSROOT="${DEVELOPER}/Platforms"
Packit 9c6abc
readonly LIPO=$(xcrun -sdk iphoneos${SDK} -find lipo)
Packit 9c6abc
LIBLIST=''
Packit 9c6abc
DECLIBLIST=''
Packit 9c6abc
Packit 9c6abc
if [[ -z "${SDK}" ]]; then
Packit 9c6abc
  echo "iOS SDK not available"
Packit 9c6abc
  exit 1
Packit 9c6abc
elif [[ ${SDK%%.*} -gt 8 ]]; then
Packit 9c6abc
  EXTRA_CFLAGS="-fembed-bitcode"
Packit 9c6abc
elif [[ ${SDK} < 6.0 ]]; then
Packit 9c6abc
  echo "You need iOS SDK version 6.0 or above"
Packit 9c6abc
  exit 1
Packit 9c6abc
else
Packit 9c6abc
  echo "iOS SDK Version ${SDK}"
Packit 9c6abc
fi
Packit 9c6abc
Packit 9c6abc
rm -rf ${BUILDDIR} ${TARGETDIR} ${DECTARGETDIR}
Packit 9c6abc
mkdir -p ${BUILDDIR} ${TARGETDIR}/Headers/ ${DECTARGETDIR}/Headers/
Packit 9c6abc
Packit 9c6abc
if [[ ! -e ${SRCDIR}/configure ]]; then
Packit 9c6abc
  if ! (cd ${SRCDIR} && sh autogen.sh); then
Packit 9c6abc
    cat <
Packit 9c6abc
Error creating configure script!
Packit 9c6abc
This script requires the autoconf/automake and libtool to build. MacPorts can
Packit 9c6abc
be used to obtain these:
Packit 9c6abc
http://www.macports.org/install.php
Packit 9c6abc
EOT
Packit 9c6abc
    exit 1
Packit 9c6abc
  fi
Packit 9c6abc
fi
Packit 9c6abc
Packit 9c6abc
for PLATFORM in ${PLATFORMS}; do
Packit 9c6abc
  ARCH2=""
Packit 9c6abc
  if [[ "${PLATFORM}" == "iPhoneOS-V7-arm64" ]]; then
Packit 9c6abc
    PLATFORM="iPhoneOS"
Packit 9c6abc
    ARCH="aarch64"
Packit 9c6abc
    ARCH2="arm64"
Packit 9c6abc
  elif [[ "${PLATFORM}" == "iPhoneOS-V7s" ]]; then
Packit 9c6abc
    PLATFORM="iPhoneOS"
Packit 9c6abc
    ARCH="armv7s"
Packit 9c6abc
  elif [[ "${PLATFORM}" == "iPhoneOS-V7" ]]; then
Packit 9c6abc
    PLATFORM="iPhoneOS"
Packit 9c6abc
    ARCH="armv7"
Packit 9c6abc
  elif [[ "${PLATFORM}" == "iPhoneOS-V6" ]]; then
Packit 9c6abc
    PLATFORM="iPhoneOS"
Packit 9c6abc
    ARCH="armv6"
Packit 9c6abc
  elif [[ "${PLATFORM}" == "iPhoneSimulator64" ]]; then
Packit 9c6abc
    PLATFORM="iPhoneSimulator"
Packit 9c6abc
    ARCH="x86_64"
Packit 9c6abc
  else
Packit 9c6abc
    ARCH="i386"
Packit 9c6abc
  fi
Packit 9c6abc
Packit 9c6abc
  ROOTDIR="${BUILDDIR}/${PLATFORM}-${SDK}-${ARCH}"
Packit 9c6abc
  mkdir -p "${ROOTDIR}"
Packit 9c6abc
Packit 9c6abc
  DEVROOT="${DEVELOPER}/Toolchains/XcodeDefault.xctoolchain"
Packit 9c6abc
  SDKROOT="${PLATFORMSROOT}/"
Packit 9c6abc
  SDKROOT+="${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDK}.sdk/"
Packit 9c6abc
  CFLAGS="-arch ${ARCH2:-${ARCH}} -pipe -isysroot ${SDKROOT} -O3 -DNDEBUG"
Packit 9c6abc
  CFLAGS+=" -miphoneos-version-min=6.0 ${EXTRA_CFLAGS}"
Packit 9c6abc
Packit 9c6abc
  set -x
Packit 9c6abc
  export PATH="${DEVROOT}/usr/bin:${OLDPATH}"
Packit 9c6abc
  ${SRCDIR}/configure --host=${ARCH}-apple-darwin --prefix=${ROOTDIR} \
Packit 9c6abc
    --build=$(${SRCDIR}/config.guess) \
Packit 9c6abc
    --disable-shared --enable-static \
Packit 9c6abc
    --enable-libwebpdecoder --enable-swap-16bit-csp \
Packit 9c6abc
    CFLAGS="${CFLAGS}"
Packit 9c6abc
  set +x
Packit 9c6abc
Packit 9c6abc
  # run make only in the src/ directory to create libwebp.a/libwebpdecoder.a
Packit 9c6abc
  cd src/
Packit 9c6abc
  make V=0
Packit 9c6abc
  make install
Packit 9c6abc
Packit 9c6abc
  LIBLIST+=" ${ROOTDIR}/lib/libwebp.a"
Packit 9c6abc
  DECLIBLIST+=" ${ROOTDIR}/lib/libwebpdecoder.a"
Packit 9c6abc
Packit 9c6abc
  make clean
Packit 9c6abc
  cd ..
Packit 9c6abc
Packit 9c6abc
  export PATH=${OLDPATH}
Packit 9c6abc
done
Packit 9c6abc
Packit 9c6abc
cp -a ${SRCDIR}/src/webp/{decode,encode,types}.h ${TARGETDIR}/Headers/
Packit 9c6abc
${LIPO} -create ${LIBLIST} -output ${TARGETDIR}/WebP
Packit 9c6abc
Packit 9c6abc
cp -a ${SRCDIR}/src/webp/{decode,types}.h ${DECTARGETDIR}/Headers/
Packit 9c6abc
${LIPO} -create ${DECLIBLIST} -output ${DECTARGETDIR}/WebPDecoder