Skip to content

Instantly share code, notes, and snippets.

@tastyone
Forked from 43z3com/build-android-libjpeg-turbo.sh
Last active October 31, 2019 19:48
Show Gist options
  • Save tastyone/da6ec6d4a2579abd0339 to your computer and use it in GitHub Desktop.
Save tastyone/da6ec6d4a2579abd0339 to your computer and use it in GitHub Desktop.
#!/bin/bash
: << '#__REM__'
指定さたライブラリをAndroid用にフルオートで作成します。ダウンロード、toolchainsの作成、複数のアーキテクチャのビルドも自動的に行います。デフォルトではarmv5te、armv7-a、mips1、i386のアーキテクチャを作成します。
Create a full-auto for Android the library specified. Creating download, toolchains, build the architecture of multiple automatically. Create architecture, mips1, i386 armv5te, armv7-a by default.
#__REM__
TARGET_VERSION="1.3.1"
ARCHIVE_BASENAME="libjpeg-turbo"
DOWNLOAD_URL="http://sourceforge.net/projects/${ARCHIVE_BASENAME}/files/${TARGET_VERSION}/${ARCHIVE_BASENAME}-${TARGET_VERSION}.tar.gz"
#check the version
#http://sourceforge.net/projects/libjpeg-turbo/files/?source=navbar
#android
#NDK_ROOT="/Workshop/Android-SDK/android-ndk-r8e"
DEPLOYMENT_TARGET="android"
# see ${NDK-ROOT}/platforms
ANDROID_PLATFORM=9
# see ${NDK-ROOT}/toolchains
ARCHS="[email protected] [email protected] [email protected] [email protected]"
NEON=1 #arm architecture valid only
DEBUG=0
VERBOSE=0
########################################
if [ ! -n "${NDK_ROOT}" ]; then
echo "NDK_ROOT is not defined"
exit ;
fi
NDK="${NDK_ROOT}"
cd "`dirname \"$0\"`"
REPOROOT="$(pwd)"
OUTPUT_DIR="${REPOROOT}/dependencies-lib"
mkdir -p "${OUTPUT_DIR}"
BUILD_DIR="${REPOROOT}/build"
SRC_DIR="${BUILD_DIR}/src"
mkdir -p "${SRC_DIR}"
INTER_DIR="${BUILD_DIR}/built"
mkdir -p "${INTER_DIR}"
export TOOLCHAIN_BASE_DIR="${BUILD_DIR}/toolchain"
########################################
#set -x
cd $SRC_DIR
set -e
if [ ! -e "${SRC_DIR}/${ARCHIVE_BASENAME}-${TARGET_VERSION}.tar.gz" ]; then
cat <<_EOT_
##############################################################################
####
#### Downloading ${ARCHIVE_BASENAME}-${TARGET_VERSION}.tar.gz
####
##############################################################################
_EOT_
#curl -O ${DOWNLOAD_URL}
wget ${DOWNLOAD_URL}
echo "Done." ; echo ""
fi
cat <<_EOT_
##############################################################################
####
#### Using ${ARCHIVE_BASENAME}-${TARGET_VERSION}.tar.gz
####
##############################################################################
_EOT_
tar zxf ${ARCHIVE_BASENAME}-${TARGET_VERSION}.tar.gz -C $SRC_DIR
cd "${SRC_DIR}/${ARCHIVE_BASENAME}-${TARGET_VERSION}"
export ORIGINALPATH="$PATH"
MACHINE=`uname -m | tr '[A-Z]' '[a-z]'`
SYSNAME=`uname -s | tr '[A-Z]' '[a-z]'`
BUILD="${MACHINE}-${SYSNAME}"
for ELEM in ${ARCHS}
do
OIFS="$IFS"; IFS='@'
set -- ${ELEM}; IFS="$OIFS"
ARCH="$1"
TOOLCHAIN="$2"
if [ ! -e "${TOOLCHAIN_BASE_DIR}/${ARCH}@${TOOLCHAIN}" ]; then
cat <<_EOT_
##############################################################################
####
#### Generate toolchain ${TOOLCHAIN}
####
##############################################################################
_EOT_
"${NDK}/build/tools/make-standalone-toolchain.sh" --platform="android-${ANDROID_PLATFORM}" --toolchain="${TOOLCHAIN}" --install-dir="${TOOLCHAIN_BASE_DIR}/${ARCH}@${TOOLCHAIN}" --system="${SYSNAME}-${MACHINE}"
echo ""
fi
TOOLCHAIN_DIR="${TOOLCHAIN_BASE_DIR}/${ARCH}@${TOOLCHAIN}"
PREFIX="${INTER_DIR}/${ARCHIVE_BASENAME}-${TARGET_VERSION}-android-${ANDROID_PLATFORM}-${ARCH}"
mkdir -p "${PREFIX}"
export PATH="$ORIGINALPATH"
autoreconf -fiv
cat <<_EOT_
##############################################################################
####
#### Configure ${ARCH}
####
##############################################################################
_EOT_
case "${ARCH}" in
"armv5te" )
export PATH="${TOOLCHAIN_DIR}/bin:${TOOLCHAIN_DIR}/arm-linux-androideabi/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/local/bin:/opt/local/sbin"
HOST_CC="${TOOLCHAIN_DIR}/bin/arm-linux-androideabi-gcc"
HOST_CFLAGS="\
-march=armv5te -mtune=xscale -msoft-float \
\
-D_GNU_SOURCE=1 -DANDROID -DAL_LIBTYPE_STATIC -DAL_ALEXT_PROTOTYPES \
-D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ \
-DUSE_FILE32API \
\
-ffunction-sections -funwind-tables -fomit-frame-pointer -fstrict-aliasing \
-funswitch-loops -finline-limit=300 \
\
-Winline -Wall -Wextra -fvisibility=internal -Wmissing-field-initializers"
HOST_LDFLAGS=""
HOST_SYSROOT="${TOOLCHAIN_DIR}/sysroot"
if [ "${DEBUG}" == 0 ]; then
HOST_CFLAGS="${HOST_CFLAGS} -O3 -DNDEBUG"
else
HOST_CFLAGS="${HOST_CFLAGS} -O0 -g -DDEBUG -DCOCOS2D_DEBUG=2"
fi
./configure \
--prefix="${PREFIX}" \
--build ${BUILD} \
--host arm-linux-androideabi \
--enable-static \
--disable-shared \
--disable-silent-rules \
--with-pic \
--with-sysroot ${HOST_SYSROOT} \
CC="$HOST_CC" \
CFLAGS="-isysroot ${HOST_SYSROOT} ${HOST_CFLAGS}" \
LDFLAGS="-isysroot ${HOST_SYSROOT} ${HOST_LDFLAGS}"
;;
"armv7" | "armv7-a" )
export PATH="${TOOLCHAIN_DIR}/bin:${TOOLCHAIN_DIR}/arm-linux-androideabi/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/local/bin:/opt/local/sbin"
HOST_CC="${TOOLCHAIN_DIR}/bin/arm-linux-androideabi-gcc"
HOST_CFLAGS="\
-march=${ARCH} -mfloat-abi=softfp -mfpu=vfpv3-d16 \
\
-D_GNU_SOURCE=1 -DANDROID -DAL_LIBTYPE_STATIC -DAL_ALEXT_PROTOTYPES \
-D__ARM_ARCH_7__ -D__ARM_ARCH_7A__ \
-DUSE_FILE32API \
\
-ffunction-sections -funwind-tables -fomit-frame-pointer -fstrict-aliasing \
-funswitch-loops -finline-limit=300 \
\
-Winline -Wall -Wextra -fvisibility=internal -Wmissing-field-initializers"
HOST_LDFLAGS="-Wl,--fix-cortex-a8"
HOST_SYSROOT="${TOOLCHAIN_DIR}/sysroot"
if [ ! ${NEON} -eq 0 ]; then
HOST_CFLAGS="${HOST_CFLAGS} -mfpu=neon"
fi
if [ ${DEBUG} -eq 0 ]; then
HOST_CFLAGS="${HOST_CFLAGS} -O3 -DNDEBUG"
else
HOST_CFLAGS="${HOST_CFLAGS} -O0 -g -DDEBUG -DCOCOS2D_DEBUG=2"
fi
./configure \
--prefix="${PREFIX}" \
--build ${BUILD} \
--host arm-linux-androideabi \
--enable-static \
--disable-shared \
--disable-silent-rules \
--with-pic \
--with-sysroot ${HOST_SYSROOT} \
CC="$HOST_CC" \
CFLAGS="-isysroot ${HOST_SYSROOT} ${HOST_CFLAGS}" \
LDFLAGS="-isysroot ${HOST_SYSROOT} ${HOST_LDFLAGS}"
;;
"mips1" | "mips2" | "mips3" | "mips4" | "mips32" | "mips32r2" )
export PATH="${TOOLCHAIN_DIR}/bin:${TOOLCHAIN_DIR}/mipsel-linux-android/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/local/bin:/opt/local/sbin"
HOST_CC="${TOOLCHAIN_DIR}/bin/mipsel-linux-android-gcc"
HOST_CFLAGS="\
-march=${ARCH} \
\
-D_GNU_SOURCE=1 -DANDROID -DAL_LIBTYPE_STATIC -DAL_ALEXT_PROTOTYPES \
-DUSE_FILE32API \
\
-ffunction-sections -funwind-tables -fomit-frame-pointer -fstrict-aliasing \
-funswitch-loops -finline-limit=300 \
\
-Winline -Wall -Wextra -fvisibility=internal -Wmissing-field-initializers"
HOST_LDFLAGS=""
HOST_SYSROOT="${TOOLCHAIN_DIR}/sysroot"
if [ ${DEBUG} -eq 0 ]; then
HOST_CFLAGS="${HOST_CFLAGS} -O3 -DNDEBUG"
else
HOST_CFLAGS="${HOST_CFLAGS} -O0 -g -DDEBUG -DCOCOS2D_DEBUG=2"
fi
./configure \
--prefix="${PREFIX}" \
--build ${BUILD} \
--host mipsel-linux-android \
--enable-static \
--disable-shared \
--disable-silent-rules \
--with-pic \
--with-sysroot ${HOST_SYSROOT} \
CC="$HOST_CC" \
CFLAGS="-isysroot ${HOST_SYSROOT} ${HOST_CFLAGS}" \
LDFLAGS="-isysroot ${HOST_SYSROOT} ${HOST_LDFLAGS}"
;;
"i386" )
export PATH="${TOOLCHAIN_DIR}/bin:${TOOLCHAIN_DIR}/i686-linux-android/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/local/bin:/opt/local/sbin"
HOST_CC="${TOOLCHAIN_DIR}/bin/i686-linux-android-gcc"
HOST_CFLAGS="\
-march=${ARCH} \
\
-D_GNU_SOURCE=1 -DANDROID -DAL_LIBTYPE_STATIC -DAL_ALEXT_PROTOTYPES \
-DUSE_FILE32API \
\
-ffunction-sections -funwind-tables -fomit-frame-pointer -fstrict-aliasing \
-funswitch-loops -finline-limit=300 \
\
-Winline -Wall -Wextra -fvisibility=internal -Wmissing-field-initializers"
HOST_LDFLAGS=""
HOST_SYSROOT="${TOOLCHAIN_DIR}/sysroot"
if [ ${DEBUG} -eq 0 ]; then
HOST_CFLAGS="${HOST_CFLAGS} -O3 -DNDEBUG"
else
HOST_CFLAGS="${HOST_CFLAGS} -O0 -g -DDEBUG -DCOCOS2D_DEBUG=2"
fi
./configure \
--prefix="${PREFIX}" \
--build ${BUILD} \
--host x86 \
--enable-static \
--disable-shared \
--disable-silent-rules \
--with-pic \
--with-sysroot ${HOST_SYSROOT} \
CC="$HOST_CC" \
CFLAGS="-isysroot ${HOST_SYSROOT} ${HOST_CFLAGS}" \
LDFLAGS="-isysroot ${HOST_SYSROOT} ${HOST_LDFLAGS}"
;;
esac
echo "Done." ; echo ""
cat <<_EOT_
##############################################################################
####
#### Make ${ARCH}
####
##############################################################################
_EOT_
make V=${VERBOSE} clean
make -j4 V=${VERBOSE}
make -j4 V=${VERBOSE} install
echo "Done." ; echo ""
cat <<_EOT_
##############################################################################
####
#### Build library ${ARCH}
####
##############################################################################
_EOT_
PREFIX="${INTER_DIR}/${ARCHIVE_BASENAME}-${TARGET_VERSION}-android-${ANDROID_PLATFORM}-${ARCH}"
PLATFORM_OUT_DIR="${OUTPUT_DIR}/${ARCHIVE_BASENAME}-${TARGET_VERSION}-android-${ANDROID_PLATFORM}-${ARCH}"
mkdir -p "${PLATFORM_OUT_DIR}"
cp -R "${PREFIX}/include" "${PLATFORM_OUT_DIR}"
cp -R "${PREFIX}/lib" "${PLATFORM_OUT_DIR}"
echo "Done." ; echo ""
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment