Last active
April 10, 2019 16:57
-
-
Save Wizermil/06389c13e9732e31a3652eb3b596c68c to your computer and use it in GitHub Desktop.
Script to compile harfbuzz + freetype static library for android
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 | |
FREETYPE_VERSION="2.10.0" | |
HARFBUZZ_VERSION="2.4.0" | |
ARCHS=("armv7" "arm64" "x86" "x86_64") | |
ROOT_DIR=$(pwd) | |
WORKER=$(getconf _NPROCESSORS_ONLN) | |
BUILD_DIR_FREETYPE2="build/android/freetype2" | |
BUILD_DIR_HARFBUZZ="build/android/harfbuzz" | |
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" | |
error() { | |
echo -e "$@" 1>&2 | |
} | |
fail() { | |
error "$@" | |
exit 1 | |
} | |
function build_freetype() { | |
HAS_HARFBUZZ=$1 | |
cd "$ROOT_DIR" || exit 1 | |
if $HAS_HARFBUZZ; then | |
echo " " | |
BUILD_DIR_FREETYPE2="build/android/freetype2_harfbuzz" | |
fi | |
LOG_FILE="$ROOT_DIR/$BUILD_DIR_FREETYPE2/build.log" | |
if [ -d "$BUILD_DIR_FREETYPE2/source" ]; then | |
rm -rf "$BUILD_DIR_FREETYPE2/source" | |
fi | |
if [ -f "$LOG_FILE" ]; then | |
rm "$LOG_FILE" | |
touch "$LOG_FILE" | |
fi | |
mkdir -p "$BUILD_DIR_FREETYPE2/download" | |
mkdir -p "$BUILD_DIR_FREETYPE2/source" | |
if [ ! -f "$BUILD_DIR_FREETYPE2/download/freetype-$FREETYPE_VERSION.tar.gz" ]; then | |
echo "Downloading: freetype" | |
curl -Lo "$BUILD_DIR_FREETYPE2/download/freetype-$FREETYPE_VERSION.tar.gz" "http://download.savannah.gnu.org/releases/freetype/freetype-$FREETYPE_VERSION.tar.gz" >> "$LOG_FILE" 2>&1 || fail "Error download freetype" | |
echo "Downloaded: freetype" | |
fi | |
echo "Uncompressing: freetype" | |
tar zxf "$BUILD_DIR_FREETYPE2/download/freetype-$FREETYPE_VERSION.tar.gz" -C "$BUILD_DIR_FREETYPE2/source" >> "$LOG_FILE" 2>&1 || fail "Error uncompress freetype" | |
echo "Uncompressed: freetype" | |
for ARCH in "${ARCHS[@]}"; do | |
echo " " | |
cd "$ROOT_DIR" || exit 1 | |
if [ -d "$BUILD_DIR_FREETYPE2/output/$ARCH" ]; then | |
rm -rf "$BUILD_DIR_FREETYPE2/output/$ARCH" | |
fi | |
mkdir -p "$BUILD_DIR_FREETYPE2/output/$ARCH" | |
cp -R "$BUILD_DIR_FREETYPE2/source/freetype-$FREETYPE_VERSION/" "$BUILD_DIR_FREETYPE2/output/$ARCH" | |
if [ -d "$BUILD_DIR_FREETYPE2/install/$ARCH" ]; then | |
rm -rf "$BUILD_DIR_FREETYPE2/install/$ARCH" | |
fi | |
mkdir -p "$BUILD_DIR_FREETYPE2/install/$ARCH" | |
case $ARCH in | |
armv7) | |
export HOST="arm-linux-androideabi" | |
export CC="armv7a-linux-androideabi16-clang" | |
export CXX="armv7a-linux-androideabi16-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 -Wl,--fix-cortex-a8 -fPIC -DANDROID -D__ANDROID_API__=16 -Os" | |
export CPPFLAGS="$CFLAGS" | |
export CXXFLAGS="$CFLAGS -fno-exceptions -fno-rtti" | |
export LDFLAGS="-Wl,--fix-cortex-a8" | |
;; | |
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 -Os" | |
export CPPFLAGS="$CFLAGS" | |
export CXXFLAGS="$CFLAGS -fno-exceptions -fno-rtti" | |
export LDFLAGS="" | |
;; | |
x86) | |
export HOST="i686-linux-android" | |
export CC="i686-linux-android16-clang" | |
export CXX="i686-linux-android16-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 -mtune=intel -mssse3 -mfpmath=sse -m32 -DANDROID -D__ANDROID_API__=16 -Os" | |
export CPPFLAGS="$CFLAGS" | |
export CXXFLAGS="$CFLAGS -fno-exceptions -fno-rtti" | |
export LDFLAGS="" | |
;; | |
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 -mtune=intel -mssse3 -mfpmath=sse -m64 -DANDROID -D__ANDROID_API__=21 -Os" | |
export CPPFLAGS="$CFLAGS" | |
export CXXFLAGS="$CFLAGS -fno-exceptions -fno-rtti" | |
export LDFLAGS="" | |
;; | |
esac | |
if $HAS_HARFBUZZ; then | |
export HARFBUZZ_CFLAGS="-I$ROOT_DIR/$BUILD_DIR_HARFBUZZ/install/$ARCH/include/harfbuzz" | |
export HARFBUZZ_LIBS="-L$ROOT_DIR/$BUILD_DIR_HARFBUZZ/install/$ARCH/lib -lharfbuzz" | |
fi | |
cd "$ROOT_DIR/$BUILD_DIR_FREETYPE2/output/$ARCH" || exit 1 | |
echo "Configuring: freetype $ARCH" | |
# --with-sysroot=\"${ANDROID_TOOLCHAIN}/sysroot\" \\ | |
FREETYPE_CONFIGURE_CMD="./configure --host=\"$HOST\" \\ | |
--prefix=$ROOT_DIR/$BUILD_DIR_FREETYPE2/install/$ARCH \\ | |
--enable-static \\ | |
--disable-shared \\ | |
--without-zlib \\ | |
--without-png \\ | |
--without-bzip2 \\" | |
if $HAS_HARFBUZZ; then | |
FREETYPE_CONFIGURE_CMD="$FREETYPE_CONFIGURE_CMD--with-harfbuzz=yes" | |
else | |
FREETYPE_CONFIGURE_CMD="$FREETYPE_CONFIGURE_CMD--without-harfbuzz" | |
fi | |
eval "$FREETYPE_CONFIGURE_CMD" >> "$LOG_FILE" 2>&1 || fail "Error configuration freetype $ARCH" | |
echo "Configured: freetype $ARCH" | |
echo "Compiling: freetype $ARCH" | |
make -j "$WORKER" >> "$LOG_FILE" 2>&1 || fail "Error compilation freetype $ARCH" | |
echo "Compiled: freetype $ARCH" | |
echo "Installing: freetype $ARCH" | |
make install >> "$LOG_FILE" 2>&1 || fail echo "Error installation freetype $ARCH" | |
echo "Installed: freetype $ARCH" | |
done | |
} | |
build_freetype false | |
cd "$ROOT_DIR" || exit 1 | |
LOG_FILE="$ROOT_DIR/$BUILD_DIR_HARFBUZZ/build.log" | |
if [ -d "$BUILD_DIR_HARFBUZZ/source" ]; then | |
rm -rf "$BUILD_DIR_HARFBUZZ/source" | |
fi | |
if [ -f "$LOG_FILE" ]; then | |
rm "$LOG_FILE" | |
touch "$LOG_FILE" | |
fi | |
mkdir -p "$BUILD_DIR_HARFBUZZ/download" | |
mkdir -p "$BUILD_DIR_HARFBUZZ/source" | |
echo " " | |
if [ ! -f "$BUILD_DIR_HARFBUZZ/download/harfbuzz-$HARFBUZZ_VERSION.tar.bz2" ]; then | |
echo "Downloading: harfbuzz" | |
curl -Lo "$BUILD_DIR_HARFBUZZ/download/harfbuzz-$HARFBUZZ_VERSION.tar.bz2" "https://github.com/harfbuzz/harfbuzz/releases/download/$HARFBUZZ_VERSION/harfbuzz-$HARFBUZZ_VERSION.tar.bz2" >> "$LOG_FILE" 2>&1 || fail "Error download harfbuzz" | |
echo "Downloaded: harfbuzz" | |
fi | |
echo "Uncompressing: harfbuzz" | |
tar jxf "$BUILD_DIR_HARFBUZZ/download/harfbuzz-$HARFBUZZ_VERSION.tar.bz2" -C "$BUILD_DIR_HARFBUZZ/source" >> "$LOG_FILE" 2>&1 || fail "Error uncompress harfbuzz" | |
echo "Uncompressed: harfbuzz" | |
for ARCH in "${ARCHS[@]}"; do | |
echo " " | |
cd "$ROOT_DIR" || exit 1 | |
if [ -d "$BUILD_DIR_HARFBUZZ/output/$ARCH" ]; then | |
rm -rf "$BUILD_DIR_HARFBUZZ/output/$ARCH" | |
fi | |
mkdir -p "$BUILD_DIR_HARFBUZZ/output/$ARCH" | |
cp -R "$BUILD_DIR_HARFBUZZ/source/harfbuzz-$HARFBUZZ_VERSION/" "$BUILD_DIR_HARFBUZZ/output/$ARCH" || exit 1 | |
if [ -d "$BUILD_DIR_HARFBUZZ/install/$ARCH" ]; then | |
rm -rf "$BUILD_DIR_HARFBUZZ/install/$ARCH" | |
fi | |
mkdir -p "$BUILD_DIR_HARFBUZZ/install/$ARCH" | |
case $ARCH in | |
armv7) | |
export HOST="arm-linux-androideabi" | |
export CC="armv7a-linux-androideabi16-clang" | |
export CXX="armv7a-linux-androideabi16-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 -Wl,--fix-cortex-a8 -fPIC -DANDROID -D__ANDROID_API__=16 -Os" | |
export CPPFLAGS="$CFLAGS" | |
export CXXFLAGS="$CFLAGS -fno-exceptions -fno-rtti" | |
export LDFLAGS="-Wl,--fix-cortex-a8" | |
;; | |
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 -Os" | |
export CPPFLAGS="$CFLAGS" | |
export CXXFLAGS="$CFLAGS -fno-exceptions -fno-rtti" | |
export LDFLAGS="" | |
;; | |
x86) | |
export HOST="i686-linux-android" | |
export CC="i686-linux-android16-clang" | |
export CXX="i686-linux-android16-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 -mtune=intel -mssse3 -mfpmath=sse -m32 -DANDROID -D__ANDROID_API__=16 -Os" | |
export CPPFLAGS="$CFLAGS" | |
export CXXFLAGS="$CFLAGS -fno-exceptions -fno-rtti" | |
export LDFLAGS="" | |
;; | |
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 -mtune=intel -mssse3 -mfpmath=sse -m64 -DANDROID -D__ANDROID_API__=21 -Os" | |
export CPPFLAGS="$CFLAGS" | |
export CXXFLAGS="$CFLAGS -fno-exceptions -fno-rtti" | |
export LDFLAGS="" | |
;; | |
esac | |
export FREETYPE_CFLAGS="-I$ROOT_DIR/$BUILD_DIR_FREETYPE2/install/$ARCH/include/freetype2" | |
export FREETYPE_LIBS="-L$ROOT_DIR/$BUILD_DIR_FREETYPE2/install/$ARCH/lib -lfreetype" | |
cd "$ROOT_DIR/$BUILD_DIR_HARFBUZZ/output/$ARCH" || exit 1 | |
if [ -d "$BUILD_DIR_HARFBUZZ/download" ]; then | |
rm -rf "$BUILD_DIR_HARFBUZZ/download" | |
fi | |
echo "Configuring: harfbuzz $ARCH" | |
# --with-sysroot="${ANDROID_TOOLCHAIN}/sysroot" \ | |
./configure --host="$HOST" \ | |
--prefix="$ROOT_DIR/$BUILD_DIR_HARFBUZZ/install/$ARCH" \ | |
--enable-static \ | |
--disable-shared \ | |
--disable-dependency-tracking \ | |
--disable-gtk-doc-html \ | |
--enable-introspection \ | |
--without-fontconfig \ | |
--without-glib \ | |
--without-gobject \ | |
--without-icu \ | |
--without-cairo \ | |
--with-ucdn=yes \ | |
--with-freetype=yes >> "$LOG_FILE" 2>&1 || fail "Error configuration harfbuzz $ARCH" | |
echo "Configured: harfbuzz $ARCH" | |
echo "Compiling: harfbuzz $ARCH" | |
make -j "$WORKER" >> "$LOG_FILE" 2>&1 || fail "Error compilation harfbuzz $ARCH" | |
echo "Compiled: harfbuzz $ARCH" | |
echo "Installing: harfbuzz $ARCH" | |
make install >> "$LOG_FILE" 2>&1 || fail "Error installation harfbuzz $ARCH" | |
echo "Installed: harfbuzz $ARCH" | |
done | |
build_freetype true |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment