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.

228 lines
5.4 KiB

  1. #!/bin/bash
  2. <<BLOCK
  3. function do_envsetup_pc() {
  4. #构造编译脚本
  5. echo "cmake ../ \\" >${PROJECT_PATH}/build/build.sh
  6. echo "-DCMAKE_C_COMPILER=gcc \\" >>${PROJECT_PATH}/build/build.sh
  7. echo "-DCMAKE_CXX_COMPILER=g++ \\" >>${PROJECT_PATH}/build/build.sh
  8. chmod +x ${PROJECT_PATH}/build/build.sh
  9. }
  10. function do_envsetup_rk3328() {
  11. # 下载交叉编译工具
  12. cd ${PROJECT_PATH}/build
  13. 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"
  14. tar -xvf "gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.gz"
  15. # 构造编译脚本
  16. echo "cmake ../ \\" >${PROJECT_PATH}/build/build.sh
  17. 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
  18. 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
  19. chmod +x ${PROJECT_PATH}/build/build.sh
  20. }
  21. BLOCK
  22. function do_flash_to_targetboard() {
  23. scp -r out/${PROJECT_NAME}.tar.gz ${TARGET_USER}@${IP}:/
  24. #如果存在shutdown.sh,则先执行shutdown.sh
  25. ssh ${TARGET_USER}@${IP} 'if [ -f "/${PROJECT_NAME}/shutdown.sh" ];then /${PROJECT_NAME}/shutdown.sh;fi'
  26. ssh ${TARGET_USER}@${IP} "cd / && tar -xvf app.tar.gz -C /"
  27. ssh ${TARGET_USER}@${IP} "cd / && rm -rf app.tar.gz"
  28. }
  29. function do_flashapp_to_targetboard() {
  30. # 杀死目标程序
  31. ssh ${TARGET_USER}@${IP} "killall app.out"
  32. # 拷贝目标程序
  33. scp -r ${PROJECT_PATH}/build/app/app.out ${TARGET_USER}@${IP}:/app/
  34. }
  35. function do_flashwebapp_to_targetboard() {
  36. ssh ${TARGET_USER}@${IP} "rm -rf /webapp"
  37. scp -r ${PROJECT_PATH}/webapp ${TARGET_USER}@${IP}:/app/webapp
  38. }
  39. ##############################################################################
  40. #
  41. # Main:
  42. #
  43. ##############################################################################
  44. #
  45. # iflytool.sh envsetup rk3328
  46. #
  47. # iflytool.sh --ip 192.168.8.100 build
  48. # iflytool.sh --ip 192.168.8.100 --user root build <packet> <flash> <reboot>
  49. # iflytool.sh --ip 192.168.8.100 --user root ssh_copy_id ssh_clear_id
  50. #
  51. # 解析指令判断指令是否是 envsetup iflytool.sh envsetup rk3328
  52. set -e
  53. is_build=false
  54. is_flash=false
  55. is_reboot=false
  56. is_envsetup=false
  57. export PROJECT_PATH=$(pwd)
  58. for i in "$@"; do
  59. case $i in
  60. envsetup)
  61. shift # past argument=value
  62. BUILDFOR=$1
  63. is_envsetup=true
  64. shift
  65. ;;
  66. build)
  67. is_build=true
  68. shift
  69. ;;
  70. flash)
  71. is_flash=true
  72. shift
  73. ;;
  74. reboot)
  75. is_reboot=true
  76. shift
  77. ;;
  78. packet)
  79. is_packet=true
  80. shift
  81. ;;
  82. ssh_copy_id)
  83. is_ssh_copy_id=true
  84. shift
  85. ;;
  86. ssh_clear_id)
  87. is_ssh_clear_id=true
  88. shift
  89. ;;
  90. flashapp)
  91. is_flashapp=true
  92. shift
  93. ;;
  94. flashwebapp)
  95. is_flashwebapp=true
  96. shift
  97. ;;
  98. --user)
  99. shift
  100. TARGET_USER=$1
  101. shift
  102. ;;
  103. --ip)
  104. shift
  105. IP=$1
  106. shift
  107. ;;
  108. *)
  109. # unknown option
  110. ;;
  111. esac
  112. done
  113. # 判断是否是envsetup
  114. if [ "$is_envsetup" = true ]; then
  115. echo "envsetup $BUILDFOR"
  116. echo "mkdir -p ${PROJECT_PATH}/build"
  117. mkdir -p ${PROJECT_PATH}/build
  118. # 构造环境变量
  119. echo "BUILDFOR=$BUILDFOR" >${PROJECT_PATH}/build/buildenv
  120. #从CmakeLists.txt中读取项目名称 project(app)
  121. PROJECT_NAME=$(grep "project(" ${PROJECT_PATH}/CMakeLists.txt)
  122. PROJECT_NAME=${STR#*\(}
  123. PROJECT_NAME=${PROJECT_NAME%\)*}
  124. #从字符串中 project(app)解析出app
  125. STR="project(app)"
  126. PROJECT_NAME=${STR#*\(}
  127. PROJECT_NAME=${PROJECT_NAME%\)*}
  128. echo "PROJECT_NAME=$PROJECT_NAME" >>${PROJECT_PATH}/build/buildenv
  129. ${PROJECT_PATH}/sh/envsetup_${BUILDFOR}.sh
  130. echo "envsetup success !"
  131. exit 0
  132. fi
  133. # 如果没有指定用户名,则默认用户名为 root
  134. if [ -z "$TARGET_USER" ]; then
  135. TARGET_USER=root
  136. fi
  137. #如果flash 则默认编译打包
  138. if [ "$is_flash" = true ]; then
  139. is_build=true
  140. is_packet=true
  141. fi
  142. #如果打包,则默认编译
  143. if [ "$is_packet" = true ]; then
  144. is_build=true
  145. fi
  146. #如果部署则默认需要IP
  147. if [ "$is_flash" = true ] || [ "$is_reboot" = true ]; then
  148. if [ -z "$IP" ]; then
  149. echo "please input ip"
  150. exit 1
  151. fi
  152. fi
  153. # 检查build目录是否存在
  154. if [ ! -d "${PROJECT_PATH}/build" ]; then
  155. echo "build directory not exist, please run envsetup first"
  156. exit 1
  157. fi
  158. # 初始化环境变量
  159. source ${PROJECT_PATH}/build/buildenv
  160. # 编译
  161. if [ "$is_build" = true ]; then
  162. echo "build"
  163. cd ${PROJECT_PATH}/build
  164. # 根据当前电脑线程数,调用make
  165. ./build.sh && make -j$(nproc) install
  166. fi
  167. # 打包
  168. if [ "$is_packet" = true ]; then
  169. echo "packet for ${BUILDFOR}"
  170. cd ${PROJECT_PATH}
  171. ${PROJECT_PATH}/sh/packet.sh
  172. fi
  173. # 部署
  174. if [ "$is_flash" = true ]; then
  175. do_flash_to_targetboard
  176. fi
  177. # flashapp
  178. if [ "$is_flashapp" = true ]; then
  179. do_flashapp_to_targetboard
  180. fi
  181. # flashwebapp
  182. if [ "$is_flashwebapp" = true ]; then
  183. do_flashwebapp_to_targetboard
  184. fi
  185. # 重启
  186. if [ "$is_reboot" = true ]; then
  187. ssh ${TARGET_USER}@${IP} "reboot"
  188. fi
  189. #ssh_copy_id
  190. if [ "$is_ssh_copy_id" = true ]; then
  191. ssh-copy-id ${TARGET_USER}@${IP}
  192. fi
  193. #ssh_clear_id
  194. if [ "$is_ssh_clear_id" = true ]; then
  195. ssh ${TARGET_USER}@${ip} "rm -rf ~/.ssh/authorized_keys"
  196. fi