#!/bin/bash <${PROJECT_PATH}/build/build.sh echo "-DCMAKE_C_COMPILER=gcc \\" >>${PROJECT_PATH}/build/build.sh echo "-DCMAKE_CXX_COMPILER=g++ \\" >>${PROJECT_PATH}/build/build.sh chmod +x ${PROJECT_PATH}/build/build.sh } function do_envsetup_rk3328() { # 下载交叉编译工具 cd ${PROJECT_PATH}/build wget -c "ftp://zftpuser:zftpzwsd@192.168.1.2/zwsd/gnu_gcc_release/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.gz" tar -xvf "gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.gz" # 构造编译脚本 echo "cmake ../ \\" >${PROJECT_PATH}/build/build.sh echo "-DCMAKE_C_COMPILER=${PROJECT_PATH}/build/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc \\" >>${PROJECT_PATH}/build/build.sh echo "-DCMAKE_CXX_COMPILER=${PROJECT_PATH}/build/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ \\" >>${PROJECT_PATH}/build/build.sh chmod +x ${PROJECT_PATH}/build/build.sh } BLOCK function do_flash_to_targetboard() { scp -r out/${PROJECT_NAME}.tar.gz ${TARGET_USER}@${IP}:/ #如果存在shutdown.sh,则先执行shutdown.sh ssh ${TARGET_USER}@${IP} 'if [ -f "/${PROJECT_NAME}/shutdown.sh" ];then /${PROJECT_NAME}/shutdown.sh;fi' ssh ${TARGET_USER}@${IP} "cd / && tar -xvf app.tar.gz -C /" ssh ${TARGET_USER}@${IP} "cd / && rm -rf app.tar.gz" } function do_flashapp_to_targetboard() { # 杀死目标程序 set +e ssh ${TARGET_USER}@${IP} "killall app.out" set -e # 拷贝目标程序 scp -r ${PROJECT_PATH}/build/app/*.out ${TARGET_USER}@${IP}:/app/ } function do_flashwebapp_to_targetboard() { ssh ${TARGET_USER}@${IP} "rm -rf /webapp" scp -r ${PROJECT_PATH}/webapp ${TARGET_USER}@${IP}:/app/webapp } ############################################################################## # # Main: # ############################################################################## # # iflytool.sh envsetup rk3328 # # iflytool.sh --ip 192.168.8.100 build # iflytool.sh --ip 192.168.8.100 --user root build # iflytool.sh --ip 192.168.8.100 --user root ssh_copy_id ssh_clear_id # # 解析指令判断指令是否是 envsetup iflytool.sh envsetup rk3328 set -e is_build=false is_flash=false is_reboot=false is_envsetup=false export PROJECT_PATH=$(pwd) for i in "$@"; do case $i in envsetup) shift # past argument=value BUILDFOR=$1 is_envsetup=true shift ;; build) is_build=true shift ;; flash) is_flash=true shift ;; reboot) is_reboot=true shift ;; packet) is_packet=true shift ;; ssh_copy_id) is_ssh_copy_id=true shift ;; ssh_clear_id) is_ssh_clear_id=true shift ;; flashapp) is_flashapp=true shift ;; flashwebapp) is_flashwebapp=true shift ;; --user) shift TARGET_USER=$1 shift ;; --ip) shift IP=$1 shift ;; *) # unknown option ;; esac done # 判断是否是envsetup if [ "$is_envsetup" = true ]; then echo "envsetup $BUILDFOR" echo "mkdir -p ${PROJECT_PATH}/build" mkdir -p ${PROJECT_PATH}/build # 构造环境变量 echo "BUILDFOR=$BUILDFOR" >${PROJECT_PATH}/build/buildenv #从CmakeLists.txt中读取项目名称 project(app) PROJECT_NAME=$(grep "project(" ${PROJECT_PATH}/CMakeLists.txt) PROJECT_NAME=${STR#*\(} PROJECT_NAME=${PROJECT_NAME%\)*} #从字符串中 project(app)解析出app STR="project(app)" PROJECT_NAME=${STR#*\(} PROJECT_NAME=${PROJECT_NAME%\)*} echo "PROJECT_NAME=$PROJECT_NAME" >>${PROJECT_PATH}/build/buildenv ${PROJECT_PATH}/sh/envsetup_${BUILDFOR}.sh echo "envsetup success !" exit 0 fi # 如果没有指定用户名,则默认用户名为 root if [ -z "$TARGET_USER" ]; then TARGET_USER=root fi #如果flash 则默认编译打包 if [ "$is_flash" = true ]; then is_build=true is_packet=true fi #如果打包,则默认编译 if [ "$is_packet" = true ]; then is_build=true fi #如果部署则默认需要IP if [ "$is_flash" = true ] || [ "$is_reboot" = true ]; then if [ -z "$IP" ]; then echo "please input ip" exit 1 fi fi # flashapp if [ "$is_flashapp" = true ]; then is_build=true fi # 检查build目录是否存在 if [ ! -d "${PROJECT_PATH}/build" ]; then echo "build directory not exist, please run envsetup first" exit 1 fi # 初始化环境变量 source ${PROJECT_PATH}/build/buildenv # 编译 if [ "$is_build" = true ]; then echo "build" cd ${PROJECT_PATH}/build # 根据当前电脑线程数,调用make ./build.sh && make -j$(nproc) install fi # 打包 if [ "$is_packet" = true ]; then echo "packet for ${BUILDFOR}" cd ${PROJECT_PATH} ${PROJECT_PATH}/sh/packet.sh fi # 部署 if [ "$is_flash" = true ]; then do_flash_to_targetboard fi # flashapp if [ "$is_flashapp" = true ]; then do_flashapp_to_targetboard fi # flashwebapp if [ "$is_flashwebapp" = true ]; then do_flashwebapp_to_targetboard fi # 重启 if [ "$is_reboot" = true ]; then ssh ${TARGET_USER}@${IP} "reboot" fi #ssh_copy_id if [ "$is_ssh_copy_id" = true ]; then ssh-copy-id ${TARGET_USER}@${IP} fi #ssh_clear_id if [ "$is_ssh_clear_id" = true ]; then ssh ${TARGET_USER}@${ip} "rm -rf ~/.ssh/authorized_keys" fi