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.

233 lines
5.5 KiB

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