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