Skip to content

Instantly share code, notes, and snippets.

@Wizermil
Created June 24, 2019 14:00
Show Gist options
  • Save Wizermil/bef6a8bf71c8e812849c02e55995ac92 to your computer and use it in GitHub Desktop.
Save Wizermil/bef6a8bf71c8e812849c02e55995ac92 to your computer and use it in GitHub Desktop.
#!/bin/bash
PNG_VERSION="1.6.37"
ARCHS=("i386" "armv7" "armv7s" "arm64" "arm64e" "x86_64")
SDK_VERSION="12.2"
ROOT_DIR=$(pwd)
WORKER=$(getconf _NPROCESSORS_ONLN)
BUILD_DIR="build/ios/png"
LOG_FILE="$ROOT_DIR/$BUILD_DIR/build.log"
if [ -d "$BUILD_DIR/download" ]; then
rm -rf "$BUILD_DIR/download"
fi
if [ -d "$BUILD_DIR/source" ]; then
rm -rf "$BUILD_DIR/source"
fi
if [ -f "$LOG_FILE" ]; then
rm "$LOG_FILE"
touch "$LOG_FILE"
fi
mkdir -p "$BUILD_DIR/download"
mkdir -p "$BUILD_DIR/source"
error() {
echo -e "$@" 1>&2
}
fail() {
error "$@"
exit 1
}
echo "Downloading: png"
curl -Lo "$BUILD_DIR/download/png-$PNG_VERSION.tar.gz" "https://download.sourceforge.net/libpng/libpng-$PNG_VERSION.tar.gz" >> "$LOG_FILE" 2>&1 || fail "Error download png"
echo "Downloaded: png"
echo "Uncompressing: png"
tar zxf "$BUILD_DIR/download/png-$PNG_VERSION.tar.gz" -C "$BUILD_DIR/source" >> "$LOG_FILE" 2>&1 || fail "Error uncompress png"
echo "Uncompressed: png"
for ARCH in "${ARCHS[@]}"; do
echo " "
cd "$ROOT_DIR" || exit 1
if [ -d "$BUILD_DIR/output/$ARCH" ]; then
rm -rf "$BUILD_DIR/output/$ARCH"
fi
mkdir -p "$BUILD_DIR/output/$ARCH"
cp -R "$BUILD_DIR/source/libpng-$PNG_VERSION/" "$BUILD_DIR/output/$ARCH"
if [ -d "$BUILD_DIR/install/$ARCH" ]; then
rm -rf "$BUILD_DIR/install/$ARCH"
fi
mkdir -p "$BUILD_DIR/install/$ARCH"
if [ "$ARCH" == "i386" ] || [ "$ARCH" == "x86_64" ]; then
PLATFORM="iPhoneSimulator"
MIN_VERSION="-mios-simulator-version-min"
else
PLATFORM="iPhoneOS"
MIN_VERSION="-mios-version-min"
fi
export CROSS_COMPILE="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/"
export CROSS_TOP="/Applications/Xcode.app/Contents/Developer/Platforms/$PLATFORM.platform/Developer/"
export CROSS_SDK="${PLATFORM}${SDK_VERSION}.sdk"
export BUILD_SDKROOT="/Applications/Xcode.app/Contents/Developer/Platforms/$PLATFORM.platform/Developer/SDKs/${PLATFORM}${SDK_VERSION}.sdk"
export LDFLAGS="-arch $ARCH -pipe -isysroot $BUILD_SDKROOT $MIN_VERSION=10.0 -Ofast -L$ROOT_DIR/build/ios/z/install/${ARCH}/lib"
export CFLAGS="-arch $ARCH -pipe -isysroot $BUILD_SDKROOT -fembed-bitcode $MIN_VERSION=10.0 -Ofast -I$ROOT_DIR/build/ios/z/install/${ARCH}/include"
export CPPFLAGS="$CFLAGS"
export CXXFLAGS="${CFLAGS} -fno-exceptions -fno-rtti"
export CC="clang"
export CPP="clang -E"
export CXX="clang++"
cd "$ROOT_DIR/$BUILD_DIR/output/$ARCH" || exit 1
if [ -d "${BUILD_DIR}/download" ]; then
rm -rf "${BUILD_DIR}/download"
fi
if [ "$ARCH" == "x86_64" ] || [ "$ARCH" == "i386" ]; then
SIMD="--enable-intel-sse=yes"
export CFLAGS="$CFLAGS -msse4.2"
export CPPFLAGS="$CPPFLAGS -msse4.2"
export CXXFLAGS="${CXXFLAGS} -msse4.2"
HOST="${ARCH}"
elif [ "$ARCH" == "armv7" ] || [ "$ARCH" == "armv7s" ]; then
SIMD="--enable-arm-neon=api"
export CFLAGS="$CFLAGS -mfpu=neon"
export CPPFLAGS="$CPPFLAGS -mfpu=neon"
export CXXFLAGS="${CXXFLAGS} -mfpu=neon"
HOST="${ARCH}"
elif [ "$ARCH" == "arm64" ] || [ "$ARCH" == "arm64e" ]; then
SIMD="--enable-arm-neon=api"
export CFLAGS="$CFLAGS -mfpu=neon"
export CPPFLAGS="$CPPFLAGS -mfpu=neon"
export CXXFLAGS="${CXXFLAGS} -mfpu=neon"
HOST="aarch64"
fi
echo "Configuring: png ${ARCH}"
./configure --host="$HOST-apple-darwin" --disable-shared "$SIMD" --prefix="${ROOT_DIR}/${BUILD_DIR}/install/${ARCH}" >> "$LOG_FILE" 2>&1 || fail "Error configuration png $ARCH"
echo "Configured: png $ARCH"
echo "Compiling: png $ARCH"
make -j "$WORKER" >> "$LOG_FILE" 2>&1 || fail "Error compilation png $ARCH"
echo "Compiled: png $ARCH"
echo "Installing: png $ARCH"
make install >> "$LOG_FILE" 2>&1 || fail "Error installation png $ARCH"
echo "Installed: png $ARCH"
done
cd "$ROOT_DIR/$BUILD_DIR" || exit 1
if [ -f "libpng.a" ]; then
rm -f "libpng.a"
fi
echo " "
echo "Creating Flat Libs: libpng"
LIPO_PNG_CMD="lipo -create"
for ARCH in "${ARCHS[@]}"; do
if [ -f "$ROOT_DIR/$BUILD_DIR/install/$ARCH/lib/libpng.a" ]; then
LIPO_PNG_CMD="$LIPO_PNG_CMD $ROOT_DIR/$BUILD_DIR/install/$ARCH/lib/libpng.a"
fi
done
LIPO_PNG_CMD="$LIPO_PNG_CMD -output libpng.a"
eval "$LIPO_PNG_CMD" >> "$LOG_FILE" 2>&1 || fail "Error creation flat libpng"
echo "Created Flat Lib: libpng"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment