mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-06 09:36:49 +08:00
[build]: Update Android build script
1. Detect NDK path and version 2. Enable cmake multithread compiling if version > 3.12 3. Support specifying args to build script Change-Id: I2179aeb5460de6b8d39a867ba3a4200c51b61be7 Signed-off-by: Johnson Ding <johnson.ding@rock-chips.com>
This commit is contained in:

committed by
Herman Chen

parent
2797a44932
commit
06a6014817
@@ -1,71 +1,23 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Run this from within a bash shell
|
|
||||||
MAKE_PROGRAM=`which make`
|
|
||||||
|
|
||||||
ANDROID_NDK="No ndk path found. You should add your ndk path"
|
BUILD_TYPE="Release"
|
||||||
TOOLCHAIN_FILE="no toolchain file found, Please fix ndk path"
|
ANDROID_ABI="arm64-v8a"
|
||||||
|
|
||||||
FOUND_NDK=
|
#Specify Android NDK path if needed
|
||||||
|
#ANDROID_NDK=
|
||||||
|
|
||||||
# Search r10d ndk
|
#Specify cmake if needed
|
||||||
# NOTE: r10d ndk do not have toolchain file
|
#CMAKE_PROGRAM=
|
||||||
if [ ! ${FOUND_NDK} ]; then
|
|
||||||
NDK_R10D_PATHS=(
|
|
||||||
/home/pub/ndk/android-ndk-r10d/
|
|
||||||
~/work/android/ndk/android-ndk-r10d/
|
|
||||||
)
|
|
||||||
|
|
||||||
for NDK_PATH in ${NDK_R10D_PATHS[@]};
|
source ../env_setup.sh
|
||||||
do
|
|
||||||
if [ -d ${NDK_PATH} ]; then
|
|
||||||
echo "found r10d ndk ${NDK_PATH}"
|
|
||||||
FOUND_NDK=true
|
|
||||||
|
|
||||||
ANDROID_NDK=${NDK_PATH}
|
${CMAKE_PROGRAM} -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE} \
|
||||||
TOOLCHAIN_FILE=../android.toolchain.cmake
|
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
|
||||||
NATIVE_API_LEVEL="android-21"
|
|
||||||
TOOLCHAIN_NAME="aarch64-linux-android-4.9"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Search r16b ndk
|
|
||||||
# NOTE: r16b use ndk toolchain file
|
|
||||||
if [ ! ${FOUND_NDK} ]; then
|
|
||||||
NDK_R16B_PATHS=(
|
|
||||||
/home/pub/ndk/android-ndk-r16b/
|
|
||||||
~/work/android/ndk/android-ndk-r16b/
|
|
||||||
)
|
|
||||||
|
|
||||||
for NDK_PATH in ${NDK_R16B_PATHS[@]};
|
|
||||||
do
|
|
||||||
if [ -d ${NDK_PATH} ]; then
|
|
||||||
echo "found r16 ndk ${NDK_PATH}"
|
|
||||||
FOUND_NDK=true
|
|
||||||
|
|
||||||
ANDROID_NDK=${NDK_PATH}
|
|
||||||
TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake
|
|
||||||
NATIVE_API_LEVEL="android-27"
|
|
||||||
TOOLCHAIN_NAME="aarch64-linux-android-4.9"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! ${FOUND_NDK} ]; then
|
|
||||||
echo ${ANDROID_NDK}
|
|
||||||
echo ${TOOLCHAIN_FILE}
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
PLATFORM=$ANDROID_NDK/platforms/${NATIVE_API_LEVEL}/arch-arm64
|
|
||||||
|
|
||||||
cmake -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE} \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
|
||||||
-DCMAKE_MAKE_PROGRAM=${MAKE_PROGRAM} \
|
-DCMAKE_MAKE_PROGRAM=${MAKE_PROGRAM} \
|
||||||
-DANDROID_FORCE_ARM_BUILD=ON \
|
-DANDROID_FORCE_ARM_BUILD=ON \
|
||||||
-DANDROID_NDK=${ANDROID_NDK} \
|
-DANDROID_NDK=${ANDROID_NDK} \
|
||||||
-DANDROID_SYSROOT=${PLATFORM} \
|
-DANDROID_SYSROOT=${PLATFORM} \
|
||||||
-DANDROID_ABI="arm64-v8a" \
|
-DANDROID_ABI=${ANDROID_ABI} \
|
||||||
-DANDROID_TOOLCHAIN_NAME=${TOOLCHAIN_NAME} \
|
-DANDROID_TOOLCHAIN_NAME=${TOOLCHAIN_NAME} \
|
||||||
-DANDROID_NATIVE_API_LEVEL=${NATIVE_API_LEVEL} \
|
-DANDROID_NATIVE_API_LEVEL=${NATIVE_API_LEVEL} \
|
||||||
-DANDROID_STL=system \
|
-DANDROID_STL=system \
|
||||||
@@ -74,7 +26,11 @@ cmake -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE} \
|
|||||||
-DHAVE_DRM=ON \
|
-DHAVE_DRM=ON \
|
||||||
../../../
|
../../../
|
||||||
|
|
||||||
cmake --build .
|
if [ "${CMAKE_PARALLEL_ENABLE}" = "0" ]; then
|
||||||
|
${CMAKE_PROGRAM} --build .
|
||||||
|
else
|
||||||
|
${CMAKE_PROGRAM} --build . -j
|
||||||
|
fi
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
# usefull cmake debug flag
|
# usefull cmake debug flag
|
||||||
|
@@ -1,71 +1,23 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Run this from within a bash shell
|
|
||||||
MAKE_PROGRAM=`which make`
|
|
||||||
|
|
||||||
ANDROID_NDK="No ndk path found. You should add your ndk path"
|
BUILD_TYPE="Release"
|
||||||
TOOLCHAIN_FILE="no toolchain file found, Please fix ndk path"
|
ANDROID_ABI="armeabi-v7a"
|
||||||
|
|
||||||
FOUND_NDK=
|
#Specify Android NDK path if needed
|
||||||
|
#ANDROID_NDK=
|
||||||
|
|
||||||
# Search r10d ndk
|
#Specify cmake if needed
|
||||||
# NOTE: r10d ndk do not have toolchain file
|
#CMAKE_PROGRAM=
|
||||||
if [ ! ${FOUND_NDK} ]; then
|
|
||||||
NDK_R10D_PATHS=(
|
|
||||||
/home/pub/ndk/android-ndk-r10d/
|
|
||||||
~/work/android/ndk/android-ndk-r10d/
|
|
||||||
)
|
|
||||||
|
|
||||||
for NDK_PATH in ${NDK_R10D_PATHS[@]};
|
source ../env_setup.sh
|
||||||
do
|
|
||||||
if [ -d ${NDK_PATH} ]; then
|
|
||||||
echo "found r10d ndk ${NDK_PATH}"
|
|
||||||
FOUND_NDK=true
|
|
||||||
|
|
||||||
ANDROID_NDK=${NDK_PATH}
|
${CMAKE_PROGRAM} -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE} \
|
||||||
TOOLCHAIN_FILE=../android.toolchain.cmake
|
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
|
||||||
NATIVE_API_LEVEL="android-21"
|
|
||||||
TOOLCHAIN_NAME="arm-linux-androideabi-4.8"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Search r16b ndk
|
|
||||||
# NOTE: r16b use ndk toolchain file
|
|
||||||
if [ ! ${FOUND_NDK} ]; then
|
|
||||||
NDK_R16B_PATHS=(
|
|
||||||
/home/pub/ndk/android-ndk-r16b/
|
|
||||||
~/work/android/ndk/android-ndk-r16b/
|
|
||||||
)
|
|
||||||
|
|
||||||
for NDK_PATH in ${NDK_R16B_PATHS[@]};
|
|
||||||
do
|
|
||||||
if [ -d ${NDK_PATH} ]; then
|
|
||||||
echo "found r16 ndk ${NDK_PATH}"
|
|
||||||
FOUND_NDK=true
|
|
||||||
|
|
||||||
ANDROID_NDK=${NDK_PATH}
|
|
||||||
TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake
|
|
||||||
NATIVE_API_LEVEL="android-27"
|
|
||||||
TOOLCHAIN_NAME="arm-linux-androideabi-4.9"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! ${FOUND_NDK} ]; then
|
|
||||||
echo ${ANDROID_NDK}
|
|
||||||
echo ${TOOLCHAIN_FILE}
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
PLATFORM=$ANDROID_NDK/platforms/${NATIVE_API_LEVEL}/arch-arm
|
|
||||||
|
|
||||||
cmake -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE} \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
|
||||||
-DCMAKE_MAKE_PROGRAM=${MAKE_PROGRAM} \
|
-DCMAKE_MAKE_PROGRAM=${MAKE_PROGRAM} \
|
||||||
-DANDROID_FORCE_ARM_BUILD=ON \
|
-DANDROID_FORCE_ARM_BUILD=ON \
|
||||||
-DANDROID_NDK=${ANDROID_NDK} \
|
-DANDROID_NDK=${ANDROID_NDK} \
|
||||||
-DANDROID_SYSROOT=${PLATFORM} \
|
-DANDROID_SYSROOT=${PLATFORM} \
|
||||||
-DANDROID_ABI="armeabi-v7a with NEON" \
|
-DANDROID_ABI=${ANDROID_ABI} \
|
||||||
-DANDROID_TOOLCHAIN_NAME=${TOOLCHAIN_NAME} \
|
-DANDROID_TOOLCHAIN_NAME=${TOOLCHAIN_NAME} \
|
||||||
-DANDROID_NATIVE_API_LEVEL=${NATIVE_API_LEVEL} \
|
-DANDROID_NATIVE_API_LEVEL=${NATIVE_API_LEVEL} \
|
||||||
-DANDROID_STL=system \
|
-DANDROID_STL=system \
|
||||||
@@ -74,7 +26,11 @@ cmake -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE} \
|
|||||||
-DHAVE_DRM=ON \
|
-DHAVE_DRM=ON \
|
||||||
../../../
|
../../../
|
||||||
|
|
||||||
cmake --build .
|
if [ "${CMAKE_PARALLEL_ENABLE}" = "0" ]; then
|
||||||
|
${CMAKE_PROGRAM} --build .
|
||||||
|
else
|
||||||
|
${CMAKE_PROGRAM} --build . -j
|
||||||
|
fi
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
# usefull cmake debug flag
|
# usefull cmake debug flag
|
||||||
|
173
build/android/env_setup.sh
Executable file
173
build/android/env_setup.sh
Executable file
@@ -0,0 +1,173 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#################################################
|
||||||
|
# Arguments
|
||||||
|
#################################################
|
||||||
|
while [ $# -gt 0 ]; do
|
||||||
|
case $1 in
|
||||||
|
--help)
|
||||||
|
echo "Execute make-Android.sh in *arm/* or *aarch64/* with some args."
|
||||||
|
echo " use --ndk to set ANDROID_NDK"
|
||||||
|
echo " use --cmake to specify which cmake to use"
|
||||||
|
echo " use --debug to enable debug build"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
--debug)
|
||||||
|
BUILD_TYPE="Debug"
|
||||||
|
;;
|
||||||
|
--ndk)
|
||||||
|
ANDROID_NDK=$2
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--cmake)
|
||||||
|
CMAKE_PROGRAM=$2
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
CMAKE_PARALLEL_ENABLE=0
|
||||||
|
|
||||||
|
# Run this from within a bash shell
|
||||||
|
MAKE_PROGRAM=`which make`
|
||||||
|
|
||||||
|
#################################################
|
||||||
|
# Detect cmake version
|
||||||
|
#################################################
|
||||||
|
if [ -z $CMAKE_PROGRAM ]; then
|
||||||
|
CMAKE_PROGRAM=`which cmake`
|
||||||
|
fi
|
||||||
|
|
||||||
|
CMAKE_VERSION=$(${CMAKE_PROGRAM} --version | grep "version" | cut -d " " -f 3 | cut -d "." -f 1-2)
|
||||||
|
|
||||||
|
if [ -z ${CMAKE_VERSION} ]; then
|
||||||
|
echo -e "\e[1;31m cmake in ${CMAKE_PROGRAM} is invalid, please check!\e[0m"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "Found cmake in ${CMAKE_PROGRAM}, version: ${CMAKE_VERSION}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $(echo "$CMAKE_VERSION >= 3.12" | bc) = 1 ]; then
|
||||||
|
CMAKE_PARALLEL_ENABLE=1
|
||||||
|
echo "use cmake parallel build."
|
||||||
|
fi
|
||||||
|
|
||||||
|
#################################################
|
||||||
|
# Detect ndk version
|
||||||
|
#################################################
|
||||||
|
|
||||||
|
NDK_R16B_PATHS=(
|
||||||
|
/home/pub/ndk/android-ndk-r16b/
|
||||||
|
~/work/android/ndk/android-ndk-r16b/
|
||||||
|
)
|
||||||
|
NDK_R10D_PATHS=(
|
||||||
|
/home/pub/ndk/android-ndk-r10d/
|
||||||
|
~/work/android/ndk/android-ndk-r10d/
|
||||||
|
)
|
||||||
|
|
||||||
|
FOUND_NDK=0
|
||||||
|
|
||||||
|
if [ -z "$ANDROID_NDK" ]; then
|
||||||
|
FOUND_NDK=0
|
||||||
|
echo "Going to find ANDROID_NDK in the following paths:"
|
||||||
|
echo "NDK 16 in: ${NDK_R16B_PATHS[@]}"
|
||||||
|
echo "NDK 10 in: ${NDK_R10D_PATHS[@]}"
|
||||||
|
else
|
||||||
|
FOUND_NDK=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
#################################################
|
||||||
|
# try to detect NDK version
|
||||||
|
# for ndk > 10, ndk version is presented at $ANDROID_NDK/source.properties
|
||||||
|
# for ndk <=10, ndk version is presented at $ANDROID_NDK/RELEASE.TXT
|
||||||
|
# parameter: ndk path
|
||||||
|
# return: ndk version, 0 if not found
|
||||||
|
#################################################
|
||||||
|
detect_ndk_version()
|
||||||
|
{
|
||||||
|
RET=0
|
||||||
|
|
||||||
|
if [ -f "$1/source.properties" ]; then
|
||||||
|
# NDK version is greater than 10
|
||||||
|
RET=$(grep -o '^Pkg.Revision.*[0-9]*.*' $ANDROID_NDK/source.properties |cut -d " " -f 3 | cut -d "." -f 1)
|
||||||
|
elif [ -f "$1/RELEASE.TXT" ]; then
|
||||||
|
# NDK version is less than 11
|
||||||
|
RET=$(grep -o '^r[0-9]*.*' $ANDROID_NDK/RELEASE.TXT | cut -d " " -f 1 | cut -b2- | sed 's/[a-z]//g')
|
||||||
|
else
|
||||||
|
# A correct NDK directory must be pointed
|
||||||
|
RET=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo $RET
|
||||||
|
}
|
||||||
|
|
||||||
|
# Search r16b ndk # NOTE: r16b use ndk toolchain file
|
||||||
|
if [ "${FOUND_NDK}" = "0" ]; then
|
||||||
|
|
||||||
|
for NDK_PATH in ${NDK_R16B_PATHS[@]};
|
||||||
|
do
|
||||||
|
if [ -d ${NDK_PATH} ]; then
|
||||||
|
FOUND_NDK=1
|
||||||
|
ANDROID_NDK=${NDK_PATH}
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Search r10d ndk
|
||||||
|
# NOTE: r10d ndk do not have toolchain file
|
||||||
|
if [ "${FOUND_NDK}" = "0" ]; then
|
||||||
|
|
||||||
|
for NDK_PATH in ${NDK_R10D_PATHS[@]};
|
||||||
|
do
|
||||||
|
if [ -d ${NDK_PATH} ]; then
|
||||||
|
FOUND_NDK=1
|
||||||
|
ANDROID_NDK=${NDK_PATH}
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
NDK_VERSION=$(detect_ndk_version ${ANDROID_NDK})
|
||||||
|
|
||||||
|
echo "Found NDK in: ${ANDROID_NDK}, version: ${NDK_VERSION}"
|
||||||
|
|
||||||
|
if [ $NDK_VERSION -eq 0 ]; then
|
||||||
|
echo "NDK version isn't detected, please check $ANDROID_NDK"
|
||||||
|
FOUND_NDK=0
|
||||||
|
else
|
||||||
|
FOUND_NDK=1
|
||||||
|
|
||||||
|
if [ $NDK_VERSION -ge 16 ]; then
|
||||||
|
TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake
|
||||||
|
TOOLCHAIN_NAME="arm-linux-androideabi-4.9"
|
||||||
|
NATIVE_API_LEVEL="android-27"
|
||||||
|
elif [ $NDK_VERSION -gt 12 ]; then
|
||||||
|
TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake
|
||||||
|
TOOLCHAIN_NAME="arm-linux-androideabi-4.9"
|
||||||
|
NATIVE_API_LEVEL="android-21"
|
||||||
|
elif [ $NDK_VERSION -le 12 ]; then
|
||||||
|
TOOLCHAIN_FILE=../android.toolchain.cmake
|
||||||
|
TOOLCHAIN_NAME="arm-linux-androideabi-4.9"
|
||||||
|
NATIVE_API_LEVEL="android-21"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${FOUND_NDK}" = "0" ]; then
|
||||||
|
echo -e "\e[1;31m No ndk path found. You should add your ndk path\e[0m"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "ndk path: $ANDROID_NDK"
|
||||||
|
echo "toolchain file: $TOOLCHAIN_FILE"
|
||||||
|
echo "toolchain name: $TOOLCHAIN_NAME"
|
||||||
|
echo "api level: $NATIVE_API_LEVEL"
|
||||||
|
fi
|
||||||
|
|
||||||
|
#################################################
|
||||||
|
# Set platform tools
|
||||||
|
#################################################
|
||||||
|
if [ "${ANDROID_ABI}" = "armeabi-v7a" ]; then
|
||||||
|
ANDROID_ABI="armeabi-v7a with NEON"
|
||||||
|
PLATFORM=$ANDROID_NDK/platforms/${NATIVE_API_LEVEL}/arch-arm
|
||||||
|
elif [ "${ANDROID_ABI}" = "arm64-v8a" ]; then
|
||||||
|
PLATFORM=$ANDROID_NDK/platforms/${NATIVE_API_LEVEL}/arch-arm64
|
||||||
|
fi
|
Reference in New Issue
Block a user