Created
June 24, 2019 14:01
-
-
Save Wizermil/cbebd6dc5f56ed8c31f4ddd4a9f7baca to your computer and use it in GitHub Desktop.
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
#!/bin/bash | |
MINIZIP_VERSION="2.8.8" | |
ARCHS=("i386" "armv7" "armv7s" "arm64" "arm64e" "x86_64") | |
SDK_VERSION="12.2" | |
ROOT_DIR=$(pwd) | |
WORKER=$(getconf _NPROCESSORS_ONLN) | |
BUILD_DIR="build/ios/minizip" | |
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 "$@" 1>&2 | |
} | |
fail() { | |
error "$@" | |
exit 1 | |
} | |
compile_c() { | |
includes=("${!2}") | |
includeArg="" | |
if [ ${#includes} -ne 0 ]; then | |
for i in "${includes[@]}"; do | |
includeArg+="-I \"$i\" " | |
done | |
fi | |
if [ -f "$1" ]; then | |
eval "$CC $CFLAGS -c \"$1\" $includeArg -o \"${1%.cpp}.o\"" >> "$LOG_FILE" 2>&1 || fail "$1 compilation error" | |
else | |
fail "$1 doesn't exist" | |
fi | |
} | |
ar_c() { | |
lib_name="$1" | |
srcs=("${!2}") | |
objects="" | |
for f in "${srcs[@]}"; do | |
filename_obj="${f%.cpp}.o" | |
if [ ! -f "$filename_obj" ]; then | |
fail "$filename_obj doesn't exist" | |
else | |
objects+="\"$filename_obj\" " | |
fi | |
done | |
# echo "$AR -rcs \"$ROOT/$lib_name.a\" $objects" | |
eval "$AR -rcs \"$lib_name.a\" $objects" >> "$LOG_FILE" 2>&1 || fail "ar error" | |
} | |
build_static_library() { | |
lib_name="$1" | |
files=("${!2}") | |
includes=("${!3}") | |
N=$WORKER | |
for f in "${files[@]}"; do | |
((i=i%N)); ((i++==0)) && wait | |
compile_c "$f" includes[@] & | |
done | |
wait | |
ar_c "$lib_name" files[@] | |
} | |
echo "Downloading: minizip" | |
curl -Lo "$BUILD_DIR/download/minizip-$MINIZIP_VERSION.tar.gz" "https://github.com/nmoinvaz/minizip/archive/$MINIZIP_VERSION.tar.gz" >> "$LOG_FILE" 2>&1 || fail "Error download minizip" | |
echo "Downloaded: minizip" | |
echo " " | |
echo "Uncompressing: minizip" | |
tar zxf "$BUILD_DIR/download/minizip-$MINIZIP_VERSION.tar.gz" -C "$BUILD_DIR/source" >> "$LOG_FILE" 2>&1 || fail "Error uncompress minizip" | |
echo "Uncompressed: minizip" | |
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/minizip-$MINIZIP_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 | |
BUILD_SDKROOT="/Applications/Xcode.app/Contents/Developer/Platforms/$PLATFORM.platform/Developer/SDKs/${PLATFORM}${SDK_VERSION}.sdk" | |
export CFLAGS="-arch $ARCH -pipe -isysroot $BUILD_SDKROOT -fembed-bitcode $MIN_VERSION=10.0 -Ofast -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_ZLIB=1 -DMZ_ZIP_NO_COMPRESSION=1 -DMZ_ZIP_NO_ENCRYPTION=1 -DMZ_COMPAT=1 -DMZ_COMPAT_VERSION=288" | |
export CC="clang" | |
export AR="ar" | |
cd "$ROOT_DIR/$BUILD_DIR/output/$ARCH" || exit 1 | |
if [ -d "$BUILD_DIR/download" ]; then | |
rm -rf "$BUILD_DIR/download" | |
fi | |
echo "Compiling: minizip $ARCH" | |
files=( | |
"mz_crypt.c" | |
"mz_os.c" | |
"mz_strm.c" | |
"mz_strm_buf.c" | |
"mz_strm_mem.c" | |
"mz_strm_split.c" | |
"mz_zip.c" | |
"mz_zip_rw.c" | |
"mz_os_posix.c" | |
"mz_strm_os_posix.c" | |
"mz_strm_zlib.c" | |
"mz_compat.c" | |
) | |
includes=() | |
build_static_library "libminizip" files[@] includes[@] | |
echo "Compiled: minizip $ARCH" | |
echo " " | |
echo "Installing: minizip $ARCH" | |
mkdir -p "$ROOT_DIR/$BUILD_DIR/install/$ARCH/lib" | |
cp libminizip.a "$ROOT_DIR/$BUILD_DIR/install/$ARCH/lib/libminizip.a" | |
mkdir -p "$ROOT_DIR/$BUILD_DIR/install/$ARCH/include" | |
public_headers=( | |
"mz.h" | |
"mz_os.h" | |
"mz_crypt.h" | |
"mz_strm.h" | |
"mz_strm_buf.h" | |
"mz_strm_mem.h" | |
"mz_strm_split.h" | |
"mz_strm_os.h" | |
"mz_zip.h" | |
"mz_zip_rw.h" | |
"mz_strm_zlib.h" | |
"mz_compat.h" | |
) | |
for f in "${public_headers[@]}"; do | |
cp "$f" "$ROOT_DIR/$BUILD_DIR/install/$ARCH/include" | |
done | |
echo "Installed: minizip $ARCH" | |
done | |
cd "$ROOT_DIR/$BUILD_DIR" || exit 1 | |
if [ -f "libminizip.a" ]; then | |
rm -f "libminizip.a" | |
fi | |
echo " " | |
echo "Creating Flat Lib: minizip" | |
LIPO_CMD="lipo -create" | |
for ARCH in "${ARCHS[@]}"; do | |
if [ -f "$ROOT_DIR/$BUILD_DIR/install/$ARCH/lib/libminizip.a" ]; then | |
LIPO_CMD="$LIPO_CMD $ROOT_DIR/$BUILD_DIR/install/$ARCH/lib/libminizip.a" | |
fi | |
done | |
LIPO_CMD="$LIPO_CMD -output libminizip.a" | |
eval "$LIPO_CMD" >> "$LOG_FILE" 2>&1 || fail "Error creation flat minizip" | |
echo "Created Flat Lib: minizip" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment