xref: /rockchip-linux_mpp/build/android/env_setup.sh (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka#!/bin/bash
2*437bfbebSnyanmisaka
3*437bfbebSnyanmisaka# Run this from within a bash shell
4*437bfbebSnyanmisakaMAKE_PROGRAM=`which make`
5*437bfbebSnyanmisaka
6*437bfbebSnyanmisaka# delete list
7*437bfbebSnyanmisakaFILES_TO_DELETE=(
8*437bfbebSnyanmisaka    "CMakeCache.txt"
9*437bfbebSnyanmisaka    "Makefile"
10*437bfbebSnyanmisaka    "cmake_install.cmake"
11*437bfbebSnyanmisaka    "compile_commands.json"
12*437bfbebSnyanmisaka    "rockchip_mpp.pc"
13*437bfbebSnyanmisaka    "rockchip_vpu.pc"
14*437bfbebSnyanmisaka)
15*437bfbebSnyanmisaka
16*437bfbebSnyanmisakaDIRS_TO_DELETE=(
17*437bfbebSnyanmisaka    "CMakeFiles"
18*437bfbebSnyanmisaka    "mpp"
19*437bfbebSnyanmisaka    "osal"
20*437bfbebSnyanmisaka    "test"
21*437bfbebSnyanmisaka    "utils"
22*437bfbebSnyanmisaka)
23*437bfbebSnyanmisaka
24*437bfbebSnyanmisaka#################################################
25*437bfbebSnyanmisaka# Arguments
26*437bfbebSnyanmisaka#################################################
27*437bfbebSnyanmisakawhile [ $# -gt 0 ]; do
28*437bfbebSnyanmisaka    case $1 in
29*437bfbebSnyanmisaka        --help | -h)
30*437bfbebSnyanmisaka            echo "Execute make-Android.sh in *arm/* or *aarch64/* with some args."
31*437bfbebSnyanmisaka            echo "  use --ndk to set ANDROID_NDK"
32*437bfbebSnyanmisaka            echo "  use --cmake to specify which cmake to use"
33*437bfbebSnyanmisaka            echo "  use --debug to enable debug build"
34*437bfbebSnyanmisaka            echo "  use --rebuild to rebuild after clean"
35*437bfbebSnyanmisaka            echo "  use --clean to clean all build file"
36*437bfbebSnyanmisaka            exit 1
37*437bfbebSnyanmisaka            ;;
38*437bfbebSnyanmisaka        --debug)
39*437bfbebSnyanmisaka            BUILD_TYPE="Debug"
40*437bfbebSnyanmisaka            ;;
41*437bfbebSnyanmisaka        -B)
42*437bfbebSnyanmisaka            if [ -f "CMakeCache.txt" ]; then
43*437bfbebSnyanmisaka                rm CMakeCache.txt
44*437bfbebSnyanmisaka            fi
45*437bfbebSnyanmisaka            ;;
46*437bfbebSnyanmisaka        --ndk)
47*437bfbebSnyanmisaka            ANDROID_NDK=$2
48*437bfbebSnyanmisaka            shift
49*437bfbebSnyanmisaka            ;;
50*437bfbebSnyanmisaka        --cmake)
51*437bfbebSnyanmisaka            CMAKE_PROGRAM=$2
52*437bfbebSnyanmisaka            shift
53*437bfbebSnyanmisaka            ;;
54*437bfbebSnyanmisaka        --rebuild)
55*437bfbebSnyanmisaka            ${MAKE_PROGRAM} clean
56*437bfbebSnyanmisaka            if [ -f "CMakeCache.txt" ]; then
57*437bfbebSnyanmisaka                rm CMakeCache.txt
58*437bfbebSnyanmisaka            fi
59*437bfbebSnyanmisaka            shift
60*437bfbebSnyanmisaka            ;;
61*437bfbebSnyanmisaka        --clean)
62*437bfbebSnyanmisaka            for FILE_TO_DELETE in "${FILES_TO_DELETE[@]}"; do
63*437bfbebSnyanmisaka                if [ -f ${FILE_TO_DELETE} ]; then
64*437bfbebSnyanmisaka                    rm ${FILE_TO_DELETE}
65*437bfbebSnyanmisaka                fi
66*437bfbebSnyanmisaka            done
67*437bfbebSnyanmisaka            for DIR_TO_DELETE in "${DIRS_TO_DELETE[@]}"; do
68*437bfbebSnyanmisaka                if [ -d ${DIR_TO_DELETE} ]; then
69*437bfbebSnyanmisaka                    rm -rf ${DIR_TO_DELETE}
70*437bfbebSnyanmisaka                fi
71*437bfbebSnyanmisaka            done
72*437bfbebSnyanmisaka            exit 1
73*437bfbebSnyanmisaka            ;;
74*437bfbebSnyanmisaka    esac
75*437bfbebSnyanmisaka    shift
76*437bfbebSnyanmisakadone
77*437bfbebSnyanmisaka
78*437bfbebSnyanmisakaCMAKE_PARALLEL_ENABLE=0
79*437bfbebSnyanmisaka
80*437bfbebSnyanmisaka#################################################
81*437bfbebSnyanmisaka# Detect cmake version
82*437bfbebSnyanmisaka#################################################
83*437bfbebSnyanmisakaif [ -z $CMAKE_PROGRAM ]; then
84*437bfbebSnyanmisaka    CMAKE_PROGRAM=`which cmake`
85*437bfbebSnyanmisakafi
86*437bfbebSnyanmisaka
87*437bfbebSnyanmisakaCMAKE_VERSION=$(${CMAKE_PROGRAM} --version | grep "version" | cut -d " " -f 3)
88*437bfbebSnyanmisakaCMAKE_MAJOR_VERSION=`echo ${CMAKE_VERSION} | cut -d "." -f 1`
89*437bfbebSnyanmisakaCMAKE_MINOR_VERSION=`echo ${CMAKE_VERSION} | cut -d "." -f 2`
90*437bfbebSnyanmisaka
91*437bfbebSnyanmisakaif [ -z ${CMAKE_VERSION} ]; then
92*437bfbebSnyanmisaka    echo -e "\e[1;31m cmake in ${CMAKE_PROGRAM} is invalid, please check!\e[0m"
93*437bfbebSnyanmisaka    exit 1
94*437bfbebSnyanmisakaelse
95*437bfbebSnyanmisaka    echo "Found cmake in ${CMAKE_PROGRAM}, version: ${CMAKE_VERSION}"
96*437bfbebSnyanmisakafi
97*437bfbebSnyanmisaka
98*437bfbebSnyanmisakaif [ ${CMAKE_MAJOR_VERSION} -ge 3 ] && [ ${CMAKE_MINOR_VERSION} -ge 12 ]; then
99*437bfbebSnyanmisaka    CMAKE_PARALLEL_ENABLE=1
100*437bfbebSnyanmisaka    echo "use cmake parallel build."
101*437bfbebSnyanmisakafi
102*437bfbebSnyanmisaka
103*437bfbebSnyanmisaka#################################################
104*437bfbebSnyanmisaka# Detect ndk path and version
105*437bfbebSnyanmisaka#################################################
106*437bfbebSnyanmisaka
107*437bfbebSnyanmisakaNDK_SEARCH_PATH=(
108*437bfbebSnyanmisaka    /home/pub/ndk/
109*437bfbebSnyanmisaka    ~/work/android/ndk/
110*437bfbebSnyanmisaka)
111*437bfbebSnyanmisaka
112*437bfbebSnyanmisakaFOUND_NDK=0
113*437bfbebSnyanmisaka
114*437bfbebSnyanmisakaif [ -z "$ANDROID_NDK" ]; then
115*437bfbebSnyanmisaka    # try find ndk path in CMakeCache.txt
116*437bfbebSnyanmisaka    if [ -f "CMakeCache.txt" ]; then
117*437bfbebSnyanmisaka        ANDROID_NDK=`grep ANDROID_NDK\: CMakeCache.txt | awk -F '=' '{ print $2 }'`
118*437bfbebSnyanmisaka
119*437bfbebSnyanmisaka        if [ -d "${ANDROID_NDK}" ]; then
120*437bfbebSnyanmisaka            echo "use android ndk from CMakeCache.txt : ${ANDROID_NDK}"
121*437bfbebSnyanmisaka            FOUND_NDK=1
122*437bfbebSnyanmisaka        fi
123*437bfbebSnyanmisaka    fi
124*437bfbebSnyanmisakaelse
125*437bfbebSnyanmisaka    FOUND_NDK=1
126*437bfbebSnyanmisakafi
127*437bfbebSnyanmisaka
128*437bfbebSnyanmisaka#################################################
129*437bfbebSnyanmisaka# search possible path to get ndk with higher version
130*437bfbebSnyanmisaka#################################################
131*437bfbebSnyanmisakaNDK_OPTION=""
132*437bfbebSnyanmisakaNDK_COUNT=0
133*437bfbebSnyanmisaka
134*437bfbebSnyanmisakaif [ "${FOUND_NDK}" = "0" ]; then
135*437bfbebSnyanmisaka    echo "trying to find android ndk in the following paths:"
136*437bfbebSnyanmisaka    for NDK_BASE in ${NDK_SEARCH_PATH[@]};
137*437bfbebSnyanmisaka    do
138*437bfbebSnyanmisaka        echo "${NDK_BASE}"
139*437bfbebSnyanmisaka    done
140*437bfbebSnyanmisaka
141*437bfbebSnyanmisaka    echo "find valid android ndk:"
142*437bfbebSnyanmisaka
143*437bfbebSnyanmisaka    for NDK_BASE in ${NDK_SEARCH_PATH[@]};
144*437bfbebSnyanmisaka    do
145*437bfbebSnyanmisaka        if [ -d ${NDK_BASE} ]; then
146*437bfbebSnyanmisaka            NDKS=`ls -r -d ${NDK_BASE}android-ndk-r*/`
147*437bfbebSnyanmisaka
148*437bfbebSnyanmisaka            for NDK_PATH in ${NDKS[@]};
149*437bfbebSnyanmisaka            do
150*437bfbebSnyanmisaka                if [ -d ${NDK_PATH} ]; then
151*437bfbebSnyanmisaka                    NDK_COUNT=$[${NDK_COUNT}+1]
152*437bfbebSnyanmisaka                    NDK_OPT="${NDK_COUNT} - ${NDK_PATH}"
153*437bfbebSnyanmisaka
154*437bfbebSnyanmisaka                    echo ${NDK_OPT}
155*437bfbebSnyanmisaka
156*437bfbebSnyanmisaka                    NDK_OPTION+="${NDK_PATH} "
157*437bfbebSnyanmisaka                fi
158*437bfbebSnyanmisaka            done
159*437bfbebSnyanmisaka        fi
160*437bfbebSnyanmisaka    done
161*437bfbebSnyanmisakafi
162*437bfbebSnyanmisaka
163*437bfbebSnyanmisakacase ${NDK_COUNT} in
164*437bfbebSnyanmisaka    0)
165*437bfbebSnyanmisaka        ;;
166*437bfbebSnyanmisaka    1)
167*437bfbebSnyanmisaka        ANDROID_NDK=${NDK_PATH[0]}
168*437bfbebSnyanmisaka        FOUND_NDK=1
169*437bfbebSnyanmisaka
170*437bfbebSnyanmisaka        echo "use ndk: ${ANDROID_NDK}"
171*437bfbebSnyanmisaka        ;;
172*437bfbebSnyanmisaka    *)
173*437bfbebSnyanmisaka        read -p "select [1-${NDK_COUNT}] ndk used for compiling, def[1]: " -ra NDK_INTPUT
174*437bfbebSnyanmisaka        NDK_INTPUT=${NDK_INTPUT:-1}
175*437bfbebSnyanmisaka
176*437bfbebSnyanmisaka        NDK_INDEX=0
177*437bfbebSnyanmisaka
178*437bfbebSnyanmisaka        for NDK_PATH in ${NDK_OPTION[@]};
179*437bfbebSnyanmisaka        do
180*437bfbebSnyanmisaka            NDK_INDEX=$[${NDK_INDEX}+1]
181*437bfbebSnyanmisaka
182*437bfbebSnyanmisaka            if [ "${NDK_INDEX}" == "${NDK_INTPUT}" ]; then
183*437bfbebSnyanmisaka                echo "${NDK_INTPUT} - ${NDK_PATH} selected as ANDROID_NDK"
184*437bfbebSnyanmisaka                ANDROID_NDK=${NDK_PATH}
185*437bfbebSnyanmisaka                FOUND_NDK=1
186*437bfbebSnyanmisaka                break
187*437bfbebSnyanmisaka            fi
188*437bfbebSnyanmisaka        done
189*437bfbebSnyanmisaka
190*437bfbebSnyanmisaka        if [ $FOUND_NDK -eq 0 ]; then
191*437bfbebSnyanmisaka            echo "invalid input option ${NDK_INTPUT}"
192*437bfbebSnyanmisaka        fi
193*437bfbebSnyanmisakaesac
194*437bfbebSnyanmisaka
195*437bfbebSnyanmisakaif [ $FOUND_NDK -eq 0 ]; then
196*437bfbebSnyanmisaka    echo "can not found any valid android ndk"
197*437bfbebSnyanmisaka    exit 1
198*437bfbebSnyanmisakafi
199*437bfbebSnyanmisaka
200*437bfbebSnyanmisaka#################################################
201*437bfbebSnyanmisaka# try to detect NDK version
202*437bfbebSnyanmisaka# for ndk > 10, ndk version is presented at $ANDROID_NDK/source.properties
203*437bfbebSnyanmisaka# for ndk <=10, ndk version is presented at $ANDROID_NDK/RELEASE.TXT
204*437bfbebSnyanmisaka# parameter: ndk path
205*437bfbebSnyanmisaka# return: ndk version, 0 if not found
206*437bfbebSnyanmisaka#################################################
207*437bfbebSnyanmisakadetect_ndk_version()
208*437bfbebSnyanmisaka{
209*437bfbebSnyanmisaka    RET=0
210*437bfbebSnyanmisaka
211*437bfbebSnyanmisaka    if [ -f "$1/source.properties" ]; then
212*437bfbebSnyanmisaka        # NDK version is greater than 10
213*437bfbebSnyanmisaka        RET=$(grep -o '^Pkg.Revision.*[0-9]*.*' $ANDROID_NDK/source.properties |cut -d " " -f 3 | cut -d "." -f 1)
214*437bfbebSnyanmisaka    elif [ -f "$1/RELEASE.TXT" ]; then
215*437bfbebSnyanmisaka        # NDK version is less than 11
216*437bfbebSnyanmisaka        RET=$(grep -o '^r[0-9]*.*' $ANDROID_NDK/RELEASE.TXT | cut -d " " -f 1 | cut -b2- | sed 's/[a-z]//g')
217*437bfbebSnyanmisaka    else
218*437bfbebSnyanmisaka        # A correct NDK directory must be pointed
219*437bfbebSnyanmisaka        RET=0
220*437bfbebSnyanmisaka    fi
221*437bfbebSnyanmisaka
222*437bfbebSnyanmisaka    echo $RET
223*437bfbebSnyanmisaka}
224*437bfbebSnyanmisaka
225*437bfbebSnyanmisakaNDK_VERSION=$(detect_ndk_version ${ANDROID_NDK})
226*437bfbebSnyanmisaka
227*437bfbebSnyanmisakaecho "NDK: ${ANDROID_NDK} version: ${NDK_VERSION}"
228*437bfbebSnyanmisaka
229*437bfbebSnyanmisakaif [ $NDK_VERSION -eq 0 ]; then
230*437bfbebSnyanmisaka    echo "NDK version isn't detected, please check $ANDROID_NDK"
231*437bfbebSnyanmisaka    FOUND_NDK=0
232*437bfbebSnyanmisakaelse
233*437bfbebSnyanmisaka    FOUND_NDK=1
234*437bfbebSnyanmisaka
235*437bfbebSnyanmisaka    if [ $NDK_VERSION -ge 16 ]; then
236*437bfbebSnyanmisaka        TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake
237*437bfbebSnyanmisaka        NATIVE_API_LEVEL="android-27"
238*437bfbebSnyanmisaka    elif [ $NDK_VERSION -gt 12 ]; then
239*437bfbebSnyanmisaka        TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake
240*437bfbebSnyanmisaka        NATIVE_API_LEVEL="android-21"
241*437bfbebSnyanmisaka    elif [ $NDK_VERSION -le 12 ]; then
242*437bfbebSnyanmisaka        TOOLCHAIN_FILE=../android.toolchain.cmake
243*437bfbebSnyanmisaka        NATIVE_API_LEVEL="android-21"
244*437bfbebSnyanmisaka    fi
245*437bfbebSnyanmisaka
246*437bfbebSnyanmisaka    if [ $NDK_VERSION -lt 18 ]; then
247*437bfbebSnyanmisaka        #################################################
248*437bfbebSnyanmisaka        # Set platform tools
249*437bfbebSnyanmisaka        #################################################
250*437bfbebSnyanmisaka        if [ "${ANDROID_ABI}" = "armeabi-v7a" ] || [ "${ANDROID_ABI}" = "armeabi-v7a with NEON" ]; then
251*437bfbebSnyanmisaka            TOOLCHAIN_NAME="arm-linux-androideabi-4.9"
252*437bfbebSnyanmisaka            PLATFORM=$ANDROID_NDK/platforms/${NATIVE_API_LEVEL}/arch-arm
253*437bfbebSnyanmisaka        elif [ "${ANDROID_ABI}" = "arm64-v8a" ]; then
254*437bfbebSnyanmisaka            TOOLCHAIN_NAME="aarch64-linux-android-4.9"
255*437bfbebSnyanmisaka            PLATFORM=$ANDROID_NDK/platforms/${NATIVE_API_LEVEL}/arch-arm64
256*437bfbebSnyanmisaka        fi
257*437bfbebSnyanmisaka        ANDROID_STL="system"
258*437bfbebSnyanmisaka    else
259*437bfbebSnyanmisaka        # From NDK 18, GCC is deprecated
260*437bfbebSnyanmisaka        TOOLCHAIN_NAME=""
261*437bfbebSnyanmisaka        PLATFORM=""
262*437bfbebSnyanmisaka        ANDROID_STL="c++_static"
263*437bfbebSnyanmisaka    fi
264*437bfbebSnyanmisakafi
265*437bfbebSnyanmisaka
266*437bfbebSnyanmisakaif [ "${FOUND_NDK}" = "0" ]; then
267*437bfbebSnyanmisaka    echo -e "\e[1;31m No ndk path found. You should add your ndk path\e[0m"
268*437bfbebSnyanmisaka    exit 1
269*437bfbebSnyanmisakaelse
270*437bfbebSnyanmisaka    echo "ndk path: $ANDROID_NDK"
271*437bfbebSnyanmisaka    echo "toolchain file: $TOOLCHAIN_FILE"
272*437bfbebSnyanmisaka    echo "toolchain name: $TOOLCHAIN_NAME"
273*437bfbebSnyanmisaka    echo "api level: $NATIVE_API_LEVEL"
274*437bfbebSnyanmisakafi
275