You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#!/bin/bash
<<BLOCK function do_envsetup_pc() { #构造编译脚本 echo "cmake ../ \\" >${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 <packet> <flash> <reboot> # 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
|