libjpeg编译脚本
2020-05-15 本文已影响0人
T_Carbon
build_jpeg_all.sh
for arch in armeabi armeabi-v7a arm64-v8a x86 x86_64
do
bash build_jpeg.sh $arch
done
build_jpeg.sh
#!/bin/sh
#初始化环境变量
source config.sh
# 获取当前路径
NOW_DIR=$(cd `dirname $0`; pwd)
# 待编译的库目录名称
MY_LIBS_NAME=libjpeg-turbo
# 源代码路径
MY_SOURCE_DIR=$NOW_DIR
#编译的过程中产生的中间件的存放目录
BINARY_DIR=binary
#NDK路径
ANDROID_NDK_ROOT=/Users/wangtao/Library/Android/android-ndk-r16b
BUILD_PLATFORM=darwin-x86_64
AOSP_TOOLCHAIN_SUFFIX=4.9
AOSP_API=21
LIBS_DIR=$NOW_DIR/libs
echo "LIBS_DIR="$LIBS_DIR
# 构建中间文件
BUILD_DIR=./${BINARY_DIR}/${AOSP_ABI}
# 最终编译的安装目录
PREFIX=${LIBS_DIR}/${AOSP_ABI}/
SYSROOT=${ANDROID_NDK_ROOT}/platforms/android-${AOSP_API}/${AOSP_ARCH}
export CFLAGS="$AOSP_FLAGS -D__ANDROID_API__=${AOSP_API} --sysroot=${SYSROOT} \
-isystem ${ANDROID_NDK_ROOT}/sysroot/usr/include \
-isystem ${ANDROID_NDK_ROOT}/sysroot/usr/include/${HOST} "
export LDFLAGS=-pie
TOOLCHAIN=${ANDROID_NDK_ROOT}/toolchains/$TOOLCHAIN_BASE-$AOSP_TOOLCHAIN_SUFFIX/prebuilt/${BUILD_PLATFORM}
#创建当前编译目录
mkdir -p ${BUILD_DIR}
mkdir -p ${PREFIX}
cd ${BUILD_DIR}
cat <<EOF >toolchain.cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR ${PROCESSOR})
set(CMAKE_C_COMPILER ${TOOLCHAIN}/bin/${HOST}-gcc)
set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN}/${HOST})
EOF
cmake -G"Unix Makefiles" \
-DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
-DCMAKE_POSITION_INDEPENDENT_CODE=1 \
-DCMAKE_INSTALL_PREFIX=${PREFIX} \
-DWITH_JPEG8=1 \
${MY_SOURCE_DIR}
make clean
make
make install
config.sh
#架构
if [ "$#" -lt 1 ]; then
THE_ARCH=armv7
else
THE_ARCH=$(tr [A-Z] [a-z] <<< "$1")
fi
#根据不同架构配置环境变量
case "$THE_ARCH" in
arm|armv5|armv6|armv7|armeabi)
TOOLCHAIN_BASE="arm-linux-androideabi"
HOST="arm-linux-androideabi"
AOSP_ABI="armeabi"
AOSP_ARCH="arch-arm"
AOSP_FLAGS="-march=armv7-a -mfloat-abi=softfp -fprefetch-loop-arrays -mfpu=neon"
PROCESSOR="arm"
;;
armv7a|armeabi-v7a)
TOOLCHAIN_BASE="arm-linux-androideabi"
HOST="arm-linux-androideabi"
AOSP_ABI="armeabi-v7a"
AOSP_ARCH="arch-arm"
AOSP_FLAGS="-march=armv7-a -mfloat-abi=softfp -fprefetch-loop-arrays -mfpu=neon"
PROCESSOR="arm"
;;
armv8|armv8a|aarch64|arm64|arm64-v8a)
TOOLCHAIN_BASE="aarch64-linux-android"
HOST="aarch64-linux-android"
AOSP_ABI="arm64-v8a"
AOSP_ARCH="arch-arm64"
AOSP_FLAGS=""
PROCESSOR="aarch64"
;;
x86)
TOOLCHAIN_BASE="x86"
HOST="i686-linux-android"
AOSP_ABI="x86"
AOSP_ARCH="arch-x86"
AOSP_FLAGS=""
PROCESSOR="i386"
;;
x86_64|x64)
TOOLCHAIN_BASE="x86_64"
HOST="x86_64-linux-android"
AOSP_ABI="x86_64"
AOSP_ARCH="arch-x86_64"
AOSP_FLAGS=""
PROCESSOR="x86_64"
;;
*)
echo "ERROR: Unknown architecture $1"
[ "$0" = "$BASH_SOURCE" ] && exit 1 || return 1
;;
esac
echo "TOOLCHAIN_BASE="$TOOLCHAIN_BASE
echo "TOOLNAME_BASE="$TOOLNAME_BASE
echo "AOSP_ABI="$AOSP_ABI
echo "AOSP_ARCH="$AOSP_ARCH
echo "AOSP_FLAGS="$AOSP_FLAGS
echo "HOST="$HOST
编译
- 拷贝脚本到源码目录
- 执行 build_jpeg_all.sh