Skip to content

Instantly share code, notes, and snippets.

@Wizermil
Created June 24, 2019 14:01
Show Gist options
  • Save Wizermil/04255363bb019c43aee1558fedea8585 to your computer and use it in GitHub Desktop.
Save Wizermil/04255363bb019c43aee1558fedea8585 to your computer and use it in GitHub Desktop.
#!/bin/bash
PNG_VERSION="1.6.37"
ARCHS=("armv7" "arm64" "x86" "x86_64")
ROOT_DIR=$(pwd)
WORKER=$(getconf _NPROCESSORS_ONLN)
BUILD_DIR="build/android/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
}
if [[ -z "$NDK_ROOT" ]]; then
echo "set NDK_ROOT env variable"
exit 1
fi
export ANDROID_TOOLCHAIN="$NDK_ROOT/toolchains/llvm/prebuilt/darwin-x86_64"
export PATH="$ANDROID_TOOLCHAIN/bin:$PATH"
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"
cd "$ROOT_DIR/$BUILD_DIR/output/$ARCH" || exit 1
if [ -d "${BUILD_DIR}/download" ]; then
rm -rf "${BUILD_DIR}/download"
fi
case $ARCH in
armv7)
export HOST="arm-linux-androideabi"
export CC="armv7a-linux-androideabi18-clang"
export CXX="armv7a-linux-androideabi18-clang++"
export AR="arm-linux-androideabi-ar"
export AS="arm-linux-androideabi-as"
export LD="arm-linux-androideabi-ld"
export RANLIB="arm-linux-androideabi-ranlib"
export NM="arm-linux-androideabi-nm"
export STRIP="arm-linux-androideabi-strip"
export CFLAGS="--sysroot=$ANDROID_TOOLCHAIN/sysroot -fPIC -march=armv7-a -DANDROID -D__ANDROID_API__=18 -Ofast -mfpu=vfpv3-d16 -mfloat-abi=softfp -mthumb"
export CPPFLAGS="$CFLAGS"
export CXXFLAGS="$CFLAGS -fno-exceptions -fno-rtti"
export LDFLAGS="-Wl,--fix-cortex-a8"
SIMD="--enable-arm-neon=no"
;;
arm64)
export HOST="aarch64-linux-android"
export CC="aarch64-linux-android21-clang"
export CXX="aarch64-linux-android21-clang++"
export AR="aarch64-linux-android-ar"
export AS="aarch64-linux-android-as"
export LD="aarch64-linux-android-ld"
export RANLIB="aarch64-linux-android-ranlib"
export NM="aarch64-linux-android-nm"
export STRIP="aarch64-linux-android-strip"
export CFLAGS="--sysroot=$ANDROID_TOOLCHAIN/sysroot -fPIC -DANDROID -D__ANDROID_API__=21 -Ofast -mfpu=neon"
export CPPFLAGS="$CFLAGS"
export CXXFLAGS="$CFLAGS -fno-exceptions -fno-rtti"
export LDFLAGS=""
SIMD="--enable-arm-neon=api"
;;
x86)
export HOST="i686-linux-android"
export CC="i686-linux-android18-clang"
export CXX="i686-linux-android18-clang++"
export AR="i686-linux-android-ar"
export AS="i686-linux-android-as"
export LD="i686-linux-android-ld"
export RANLIB="i686-linux-android-ranlib"
export NM="i686-linux-android-nm"
export STRIP="i686-linux-android-strip"
export CFLAGS="--sysroot=$ANDROID_TOOLCHAIN/sysroot -fPIC -march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32 -DANDROID -D__ANDROID_API__=18 -Ofast"
export CPPFLAGS="$CFLAGS"
export CXXFLAGS="$CFLAGS -fno-exceptions -fno-rtti"
export LDFLAGS=""
SIMD="--enable-intel-sse=yes"
;;
x86_64)
export HOST="x86_64-linux-android"
export CC="x86_64-linux-android21-clang"
export CXX="x86_64-linux-android21-clang++"
export AR="x86_64-linux-android-ar"
export AS="x86_64-linux-android-as"
export LD="x86_64-linux-android-ld"
export RANLIB="x86_64-linux-android-ranlib"
export NM="x86_64-linux-android-nm"
export STRIP="x86_64-linux-android-strip"
export CFLAGS="--sysroot=$ANDROID_TOOLCHAIN/sysroot -fPIC -march=x86-64 -mtune=intel -msse4.2 -mpopcnt -m64 -DANDROID -D__ANDROID_API__=21 -Ofast"
export CPPFLAGS="$CFLAGS"
export CXXFLAGS="$CFLAGS -fno-exceptions -fno-rtti"
export LDFLAGS=""
SIMD="--enable-intel-sse=yes"
;;
esac
echo "Configuring: png ${ARCH}"
./configure --host="$HOST" --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