Skip to content

Instantly share code, notes, and snippets.

@cattaka
Created May 25, 2018 07:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cattaka/4a168fe7630e89cce37a3ede86f612e4 to your computer and use it in GitHub Desktop.
Save cattaka/4a168fe7630e89cce37a3ede86f612e4 to your computer and use it in GitHub Desktop.
The script for rebuilding OpenCV so files.
#!/bin/sh
cd `dirname $0`/..
PROJECT_ROOT=$PWD
OPENCV_VERSION=3.4.1
if [ "Darwin" = `uname -s` ]; then
HOST_ARCH=macosx
elif [ "Linux" = `uname -s` ]; then
HOST_ARCH=linux
else
echo "HELPME: Unknown architecture"; return
fi
if [ -z "$ANDROID_SDK" ]; then
echo "ANDROID_SDK is empty!"; return
fi
if [ -z "$ANDROID_NDK" ]; then
echo "ANDROID_NDK is empty!"; return
fi
if [ -z `which java` ]; then
echo "set PATH for java"; return
fi
if [ -z `which cmake` ]; then
echo "set PATH for cmake"; return
fi
if [ ! -d workspace ]; then
mkdir workspace
fi
cd workspace
## Note: Need older Android SDK to build OpenCv :(
export ANDROID_SDK=$PWD/older_sdk
if [ ! -d older_sdk ]; then
mkdir older_sdk
cd older_sdk
wget http://dl-ssl.google.com/android/repository/tools_r25.2.5-${HOST_ARCH}.zip
unzip tools_r25.2.5-${HOST_ARCH}.zip
# Install Build-tools and create symlink
TO_INSTALL_BUILD_TOOL_VER="Android SDK Build-tools, revision 25.0.3"
TO_INSTALL_BUILD_TOOL=`./tools/android list sdk -a|grep "$TO_INSTALL_BUILD_TOOL_VER"|cut -d "-" -f 1|sed -e "s/ //g"`
for i in $TO_INSTALL_BUILD_TOOL;do
echo y | ./tools/android update sdk -a -u -t $i
done
ln -sf ./build-tools/25.0.3 ./platform-tools
TO_INSTALL_SDK_VER="${MIN_SDK}|21|11|8"
TO_INSTALL_SDK=`./tools/android list sdk -a|grep -E "^ +[0-9]+- SDK.+API ($TO_INSTALL_SDK_VER),"|cut -d "-" -f 1|sed -e "s/ //g"`
for i in $TO_INSTALL_SDK;do
echo y | ./tools/android update sdk -a -u -t $i
done
cd ..
fi
if [ ! -d opencv-${OPENCV_VERSION} ]; then
wget https://github.com/Itseez/opencv/archive/${OPENCV_VERSION}.zip
unzip ${OPENCV_VERSION}.zip
sed -i -e 's/8e7200af3ac16e91a0d1535c606a485c/8e3e39e1fdfb3f7c3a5ac8ec1afe186e/g' opencv-${OPENCV_VERSION}/3rdparty/tbb/CMakeLists.txt
sed -i -e 's/10000/${ANDROID_NATIVE_API_LEVEL}/g' opencv-${OPENCV_VERSION}/platforms/android/android.toolchain.cmake
fi
cd opencv-${OPENCV_VERSION}
# x86 x86_64 armeabi-v7a arm64-v8a
ABI_SETTINGS=""
ABI_SETTINGS="arm64-v8a:arm64:21 ${ABI_SETTINGS}"
ABI_SETTINGS="armeabi-v7a:arm:15 ${ABI_SETTINGS}"
ABI_SETTINGS="x86_64:x86_64:21 ${ABI_SETTINGS}"
ABI_SETTINGS="x86:x86:15 ${ABI_SETTINGS}"
for abi_setting in $ABI_SETTINGS
do
abi=`echo $abi_setting | cut -d ":" -f 1`
arch=`echo $abi_setting | cut -d ":" -f 2`
min_sdk=`echo $abi_setting | cut -d ":" -f 3`
echo "====================================================="
echo "building ${abi}"
echo "====================================================="
if [ -d build_${abi} ]; then
rm -r build_${abi}
fi
mkdir build_${abi}
cd build_${abi}
echo $ANDROID_NDK/build/tools/make-standalone-toolchain.sh --use-llvm --platform=android-${min_sdk} --install-dir=tc --arch=${arch}
$ANDROID_NDK/build/tools/make-standalone-toolchain.sh \
--use-llvm \
--stl=gnustl \
--platform=android-${min_sdk} \
--install-dir=tc \
--arch=${arch} \
--toolchain=aarch64-linux-android-clang
toolchain="$PWD/tc"
if [ $abi = "x86_64" ];then
# Special for x86_64 to avoid bug of android.toolchain.cmake
cp tc/x86_64-linux-android/lib64/libstdc++.a tc/x86_64-linux-android/lib/libstdc++.a
cp tc/x86_64-linux-android/lib64/libsupc++.a tc/x86_64-linux-android/lib/libsupc++.a
fi
cmake \
-DANDROID_STANDALONE_TOOLCHAIN=${toolchain} \
-DANDROID_NATIVE_API_LEVEL=${min_sdk} \
-DANDROID_SDK_TARGETS=${min_sdk} \
-DANDROID_STL=c++_shared \
-DANDROID_STL_FORCE_FEATURES=ON \
-DCMAKE_BUILD_WITH_INSTALL_PATH=ON \
-DCMAKE_TOOLCHAIN_FILE=../platforms/android/android.toolchain.cmake \
-DANDROID_ABI=${abi} \
-DBUILD_JAVA=1 \
-DBUILD_ANDROID_EXAMPLES=0 \
-DWITH_TBB=1 \
-DWITH_1394=0 \
-DWITH_AVFOUNDATION=0 \
-DWITH_CARBON=0 \
-DWITH_CAROTENE=0 \
-DWITH_CPUFEATURES=0 \
-DWITH_VTK=0 \
-DWITH_CUDA=0 \
-DWITH_CUFFT=0 \
-DWITH_CUBLAS=0 \
-DWITH_NVCUVID=0 \
-DWITH_EIGEN=0 \
-DWITH_VFW=0 \
-DWITH_FFMPEG=0 \
-DWITH_GSTREAMER=0 \
-DWITH_GSTREAMER_0_10=0 \
-DWITH_GTK=0 \
-DWITH_GTK_2_X=0 \
-DWITH_IPP=0 \
-DWITH_HALIDE=0 \
-DWITH_INF_ENGINE=0 \
-DWITH_JASPER=0 \
-DWITH_JPEG=0 \
-DWITH_WEBP=0 \
-DWITH_OPENEXR=0 \
-DWITH_OPENGL=0 \
-DWITH_OPENVX=0 \
-DWITH_OPENNI=0 \
-DWITH_OPENNI2=0 \
-DWITH_PNG=0 \
-DWITH_GDCM=0 \
-DWITH_PVAPI=0 \
-DWITH_GIGEAPI=0 \
-DWITH_ARAVIS=0 \
-DWITH_QT=0 \
-DWITH_WIN32UI=0 \
-DWITH_QUICKTIME=0 \
-DWITH_QTKIT=0 \
-DWITH_OPENMP=0 \
-DWITH_CSTRIPES=0 \
-DWITH_PTHREADS_PF=0 \
-DWITH_TIFF=0 \
-DWITH_UNICAP=0 \
-DWITH_V4L=0 \
-DWITH_LIBV4L=0 \
-DWITH_DSHOW=0 \
-DWITH_MSMF=0 \
-DWITH_XIMEA=0 \
-DWITH_XINE=0 \
-DWITH_CLP=0 \
-DWITH_OPENCL=0 \
-DWITH_OPENCL_SVM=0 \
-DWITH_OPENCLAMDFFT=0 \
-DWITH_OPENCLAMDBLAS=0 \
-DWITH_DIRECTX=0 \
-DWITH_INTELPERC=0 \
-DWITH_MATLAB=0 \
-DWITH_VA=0 \
-DWITH_VA_INTEL=0 \
-DWITH_MFX=0 \
-DWITH_GDAL=0 \
-DWITH_GPHOTO2=0 \
-DWITH_LAPACK=0 \
-DWITH_ITT=0 \
-DBUILD_opencv_dnn=OFF \
-DBUILD_opencv_features2d=OFF \
-DBUILD_opencv_flann=OFF \
-DBUILD_opencv_highgui=OFF \
-DBUILD_opencv_ml=OFF \
-DBUILD_opencv_objdetect=OFF \
-DBUILD_opencv_photo=OFF \
-DBUILD_opencv_python_bindings_generator=OFF \
-DBUILD_opencv_shape=OFF \
-DBUILD_opencv_superres=OFF \
-DBUILD_opencv_ts=OFF \
-DBUILD_opencv_videoio=OFF \
..
make -j16
if [ ! -d ${PROJECT_ROOT}/app/src/main/jniLibs/${abi} ]; then
mkdir ${PROJECT_ROOT}/app/src/main/jniLibs/${abi}
fi
cp ./lib/${abi}/libopencv_java3.so ${PROJECT_ROOT}/app/src/main/jniLibs/${abi}/
cd ..
done
# Copy modules
module_from=$PROJECT_ROOT/workspace/opencv-${OPENCV_VERSION}/build_arm64-v8a
module_to=$PROJECT_ROOT/openCVLibrary310
rm -rf ${module_to}/src/main
mkdir -p ${module_to}/src/main/java
mkdir -p ${module_to}/src/main/res/values
mkdir -p ${module_to}/src/main/aidl/org/opencv/engine/
cp -r ${module_from}/android_sdk/AndroidManifest.xml ${module_to}/src/main/
cp -r ${module_from}/android_sdk/src/* ${module_to}/src/main/java/
cp -r ${module_from}/android_sdk/res/values/* ${module_to}/src/main/res/values/
mv ${module_to}/src/main/java/org/opencv/engine/OpenCVEngineInterface.aidl ${module_to}/src/main/aidl/org/opencv/engine/
# Copy headers
headers_from=$PROJECT_ROOT/workspace/opencv-${OPENCV_VERSION}/
headers_to=$PROJECT_ROOT/openCVLibrary310/include
rm -rf $headers_to
mkdir -p $headers_to
cp -r $headers_from/include/opencv* $headers_to
cp -r $headers_from/modules/*/include/opencv* $headers_to
cp -r ${module_from}/opencv2/* $headers_to/opencv2/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment