Skip to content

Instantly share code, notes, and snippets.

@Wizermil
Created June 24, 2019 13:59
Show Gist options
  • Save Wizermil/a1dea648e1315111e46f7179c21ac027 to your computer and use it in GitHub Desktop.
Save Wizermil/a1dea648e1315111e46f7179c21ac027 to your computer and use it in GitHub Desktop.
#!/bin/bash
Z_VERSION="1.2.11"
ARCHS=("i386" "armv7" "armv7s" "arm64" "arm64e" "x86_64")
SDK_VERSION="12.2"
ROOT_DIR=$(pwd)
WORKER=$(getconf _NPROCESSORS_ONLN)
BUILD_DIR="build/ios/z"
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: z"
curl -Lo "$BUILD_DIR/download/z-$Z_VERSION.tar.gz" "https://zlib.net/zlib-$Z_VERSION.tar.gz" >> "$LOG_FILE" 2>&1 || fail "Error download z"
echo "Downloaded: z"
echo "Uncompressing: z"
tar zxf "$BUILD_DIR/download/z-$Z_VERSION.tar.gz" -C "$BUILD_DIR/source" >> "$LOG_FILE" 2>&1 || fail "Error uncompress z"
echo "Uncompressed: z"
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/zlib-$Z_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"
export CFLAGS="-arch $ARCH -pipe -isysroot $BUILD_SDKROOT -fembed-bitcode $MIN_VERSION=10.0 -Ofast"
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
export CFLAGS="$CFLAGS -msse4.2 -arch $ARCH"
export CPPFLAGS="$CPPFLAGS -msse4.2 -arch $ARCH"
export CXXFLAGS="${CXXFLAGS} -msse4.2 -arch $ARCH"
elif [ "$ARCH" == "armv7" ] || [ "$ARCH" == "armv7s" ] || [ "$ARCH" == "arm64" ] || [ "$ARCH" == "arm64e" ]; then
export CFLAGS="$CFLAGS -mfpu=neon -arch $ARCH"
export CPPFLAGS="$CPPFLAGS -mfpu=neon -arch $ARCH"
export CXXFLAGS="${CXXFLAGS} -mfpu=neon -arch $ARCH"
fi
echo "Configuring: z ${ARCH}"
./configure --static --const --zprefix --prefix="${ROOT_DIR}/${BUILD_DIR}/install/${ARCH}" >> "$LOG_FILE" 2>&1 || fail "Error configuration z $ARCH"
echo "Configured: z $ARCH"
echo "Compiling: z $ARCH"
make -j "$WORKER" >> "$LOG_FILE" 2>&1 || fail "Error compilation z $ARCH"
echo "Compiled: z $ARCH"
echo "Installing: z $ARCH"
make install >> "$LOG_FILE" 2>&1 || fail "Error installation z $ARCH"
echo "Installed: z $ARCH"
done
cd "$ROOT_DIR/$BUILD_DIR" || exit 1
if [ -f "libz.a" ]; then
rm -f "libz.a"
fi
echo " "
echo "Creating Flat Libs: libz"
LIPO_Z_CMD="lipo -create"
for ARCH in "${ARCHS[@]}"; do
if [ -f "$ROOT_DIR/$BUILD_DIR/install/$ARCH/lib/libz.a" ]; then
LIPO_Z_CMD="$LIPO_Z_CMD $ROOT_DIR/$BUILD_DIR/install/$ARCH/lib/libz.a"
fi
done
LIPO_Z_CMD="$LIPO_Z_CMD -output libz.a"
eval "$LIPO_Z_CMD" >> "$LOG_FILE" 2>&1 || fail "Error creation flat libz"
echo "Created Flat Lib: libz"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment