Created
February 28, 2015 00:57
-
-
Save dulacp/25dbe620422c07e0253e to your computer and use it in GitHub Desktop.
Download & Compile Libjpeg for iOS (all architectures)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Builds a Libjpeg framework for the iPhone and the iPhone Simulator. | |
| # Creates a set of universal libraries that can be used on an iPhone and in the | |
| # iPhone simulator. Then creates a pseudo-framework to make using libjpeg in Xcode | |
| # less painful. | |
| # | |
| # To configure the script, define: | |
| # IPHONE_SDKVERSION: iPhone SDK version (e.g. 8.1) | |
| # | |
| # Then go get the source tar.bz of the libjpeg you want to build, shove it in the | |
| # same directory as this script, and run "./libjpeg.sh". Grab a cuppa. And voila. | |
| #=============================================================================== | |
| : ${LIB_VERSION:=8d} | |
| # Current iPhone SDK | |
| : ${IPHONE_SDKVERSION:=`xcodebuild -showsdks | grep iphoneos | egrep "[[:digit:]]+\.[[:digit:]]+" -o | tail -1`} | |
| # Specific iPhone SDK | |
| # : ${IPHONE_SDKVERSION:=8.1} | |
| : ${XCODE_ROOT:=`xcode-select -print-path`} | |
| : ${TARBALLDIR:=`pwd`} | |
| : ${SRCDIR:=`pwd`/src} | |
| : ${IOSBUILDDIR:=`pwd`/ios/build} | |
| : ${OSXBUILDDIR:=`pwd`/osx/build} | |
| : ${PREFIXDIR:=`pwd`/ios/prefix} | |
| : ${IOSFRAMEWORKDIR:=`pwd`/ios/framework} | |
| : ${OSXFRAMEWORKDIR:=`pwd`/osx/framework} | |
| LIB_TARBALL=$TARBALLDIR/jpegsrc.v$LIB_VERSION.tar.gz | |
| LIB_SRC=$SRCDIR/jpeg-${LIB_VERSION} | |
| #=============================================================================== | |
| ARM_DEV_CMD="xcrun --sdk iphoneos" | |
| SIM_DEV_CMD="xcrun --sdk iphonesimulator" | |
| #=============================================================================== | |
| # Functions | |
| #=============================================================================== | |
| abort() | |
| { | |
| echo | |
| echo "Aborted: $@" | |
| exit 1 | |
| } | |
| doneSection() | |
| { | |
| echo | |
| echo "=================================================================" | |
| echo "Done" | |
| echo | |
| } | |
| #=============================================================================== | |
| cleanEverythingReadyToStart() | |
| { | |
| echo Cleaning everything before we start to build... | |
| rm -rf iphone-build iphonesim-build | |
| rm -rf $IOSBUILDDIR | |
| rm -rf $PREFIXDIR | |
| rm -rf $IOSFRAMEWORKDIR/$FRAMEWORK_NAME.framework | |
| doneSection | |
| } | |
| #=============================================================================== | |
| downloadLibjpeg() | |
| { | |
| if [ ! -s $LIB_TARBALL ]; then | |
| echo "Downloading libjpeg ${LIB_VERSION}" | |
| curl -L -o $LIB_TARBALL http://www.ijg.org/files/jpegsrc.v${LIB_VERSION}.tar.gz | |
| fi | |
| doneSection | |
| } | |
| #=============================================================================== | |
| unpackLibjpeg() | |
| { | |
| [ -f "$LIB_TARBALL" ] || abort "Source tarball missing." | |
| echo Unpacking libjpeg into $SRCDIR... | |
| [ -d $SRCDIR ] || mkdir -p $SRCDIR | |
| [ -d $LIB_SRC ] || ( cd $SRCDIR; tar xfj $LIB_TARBALL ) | |
| [ -d $LIB_SRC ] && echo " ...unpacked as $LIB_SRC" | |
| doneSection | |
| } | |
| #=============================================================================== | |
| buildLibjpegForIPhoneOS() | |
| { | |
| export CC=$XCODE_ROOT/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang | |
| export CC_BASENAME=clang | |
| export CXX=$XCODE_ROOT/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ | |
| export CXX_BASENAME=clang++ | |
| echo Building Libjpeg for iPhoneSimulator | |
| mkdir -p $LIB_SRC/iphonesim-build | |
| cd $LIB_SRC/iphonesim-build | |
| export CFLAGS="-O3 -arch i386 -arch x86_64 -isysroot $XCODE_ROOT/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator${IPHONE_SDKVERSION}.sdk -mios-simulator-version-min=${IPHONE_SDKVERSION} -Wno-error-implicit-function-declaration" | |
| ../configure --prefix=$PREFIXDIR/iphonesim-build --disable-dependency-tracking --enable-static=yes --enable-shared=no | |
| make | |
| make install | |
| doneSection | |
| echo Building Libjpeg for iPhone | |
| mkdir -p $LIB_SRC/iphone-build | |
| cd $LIB_SRC/iphone-build | |
| export CFLAGS="-O3 -arch armv7 -arch armv7s -arch arm64 -isysroot $XCODE_ROOT/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${IPHONE_SDKVERSION}.sdk -mios-version-min=${IPHONE_SDKVERSION}" | |
| ../configure --host=arm-apple-darwin --prefix=$PREFIXDIR/iphone-build --disable-dependency-tracking --enable-static=yes --enable-shared=no | |
| make | |
| make install | |
| doneSection | |
| } | |
| #=============================================================================== | |
| scrunchAllLibsTogetherInOneLibPerPlatform() | |
| { | |
| cd $PREFIXDIR | |
| # iOS Device | |
| mkdir -p $IOSBUILDDIR/armv7 | |
| mkdir -p $IOSBUILDDIR/armv7s | |
| mkdir -p $IOSBUILDDIR/arm64 | |
| # iOS Simulator | |
| mkdir -p $IOSBUILDDIR/i386 | |
| mkdir -p $IOSBUILDDIR/x86_64 | |
| echo Splitting all existing fat binaries... | |
| $ARM_DEV_CMD lipo "iphone-build/lib/libjpeg.a" -thin armv7 -o $IOSBUILDDIR/armv7/libjpeg.a | |
| $ARM_DEV_CMD lipo "iphone-build/lib/libjpeg.a" -thin armv7s -o $IOSBUILDDIR/armv7s/libjpeg.a | |
| $ARM_DEV_CMD lipo "iphone-build/lib/libjpeg.a" -thin arm64 -o $IOSBUILDDIR/arm64/libjpeg.a | |
| $SIM_DEV_CMD lipo "iphonesim-build/lib/libjpeg.a" -thin i386 -o $IOSBUILDDIR/i386/libjpeg.a | |
| $SIM_DEV_CMD lipo "iphonesim-build/lib/libjpeg.a" -thin x86_64 -o $IOSBUILDDIR/x86_64/libjpeg.a | |
| } | |
| #=============================================================================== | |
| buildFramework() | |
| { | |
| : ${1:?} | |
| FRAMEWORKDIR=$1 | |
| BUILDDIR=$2 | |
| VERSION_TYPE=Alpha | |
| FRAMEWORK_NAME=libjpeg | |
| FRAMEWORK_VERSION=A | |
| FRAMEWORK_CURRENT_VERSION=$LIB_VERSION | |
| FRAMEWORK_COMPATIBILITY_VERSION=$LIB_VERSION | |
| FRAMEWORK_BUNDLE=$FRAMEWORKDIR/$FRAMEWORK_NAME.framework | |
| echo "Framework: Building $FRAMEWORK_BUNDLE from $BUILDDIR..." | |
| rm -rf $FRAMEWORK_BUNDLE | |
| echo "Framework: Setting up directories..." | |
| mkdir -p $FRAMEWORK_BUNDLE | |
| mkdir -p $FRAMEWORK_BUNDLE/Versions | |
| mkdir -p $FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION | |
| mkdir -p $FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/Resources | |
| mkdir -p $FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/Headers | |
| mkdir -p $FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/Documentation | |
| echo "Framework: Creating symlinks..." | |
| ln -s $FRAMEWORK_VERSION $FRAMEWORK_BUNDLE/Versions/Current | |
| ln -s Versions/Current/Headers $FRAMEWORK_BUNDLE/Headers | |
| ln -s Versions/Current/Resources $FRAMEWORK_BUNDLE/Resources | |
| ln -s Versions/Current/Documentation $FRAMEWORK_BUNDLE/Documentation | |
| ln -s Versions/Current/$FRAMEWORK_NAME $FRAMEWORK_BUNDLE/$FRAMEWORK_NAME | |
| FRAMEWORK_INSTALL_NAME=$FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/$FRAMEWORK_NAME | |
| echo "Lipoing library into $FRAMEWORK_INSTALL_NAME..." | |
| $ARM_DEV_CMD lipo -create $BUILDDIR/*/libjpeg.a -o "$FRAMEWORK_INSTALL_NAME" || abort "Lipo $1 failed" | |
| echo "Framework: Copying includes..." | |
| cp -r $PREFIXDIR/include/libjpeg/* $FRAMEWORK_BUNDLE/Headers/ | |
| echo "Framework: Creating plist..." | |
| cat > $FRAMEWORK_BUNDLE/Resources/Info.plist <<EOF | |
| <?xml version="1.0" encoding="UTF-8"?> | |
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |
| <plist version="1.0"> | |
| <dict> | |
| <key>CFBundleDevelopmentRegion</key> | |
| <string>English</string> | |
| <key>CFBundleExecutable</key> | |
| <string>${FRAMEWORK_NAME}</string> | |
| <key>CFBundleIdentifier</key> | |
| <string>org.libjpeg</string> | |
| <key>CFBundleInfoDictionaryVersion</key> | |
| <string>6.0</string> | |
| <key>CFBundlePackageType</key> | |
| <string>FMWK</string> | |
| <key>CFBundleSignature</key> | |
| <string>????</string> | |
| <key>CFBundleVersion</key> | |
| <string>${FRAMEWORK_CURRENT_VERSION}</string> | |
| </dict> | |
| </plist> | |
| EOF | |
| doneSection | |
| } | |
| #=============================================================================== | |
| # Execution starts here | |
| #=============================================================================== | |
| mkdir -p $IOSBUILDDIR | |
| # cleanEverythingReadyToStart #may want to comment if repeatedly running during dev | |
| echo "LIB_VERSION: $LIB_VERSION" | |
| echo "LIB_SRC: $LIB_SRC" | |
| echo "IOSBUILDDIR: $IOSBUILDDIR" | |
| echo "PREFIXDIR: $PREFIXDIR" | |
| echo "IOSFRAMEWORKDIR: $IOSFRAMEWORKDIR" | |
| echo "IPHONE_SDKVERSION: $IPHONE_SDKVERSION" | |
| echo "XCODE_ROOT: $XCODE_ROOT" | |
| echo | |
| downloadLibjpeg | |
| unpackLibjpeg | |
| buildLibjpegForIPhoneOS | |
| scrunchAllLibsTogetherInOneLibPerPlatform | |
| buildFramework $IOSFRAMEWORKDIR $IOSBUILDDIR | |
| echo "Completed successfully" | |
| #=============================================================================== |
I am using OSX 10.12.6 and XCode 9.0.1.
When I run the script, I see errors:
Building Libjpeg for iPhone
configure: WARNING: if you wanted to set the --build type, don't use --host.
If a cross compiler is detected then cross compile mode will be used
checking build system type... x86_64-apple-darwin16.7.0
checking host system type... arm-apple-darwin
checking target system type... arm-apple-darwin
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for arm-apple-darwin-strip... no
checking for strip... strip
checking for a thread-safe mkdir -p... .././install-sh -c -d
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking for style of include used by make... GNU
checking for arm-apple-darwin-gcc... /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
checking whether the C compiler works... no
configure: error: in `/Users/xungong/Developer/Library/jpeg-9b/src/jpeg-8d/iphone-build':
configure: error: C compiler cannot create executables
Do you know why my C compiler doesn't work?
I had the same error. In my config.log it was saying -mios-simulator-version-min=11.4, ios 10 is the maximum deployment target for 32-bit targets. So I changed the minimum version to 7.0 and it worked. 7.0 was just my preference, I guess you can set it to 10.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thx for the code, how could I fork it to OS X version?