108 lines
2.5 KiB
Bash
108 lines
2.5 KiB
Bash
#!/bin/bash
|
|
# set -ex
|
|
# get appropriate proc number: max(1, nproc-3)
|
|
good_nproc() {
|
|
num=`nproc`
|
|
num=`expr $num - 3`
|
|
if [ $num -lt 1 ];then
|
|
return 1
|
|
fi
|
|
return ${num}
|
|
}
|
|
|
|
install_tools() {
|
|
sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
|
|
aarch64-linux-gnu-g++ --version
|
|
aarch64-linux-gnu-gcc --version
|
|
aarch64-linux-gnu-ld --version
|
|
|
|
sudo apt install wget git git-lfs
|
|
|
|
python3 -m pip install cmake==3.22.0
|
|
|
|
echo 'export PATH=~/.local/bin:${PATH}' >> ~/mmdeploy.env
|
|
export PATH=~/.local/bin:${PATH}
|
|
}
|
|
|
|
build_ocv() {
|
|
if [ ! -e "opencv" ];then
|
|
git clone https://github.com/opencv/opencv --depth=1 --branch=4.6.0 --recursive
|
|
fi
|
|
if [ ! -e "opencv/platforms/linux/cross_build_aarch64" ];then
|
|
mkdir opencv/platforms/linux/cross_build_aarch64
|
|
fi
|
|
cd opencv/platforms/linux/cross_build_aarch64
|
|
rm -rf CMakeCache.txt
|
|
cmake ../../.. -DBUILD_TIFF=ON -DCMAKE_INSTALL_PREFIX=/tmp/ocv-aarch64 -DCMAKE_TOOLCHAIN_FILE=../aarch64-gnu.toolchain.cmake
|
|
# good_nproc
|
|
jobs=`nproc`
|
|
make -j${jobs}
|
|
make install
|
|
cd -
|
|
}
|
|
|
|
build_ncnn() {
|
|
if [ ! -e "ncnn" ];then
|
|
git clone https://github.com/tencent/ncnn --branch 20221128 --depth=1
|
|
fi
|
|
if [ ! -e "ncnn/build_aarch64" ];then
|
|
mkdir -p ncnn/build_aarch64
|
|
fi
|
|
cd ncnn/build_aarch64
|
|
rm -rf CMakeCache.txt
|
|
cmake .. \
|
|
-DCMAKE_TOOLCHAIN_FILE=../toolchains/aarch64-linux-gnu.toolchain.cmake \
|
|
-DCMAKE_INSTALL_PREFIX=/tmp/ncnn-aarch64
|
|
# good_nproc
|
|
jobs=`nproc`
|
|
make -j${jobs}
|
|
make install
|
|
cd -
|
|
}
|
|
|
|
build_mmdeploy() {
|
|
git submodule init
|
|
git submodule update
|
|
|
|
if [ ! -e "build_aarch64" ];then
|
|
mkdir build_aarch64
|
|
fi
|
|
cd build_aarch64
|
|
|
|
rm -rf CMakeCache.txt
|
|
cmake .. \
|
|
-DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/aarch64-linux-gnu.cmake \
|
|
-DMMDEPLOY_TARGET_DEVICES="cpu" \
|
|
-DMMDEPLOY_TARGET_BACKENDS="ncnn" \
|
|
-Dncnn_DIR=/tmp/ncnn-aarch64/lib/cmake/ncnn \
|
|
-DOpenCV_DIR=/tmp/ocv-aarch64/lib/cmake/opencv4 \
|
|
-DMMDEPLOY_BUILD_EXAMPLES=ON \
|
|
-DMMDEPLOY_BUILD_SDK=ON
|
|
|
|
# good_nproc
|
|
jobs=`nproc`
|
|
make -j${jobs}
|
|
make install
|
|
|
|
ls -lah install/bin/*
|
|
}
|
|
|
|
print_success() {
|
|
echo "----------------------------------------------------------------------"
|
|
echo "Cross build finished, PLS copy bin/model/test_data to the device.. QVQ"
|
|
echo "----------------------------------------------------------------------"
|
|
}
|
|
|
|
if [ ! -e "../mmdeploy-dep" ];then
|
|
mkdir ../mmdeploy-dep
|
|
fi
|
|
cd ../mmdeploy-dep
|
|
|
|
install_tools
|
|
build_ocv
|
|
build_ncnn
|
|
|
|
cd ../mmdeploy
|
|
build_mmdeploy
|
|
print_success
|