From 208f0004a5930befee53af6df6f23e8866a98c0d Mon Sep 17 00:00:00 2001 From: Herman Chen Date: Thu, 10 Oct 2019 18:02:59 +0800 Subject: [PATCH] [build]: Add path detection for different ndk Support r10d and r16b first. Change-Id: I289813c26b79ad4a1b038fc07f8375832fe78162 Signed-off-by: Herman Chen --- CMakeLists.txt | 2 + build/android/aarch64/make-Android.bash | 82 ++++++++++++++++++++----- build/android/arm/make-Android.bash | 79 +++++++++++++++++++----- 3 files changed, 133 insertions(+), 30 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ba3956d8..e6349d7d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -166,6 +166,8 @@ if(GCC) add_definitions(-Wno-multichar) # add PIC flag add_definitions(-fPIC) + # disable exception for C++ + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -fno-rtti") endif(GCC) # ---------------------------------------------------------------------------- diff --git a/build/android/aarch64/make-Android.bash b/build/android/aarch64/make-Android.bash index c034810d..5a95d6fb 100755 --- a/build/android/aarch64/make-Android.bash +++ b/build/android/aarch64/make-Android.bash @@ -1,39 +1,93 @@ #!/bin/bash # Run this from within a bash shell -HOST_IP=`hostname --all-ip-addresses` -if [ ${HOST_IP} == "10.10.10.65" ] || [ ${HOST_IP} == "10.10.10.67" ]; then - ANDROID_NDK=/home/pub/ndk/android-ndk-r10d/ -else - ANDROID_NDK=~/work/android/ndk/android-ndk-r10d/ -fi - -PLATFORM=$ANDROID_NDK/platforms/android-21/arch-arm64 MAKE_PROGRAM=`which make` -cmake -DCMAKE_TOOLCHAIN_FILE=../android.toolchain.cmake \ +ANDROID_NDK="No ndk path found. You should add your ndk path" +TOOLCHAIN_FILE="no toolchain file found, Please fix ndk path" + +FOUND_NDK= + +# Search r10d ndk +# NOTE: r10d ndk do not have toolchain file +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[@]}; + do + if [ -d ${NDK_PATH} ]; then + echo "found r10d ndk ${NDK_PATH}" + FOUND_NDK=true + + ANDROID_NDK=${NDK_PATH} + TOOLCHAIN_FILE=../android.toolchain.cmake + 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} \ -DANDROID_FORCE_ARM_BUILD=ON \ -DANDROID_NDK=${ANDROID_NDK} \ -DANDROID_SYSROOT=${PLATFORM} \ -DANDROID_ABI="arm64-v8a" \ - -DANDROID_TOOLCHAIN_NAME="aarch64-linux-android-4.9" \ - -DANDROID_NATIVE_API_LEVEL=android-21 \ + -DANDROID_TOOLCHAIN_NAME=${TOOLCHAIN_NAME} \ + -DANDROID_NATIVE_API_LEVEL=${NATIVE_API_LEVEL} \ -DANDROID_STL=system \ - -DRKPLATFORM=ON \ + -DMPP_PROJECT_NAME=mpp \ + -DVPU_PROJECT_NAME=vpu \ -DHAVE_DRM=ON \ ../../../ +cmake --build . + # ---------------------------------------------------------------------------- # usefull cmake debug flag # ---------------------------------------------------------------------------- + #-DMPP_NAME="rockchip_mpp" \ + #-DVPU_NAME="rockchip_vpu" \ + #-DHAVE_DRM \ #-DCMAKE_BUILD_TYPE=Debug \ #-DCMAKE_VERBOSE_MAKEFILE=true \ #--trace \ #--debug-output \ #cmake --build . --clean-first -- V=1 -cmake --build . # ---------------------------------------------------------------------------- # test script @@ -45,5 +99,3 @@ cmake --build . #adb shell rk_log_test #adb shell rk_thread_test #adb logcat -d|tail -30 - - diff --git a/build/android/arm/make-Android.bash b/build/android/arm/make-Android.bash index 70779557..640397f5 100755 --- a/build/android/arm/make-Android.bash +++ b/build/android/arm/make-Android.bash @@ -1,29 +1,81 @@ #!/bin/bash # Run this from within a bash shell -HOST_IP=`hostname --all-ip-addresses` -if [ ${HOST_IP} == "10.10.10.65" ] || [ ${HOST_IP} == "10.10.10.67" ]; then - ANDROID_NDK=/home/pub/ndk/android-ndk-r10d/ -else - ANDROID_NDK=~/work/android/ndk/android-ndk-r10d/ -fi - -PLATFORM=$ANDROID_NDK/platforms/android-21/arch-arm MAKE_PROGRAM=`which make` -cmake -DCMAKE_TOOLCHAIN_FILE=../android.toolchain.cmake \ +ANDROID_NDK="No ndk path found. You should add your ndk path" +TOOLCHAIN_FILE="no toolchain file found, Please fix ndk path" + +FOUND_NDK= + +# Search r10d ndk +# NOTE: r10d ndk do not have toolchain file +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[@]}; + do + if [ -d ${NDK_PATH} ]; then + echo "found r10d ndk ${NDK_PATH}" + FOUND_NDK=true + + ANDROID_NDK=${NDK_PATH} + TOOLCHAIN_FILE=../android.toolchain.cmake + 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} \ -DANDROID_FORCE_ARM_BUILD=ON \ -DANDROID_NDK=${ANDROID_NDK} \ -DANDROID_SYSROOT=${PLATFORM} \ -DANDROID_ABI="armeabi-v7a with NEON" \ - -DANDROID_TOOLCHAIN_NAME="arm-linux-androideabi-4.8" \ - -DANDROID_NATIVE_API_LEVEL=android-21 \ + -DANDROID_TOOLCHAIN_NAME=${TOOLCHAIN_NAME} \ + -DANDROID_NATIVE_API_LEVEL=${NATIVE_API_LEVEL} \ -DANDROID_STL=system \ - -DRKPLATFORM=ON \ + -DMPP_PROJECT_NAME=mpp \ + -DVPU_PROJECT_NAME=vpu \ -DHAVE_DRM=ON \ ../../../ +cmake --build . + # ---------------------------------------------------------------------------- # usefull cmake debug flag # ---------------------------------------------------------------------------- @@ -36,7 +88,6 @@ cmake -DCMAKE_TOOLCHAIN_FILE=../android.toolchain.cmake \ #--debug-output \ #cmake --build . --clean-first -- V=1 -cmake --build . # ---------------------------------------------------------------------------- # test script @@ -48,5 +99,3 @@ cmake --build . #adb shell rk_log_test #adb shell rk_thread_test #adb logcat -d|tail -30 - -