mirror of
https://github.com/nyanmisaka/mpp.git
synced 2026-01-24 03:40:42 +01:00
[cmake]: Adapt to Android 14 requirement
1. Android 14 required to use libc++ instead of libstdc++ 2. Add ndk search path and options for ndk switch. Signed-off-by: Herman Chen <herman.chen@rock-chips.com> Change-Id: I07595fc0290daaaf6518eca18d7b318be89fc6ae
This commit is contained in:
parent
56e006e046
commit
78a6ca648e
4 changed files with 102 additions and 43 deletions
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
BUILD_TYPE="Release"
|
||||
ANDROID_ABI="arm64-v8a"
|
||||
ANDROID_STL="system"
|
||||
|
||||
#Specify Android NDK path if needed
|
||||
#ANDROID_NDK=
|
||||
|
|
@ -20,7 +21,7 @@ ${CMAKE_PROGRAM} -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE} \
|
|||
-DANDROID_ABI=${ANDROID_ABI} \
|
||||
-DANDROID_TOOLCHAIN_NAME=${TOOLCHAIN_NAME} \
|
||||
-DANDROID_NATIVE_API_LEVEL=${NATIVE_API_LEVEL} \
|
||||
-DANDROID_STL=system \
|
||||
-DANDROID_STL=${ANDROID_STL} \
|
||||
-DMPP_PROJECT_NAME=mpp \
|
||||
-DVPU_PROJECT_NAME=vpu \
|
||||
-DHAVE_DRM=ON \
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ ${CMAKE_PROGRAM} -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE} \
|
|||
-DANDROID_ABI=${ANDROID_ABI} \
|
||||
-DANDROID_TOOLCHAIN_NAME=${TOOLCHAIN_NAME} \
|
||||
-DANDROID_NATIVE_API_LEVEL=${NATIVE_API_LEVEL} \
|
||||
-DANDROID_STL=system \
|
||||
-DANDROID_STL=${ANDROID_STL} \
|
||||
-DMPP_PROJECT_NAME=mpp \
|
||||
-DVPU_PROJECT_NAME=vpu \
|
||||
-DHAVE_DRM=ON \
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
#################################################
|
||||
while [ $# -gt 0 ]; do
|
||||
case $1 in
|
||||
--help)
|
||||
--help | -h)
|
||||
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"
|
||||
|
|
@ -15,6 +15,11 @@ while [ $# -gt 0 ]; do
|
|||
--debug)
|
||||
BUILD_TYPE="Debug"
|
||||
;;
|
||||
-B)
|
||||
if [ -f "CMakeCache.txt" ]; then
|
||||
rm CMakeCache.txt
|
||||
fi
|
||||
;;
|
||||
--ndk)
|
||||
ANDROID_NDK=$2
|
||||
shift
|
||||
|
|
@ -56,29 +61,105 @@ if [ ${CMAKE_MAJOR_VERSION} -ge 3 ] && [ ${CMAKE_MINOR_VERSION} -ge 12 ]; then
|
|||
fi
|
||||
|
||||
#################################################
|
||||
# Detect ndk version
|
||||
# Detect ndk path and 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/
|
||||
)
|
||||
NDK_SEARCH_PATH=(
|
||||
/home/pub/ndk/
|
||||
~/work/android/ndk/
|
||||
)
|
||||
|
||||
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[@]}"
|
||||
# try find ndk path in CMakeCache.txt
|
||||
if [ -f "CMakeCache.txt" ]; then
|
||||
ANDROID_NDK=`grep ANDROID_NDK CMakeCache.txt | awk -F '=' '{ print $2 }'`
|
||||
|
||||
if [ -d "${ANDROID_NDK}" ]; then
|
||||
echo "use android ndk from CMakeCache.txt : ${ANDROID_NDK}"
|
||||
FOUND_NDK=1
|
||||
fi
|
||||
fi
|
||||
else
|
||||
FOUND_NDK=1
|
||||
fi
|
||||
|
||||
#################################################
|
||||
# search possible path to get ndk with higher version
|
||||
#################################################
|
||||
NDK_OPTION=""
|
||||
NDK_COUNT=0
|
||||
|
||||
if [ "${FOUND_NDK}" = "0" ]; then
|
||||
echo "trying to find android ndk in the following paths:"
|
||||
for NDK_BASE in ${NDK_SEARCH_PATH[@]};
|
||||
do
|
||||
echo "${NDK_BASE}"
|
||||
done
|
||||
|
||||
echo "find valid android ndk:"
|
||||
|
||||
for NDK_BASE in ${NDK_SEARCH_PATH[@]};
|
||||
do
|
||||
if [ -d ${NDK_BASE} ]; then
|
||||
NDKS=`ls -r -d ${NDK_BASE}android-ndk-r*/`
|
||||
|
||||
for NDK_PATH in ${NDKS[@]};
|
||||
do
|
||||
if [ -d ${NDK_PATH} ]; then
|
||||
NDK_COUNT=$[${NDK_COUNT}+1]
|
||||
NDK_OPT="${NDK_COUNT} - ${NDK_PATH}"
|
||||
|
||||
echo ${NDK_OPT}
|
||||
|
||||
NDK_OPTION+="${NDK_PATH} "
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if [ "${FOUND_NDK}" = "1" ]; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
case ${NDK_COUNT} in
|
||||
0)
|
||||
;;
|
||||
1)
|
||||
ANDROID_NDK=${NDK_PATH[0]}
|
||||
FOUND_NDK=1
|
||||
|
||||
echo "use ndk: ${ANDROID_NDK}"
|
||||
;;
|
||||
*)
|
||||
read -p "select [1-${NDK_COUNT}] ndk used for compiling: " -ra NDK_INTPUT
|
||||
|
||||
NDK_INDEX=0
|
||||
|
||||
for NDK_PATH in ${NDK_OPTION[@]};
|
||||
do
|
||||
NDK_INDEX=$[${NDK_INDEX}+1]
|
||||
|
||||
if [ "${NDK_INDEX}" -eq "${NDK_INTPUT}" ]; then
|
||||
echo "${NDK_INTPUT} - ${NDK_PATH} selected as ANDROID_NDK"
|
||||
ANDROID_NDK=${NDK_PATH}
|
||||
FOUND_NDK=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ $FOUND_NDK -eq 0 ]; then
|
||||
echo "invalid input option ${NDK_INTPUT}"
|
||||
fi
|
||||
esac
|
||||
|
||||
if [ $FOUND_NDK -eq 0 ]; then
|
||||
echo "can not found any valid android ndk"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#################################################
|
||||
# try to detect NDK version
|
||||
# for ndk > 10, ndk version is presented at $ANDROID_NDK/source.properties
|
||||
|
|
@ -104,34 +185,9 @@ detect_ndk_version()
|
|||
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}"
|
||||
echo "NDK: ${ANDROID_NDK} version: ${NDK_VERSION}"
|
||||
|
||||
if [ $NDK_VERSION -eq 0 ]; then
|
||||
echo "NDK version isn't detected, please check $ANDROID_NDK"
|
||||
|
|
@ -161,10 +217,12 @@ else
|
|||
TOOLCHAIN_NAME="aarch64-linux-android-4.9"
|
||||
PLATFORM=$ANDROID_NDK/platforms/${NATIVE_API_LEVEL}/arch-arm64
|
||||
fi
|
||||
ANDROID_STL="system"
|
||||
else
|
||||
# From NDK 18, GCC is deprecated
|
||||
TOOLCHAIN_NAME=""
|
||||
PLATFORM=""
|
||||
ANDROID_STL="c++_static"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ set_target_properties(osal PROPERTIES FOLDER "osal")
|
|||
if(ANDROID)
|
||||
add_definitions(-static)
|
||||
# in Android pthread is in libc, also need liblog
|
||||
target_link_libraries(osal log stdc++ m)
|
||||
target_link_libraries(osal log m)
|
||||
endif(ANDROID)
|
||||
|
||||
# unit test
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue