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.

245 lines
5.8 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. set +e
  32. ssh ${TARGET_USER}@${IP} "killall app.out"
  33. set -e
  34. # 拷贝目标程序
  35. scp -r ${PROJECT_PATH}/build/app/*.out ${TARGET_USER}@${IP}:/app/
  36. }
  37. function do_flashwebapp_to_targetboard() {
  38. ssh ${TARGET_USER}@${IP} "rm -rf /webapp"
  39. scp -r ${PROJECT_PATH}/webapp ${TARGET_USER}@${IP}:/app/webapp
  40. }
  41. ##############################################################################
  42. #
  43. # Main:
  44. #
  45. ##############################################################################
  46. #
  47. # iflytool.sh envsetup rk3328
  48. #
  49. # iflytool.sh --ip 192.168.8.100 build
  50. # iflytool.sh --ip 192.168.8.100 --user root build <packet> <flash> <reboot>
  51. # iflytool.sh --ip 192.168.8.100 --user root ssh_copy_id ssh_clear_id
  52. #
  53. # 解析指令判断指令是否是 envsetup iflytool.sh envsetup rk3328
  54. set -e
  55. is_build=false
  56. is_flash=false
  57. is_reboot=false
  58. is_envsetup=false
  59. is_buildpc=false
  60. export PROJECT_PATH=$(pwd)
  61. for i in "$@"; do
  62. case $i in
  63. envsetup)
  64. is_envsetup=true
  65. shift
  66. ;;
  67. build)
  68. is_build=true
  69. shift
  70. ;;
  71. flash)
  72. is_flash=true
  73. shift
  74. ;;
  75. reboot)
  76. is_reboot=true
  77. shift
  78. ;;
  79. packet)
  80. is_packet=true
  81. shift
  82. ;;
  83. ssh_copy_id)
  84. is_ssh_copy_id=true
  85. shift
  86. ;;
  87. ssh_clear_id)
  88. is_ssh_clear_id=true
  89. shift
  90. ;;
  91. flashapp)
  92. is_flashapp=true
  93. shift
  94. ;;
  95. flashwebapp)
  96. is_flashwebapp=true
  97. shift
  98. ;;
  99. --user)
  100. shift
  101. TARGET_USER=$1
  102. shift
  103. ;;
  104. --ip)
  105. shift
  106. IP=$1
  107. shift
  108. ;;
  109. buildpc)
  110. is_buildpc=true
  111. shift
  112. ;;
  113. *)
  114. # unknown option
  115. ;;
  116. esac
  117. done
  118. # 判断是否是envsetup
  119. if [ "$is_envsetup" = true ]; then
  120. echo "mkdir -p ${PROJECT_PATH}/build"
  121. echo "mkdir -p ${PROJECT_PATH}/buildpc"
  122. mkdir -p ${PROJECT_PATH}/build
  123. mkdir -p ${PROJECT_PATH}/buildpc
  124. # 构造环境变量
  125. #从CmakeLists.txt中读取项目名称 project(app)
  126. PROJECT_NAME=$(grep "project(" ${PROJECT_PATH}/CMakeLists.txt)
  127. PROJECT_NAME=${STR#*\(}
  128. PROJECT_NAME=${PROJECT_NAME%\)*}
  129. #从字符串中 project(app)解析出app
  130. STR="project(app)"
  131. PROJECT_NAME=${STR#*\(}
  132. PROJECT_NAME=${PROJECT_NAME%\)*}
  133. echo "PROJECT_NAME=$PROJECT_NAME" >>${PROJECT_PATH}/build/buildenv
  134. echo "PROJECT_NAME=$PROJECT_NAME" >>${PROJECT_PATH}/buildpc/buildenv
  135. ${PROJECT_PATH}/sh/envsetup.sh
  136. ${PROJECT_PATH}/sh/envsetuppc.sh
  137. echo "envsetup success !"
  138. exit 0
  139. fi
  140. # 如果没有指定用户名,则默认用户名为 root
  141. if [ -z "$TARGET_USER" ]; then
  142. TARGET_USER=root
  143. fi
  144. #如果flash 则默认编译打包
  145. if [ "$is_flash" = true ]; then
  146. is_build=true
  147. is_packet=true
  148. fi
  149. #如果打包,则默认编译
  150. if [ "$is_packet" = true ]; then
  151. is_build=true
  152. fi
  153. #如果部署则默认需要IP
  154. if [ "$is_flash" = true ] || [ "$is_reboot" = true ]; then
  155. if [ -z "$IP" ]; then
  156. echo "please input ip"
  157. exit 1
  158. fi
  159. fi
  160. # flashapp
  161. if [ "$is_flashapp" = true ]; then
  162. is_build=true
  163. fi
  164. # 检查build目录是否存在
  165. if [ ! -d "${PROJECT_PATH}/build" ]; then
  166. echo "build directory not exist, please run envsetup first"
  167. exit 1
  168. fi
  169. # 初始化环境变量
  170. source ${PROJECT_PATH}/build/buildenv
  171. # 编译
  172. if [ "$is_build" = true ]; then
  173. echo "build"
  174. cd ${PROJECT_PATH}/build
  175. # 根据当前电脑线程数,调用make
  176. ./build.sh && make -j$(nproc) install
  177. fi
  178. if [ "$is_buildpc" = true ]; then
  179. echo "buildpc"
  180. cd ${PROJECT_PATH}/buildpc
  181. # 根据当前电脑线程数,调用make
  182. ./build.sh && make -j$(nproc) install
  183. fi
  184. # 打包
  185. if [ "$is_packet" = true ]; then
  186. cd ${PROJECT_PATH}
  187. ${PROJECT_PATH}/sh/packet.sh
  188. fi
  189. # 部署
  190. if [ "$is_flash" = true ]; then
  191. do_flash_to_targetboard
  192. fi
  193. # flashapp
  194. if [ "$is_flashapp" = true ]; then
  195. do_flashapp_to_targetboard
  196. fi
  197. # flashwebapp
  198. if [ "$is_flashwebapp" = true ]; then
  199. do_flashwebapp_to_targetboard
  200. fi
  201. # 重启
  202. if [ "$is_reboot" = true ]; then
  203. ssh ${TARGET_USER}@${IP} "reboot"
  204. fi
  205. #ssh_copy_id
  206. if [ "$is_ssh_copy_id" = true ]; then
  207. ssh-copy-id ${TARGET_USER}@${IP}
  208. fi
  209. #ssh_clear_id
  210. if [ "$is_ssh_clear_id" = true ]; then
  211. ssh ${TARGET_USER}@${ip} "rm -rf ~/.ssh/authorized_keys"
  212. fi