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.

211 lines
5.3 KiB

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