From 14c45586ac7c9e01cb4745185e698e593773bf08 Mon Sep 17 00:00:00 2001 From: guowenxue <guowenxue@gmail.com> Date: Wed, 28 Aug 2024 17:52:01 +0800 Subject: [PATCH] update openlibs top build.sh --- openlibs/opencv/build.sh | 201 +++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 157 insertions(+), 44 deletions(-) diff --git a/openlibs/opencv/build.sh b/openlibs/opencv/build.sh index 77179d5..d6c53da 100755 --- a/openlibs/opencv/build.sh +++ b/openlibs/opencv/build.sh @@ -1,84 +1,197 @@ #!/bin/bash -set -e +# library name and version +# Official: https://opencv.org/ +LIB_NAME=opencv-4.8.0 +PACK_SUFIX=zip -PREFIX_PATH=`pwd`/../install/ - +# LingYun source code FTP server LYFTP_SRC=http://master.weike-iot.com:2211/src/ +# library download URL address +LIB_URL=$LYFTP_SRC + +# Cross compiler for cross compile on Linux server CROSS_COMPILE=/opt/gcc-aarch32-10.3-2021.07/bin/arm-none-linux-gnueabihf- -TOOLCHAIN=cortexa7.toolchain.cmake +# compile jobs +JOBS=`cat /proc/cpuinfo |grep "processor"|wc -l` -JOBS=`cat /proc/cpuinfo | grep processor | wc -l` +# this project absolute path +PRJ_PATH=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) -function msg_banner() -{ - echo "" - echo "+-----------------------------------------------------------------------" - echo "| $1 " - echo "+-----------------------------------------------------------------------" - echo "" +# top project absolute path +TOP_PATH=$(realpath $PRJ_PATH/..) + +# binaries install path +PREFIX_PATH=$TOP_PATH/install +BIN_PATH=$PREFIX_PATH/bin +LIB_PATH=$PREFIX_PATH/lib +INC_PATH=$PREFIX_PATH/include + +# check installed or not file +INST_FILE=$PREFIX_PATH/lib/opencv + +# shell script will exit once get command error +set -e + +#+-------------------------+ +#| Shell script functions | +#+-------------------------+ + +function pr_error() { + echo -e "\033[40;31m $1 \033[0m" +} + +function pr_warn() { + echo -e "\033[40;33m $1 \033[0m" +} + +function pr_info() { + echo -e "\033[40;32m $1 \033[0m" } function check_result() { if [ $? != 0 ] ; then - echo "" - echo "+-----------------------------------------------------------------------" - echo "| $1 " - echo "+-----------------------------------------------------------------------" - echo "" - exit ; + pr_error "$1" fi } - - -function compile_opencv() +# decompress a packet to destination path +function do_unpack() { - SRC_NAME=opencv-3.4.6 - PACK_SUFIX=zip + tarball=$1 + dstpath=`pwd` - if [ -f ${PREFIX_PATH}/lib/libopencv_core.so ] ; then - msg_banner "$SRC_NAME already compile and installed" - return 0; + if [[ $# == 2 ]] ; then + dstpath=$2 fi - msg_banner "Start cross compile $SRC_NAME " + pr_info "decompress $tarball => $dstpath" + mkdir -p $dstpath + case $tarball in + *.tar.gz) + tar -xzf $tarball -C $dstpath + ;; - if [ ! -d $SRC_NAME ] ; then - if [ ! -f $SRC_NAME.zip ] ; then - wget $LYFTP_SRC/$SRC_NAME.${PACK_SUFIX} - fi + *.tar.bz2) + tar -xjf $tarball -C $dstpath + ;; - unzip $SRC_NAME.${PACK_SUFIX} + *.tar.xz) + tar -xJf $tarball -C $dstpath + ;; + + *.tar.zst) + tar -I zstd -xf $tarball -C $dstpath + ;; + + *.tar) + tar -xf $tarball -C $dstpath + ;; + + *.zip) + unzip -qo $tarball -d $dstpath + ;; + + *) + pr_error "decompress Unsupport packet: $tarball" + return 1; + ;; + esac +} + +function do_export() +{ + BUILD_ARCH=$(uname -m) + if [[ $BUILD_ARCH =~ "arm" ]] ; then + pr_error "ERROR: local($BUILD_ARCH) compile $LIB_NAME not support for it's too slow" + exit 0; fi - cd $SRC_NAME + pr_warn "cross(${CROSS_COMPILE}) compile $LIB_NAME" - rm -f platforms/linux/${TOOLCHAIN} + # export cross toolchain + export CC=${CROSS_COMPILE}gcc + export CXX=${CROSS_COMPILE}g++ + export AS=${CROSS_COMPILE}as + export AR=${CROSS_COMPILE}ar + export LD=${CROSS_COMPILE}ld + export NM=${CROSS_COMPILE}nm + export RANLIB=${CROSS_COMPILE}ranlib + export OBJDUMP=${CROSS_COMPILE}objdump + export STRIP=${CROSS_COMPILE}strip + + # export cross configure + export CONFIG_CROSS=" --build=i686-pc-linux --host=arm-linux " + + # Clear LDFLAGS and CFLAGS + export LDFLAGS= + export CFLAGS= +} + +function do_fetch() +{ + if [ -e ${INST_FILE} ] ; then + pr_warn "$LIB_NAME compile and installed alredy" + exit ; + fi + + if [ -d $LIB_NAME ] ; then + pr_warn "$LIB_NAME fetch already" + return ; + fi + + if [ ! -f ${LIB_NAME}.${PACK_SUFIX} ] ; then + wget ${LIB_URL}/${LIB_NAME}.${PACK_SUFIX} + check_result "ERROR: download ${LIB_NAME} failure" + fi + + do_unpack ${LIB_NAME}.${PACK_SUFIX} +} + +function do_build() +{ + cd $LIB_NAME + + do_export + + TOOLCHAIN=armlinux.toolchain.cmake + rm -f platforms/linux/${TOOLCHAIN} + cat >platforms/linux/${TOOLCHAIN} <<EOF - set(GCC_COMPILER_VERSION "" CACHE STRING "GCC Compiler version") set(GNU_MACHINE "${CROSS_COMPILE%*-}" CACHE STRING "GNU compiler triple") include("\${CMAKE_CURRENT_LIST_DIR}/arm.toolchain.cmake") EOF - mkdir -p release - cd release + mkdir -p build && cd build - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=`pwd`/../../../install \ + cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PREFIX_PATH \ -DCMAKE_TOOLCHAIN_FILE="../platforms/linux/${TOOLCHAIN}" -DSOFTFP=ON -DENABLE_PROFILING=OFF \ -DWITH_OPENCL=OFF -DWITH_TBB=ONĀ -DWITH_V4L=ON -DHAVE_CAMV4L2=ON -DBUILD_TESTS=OFF \ - -DINSTALL_PYTHON_EXAMPLES=OFF -DBUILD_EXAMPLES=OFF -DWITH_FFMPEG=ON -DHAVE_FFMPEG=ON \ - -DBUILD_opencv_js=OFF -DENABLE_NEON=OFF -DENABLE_VFPV3=OFF ../ + -DINSTALL_PYTHON_EXAMPLES=OFF -DBUILD_EXAMPLES=OFF -DWITH_FFMPEG=OFF -DHAVE_FFMPEG=OFF \ + -DBUILD_opencv_js=OFF ../ - make && make install - - cd - + make -j ${JOBS} && make install + check_result "ERROR: compile ${LIB_NAME} failure" } -compile_opencv +function do_clean() +{ + rm -rf *${LIB_NAME}* +} + +if [[ $# == 1 && $1 == -c ]] ;then + pr_warn "start clean ${LIB_NAME}" + do_clean + exit; +fi + +do_fetch + + +do_build -- Gitblit v1.9.1