WebP.sh 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. #!/bin/bash
  2. #
  3. # This script generates 'WebP.framework' (static library).
  4. # An iOS app can decode WebP images by including 'WebP.framework'.
  5. #
  6. # 1. Download the latest libwebp source code from
  7. # http://downloads.webmproject.org/releases/webp/index.html
  8. # 2. Use this script instead of the original 'iosbuild.sh' to build the WebP.framework.
  9. # It will build all modules, include mux, demux, coder and decoder.
  10. #
  11. # Notice: You should use Xcode 7 (or above) to support bitcode.
  12. set -e
  13. # Extract the latest SDK version from the final field of the form: iphoneosX.Y
  14. readonly SDK=$(xcodebuild -showsdks \
  15. | grep iphoneos | sort | tail -n 1 | awk '{print substr($NF, 9)}'
  16. )
  17. # Extract Xcode version.
  18. readonly XCODE=$(xcodebuild -version | grep Xcode | cut -d " " -f2)
  19. if [[ -z "${XCODE}" ]]; then
  20. echo "Xcode not available"
  21. exit 1
  22. fi
  23. readonly OLDPATH=${PATH}
  24. # Add iPhoneOS-V6 to the list of platforms below if you need armv6 support.
  25. # Note that iPhoneOS-V6 support is not available with the iOS6 SDK.
  26. PLATFORMS="iPhoneSimulator iPhoneSimulator64"
  27. PLATFORMS+=" iPhoneOS-V7 iPhoneOS-V7s iPhoneOS-V7-arm64"
  28. readonly PLATFORMS
  29. readonly SRCDIR=$(dirname $0)
  30. readonly TOPDIR=$(pwd)
  31. readonly BUILDDIR="${TOPDIR}/iosbuild"
  32. readonly TARGETDIR="${TOPDIR}/WebP.framework"
  33. readonly DEVELOPER=$(xcode-select --print-path)
  34. readonly PLATFORMSROOT="${DEVELOPER}/Platforms"
  35. readonly LIPO=$(xcrun -sdk iphoneos${SDK} -find lipo)
  36. LIBLIST=''
  37. if [[ -z "${SDK}" ]]; then
  38. echo "iOS SDK not available"
  39. exit 1
  40. elif [[ ${SDK} < 6.0 ]]; then
  41. echo "You need iOS SDK version 6.0 or above"
  42. exit 1
  43. else
  44. echo "iOS SDK Version ${SDK}"
  45. fi
  46. rm -rf ${BUILDDIR}
  47. rm -rf ${TARGETDIR}
  48. mkdir -p ${BUILDDIR}
  49. mkdir -p ${TARGETDIR}/Headers/
  50. if [[ ! -e ${SRCDIR}/configure ]]; then
  51. if ! (cd ${SRCDIR} && sh autogen.sh); then
  52. cat <<EOT
  53. Error creating configure script!
  54. This script requires the autoconf/automake and libtool to build. MacPorts can
  55. be used to obtain these:
  56. http://www.macports.org/install.php
  57. EOT
  58. exit 1
  59. fi
  60. fi
  61. for PLATFORM in ${PLATFORMS}; do
  62. ARCH2=""
  63. if [[ "${PLATFORM}" == "iPhoneOS-V7-arm64" ]]; then
  64. PLATFORM="iPhoneOS"
  65. ARCH="aarch64"
  66. ARCH2="arm64"
  67. elif [[ "${PLATFORM}" == "iPhoneOS-V7s" ]]; then
  68. PLATFORM="iPhoneOS"
  69. ARCH="armv7s"
  70. elif [[ "${PLATFORM}" == "iPhoneOS-V7" ]]; then
  71. PLATFORM="iPhoneOS"
  72. ARCH="armv7"
  73. elif [[ "${PLATFORM}" == "iPhoneOS-V6" ]]; then
  74. PLATFORM="iPhoneOS"
  75. ARCH="armv6"
  76. elif [[ "${PLATFORM}" == "iPhoneSimulator64" ]]; then
  77. PLATFORM="iPhoneSimulator"
  78. ARCH="x86_64"
  79. else
  80. ARCH="i386"
  81. fi
  82. ROOTDIR="${BUILDDIR}/${PLATFORM}-${SDK}-${ARCH}"
  83. mkdir -p "${ROOTDIR}"
  84. DEVROOT="${DEVELOPER}/Toolchains/XcodeDefault.xctoolchain"
  85. SDKROOT="${PLATFORMSROOT}/"
  86. SDKROOT+="${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDK}.sdk/"
  87. CFLAGS="-arch ${ARCH2:-${ARCH}} -pipe -isysroot ${SDKROOT} -O3 -DNDEBUG"
  88. CFLAGS+=" -miphoneos-version-min=6.0 -fembed-bitcode"
  89. set -x
  90. export PATH="${DEVROOT}/usr/bin:${OLDPATH}"
  91. ${SRCDIR}/configure --host=${ARCH}-apple-darwin --prefix=${ROOTDIR} \
  92. --build=$(${SRCDIR}/config.guess) \
  93. --disable-shared --enable-static \
  94. --enable-libwebpmux \
  95. --enable-libwebpdemux \
  96. --enable-libwebpdecoder \
  97. --enable-swap-16bit-csp \
  98. CFLAGS="${CFLAGS}"
  99. set +x
  100. # run make only in the src/ directory to create libwebpdecoder.a
  101. cd src/
  102. make V=0
  103. make install
  104. MAKEPATH=$(pwd)
  105. cd ${ROOTDIR}/lib/
  106. ar x libwebp.a
  107. ar x libwebpmux.a
  108. ar x libwebpdemux.a
  109. ar x libwebpdecoder.a
  110. ar q webp.a *.o
  111. LIBLIST+=" ${ROOTDIR}/lib/webp.a"
  112. cd ${MAKEPATH}
  113. make clean
  114. cd ..
  115. export PATH=${OLDPATH}
  116. done
  117. cp -a ${SRCDIR}/src/webp/*.h ${TARGETDIR}/Headers/
  118. ${LIPO} -create ${LIBLIST} -output ${TARGETDIR}/WebP